<?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>174437</bug_id>
          
          <creation_ts>2017-07-12 15:44:26 -0700</creation_ts>
          <short_desc>Remove Web prefix from WebVideoFullscreen and WebPlaybackSession classes.</short_desc>
          <delta_ts>2017-11-02 11:29:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Jones">jeremyj-wk</reporter>
          <assigned_to name="Jeremy Jones">jeremyj-wk</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1328253</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-12 15:44:26 -0700</bug_when>
    <thetext>Remove Web prefix from WebVideoFullscreen and WebPlaybackSession classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328254</commentid>
    <comment_count>1</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-12 15:45:49 -0700</bug_when>
    <thetext>rdar://problem/33227420</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328299</commentid>
    <comment_count>2</comment_count>
      <attachid>315309</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-12 16:59:15 -0700</bug_when>
    <thetext>Created attachment 315309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328300</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-12 17:01:52 -0700</bug_when>
    <thetext>Attachment 315309 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/cocoa/PlaybackSessionManager.mm:256:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/cocoa/PlaybackSessionManager.mm:283:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:450:  Using +alloc with a soft-linked class. Use allocWebAVPictureInPicturePlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:619:  Using +alloc with a soft-linked class. Use allocWebAVPlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
Total errors found: 4 in 52 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>1328313</commentid>
    <comment_count>4</comment_count>
      <attachid>315313</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-12 17:17:37 -0700</bug_when>
    <thetext>Created attachment 315313
Better diff. No filename change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328504</commentid>
    <comment_count>5</comment_count>
      <attachid>315359</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 11:17:17 -0700</bug_when>
    <thetext>Created attachment 315359
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328509</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-13 11:20:26 -0700</bug_when>
    <thetext>Attachment 315359 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/cocoa/PlaybackSessionManager.mm:256:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/cocoa/PlaybackSessionManager.mm:283:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:450:  Using +alloc with a soft-linked class. Use allocWebAVPictureInPicturePlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:619:  Using +alloc with a soft-linked class. Use allocWebAVPlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
Total errors found: 4 in 52 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>1328510</commentid>
    <comment_count>7</comment_count>
      <attachid>315360</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 11:21:16 -0700</bug_when>
    <thetext>Created attachment 315360
Better diff. No filename change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328536</commentid>
    <comment_count>8</comment_count>
      <attachid>315367</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 12:20:27 -0700</bug_when>
    <thetext>Created attachment 315367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328538</commentid>
    <comment_count>9</comment_count>
      <attachid>315368</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 12:23:20 -0700</bug_when>
    <thetext>Created attachment 315368
Better diff. No filename change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328539</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-13 12:23:57 -0700</bug_when>
    <thetext>Attachment 315367 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/cocoa/PlaybackSessionManager.mm:256:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/cocoa/PlaybackSessionManager.mm:283:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:450:  Using +alloc with a soft-linked class. Use allocWebAVPictureInPicturePlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:619:  Using +alloc with a soft-linked class. Use allocWebAVPlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
Total errors found: 4 in 52 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>1328548</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-13 13:43:09 -0700</bug_when>
    <thetext>Sometimes you can do renames like this with do-webcore-rename, as long as the same name is not used for something else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328549</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-13 13:43:37 -0700</bug_when>
    <thetext>(In reply to Build Bot from comment #10)
&gt; ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:450: 
&gt; Using +alloc with a soft-linked class. Use
&gt; allocWebAVPictureInPicturePlayerLayerViewInstance() instead. 
&gt; [runtime/soft-linked-alloc] [4]
&gt; ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:619: 
&gt; Using +alloc with a soft-linked class. Use
&gt; allocWebAVPlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]

Maybe these are good warnings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328553</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 13:51:13 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; (In reply to Build Bot from comment #10)
&gt; &gt; ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:450: 
&gt; &gt; Using +alloc with a soft-linked class. Use
&gt; &gt; allocWebAVPictureInPicturePlayerLayerViewInstance() instead. 
&gt; &gt; [runtime/soft-linked-alloc] [4]
&gt; &gt; ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:619: 
&gt; &gt; Using +alloc with a soft-linked class. Use
&gt; &gt; allocWebAVPlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
&gt; 
&gt; Maybe these are good warnings?

These aren&apos;t actually soft-linked. This is actually an obj-c class that is dynamically generated. The function name happens to match the naming scheme used for soft-linking.

I could create and use an alloc version, but the implementation of that would probably just get this style warning.

The correct fix is probably to find a way to not dynamically generate the class. That might involve moving the class into a different framework.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328554</commentid>
    <comment_count>14</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 13:55:44 -0700</bug_when>
    <thetext>(In reply to Jeremy Jones from comment #13)
&gt; (In reply to Darin Adler from comment #12)
&gt; &gt; (In reply to Build Bot from comment #10)
&gt; &gt; &gt; ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:450: 
&gt; &gt; &gt; Using +alloc with a soft-linked class. Use
&gt; &gt; &gt; allocWebAVPictureInPicturePlayerLayerViewInstance() instead. 
&gt; &gt; &gt; [runtime/soft-linked-alloc] [4]
&gt; &gt; &gt; ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:619: 
&gt; &gt; &gt; Using +alloc with a soft-linked class. Use
&gt; &gt; &gt; allocWebAVPlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
&gt; &gt; 
&gt; &gt; Maybe these are good warnings?
&gt; 
&gt; These aren&apos;t actually soft-linked. This is actually an obj-c class that is
&gt; dynamically generated. The function name happens to match the naming scheme
&gt; used for soft-linking.
&gt; 
&gt; I could create and use an alloc version, but the implementation of that
&gt; would probably just get this style warning.
&gt; 
&gt; The correct fix is probably to find a way to not dynamically generate the
&gt; class. That might involve moving the class into a different framework.

Also, my patch doesn&apos;t really touch those lines. It is just that the diff doesn&apos;t realize the file has been renamed, and thinks I&apos;ve re-added the whole file. Notice that the other patch without file name changes passes style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328556</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-13 14:03:10 -0700</bug_when>
    <thetext>(In reply to Jeremy Jones from comment #13)
&gt; These aren&apos;t actually soft-linked. This is actually an obj-c class that is
&gt; dynamically generated. The function name happens to match the naming scheme
&gt; used for soft-linking.

OK. Should we change the naming scheme?

(In reply to Jeremy Jones from comment #14)
&gt; Also, my patch doesn&apos;t really touch those lines.

Yes, I was aware of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328584</commentid>
    <comment_count>16</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 15:38:07 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #15)
&gt; (In reply to Jeremy Jones from comment #13)
&gt; &gt; These aren&apos;t actually soft-linked. This is actually an obj-c class that is
&gt; &gt; dynamically generated. The function name happens to match the naming scheme
&gt; &gt; used for soft-linking.
&gt; 
&gt; OK. Should we change the naming scheme?

I&apos;ll handle this in a separate bug. And I&apos;ll break up this change into #1 rename files and #includes, #2 change class names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328590</commentid>
    <comment_count>17</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 15:50:25 -0700</bug_when>
    <thetext>(In reply to Jeremy Jones from comment #16)
&gt; (In reply to Darin Adler from comment #15)
&gt; &gt; (In reply to Jeremy Jones from comment #13)
&gt; &gt; &gt; These aren&apos;t actually soft-linked. This is actually an obj-c class that is
&gt; &gt; &gt; dynamically generated. The function name happens to match the naming scheme
&gt; &gt; &gt; used for soft-linking.
&gt; &gt; 
&gt; &gt; OK. Should we change the naming scheme?
&gt; 
&gt; I&apos;ll handle this in a separate bug. And I&apos;ll break up this change into #1
&gt; rename files and #includes, #2 change class names.

I&apos;ve renamed the function here and made it do an alloc.
https://bugs.webkit.org/show_bug.cgi?id=174476</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328618</commentid>
    <comment_count>18</comment_count>
      <attachid>315390</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 18:19:31 -0700</bug_when>
    <thetext>Created attachment 315390
Part1: File name changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328622</commentid>
    <comment_count>19</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-13 18:29:35 -0700</bug_when>
    <thetext>Attachment 315390 did not pass style-queue:


ERROR: Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.mm:337:  The parameter name &quot;playbackSessionModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/cocoa/PlaybackSessionManager.mm:256:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/cocoa/PlaybackSessionManager.mm:283:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:450:  Using +alloc with a soft-linked class. Use allocWebAVPictureInPicturePlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
ERROR: Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:619:  Using +alloc with a soft-linked class. Use allocWebAVPlayerLayerViewInstance() instead.  [runtime/soft-linked-alloc] [4]
Total errors found: 5 in 47 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>1328645</commentid>
    <comment_count>20</comment_count>
      <attachid>315395</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-13 19:15:49 -0700</bug_when>
    <thetext>Created attachment 315395
Part1: File name changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331177</commentid>
    <comment_count>21</comment_count>
      <attachid>316134</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-21 16:15:33 -0700</bug_when>
    <thetext>Created attachment 316134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331180</commentid>
    <comment_count>22</comment_count>
      <attachid>316136</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-21 16:17:53 -0700</bug_when>
    <thetext>Created attachment 316136
Patch that matches renamed files for easier viewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331181</commentid>
    <comment_count>23</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-21 16:19:13 -0700</bug_when>
    <thetext>Attachment 316134 did not pass style-queue:


ERROR: Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm:256:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm:283:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.mm:337:  The parameter name &quot;playbackSessionModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 52 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>1331270</commentid>
    <comment_count>24</comment_count>
      <attachid>316134</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-21 21:03:15 -0700</bug_when>
    <thetext>Comment on attachment 316134
Patch

No real reason to leave the giant change log listing all the function names.

Not sure why the iOS and iOS Simulator EWS bots say the build failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331754</commentid>
    <comment_count>25</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-24 15:11:47 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #24)
&gt; Comment on attachment 316134 [details]
&gt; Patch
&gt; 
&gt; No real reason to leave the giant change log listing all the function names.

Removed.

&gt; 
&gt; Not sure why the iOS and iOS Simulator EWS bots say the build failed.

Fixed 1-character typo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331755</commentid>
    <comment_count>26</comment_count>
      <attachid>316322</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-24 15:11:53 -0700</bug_when>
    <thetext>Created attachment 316322
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331756</commentid>
    <comment_count>27</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-24 15:12:34 -0700</bug_when>
    <thetext>(In reply to Jeremy Jones from comment #25)
&gt; (In reply to Darin Adler from comment #24)
&gt; &gt; Comment on attachment 316134 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; No real reason to leave the giant change log listing all the function names.
&gt; 
&gt; Removed.
&gt; 
&gt; &gt; 
&gt; &gt; Not sure why the iOS and iOS Simulator EWS bots say the build failed.
&gt; 
&gt; Fixed 1-character typo.

I&apos;ll confirm the patch passes EWS before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332857</commentid>
    <comment_count>28</comment_count>
      <attachid>316609</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-27 20:51:47 -0700</bug_when>
    <thetext>Created attachment 316609
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332867</commentid>
    <comment_count>29</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-27 21:22:08 -0700</bug_when>
    <thetext>Attachment 316609 did not pass style-queue:


ERROR: Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm:256:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm:283:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.mm:337:  The parameter name &quot;playbackSessionModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 52 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>1332888</commentid>
    <comment_count>30</comment_count>
      <attachid>316620</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-07-27 22:44:24 -0700</bug_when>
    <thetext>Created attachment 316620
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332889</commentid>
    <comment_count>31</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-27 22:49:01 -0700</bug_when>
    <thetext>Attachment 316620 did not pass style-queue:


ERROR: Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm:256:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm:283:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.mm:337:  The parameter name &quot;playbackSessionModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 52 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>1332911</commentid>
    <comment_count>32</comment_count>
      <attachid>316620</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-28 00:25:46 -0700</bug_when>
    <thetext>Comment on attachment 316620
Patch for landing.

Clearing flags on attachment: 316620

Committed r219996: &lt;http://trac.webkit.org/changeset/219996&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339158</commentid>
    <comment_count>33</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-08-16 06:24:59 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #32)
&gt; Comment on attachment 316620 [details]
&gt; Patch for landing.
&gt; 
&gt; Clearing flags on attachment: 316620
&gt; 
&gt; Committed r219996: &lt;http://trac.webkit.org/changeset/219996&gt;

It broke the Apple Mac cmake build 3 weeks ago:


CMake Error in Source/WebKit/CMakeLists.txt:
  Cannot find source file:

    UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in


Is Apple Mac make cmake build still maintained or should we remove it 
from the trunk if it is completely dead project?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315309</attachid>
            <date>2017-07-12 16:59:15 -0700</date>
            <delta_ts>2017-07-13 11:16:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174437-20170712165914.patch</filename>
            <type>text/plain</type>
            <size>729718</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzODQ3ZWU5NmI5OTI2
ODM4MGIzYWNmZGI2MGU3ZjBkOGI1MDMyOC4uNTA5ZTU2ZThhYjNiZmUwMzQ5YzBhMWZlNmJhMzJj
MDZhNTA3NDhhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1MCBAQAorMjAxNy0wNy0xMiAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVm
aXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50
ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFj
a1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVu
ZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFt
ZXNwYWNlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmguCisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6flBsYXliYWNrU2Vzc2lvbk1v
ZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojp+UGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlh
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpi
ZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0
b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5Q
bGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI6On5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgu
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6flZpZGVvRnVsbHNjcmVl
bk1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
LgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbS4KKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcyk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENs
aWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3Zl
Q2xpZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zp
c2libGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhh
c1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmguCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
LgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJh
bmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICgtW1dlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSBmdWxsc2NyZWVuSW50ZXJmYWNlXSk6CisgICAgICAgICgtW1dl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0p
OgorICAgICAgICAoY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckxheWVyIGZ1bGxzY3JlZW5JbnRlcmZhY2VdKToKKyAgICAgICAgKC1bV2ViQVZQ
bGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0pOgorICAgICAgICAoLVtXZWJBVlBs
YXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpdKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpjcmVhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIp
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNj
cmVlbk1vZGVsKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVs
bHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRU
b1N0YXJ0UGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVT
dG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dl
YkFWUGxheWVyQ29udHJvbGxlci5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZCk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnBhdXNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKToK
KyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmR1cmF0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpjdXJyZW50VGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRl
cnZhbCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxh
eUZhc3RSZXZlcnNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxz
Y3JlZW46bW9kZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRGaW5pc2hGdWxsc2NyZWVuOl0pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENs
ZWFudXBGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hh
bmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdl
c0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
Om11dGVkQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVu
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnBsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnBhdXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YmVnaW5TY3J1YmJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2Fi
bGVSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJ
bnRlcnZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxs
c2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJiaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjph
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0uCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6XSk6Cisg
ICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgaW52YWxpZGF0ZV0p
OgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIHNldFVwUElQ
Rm9yVmlkZW9WaWV3OndpdGhGcmFtZTppbldpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250
YWluZXI6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
cGlwU2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakMgcGlwRGlkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgcGlwQWN0aW9uUGxheTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25QYXVzZTpdKToKKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25TdG9wOl0pOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhck1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlk
ZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZWVrVG9UaW1lOnRvbGVyYW5jZUJlZm9yZTp0b2xl
cmFuY2VBZnRlcjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgYmVn
aW5Ub3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlciBlbmRUb3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOl0p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDdXJyZW50TGVnaWJs
ZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hY10pOgorICAgICAgICAo
LVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHRvZ2dsZVBsYXli
YWNrXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6
XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGlzUGxheWluZ10pOgor
ICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciB0b2dnbGVQaWN0dXJlSW5QaWN0
dXJlXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hY10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6XSk6IERlbGV0
ZWQuCisKIDIwMTctMDctMTEgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBOQVZJR0FUT1JfSFdDT05DVVJSRU5DWQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDE4
NGEyMTA3YTUyM2M5Zjg4ZTM0MTAzNmFhN2E3Mzg2MzEzMzI0MGMuLmJkYTNkMjkyMjRmMWI2ODEy
MDM1YWIzNzUzNGY5M2MzMzY3MWJmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNy0wNy0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXli
YWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
cmVtb3ZlcyB0aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxz
Y3JlZW4qIGFuZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAg
IFRoaXMgcHJlZml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUg
V2ViS2l0IG9yIFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZv
ck1lZGlhRWxlbWVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAg
ICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKwogMjAxNy0wNy0xMSAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIE5BVklHQVRPUl9IV0NPTkNVUlJF
TkNZCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggMDNkZTVjZGIwYjc3Yjg3ZjQwZTY0MzhiNjBkYjM4MjEzZmI4NzQy
YS4uN2UzZGQ3MzBjYThkMTM5ZTYyM2RjN2Q3MzU0MGUwOWEzMGQ2N2E3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI2MyBAQAorMjAxNy0wNy0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3Jl
ZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNs
YXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUg
YWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW06CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGlj
dHVyZUluUGljdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6dG9nZ2xlTXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnNldE11dGVkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVk
VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6flBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRD
bGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElE
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla2FibGVSYW5n
ZXNWZWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVD
b250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmZhc3RTZWVrKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5T
Y2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Ojp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbS4KKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4pOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxs
c2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpk
aWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5k
SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2V0dXBGdWxsc2NyZWVuV2l0aElEKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9EaW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXll
ckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNoQmFyKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV93
ZWFrUHRyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhdHRhY2hU
b1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKiBXZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxheWJhY2tTZXNzaW9u
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVz
c2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vz
cy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6bmV4dENvbnRleHRJZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZl
cmVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1
cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tD
b250cm9sc01hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Ojpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyYXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnNldE11dGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oLgorICAgICAgICAoV2ViS2l0OjpWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0uCisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVySG9zdGluZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpoYXNWaWRlb0NoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAgICAg
KFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Up
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCk6
CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRG
b3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVt
b3ZlQ2xpZW50Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpoYXNWaWRlb0NoYW5nZWQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0
OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAg
IChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51
bSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBSZW1vdmVkLgorCiAyMDE3LTA3LTExICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgTkFWSUdBVE9S
X0hXQ09OQ1VSUkVOQ1kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA5M2VjODYxOTRmNGY4NGU1NGQ3NmMwZjQ5ZDJlNzZlODc2MjNj
YTJmLi42MjIzMGZhNWRlMzJiY2FiMDNiYTkwZTFiZGJlNTUxZWMyZjI5OTc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjg1
LDggKzE2ODUsOCBAQAogCQkzRjgwMjAzNjFFOUU0N0MzMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzRjgwMjAzMTFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5j
cHAgKi87IH07CiAJCTNGODAyMDM3MUU5RTQ3QzUwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJl
RGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0Y4MDIwMzQxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyLmggKi87IH07CiAJCTNGODAyMDM4MUU5RTQ3QzkwMERFQzYxRCAvKiBDb3JlQXVkaW9D
YXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwICovOyB9OwotCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi87IH07Ci0JCTNGQkM0QUY0MTg5ODgx
NTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjIxODk4ODE1NjAw
NDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0ZCQzRBRjMxODk4ODE1NjAw
NDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OworCQkzRkJDNEFGNDE4
OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRjFGQTY2MUU3MzUwRkQwMEMx
MDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlLmNwcCAqLzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAx
IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNGQzQzNEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2Nr
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5
QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CkBA
IC0yNDc1LDExICsyNDc1LDExIEBACiAJCTUxRkI1NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Ns
b3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgKi87IH07CiAJ
CTUxRkI2N0RCMUFFNkI4MkIwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNjdE
OTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovOyB9
OwogCQk1MUZCNjdEQzFBRTZCODJGMDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI2
N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyMTMxRTVCMUM0
RjE1NzYwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMUU1QTFDNEYxNTYx
MDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovOyB9OworCQk1
MjEzMUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzFFNUEx
QzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLzsgfTsK
IAkJNTI2NzI0RjMxQ0IyRkVBRDAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3
MjRGMTFDQjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSAq
LzsgfTsKIAkJNTJCMEQ0QkUxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkQxQzU3RkQx
RTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QzEx
QzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQjZDOUMyMTVFM0Y0
REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJEMTVFM0Y0REYwMDY5MEIwNSAv
KiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJNTJCNkM5QzMxNUUzRjRERjAw
NjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJFMTVFM0Y0REYwMDY5MEIwNSAvKiBET01O
YW1lZEZsb3dDb2xsZWN0aW9uLmggKi87IH07CiAJCTUyQjZDOUM1MTVFM0Y0REYwMDY5MEIwNSAv
KiBOYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjZDOUMwMTVFM0Y0REYwMDY5MEIwNSAvKiBOYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCAqLzsgfTsKQEAgLTI0ODcsOSArMjQ4Nyw5IEBACiAJCTUyQ0NBOUUyMTVFM0Y2
MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5RTAxNUUzRjYyQzAwNTNDNzdG
IC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTUyQ0NBOUUzMTVFM0Y2
MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0NBOUUxMTVFM0Y2MkMwMDUzQzc3RiAv
KiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJNTJENUExOEYxQzU0NTkyMzAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gKi87IH07Ci0JCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi87IH07CisJCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQubW0gKi87IH07CiAJCTUyRTJDQUZDMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRp
YVByb2R1Y2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkUyQ0FGQjE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRjEwODY1MTYyQjZEQTQw
MDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhl
ZENvbnRlbnRDaGVja2VyLmNwcCAqLzsgfTsKIAkJNTJGMTA4NjYxNjJCNkRBODAwOUFDODFFIC8q
IE1peGVkQ29udGVudENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVj
a2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTYyMDAsMTUgKzYyMDAsMTUgQEAKIAkJQ0RBMDdGQkUxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3Rl
bVNsZWVwTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTA3RkJDMThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RBMDdG
QzExOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwN0ZCRjE4RTBBMjJCMDA0
Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSAqLzsgfTsKIAkJQ0RBMDdGQzIxOEUw
QTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA3RkMwMThFMEEyMkIwMDQ2OTlGQSAv
KiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmggKi87IH07Ci0JCUNEQTI5QTA5MUNCRDk5RjQwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUNEQTI5QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSAqLzsgfTsKLQkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLzsgfTsKLQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKKwkJQ0RBMjlBMDkxQ0JEOTlGNDAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMEUx
Q0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEMxQ0JE
OUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9
OworCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
NDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovOyB9
OworCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMzAx
Q0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkYxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OwogCQlD
REEyOUEzMTFDQkY3NERBMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkQxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAqLzsgfTsKLQkJQ0RBMjlBMzIx
Q0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRTFDQkY3
M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEzMjFDQzAx
QTk1MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJFMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTc5ODI0MTcwQTI1ODMwMEQ0NUM1
NSAvKiBBdWRpb1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBNzk4MjMxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAg
Ki87IH07CiAJCUNEQTc5ODI3MTcwQTI3OTEwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyNTE3
MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICovOyB9OwogCQlDREE3OTgyQTE3
MEEzRDAwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTkzMjYsOCArOTMyNiw4IEBACiAJCTNGODAyMDMyMUU5RTM4MUQwMERFQzYxRCAvKiBDb3Jl
QXVkaW9DYXB0dXJlRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
cmVBdWRpb0NhcHR1cmVEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4
MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4MDIwMzQx
RTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVF
MzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU1ZpZXdw
b3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE3MTU5RDlB
NTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTNGRkZGOUFCMTU5RDlCMDYwMDIwQkJENSAvKiBWaWV3cG9ydFN0eWxlUmVz
b2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRT
dHlsZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjI5LDEy
ICsxMDIyOSwxMiBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1
QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50
RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMTFD
QjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYyMUNCMkZERjYw
MDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QkQxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRm
b3JtVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRDE1RTNGNERGMDA2
OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkUxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRjE1
RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDI0NCw5ICsxMDI0NCw5IEBACiAJCTUyQ0NBOUUxMTVFM0Y2MkMwMDUz
Qzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyRDVBMThFMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE0MUM1NzQ4
ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBNTFD
NTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQTYxQzU3NDg4OTAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRTJDQUZCMTlGRjAyMDcw
MDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhUHJvZHVjZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGMTA4
NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWl4ZWRDb250ZW50Q2hlY2tlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhl
ZENvbnRlbnRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1peGVk
Q29udGVudENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzM4LDE2
ICsxNDczOCwxNiBAQAogCQlDREEwN0ZCQzE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBM
aXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1TbGVlcExp
c3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTA3RkJGMThFMEEyMkIw
MDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQzAxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNs
ZWVwTGlzdGVuZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVt
U2xlZXBMaXN0ZW5lck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEw
ODFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEy
OUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RB
MjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
QTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExNDFD
QkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExNTFDQkRBNTZDMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyQzFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5
ZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFWUGxh
eWVyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyRDFD
QkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdWRpb1Nlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBNzk4MjMx
NzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBdWRpb1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uSU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkxMzgsMTQgKzE5MTM4LDE0IEBACiAJ
CQkJRTFBMzE2MkMxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5tbSAqLywKIAkJCQlDRDU4OTZFMDFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIuaCAqLywKIAkJCQlDRDU4OTZERjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIubW0gKi8sCi0JCQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovLAotCQkJCUNEQTI5QTE0MUNC
REE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8sCisJ
CQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oICovLAorCQkJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRDgyMDMwNzEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLywKIAkJCQlDRDgyMDMwODEz
OTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5o
ICovLAogCQkJCUNEODIwMzA5MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLm1tICovLAotCQkJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLywKLQkJCQk1MjEzMUU1QTFDNEYx
NTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovLAorCQkJ
CTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
aCAqLywKKwkJCQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLm1tICovLAogCQkJCUNEODIwMzBFMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5k
b3dBbmltYXRpb24uaCAqLywKIAkJCQlDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLm1tICovLAogCQkJCTkzODBGNDc3MDlBMTFBQ0MwMDFGREIzNCAvKiBXaWRn
ZXRNYWMubW0gKi8sCkBAIC0yMTE1MCwxNCArMjExNTAsMTQgQEAKIAkJCQlGRTBEODRFQTEwNDg0
MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gKi8sCiAJCQkJRjQ4MjIzMEYxRTM4NjlCODAwNjZG
Qzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaCAqLywKIAkJCQlGNDgyMjMwRTFFMzg2
OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbSAqLywKLQkJCQlDREEy
OUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCAqLywKLQkJCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0gKi8sCisJCQkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8sCisJCQkJQ0RBMjlBMkYxQ0JGNzNGQzAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovLAogCQkJCTFGODc1
NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAq
LywKIAkJCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFj
a2VyQ2xpZW50Lm1tICovLAogCQkJCTNGNDJCMzFCMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLywKIAkJCQkzRjQyQjMxQzE4ODExOTFCMDAy
NzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovLAotCQkJCTNG
QkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oICovLAotCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLywKKwkJCQkzRkJDNEFGMTE4OTg4MTU2
MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJRTQ1
MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gaW9zOwpAQCAtMjEyMDQsMTQgKzIxMjA0LDE0IEBACiAJCQkJQ0RDOTc5RjMxQzQ5OEMwOTAw
REI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLmggKi8sCiAJCQkJQ0RDOTc5RjIxQzQ5OEMw
OTAwREI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLm1tICovLAogCQkJCTVERkVCQUI2MTg1
OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKLQkJCQlDREEyOUEwODFD
QkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8sCi0JCQkJ
Q0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8s
Ci0JCQkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50LmggKi8sCi0JCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovLAotCQkJCTUyQjBENEJGMUM1N0ZE
NjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAotCQkJ
CTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICov
LAotCQkJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oICovLAotCQkJCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLywKKwkJCQlDREEyOUEwODFDQkQ5
OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8sCisJCQkJQ0RBMjlB
MEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8sCisJCQkJQ0RB
MjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
LmggKi8sCisJCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lm1tICovLAorCQkJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAorCQkJCTUyRDVBMUE0MUM1NzQ4ODkw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovLAorCQkJCTUyRDVBMUE1MUM1NzQ4
ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovLAorCQkJ
CTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzAxMTgsMTEgKzMwMTE4LDExIEBACiAJCQkJMDcwOUQ3OTMxQUU1NTU3RTAw
NEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxQTMxNjJEMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNENTg5NkUyMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMDkxQ0JEOTlG
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQlD
REEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMDkxQ0JE
OTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEw
QjFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZF
IC8qIFdlYlNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1
MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNTY5RDFCMEQ3RTJCODIwMDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDEzOSwxNCArMzAxMzksMTQgQEAKIAkJCQkxRjg3NTZCMjFFMjJD
MzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BM
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkIwRDRDMDFDNTdGRDY2
MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q4MjAzMEExMzk1QUI2QTAwRjk1NkM2
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTNG
NDJCMzFEMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBDMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkz
RkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyRDVBMUE3
MUM1NzQ4OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzRkJDNEFGNDE4OTg4MTU2MDA0
NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRDVBMUE3MUM1NzQ4OUQwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQTgxQzU3NDhBMzAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGMTIxNzFGNjE2QThDRjBCMDAwMDUzQ0EgLyogV2ViVlRURWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjEwQjY5ODAxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRv
a2VuLmggaW4gSGVhZGVycyAqLywKQEAgLTMzODM1LDkgKzMzODM1LDkgQEAKIAkJCQkwNzA5RDc5
MjFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMUEzMTYyRTEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q1ODk2RTExQ0QyQjE1MTAwQjNC
Q0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5
QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTE2
MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291
cmNlcyAqLywKKwkJCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0FGMzQ4MjBBNkM0MDUy
MDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdBQUJE
MUExNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
N0FBQkQxRDE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMzODUzLDkgKzMzODUzLDkgQEAKIAkJCQlDRDgyMDMwQjEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTNGNDJCMzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
QVZLaXQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDgyMDMwRDEzOTVBQjZBMDBGOTU2QzYgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk1
MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MjEz
MUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjEyMTcxRjUxNkE4
Q0VEMjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQy
MUE4MDIxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMTBCNjk4MTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXgg
MjY2MDI2OTI4ZjM2NWIzY2Y2ODg1M2MzNTQ4YzA4NDA0YjFiZmIwNS4uMGQ0NjExYzUwOTYyZWI4
ODEwYTIxYzI0ZjlkY2U5MWYyMzM2YWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKICNp
bmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCkBAIC0xNTYsNyArMTU2LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1
ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCIKICNlbmRpZgogCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAu
Li4pIFJFTEVBU0VfTE9HX0lGKGRvY3VtZW50KCkucGFnZSgpICYmIGRvY3VtZW50KCkucGFnZSgp
LT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTWVkaWEsICIlcCAtIEhUTUxNZWRpYUVsZW1l
bnQ6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAKaW5kZXggMzZjZjQ5N2I5OWI4OTdhOGFhZGRlYWY2MjZiOWFhYjM4ZmZj
MmJhMS4uNjU4OTVmOTM4OTdmMDY4NDE0N2I5ZDBjY2YxNTcwY2I3OTY4N2NjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC00OCw3ICs0OCw3IEBACiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRl
ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDAzNzJhZmM3NTU5NjFlMWYxMjBlZWJiNmQyOTRi
ODQwYWZmMjNiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgVGltZVJhbmdlczsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Uo
KSB7IH07CisgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpID0gMDsKK307CisKK30K
KworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODc0NDE1NzQ2
OWEyYTdiMmU3NjM5ZTFmOWEzYWU3MTRkZjI4NjQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaApAQCAtMCwwICsx
LDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGltZVJh
bmdlczsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Oworc3RydWN0IE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lk
IGFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGJlZ2luU2NydWJiaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJpbmco
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90
IGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZU11dGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRNdXRlZChib29sKSA9IDA7CisKKyAgICBlbnVtIEV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHsgVGFyZ2V0VHlwZU5vbmUsIFRhcmdldFR5cGVBaXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQg
fTsKKworICAgIHZpcnR1YWwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBk
b3VibGUgY3VycmVudFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgYnVmZmVy
ZWRUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmPFRpbWVS
YW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIHNl
ZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1aW50NjRfdCBsZWdp
YmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBleHRl
cm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNdXRlZCgpIGNvbnN0ID0gMDsKK307
CisKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5QbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1l
Q2hhbmdlZChkb3VibGUgLyogY3VycmVudFRpbWUgKi8sIGRvdWJsZSAvKiBhbmNob3JUaW1lICov
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgLyogcGxh
eWJhY2tTdGFydGVkVGltZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHJhdGVDaGFuZ2VkKGJv
b2wgLyogaXNQbGF5aW5nICovLCBmbG9hdCAvKiBwbGF5YmFja1JhdGUgKi8pIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJs
ZSAvKiBsYXN0TW9kaWZpZWQgKi8sIGRvdWJsZSAvKiBsaXZlSW50ZXJ2YWwgKi8pIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0
ZWRJbmRleCAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlv
bnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVk
ICovLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNv
bnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCB2
b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIHsgfQorfTsKKworfQorCisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E3
MzE0M2I0YmY5YmRlZTM3MzgyNjlkMTgyMDFiODlkMzBkMmIxZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1v
ZGVsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEF1ZGlvVHJhY2s7CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgVGV4dFRyYWNrOwor
Y2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2RlbCwgcHVi
bGljIEV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpKTsKKyAgICB9Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFF
bGVtZW50Kik7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2
ZW50KikgZmluYWw7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9t
aWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhz
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExp
c3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRD
bGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcGxheSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGF1
c2UoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBlbmRTY2FubmluZygpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOworCisgICAgZG91YmxlIGR1cmF0aW9u
KCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWw7Cisg
ICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQbGF5aW5n
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWw7CisgICAg
UmVmPFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWw7CisgICAgZG91Ymxl
IHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBjYW5QbGF5
RmFzdFJldmVyc2UoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWw7CisgICAgdWludDY0
X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBm
aW5hbDsKKyAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAg
IEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkg
Y29uc3QgZmluYWw7CisgICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VO
YW1lKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsOworCitwcm90
ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7Cisg
ICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnRO
YW1lcygpOworICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKKwor
ICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBib29sIG1f
aXNMaXN0ZW5pbmcgeyBmYWxzZSB9OworICAgIEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQqPiBtX2NsaWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2li
bGVUcmFja3NGb3JNZW51OworICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9U
cmFja3NGb3JNZW51OworCisgICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdDsK
KyAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOworICAgIHZvaWQgdXBkYXRl
TWVkaWFTZWxlY3Rpb25JbmRpY2VzKCk7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzRkZmY3MDEwMjRiM2JkOGIyYTA5MWY2
ZjY1NjdjYWU4NGUzMWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTAsMCArMSw1
MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2lt
cG9ydCAiQXVkaW9UcmFja0xpc3QuaCIKKyNpbXBvcnQgIkV2ZW50LmgiCisjaW1wb3J0ICJFdmVu
dExpc3RlbmVyLmgiCisjaW1wb3J0ICJFdmVudE5hbWVzLmgiCisjaW1wb3J0ICJIVE1MRWxlbWVu
dC5oIgorI2ltcG9ydCAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgor
I2ltcG9ydCAiTWVkaWFDb250cm9sc0hvc3QuaCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0
aW9uLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQYWdlR3JvdXAuaCIKKyNpbXBvcnQg
IlRleHRUcmFja0xpc3QuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgPFF1YXJ0
ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQoKQorICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3Rl
bmVyVHlwZSkKK3sKK30KKworUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5QbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1faXNMaXN0ZW5p
bmcpIHsKKyAgICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMo
KSkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZSwgKnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tz
KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBm
YWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkucmVtb3ZlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7CisgICAgfQor
ICAgIG1faXNMaXN0ZW5pbmcgPSBmYWxzZTsKKworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlc2V0UGxheWJhY2tTZXNzaW9uU3RhdGUoKTsKKworICAg
IG1fbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50
KSB7CisgICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkp
CisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUs
ICp0aGlzLCBmYWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLmFk
ZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOwor
ICAgICAgICBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX2lzTGlzdGVu
aW5nID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxs
KCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVF
dmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2
ZW50KQoreworICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC0+dHlwZSgpKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNv
bnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit7CisgICAgaWYgKG1fY2xpZW50cy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgYWxsID0gZXZlbnROYW1lID09
IGV2ZW50TmFtZUFsbCgpOworCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0g
ZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpIHsKKyAgICAgICAgZG91YmxlIGR1cmF0
aW9uID0gdGhpcy0+ZHVyYXRpb24oKTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xp
ZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKKyAg
ICAgICAgLy8gVGhlc2UgaXMgbm8gc3RhbmRhcmQgZXZlbnQgZm9yIG1pbkZhc3RSZXZlcnNlUmF0
ZUNoYW5nZTsgZHVyYXRpb24gY2hhbmdlIGlzIGEgcmVhc29uYWJsZSBwcm94eSBmb3IgaXQuCisg
ICAgICAgIC8vIEl0IGhhcHBlbnMgZXZlcnkgdGltZSBhIG5ldyBpdGVtIGJlY29tZXMgcmVhZHkg
dG8gcGxheS4KKyAgICAgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UgPSB0aGlzLT5jYW5QbGF5
RmFzdFJldmVyc2UoKTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAg
ICAgICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJl
dmVyc2UpOworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2
ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5wbGF5aW5nRXZlbnQpIHsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykK
KyAgICAgICAgICAgIGNsaWVudC0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tT
dGFydGVkVGltZSgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFt
ZSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZl
bnROYW1lcygpLnBsYXlFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygp
LnJhdGVjaGFuZ2VFdmVudCkgeworICAgICAgICBib29sIGlzUGxheWluZyA9IHRoaXMtPmlzUGxh
eWluZygpOworICAgICAgICBmbG9hdCBwbGF5YmFja1JhdGUgPSB0aGlzLT5wbGF5YmFja1JhdGUo
KTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNs
aWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOworICAgIH0KKworICAg
IGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRl
RXZlbnQpIHsKKyAgICAgICAgYXV0byBjdXJyZW50VGltZSA9IHRoaXMtPmN1cnJlbnRUaW1lKCk7
CisgICAgICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAg
ICAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JU
aW1lKTsKKyAgICB9CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkucHJvZ3Jlc3NFdmVudCkgeworICAgICAgICBhdXRvIGJ1ZmZlcmVkVGltZSA9IHRo
aXMtPmJ1ZmZlcmVkVGltZSgpOworICAgICAgICBhdXRvIHNlZWthYmxlUmFuZ2VzID0gdGhpcy0+
c2Vla2FibGVSYW5nZXMoKTsKKyAgICAgICAgYXV0byBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9k
aWZpZWRUaW1lID0gdGhpcy0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpOwor
ICAgICAgICBhdXRvIGxpdmVVcGRhdGVJbnRlcnZhbCA9IHRoaXMtPmxpdmVVcGRhdGVJbnRlcnZh
bCgpOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgICAg
ICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKKyAgICAgICAgICAg
IGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBzZWVrYWJsZVRp
bWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLmFkZHRyYWNrRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5y
ZW1vdmV0cmFja0V2ZW50KQorICAgICAgICB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsK
KworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS53ZWJr
aXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KSB7CisgICAgICAg
IGJvb2wgZW5hYmxlZCA9IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCk7CisgICAgICAgIEV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSgpOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGV4dGVybmFsUGxh
eWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCk7CisKKyAgICAgICAgYm9vbCB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZCA9IHRoaXMtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCk7
CisKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgeworICAgICAgICAgICAg
Y2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2Nh
bGl6ZWREZXZpY2VOYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFdlIGRvbid0IGNhbGwgdXBkYXRlTWVkaWFTZWxlY3Rpb25J
bmRpY2VzKCkgaW4gdGhlIGFsbCBjYXNlLCBzaW5jZQorICAgIC8vIHVwZGF0ZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucygpIHdpbGwgYWxzbyB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpbmRpY2VzLgorICAg
IGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50KQorICAgICAgICB1cGRh
dGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKTsKKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZl
bnROYW1lID09IGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCkgeworICAgICAgICBmb3Ig
KGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5n
ZWQoaXNNdXRlZCgpKTsKKyAgICB9Cit9Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sK
KyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRz
LmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7Cisg
ICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJl
bW92ZSgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6cGxheSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxl
bWVudC0+cGxheSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxl
bWVudC0+cGF1c2UoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAg
IG1fbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQoreworICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygp
Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5k
U2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAg
ICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQorewor
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVr
KHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdp
blNjYW5uaW5nRm9yd2FyZCgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBt
X21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkZv
cndhcmQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdp
blNjYW5uaW5nQmFja3dhcmQoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpC
YWNrd2FyZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVu
ZFNjYW5uaW5nKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5lbmRTY2FubmluZygpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVjdGVkQXVkaW9J
bmRleCkKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsg
aSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJs
ZWQoaSA9PSBzZWxlY3RlZEF1ZGlvSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4
dFRyYWNrKiB0ZXh0VHJhY2s7CisgICAgaWYgKGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVu
dS5zaXplKCkpCisgICAgICAgIHRleHRUcmFjayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnVbc3Rh
dGljX2Nhc3Q8c2l6ZV90PihpbmRleCldLmdldCgpOworICAgIGVsc2UKKyAgICAgICAgdGV4dFRy
YWNrID0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKKworICAgIG1fbWVkaWFFbGVt
ZW50LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2spOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAg
ICBpZiAobV9tZWRpYUVsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgPT0gTWVkaWFQbGF5ZXJFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgIGVsc2UKKyAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmVudGVyRnVsbHNjcmVlbihNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnRvZ2dsZU11dGVkKCkKK3sKKyAgICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRl
ZCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRNdXRlZChtdXRlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpCit7CisgICAgaWYgKCFtX21lZGlhRWxl
bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGNhcHRpb25QcmVmZXJl
bmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9u
UHJlZmVyZW5jZXMoKTsKKyAgICBhdXRvJiB0ZXh0VHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPnRl
eHRUcmFja3MoKTsKKyAgICBpZiAodGV4dFRyYWNrcy5sZW5ndGgoKSkKKyAgICAgICAgbV9sZWdp
YmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JN
ZW51KCZ0ZXh0VHJhY2tzKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUuY2xlYXIoKTsKKworICAgIGF1dG8mIGF1ZGlvVHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPmF1
ZGlvVHJhY2tzKCk7CisgICAgaWYgKGF1ZGlvVHJhY2tzLmxlbmd0aCgpID4gMSkKKyAgICAgICAg
bV9hdWRpb1RyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0
Rm9yTWVudSgmYXVkaW9UcmFja3MpOworICAgIGVsc2UKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zv
ck1lbnUuY2xlYXIoKTsKKworICAgIGF1dG8gYXVkaW9PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKTsKKyAgICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCgpOworICAgIGF1dG8gbGVnaWJsZU9wdGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zKCk7CisgICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4KCk7CisKKyAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgIGNs
aWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvT3B0aW9ucywgYXVk
aW9JbmRleCk7CisgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQobGVnaWJsZU9wdGlvbnMsIGxlZ2libGVJbmRleCk7CisgICAgfQorfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGlj
ZXMoKQoreworICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7
CisgICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CisK
KyAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgIGNsaWVudC0+YXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChhdWRpb0luZGV4KTsKKyAgICAgICAgY2xpZW50
LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobGVnaWJsZUluZGV4KTsKKyAgICB9
Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tT
dGFydGVkVGltZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrU3RhcnRlZFRp
bWUoKTsKK30KKworY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQoreworICAgIC8vIEZJWE1FKDE1
NzQ1Mik6IFJlbW92ZSB0aGUgcmlnaHQtaGFuZCBjb25zdHJ1Y3RvciBub3RhdGlvbiBvbmNlIE5l
dmVyRGVzdHJveWVkIHN1cHBvcnRzIGluaXRpYWxpemVyX2xpc3RzLgorICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gbmFtZXMgPSBWZWN0b3I8QXRvbWljU3Ry
aW5nPih7CisgICAgICAgIGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50LAorICAgICAg
ICBldmVudE5hbWVzKCkucGF1c2VFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnBsYXlFdmVu
dCwKKyAgICAgICAgZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCwKKyAgICAgICAgZXZlbnRO
YW1lcygpLnRpbWV1cGRhdGVFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnByb2dyZXNzRXZl
bnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50LAorICAgICAgICBldmVudE5h
bWVzKCkucmVtb3ZldHJhY2tFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnZvbHVtZWNoYW5n
ZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0
aXN3aXJlbGVzc2NoYW5nZWRFdmVudCwKKyAgICB9KTsKKyAgICByZXR1cm4gbmFtZXMuZ2V0KCk7
Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpldmVudE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGV2ZW50TmFtZUFsbCgiYWxsRXZlbnRzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIGV2ZW50TmFtZUFsbDsKK30KKworZG91YmxlIFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYg
KCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpIDog
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKK30KKworZG91YmxlIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjdXJyZW50VGltZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkg
OiAwOworfQorCitkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZl
cmVkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVs
ZW1lbnQtPm1heEJ1ZmZlcmVkVGltZSgpIDogMDsKK30KKworYm9vbCBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6aXNQbGF5aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQgPyAhbV9tZWRpYUVsZW1lbnQtPnBhdXNlZCgpIDogZmFsc2U7Cit9CisKK2Zsb2F0
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAor
eworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1Jh
dGUoKSA6IDA7Cit9CisKK1JlZjxUaW1lUmFuZ2VzPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7
Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVU
aW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRp
bWUoKSA6IDA7Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQg
PyBtX21lZGlhRWxlbWVudC0+bGl2ZVVwZGF0ZUludGVydmFsKCkgOiAwOworfQorICAgIAorYm9v
bCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWlu
RmFzdFJldmVyc2VSYXRlKCkgPCAwLjAgOiBmYWxzZTsKK30KKworVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4gYXVkaW9PcHRpb25zOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm4gYXVkaW9PcHRpb25zOwor
CisgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50
KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOworCisgICAgYXVkaW9PcHRp
b25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBtX2F1ZGlvVHJhY2tzRm9yTWVudSkKKyAgICAg
ICAgYXVkaW9PcHRpb25zLnVuY2hlY2tlZEFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFT
ZWxlY3Rpb25PcHRpb25Gb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSk7CisKKyAgICByZXR1cm4g
YXVkaW9PcHRpb25zOworfQorCit1aW50NjRfdCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgaWYgKG1fYXVkaW9UcmFja3NGb3JNZW51W2luZGV4XS0+ZW5hYmxlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpOworfQorCitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxl
Z2libGVPcHRpb25zOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1l
bnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7CisK
KyAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CisKKyAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9yTWVudSkKKyAgICAgICAgbGVnaWJsZU9wdGlvbnMu
YXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRy
YWNrLmdldCgpKSk7CisKKyAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Cit9CisKK3VpbnQ2NF90
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QKK3sKKyAgICB1aW50NjRfdCBzZWxlY3RlZEluZGV4ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgIHVpbnQ2NF90IG9mZkluZGV4ID0gMDsKKyAg
ICBib29sIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IGZhbHNlOworCisgICAgYXV0byBob3N0ID0g
bV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSA6IG51
bGxwdHI7CisKKyAgICBpZiAoIWhvc3QpCisgICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4Owor
CisgICAgQXRvbWljU3RyaW5nIGRpc3BsYXlNb2RlID0gaG9zdC0+Y2FwdGlvbkRpc3BsYXlNb2Rl
KCk7CisgICAgVGV4dFRyYWNrKiBvZmZJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7
CisgICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVBdXRvbWF0
aWNJdGVtKCk7CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9sZWdpYmxl
VHJhY2tzRm9yTWVudS5zaXplKCk7IGluZGV4KyspIHsKKyAgICAgICAgYXV0byYgdHJhY2sgPSBt
X2xlZ2libGVUcmFja3NGb3JNZW51W2luZGV4XTsKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0
ZW0pCisgICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OworCisgICAgICAgIGlmICh0cmFjayA9
PSBhdXRvbWF0aWNJdGVtICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0OjphdXRv
bWF0aWNLZXl3b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAg
ICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZGlzcGxheU1vZGUgIT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdv
cmQoKSAmJiB0cmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgeworICAg
ICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAgICAgICAgICAgdHJhY2tNZW51SXRl
bVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvZmZJdGVtICYm
ICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hv
c3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpCisgICAgICAgIHNlbGVjdGVkSW5kZXggPSBvZmZJbmRl
eDsKKworICAgIHJldHVybiBzZWxlY3RlZEluZGV4OworfQorCitib29sIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT53ZWJraXRDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1vZGVsOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRp
YUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQorICAgICAg
ICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7CisKKyAgICBzd2l0Y2ggKG1fbWVkaWFFbGVtZW50LT5t
ZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZVR5cGUoKSkgeworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVGFyZ2V0VHlw
ZU5vbmU7CisgICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6Tm9uZToKKyAg
ICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOworICAgIGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6
OkRldmljZVR5cGU6OkFpcnBsYXk6CisgICAgICAgIHJldHVybiBUYXJnZXRUeXBlQWlyUGxheTsK
KyAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpUdm91dDoKKyAgICAgICAg
cmV0dXJuIFRhcmdldFR5cGVUVk91dDsKKyAgICB9Cit9CisKK1N0cmluZyBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUo
KSBjb25zdAoreworICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVk
aWFDb250cm9sc0hvc3QoKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNv
bnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CisgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7Cit9CisKK2Jvb2wgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tdXRlZCgpIDogZmFsc2U7Cit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDdkYzgxNWRi
MTMwNjA2NDlmNDllOTQyNWU5MDE4ZjUzNzNiNjZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgeyB9OworICAgIHZpcnR1
YWwgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4o
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSA9IDA7Cit9OworCit9
CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9W
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzg0OWZjMjBkYTBjYjQyYmQ5Mjc2MTdm
MTQxOGY5Yjc3MzBjMjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaApAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjcHJhZ21hIG9uY2UKKwor
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQ7
CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5W
aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKT0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCkgPSAwOworICAgIGVudW0gVmlk
ZW9HcmF2aXR5IHsgVmlkZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Qs
IFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6
ZSYpID0gMDsKK307CisKK1dFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNQaWN0dXJlSW5QaWN0
dXJlKCk7CisgICAgCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYmNkMmEzOWZkNjcxMTM1ODVjYmQxYThhZTg2YTViY2VhNzM1ODM3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByZWFnbWEgb25jZQorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEF1ZGlvVHJhY2s7CitjbGFzcyBI
VE1MVmlkZW9FbGVtZW50OworY2xhc3MgVGV4dFRyYWNrOworY2xhc3MgUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ7CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50IDogcHVibGljIFZpZGVvRnVsbHNjcmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkpOworICAgIH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKKyAgICBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRWxl
bWVudC5nZXQoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVu
TGF5ZXIoUGxhdGZvcm1MYXllciosIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyID0gW10geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdhaXRGb3JQcmVwYXJl
ZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIg
PSBbXSB7IH0pOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50Kikgb3ZlcnJpZGU7
CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4o
dGhpcykgPT0gJnJoczsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9
IGZhbHNlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJG
cmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWaXNp
YmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHZpZGVv
RGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1faGFzVmlkZW87IH0KKworCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNl
dEhhc1ZpZGVvKGJvb2wpOworICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0
U2l6ZSYpOworCisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9i
c2VydmVkRXZlbnROYW1lcygpOworICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5h
bWVBbGwoKTsKKworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsK
KyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKKyAg
ICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2Ug
fTsKKyAgICBGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lvbnM7CisgICAgRmxvYXRSZWN0IG1fdmlk
ZW9GcmFtZTsKKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zv
ck1lbnU7CisgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1l
bnU7Cit9OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA4MTZlYTljYmYxNzU2NTE4NWIwZWM2OWViMWM1YWM2ZWQ4MzJhODkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisj
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aCIKKworI2ltcG9ydCAiRE9NV2luZG93LmgiCisjaW1wb3J0ICJIaXN0b3J5LmgiCisjaW1wb3J0
ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29y
ZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9FdmVudExpc3RlbmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxl
bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRU
cmFja0xpc3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgorI2ltcG9ydCA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCisgICAgOiBFdmVudExpc3RlbmVyKEV2
ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQoreworfQorCitWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkK
K3sKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9F
bGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKK3sKKyAgICBpZiAobV92aWRl
b0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV92
aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPnZpZGVvRnVsbHNjcmVlbkxheWVyKCkpCisg
ICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihudWxscHRyKTsK
KworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgICAgIGZv
ciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAgICBt
X3ZpZGVvRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxz
ZSk7CisgICAgfQorICAgIG1faXNMaXN0ZW5pbmcgPSBmYWxzZTsKKworICAgIG1fdmlkZW9FbGVt
ZW50ID0gdmlkZW9FbGVtZW50OworCisgICAgaWYgKG1fdmlkZW9FbGVtZW50KSB7CisgICAgICAg
IGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAg
ICBtX3ZpZGVvRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxz
ZSk7CisgICAgICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOworICAgIH0KKworICAgIHVwZGF0ZUZv
ckV2ZW50TmFtZShldmVudE5hbWVBbGwoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit7CisgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2
ZW50LT50eXBlKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkK
K3sKKyAgICBpZiAobV9jbGllbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGJvb2wgYWxsID0gZXZlbnROYW1lID09IGV2ZW50TmFtZUFsbCgpOworCisgICAgaWYgKGFs
bAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KSB7Cisg
ICAgICAgIHNldEhhc1ZpZGVvKG1fdmlkZW9FbGVtZW50KTsKKyAgICAgICAgc2V0VmlkZW9EaW1l
bnNpb25zKG1fdmlkZW9FbGVtZW50ID8gRmxvYXRTaXplKG1fdmlkZW9FbGVtZW50LT52aWRlb1dp
ZHRoKCksIG1fdmlkZW9FbGVtZW50LT52aWRlb0hlaWdodCgpKSA6IEZsb2F0U2l6ZSgpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVl
bkxheWVyID09IHZpZGVvTGF5ZXIpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0g
dmlkZW9MYXllcjsKKyNpZiBQTEFURk9STShNQUMpCisgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5
ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UoMCwgMCldOworI2Vsc2UKKyAgICBbbV92aWRl
b0Z1bGxzY3JlZW5MYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLjUsIDAuNSldOwor
I2VuZGlmCisgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOm1fdmlkZW9GcmFt
ZV07CisgICAgCisgICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgeworICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV92aWRlb0VsZW1lbnQt
PnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50
KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3ZpZGVvRWxlbWVudC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3sKKyAg
ICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkg
IT0gbW9kZSkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUp
OworCisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIGZpbmlzaGVkV2l0aE1lZGlhICYmIG1vZGUg
PT0gTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpIHsKKyAgICAgICAg
aWYgKG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLmlzTWVkaWFEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQo
KS5kb21XaW5kb3coKSkgeworICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5KiBoaXN0b3J5ID0g
d2luZG93LT5oaXN0b3J5KCkpCisgICAgICAgICAgICAgICAgICAgIGhpc3RvcnktPmJhY2soKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0KQor
eworICAgIG1fdmlkZW9GcmFtZSA9IHJlY3Q7CisgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIg
c2V0Qm91bmRzOkNHUmVjdChyZWN0KV07CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAg
ICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5
KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBNZWRp
YVBsYXllcjo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3Q7CisgICAgaWYgKGdyYXZpdHkgPT0gVmlkZW9GdWxsc2NyZWVuTW9k
ZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZSkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5
ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpCisgICAgICAgIHZpZGVvR3Jh
dml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAgZWxzZSBp
ZiAoZ3Jhdml0eSA9PSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0RmlsbCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdEZpbGw7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eSh2
aWRlb0dyYXZpdHkpOworfQorCitjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcygpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxBdG9taWNTdHJpbmc+PiBzRXZlbnROYW1lczsKKwor
ICAgIGlmICghc0V2ZW50TmFtZXMuZ2V0KCkuc2l6ZSgpKQorICAgICAgICBzRXZlbnROYW1lcy5n
ZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KTsKKyAgICByZXR1cm4gc0V2ZW50
TmFtZXMuZ2V0KCk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gc0V2ZW50TmFtZUFsbCA9ICJhbGxFdmVudHMiOworICAgIHJldHVy
biBzRXZlbnROYW1lQWxsOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCit7CisgICAgaWYgKG1fdmlkZW9FbGVt
ZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVv
RnVsbHNjcmVlbk1vZGUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjphZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFk
ZCgmY2xpZW50KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAg
QVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92
ZSgmY2xpZW50KTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
aXNWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fdmlkZW9FbGVtZW50LT5kb2N1
bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmlzVmlzaWJsZSgpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpzZXRIYXNWaWRlbyhib29sIGhhc1ZpZGVvKQoreworICAgIGlmIChoYXNWaWRlbyA9PSBtX2hh
c1ZpZGVvKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hhc1ZpZGVvID0gaGFzVmlkZW87CisK
KyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5oYXNW
aWRlb0NoYW5nZWQobV9oYXNWaWRlbyk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmIHZpZGVvRGlt
ZW5zaW9ucykKK3sKKyAgICBpZiAobV92aWRlb0RpbWVuc2lvbnMgPT0gdmlkZW9EaW1lbnNpb25z
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5z
aW9uczsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGll
bnQtPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV92aWRlb0RpbWVuc2lvbnMpOworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1
OWI4Yzg2NDZiYjhlZDQxZWU3MjAzNzczY2RkOTkwOGNhZmY5ZTIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Vf
aAotI2RlZmluZSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VfaAotCi0jaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFN0
cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBUaW1lUmFuZ2VzOwotCi1j
bGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgewotcHVibGljOgotICAgIHZpcnR1YWwg
fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRNZWRpYVN0YXRlKCkgPSAwOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmQ1M2Yw
Zjc3NjkzNzc1YWQ0ODYxYzIyMzA0YWM5MzgwMDljODIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGltZVJhbmdlczsKLWNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Owotc3RydWN0IE1lZGlhU2VsZWN0aW9u
T3B0aW9uOwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lk
IGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhdXNl
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1
YmJpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmco
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qg
aW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVp
bnQ2NF90IGluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1
cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZU11dGVkKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRNdXRlZChib29sKSA9IDA7Ci0KLSAgICBlbnVtIEV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlIHsgVGFyZ2V0VHlwZU5vbmUsIFRhcmdldFR5cGVBaXJQbGF5LCBUYXJnZXRUeXBl
VFZPdXQgfTsKLQotICAgIHZpcnR1YWwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUg
YnVmZmVyZWRUaW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVm
PFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZG91
YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB1aW50NjRf
dCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VO
YW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNdXRlZCgpIGNvbnN0ID0g
MDsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCgpIHsgfTsKLSAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLyogY3VycmVudFRpbWUgKi8sIGRvdWJsZSAvKiBh
bmNob3JUaW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChk
b3VibGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChk
b3VibGUgLyogcGxheWJhY2tTdGFydGVkVGltZSAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJh
dGVDaGFuZ2VkKGJvb2wgLyogaXNQbGF5aW5nICovLCBmbG9hdCAvKiBwbGF5YmFja1JhdGUgKi8p
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJh
bmdlcyYsIGRvdWJsZSAvKiBsYXN0TW9kaWZpZWQgKi8sIGRvdWJsZSAvKiBsaXZlSW50ZXJ2YWwg
Ki8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
Y29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0
X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIC8qIG9wdGlvbnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9v
bCAvKiBlbmFibGVkICovLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChi
b29sKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIHsgfQotfTsKLQot
fQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkODk1MTM3NTg4NGQ2YzgxYTdm
MjM4OTZkOGM0ZjY1MzM5MDM4YzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1
ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIK
LSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1RyYWNrOwotY2xhc3MgSFRNTE1l
ZGlhRWxlbWVudDsKLWNsYXNzIFRleHRUcmFjazsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVy
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7Ci0gICAgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCop
OwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWVkaWFFbGVtZW50LmdldCgpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUV2
ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIGZp
bmFsOwotICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5n
Jik7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykgY29uc3Qg
ZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+
KHRoaXMpID09ICZyaHM7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHBsYXkoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhdXNl
KCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZW5kU2Nhbm5pbmcoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU11dGVkKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKLQotICAgIGRvdWJsZSBkdXJhdGlvbigp
IGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IGZpbmFsOwotICAg
IGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzUGxheWluZygp
IGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQotICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFsOwotICAgIFJl
ZjxUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBz
ZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QgZmluYWw7Ci0gICAgZG91
YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgY2FuUGxheUZh
c3RSZXZlcnNlKCkgY29uc3QgZmluYWw7Ci0gICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIHVpbnQ2NF90
IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7Ci0gICAgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmlu
YWw7Ci0gICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdCBmaW5hbDsKLSAgICBF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNv
bnN0IGZpbmFsOwotICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFt
ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQo
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbDsKLQotcHJvdGVj
dGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCgpOwot
ICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50
TmFtZXMoKTsKLSAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lQWxsKCk7Ci0K
LSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgYm9vbCBt
X2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsKLSAgICBIYXNoU2V0PFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gbV9s
ZWdpYmxlVHJhY2tzRm9yTWVudTsKLSAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2s+PiBtX2F1
ZGlvVHJhY2tzRm9yTWVudTsKLQotICAgIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29u
c3Q7Ci0gICAgdm9pZCB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKLSAgICB2b2lkIHVw
ZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpOwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGNmY2RlNDMzZjAzNzAyMWU1MWEwYjQ2ODZlMmZiNTE3ZDdlOTdmNzQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KKysrIC9kZXYv
bnVsbApAQCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgotCi0j
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBdWRpb1RyYWNrTGlzdC5oIgotI2ltcG9ydCAiRXZl
bnQuaCIKLSNpbXBvcnQgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbXBvcnQgIkV2ZW50TmFtZXMuaCIK
LSNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1MTWVkaWFFbGVtZW50LmgiCi0j
aW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgotI2ltcG9y
dCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlBh
Z2VHcm91cC5oIgotI2ltcG9ydCAiVGV4dFRyYWNrTGlzdC5oIgotI2ltcG9ydCAiVGltZVJhbmdl
cy5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpCi0gICAgOiBFdmVudExpc3RlbmVyKEV2
ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQotewotfQotCi1XZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50KCkKLXsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAgICBp
ZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3IgKGF1
dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwot
ICAgICAgICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKS5yZW1vdmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnRleHRUcmFja3MoKS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5j
aGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZh
bHNlOwotCi0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+
cmVzZXRQbGF5YmFja1Nlc3Npb25TdGF0ZSgpOwotCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRp
YUVsZW1lbnQ7Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpIHsKLSAgICAgICAgZm9yIChhdXRv
JiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKLSAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCkuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50
LT50ZXh0VHJhY2tzKCkuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQs
ICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwotICAgIH0KLQot
ICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudE5hbWVBbGwoKSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCi17Ci0gICAgdXBkYXRl
Rm9yRXZlbnROYW1lKGV2ZW50LT50eXBlKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNT
dHJpbmcmIGV2ZW50TmFtZSkKLXsKLSAgICBpZiAobV9jbGllbnRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7
Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVy
YXRpb25jaGFuZ2VFdmVudCkgewotICAgICAgICBkb3VibGUgZHVyYXRpb24gPSB0aGlzLT5kdXJh
dGlvbigpOwotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICAg
ICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwotICAgICAgICAvLyBUaGVzZSBp
cyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJhdGlv
biBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBpdC4KLSAgICAgICAgLy8gSXQgaGFw
cGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5LgotICAgICAg
ICBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSA9IHRoaXMtPmNhblBsYXlGYXN0UmV2ZXJzZSgpOwot
ICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICAgICAgY2xpZW50
LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBsYXlF
dmVudAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBsYXlpbmdFdmVudCkg
ewotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICAgICAgY2xp
ZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChwbGF5YmFja1N0YXJ0ZWRUaW1lKCkpOwot
ICAgIH0KLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5wYXVzZUV2ZW50Ci0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheUV2
ZW50Ci0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50
KSB7Ci0gICAgICAgIGJvb2wgaXNQbGF5aW5nID0gdGhpcy0+aXNQbGF5aW5nKCk7Ci0gICAgICAg
IGZsb2F0IHBsYXliYWNrUmF0ZSA9IHRoaXMtPnBsYXliYWNrUmF0ZSgpOwotICAgICAgICBmb3Ig
KGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdl
ZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAg
ICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCkgewotICAgICAg
ICBhdXRvIGN1cnJlbnRUaW1lID0gdGhpcy0+Y3VycmVudFRpbWUoKTsKLSAgICAgICAgYXV0byBh
bmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwot
ICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICAgICAgY2xpZW50
LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOwotICAgIH0KLQot
ICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wcm9ncmVz
c0V2ZW50KSB7Ci0gICAgICAgIGF1dG8gYnVmZmVyZWRUaW1lID0gdGhpcy0+YnVmZmVyZWRUaW1l
KCk7Ci0gICAgICAgIGF1dG8gc2Vla2FibGVSYW5nZXMgPSB0aGlzLT5zZWVrYWJsZVJhbmdlcygp
OwotICAgICAgICBhdXRvIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSB0aGlz
LT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCk7Ci0gICAgICAgIGF1dG8gbGl2
ZVVwZGF0ZUludGVydmFsID0gdGhpcy0+bGl2ZVVwZGF0ZUludGVydmFsKCk7Ci0gICAgICAgIGZv
ciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAgICAgICAgIGNsaWVudC0+YnVmZmVy
ZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwotICAgICAgICAgICAgY2xpZW50LT5zZWVrYWJs
ZVJhbmdlc0NoYW5nZWQoc2Vla2FibGVSYW5nZXMsIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2Rp
ZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVu
dAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQp
Ci0gICAgICAgIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOwotCi0gICAgaWYgKGFsbAot
ICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFj
a3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpIHsKLSAgICAgICAgYm9vbCBlbmFibGVkID0g
ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKTsKLSAgICAgICAgRXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUgdGFyZ2V0VHlwZSA9IGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCk7Ci0gICAgICAg
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lID0gZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERl
dmljZU5hbWUoKTsKLQotICAgICAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
ID0gdGhpcy0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKTsKLQotICAgICAgICBmb3Ig
KGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAgICAgICBjbGllbnQtPmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHRhcmdldFR5cGUsIGxvY2FsaXplZERldmljZU5hbWUp
OwotICAgICAgICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gV2UgZG9uJ3QgY2FsbCB1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKSBpbiB0aGUg
YWxsIGNhc2UsIHNpbmNlCi0gICAgLy8gdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2ls
bCBhbHNvIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIGluZGljZXMuCi0gICAgaWYgKGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpCi0gICAgICAgIHVwZGF0ZU1lZGlhU2VsZWN0aW9u
SW5kaWNlcygpOwotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnRO
YW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBt
X2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChpc011dGVkKCkpOwot
ICAgIH0KLX0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmFkZENs
aWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VS
VCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMuYWRkKCZjbGll
bnQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1v
dmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBB
U1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMucmVtb3Zl
KCZjbGllbnQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpwbGF5KCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVt
ZW50LT5wbGF5KCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnBhdXNlKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFF
bGVtZW50LT5wYXVzZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Ojp0b2dnbGVQbGF5U3RhdGUoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjcnViYmluZygpCi17Ci0gICAg
aWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJp
bmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5k
U2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFF
bGVtZW50LT5lbmRTY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKLXsKLSAgICBpZiAobV9tZWRp
YUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZmFzdFNlZWso
ZG91YmxlIHRpbWUpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlh
RWxlbWVudC0+ZmFzdFNlZWsodGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBpZiAobV9tZWRp
YUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29u
dHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCi17Ci0gICAgaWYgKG1f
bWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRp
YUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQotewotICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjYW5uaW5nKCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3Qgc2VsZWN0ZWRBdWRpb0luZGV4KQotewotICAgIGlmICghbV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0g
bV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2F1
ZGlvVHJhY2tzRm9yTWVudVtpXS0+c2V0RW5hYmxlZChpID09IHNlbGVjdGVkQXVkaW9JbmRleCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0VHJhY2sqIHRleHRUcmFjazsKLSAgICBp
ZiAoaW5kZXggPCBtX2xlZ2libGVUcmFja3NGb3JNZW51LnNpemUoKSkKLSAgICAgICAgdGV4dFRy
YWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KV0u
Z2V0KCk7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0VHJhY2sgPSBUZXh0VHJhY2s6OmNhcHRpb25N
ZW51T2ZmSXRlbSgpOwotCi0gICAgbV9tZWRpYUVsZW1lbnQtPnNldFNlbGVjdGVkVGV4dFRyYWNr
KHRleHRUcmFjayk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudC0+
ZnVsbHNjcmVlbk1vZGUoKSA9PSBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVu
KCk7Ci0gICAgZWxzZQotICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKE1l
ZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlTXV0ZWQo
KQotewotICAgIHNldE11dGVkKCFpc011dGVkKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNdXRlZChib29sIG11dGVkKQotewotICAgIGlmICht
X21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldE11dGVkKG11dGVkKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCkKLXsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRp
YUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygp
OwotICAgIGF1dG8mIHRleHRUcmFja3MgPSBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpOwot
ICAgIGlmICh0ZXh0VHJhY2tzLmxlbmd0aCgpKQotICAgICAgICBtX2xlZ2libGVUcmFja3NGb3JN
ZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoJnRleHRUcmFj
a3MpOwotICAgIGVsc2UKLSAgICAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5jbGVhcigpOwot
Ci0gICAgYXV0byYgYXVkaW9UcmFja3MgPSBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKTsK
LSAgICBpZiAoYXVkaW9UcmFja3MubGVuZ3RoKCkgPiAxKQotICAgICAgICBtX2F1ZGlvVHJhY2tz
Rm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZhdWRp
b1RyYWNrcyk7Ci0gICAgZWxzZQotICAgICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudS5jbGVhcigp
OwotCi0gICAgYXV0byBhdWRpb09wdGlvbnMgPSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygp
OwotICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7Ci0gICAg
YXV0byBsZWdpYmxlT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKLSAg
ICBhdXRvIGxlZ2libGVJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsKLQotICAg
IGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAgICAgY2xpZW50LT5hdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoYXVkaW9PcHRpb25zLCBhdWRpb0luZGV4KTsKLSAg
ICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChsZWdpYmxl
T3B0aW9ucywgbGVnaWJsZUluZGV4KTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpCi17Ci0g
ICAgYXV0byBhdWRpb0luZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKLSAgICBhdXRv
IGxlZ2libGVJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsKLQotICAgIGZvciAo
YXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKGF1ZGlvSW5kZXgpOwotICAgICAgICBjbGllbnQtPmxlZ2libGVN
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChsZWdpYmxlSW5kZXgpOwotICAgIH0KLX0KLQotZG91
YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRU
aW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tTdGFydGVkVGltZSgpOwot
fQotCi1jb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcygpCi17Ci0gICAgLy8gRklYTUUoMTU3NDUy
KTogUmVtb3ZlIHRoZSByaWdodC1oYW5kIGNvbnN0cnVjdG9yIG5vdGF0aW9uIG9uY2UgTmV2ZXJE
ZXN0cm95ZWQgc3VwcG9ydHMgaW5pdGlhbGl6ZXJfbGlzdHMuCi0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFZlY3RvcjxBdG9taWNTdHJpbmc+PiBuYW1lcyA9IFZlY3RvcjxBdG9taWNTdHJpbmc+
KHsKLSAgICAgICAgZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQsCi0gICAgICAgIGV2
ZW50TmFtZXMoKS5wYXVzZUV2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkucGxheUV2ZW50LAot
ICAgICAgICBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50LAotICAgICAgICBldmVudE5hbWVz
KCkudGltZXVwZGF0ZUV2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwK
LSAgICAgICAgZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMo
KS5yZW1vdmV0cmFja0V2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkudm9sdW1lY2hhbmdlRXZl
bnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dp
cmVsZXNzY2hhbmdlZEV2ZW50LAotICAgIH0pOwotICAgIHJldHVybiBuYW1lcy5nZXQoKTsKLX0K
LQotY29uc3QgQXRvbWljU3RyaW5nJiAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmV2ZW50TmFtZUFsbCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gZXZlbnROYW1lQWxsKCJhbGxFdmVudHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICByZXR1cm4gZXZlbnROYW1lQWxsOwotfQotCi1kb3VibGUgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmR1cmF0aW9uKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQtPnN1cHBvcnRzU2Vla2luZygpID8gbV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkg
OiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotfQotCi1kb3VibGUg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmN1cnJlbnRUaW1lKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+Y3VycmVudFRp
bWUoKSA6IDA7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6YnVmZmVyZWRUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBt
X21lZGlhRWxlbWVudC0+bWF4QnVmZmVyZWRUaW1lKCkgOiAwOwotfQotCi1ib29sIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojppc1BsYXlpbmcoKSBjb25zdAotewotICAgIHJl
dHVybiBtX21lZGlhRWxlbWVudCA/ICFtX21lZGlhRWxlbWVudC0+cGF1c2VkKCkgOiBmYWxzZTsK
LX0KLQotZmxvYXQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNr
UmF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1l
bnQtPnBsYXliYWNrUmF0ZSgpIDogMDsKLX0KLQotUmVmPFRpbWVSYW5nZXM+IFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlKCkgOiBUaW1l
UmFuZ2VzOjpjcmVhdGUoKTsKLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGVUaW1l
UmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDogMDsKLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdAotewotICAg
IHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5saXZlVXBkYXRlSW50ZXJ2
YWwoKSA6IDA7Ci19Ci0gICAgCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCA/IG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJhdGUoKSA8IDAuMCA6IGZhbHNl
OwotfQotCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb09wdGlvbnM7Ci0KLSAgICBpZiAo
IW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0g
ICAgICAgIHJldHVybiBhdWRpb09wdGlvbnM7Ci0KLSAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5j
ZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblBy
ZWZlcmVuY2VzKCk7Ci0KLSAgICBhdWRpb09wdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCkpOwotICAgIGZvciAoYXV0byYgYXVkaW9UcmFjayA6
IG1fYXVkaW9UcmFja3NGb3JNZW51KQotICAgICAgICBhdWRpb09wdGlvbnMudW5jaGVja2VkQXBw
ZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKGF1ZGlv
VHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBhdWRpb09wdGlvbnM7Ci19Ci0KLXVpbnQ2NF90
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCgpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fYXVk
aW9UcmFja3NGb3JNZW51LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBpZiAobV9hdWRpb1Ry
YWNrc0Zvck1lbnVbaW5kZXhdLT5lbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7
Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7
Ci19Ci0KLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAotewot
ICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9wdGlvbnM7Ci0KLSAgICBp
ZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkp
Ci0gICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKLQotICAgIGF1dG8mIGNhcHRpb25QcmVm
ZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0
aW9uUHJlZmVyZW5jZXMoKTsKLQotICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2xlZ2libGVUcmFj
a3NGb3JNZW51KQotICAgICAgICBsZWdpYmxlT3B0aW9ucy5hcHBlbmQoY2FwdGlvblByZWZlcmVu
Y2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sodHJhY2suZ2V0KCkpKTsKLQotICAgIHJl
dHVybiBsZWdpYmxlT3B0aW9uczsKLX0KLQotdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAotewotICAg
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6
bWF4KCk7Ci0gICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOwotICAgIGJvb2wgdHJhY2tNZW51SXRl
bVNlbGVjdGVkID0gZmFsc2U7Ci0KLSAgICBhdXRvIGhvc3QgPSBtX21lZGlhRWxlbWVudCA/IG1f
bWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpIDogbnVsbHB0cjsKLQotICAgIGlmICgh
aG9zdCkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7Ci0KLSAgICBBdG9taWNTdHJpbmcg
ZGlzcGxheU1vZGUgPSBob3N0LT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKLSAgICBUZXh0VHJhY2sq
IG9mZkl0ZW0gPSBob3N0LT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsKLSAgICBUZXh0VHJhY2sqIGF1
dG9tYXRpY0l0ZW0gPSBob3N0LT5jYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKTsKLQotICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX2xlZ2libGVUcmFja3NGb3JNZW51LnNpemUo
KTsgaW5kZXgrKykgewotICAgICAgICBhdXRvJiB0cmFjayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnVbaW5kZXhdOwotICAgICAgICBpZiAodHJhY2sgPT0gb2ZmSXRlbSkKLSAgICAgICAgICAgIG9m
ZkluZGV4ID0gaW5kZXg7Ci0KLSAgICAgICAgaWYgKHRyYWNrID09IGF1dG9tYXRpY0l0ZW0gJiYg
ZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSkgewot
ICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJhY2tNZW51
SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaXNwbGF5TW9k
ZSAhPSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpICYmIHRyYWNrLT5tb2Rl
KCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7Ci0gICAgICAgICAgICBzZWxlY3RlZElu
ZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG9mZkl0ZW0gJiYgIXRyYWNrTWVudUl0ZW1TZWxl
Y3RlZCAmJiBkaXNwbGF5TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6Zm9yY2VkT25seUtleXdv
cmQoKSkKLSAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9mZkluZGV4OwotCi0gICAgcmV0dXJuIHNl
bGVjdGVkSW5kZXg7Ci19Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPndlYmtpdEN1cnJlbnRQbGF5YmFja1RhcmdldElz
V2lyZWxlc3MoKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8
fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAgIHJldHVybiBU
YXJnZXRUeXBlTm9uZTsKLQotICAgIHN3aXRjaCAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJv
bHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsKLSAg
ICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpOb25lOgotICAgICAgICByZXR1
cm4gVGFyZ2V0VHlwZU5vbmU7Ci0gICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlw
ZTo6QWlycGxheToKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVBaXJQbGF5OwotICAgIGNhc2Ug
TWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6OlR2b3V0OgotICAgICAgICByZXR1cm4gVGFy
Z2V0VHlwZVRWT3V0OwotICAgIH0KLX0KLQotU3RyaW5nIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRy
b2xzSG9zdCgpKQotICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNI
b3N0KCktPmV4dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKLSAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKLX0KLQotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlh
RWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCkud2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQoKm1fbWVkaWFFbGVtZW50KTsKLX0KLQotYm9vbCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNNdXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
bWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm11dGVkKCkgOiBmYWxzZTsKLX0KLQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzOTA3NWM3ODEwZGE5YjQyN2E2MTg1NGM5OTdkNTNiMzVlYjBiMWY5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyX2gKLSNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXJfaAotCi0jaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcigpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxs
c2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKCkgPSAwOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE2ODdmODE1MzA1
Y2NjMWMzMWI1NGMwMzljYjNkZGIzODUyMjliMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbF9oCi0jZGVmaW5lIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsX2gKLQot
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQ7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKT0gMDsK
LQotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFs
c2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCkg
PSAwOwotICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlkZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwgfTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKLX07Ci0KLWNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBo
YXNWaWRlb0NoYW5nZWQoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2aWRlb0RpbWVuc2lv
bnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLX07Ci0KLVdFQkNPUkVfRVhQT1JUIGJv
b2wgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgCi19Ci0KLSNlbmRpZgotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmZWUxYjlkZTI3NWNlOTgyODc4MDNhMWQ5ODRmYTIzMWNkMjEyYTNlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudF9oCi0jZGVmaW5lIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
X2gKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBBdWRp
b1RyYWNrOwotY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKLWNsYXNzIFRleHRUcmFjazsKLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OwotCi1jbGFzcyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dCgpKTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVv
RWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7Ci0gICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9F
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0VsZW1lbnQuZ2V0KCk7IH0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtdIHsgfSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURjo6RnVu
Y3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyID0gW10geyB9KTsKLSAgICAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlRm9yRXZl
bnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEV2ZW50TGlzdGVuZXImIHJocykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xp
ZW50Jikgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDbGllbnQoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZp
ZGVvR3Jhdml0eSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmdWxsc2NyZWVu
TW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvRGltZW5zaW9uczsgfQotICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9
Ci0KLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRIYXNWaWRlbyhib29s
KTsKLSAgICB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmKTsKLQotICAg
IHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFt
ZXMoKTsKLSAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lQWxsKCk7Ci0KLSAg
ICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7Ci0gICAgUmV0YWluUHRy
PFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlz
dGVuaW5nIHsgZmFsc2UgfTsKLSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xp
ZW50Kj4gbV9jbGllbnRzOwotICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07Ci0gICAgRmxv
YXRTaXplIG1fdmlkZW9EaW1lbnNpb25zOwotICAgIEZsb2F0UmVjdCBtX3ZpZGVvRnJhbWU7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51OwotICAg
IFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51OwotfTsKLQot
fQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTRmYmUwMTcwMmNjNTBlNGE0Mzlm
ODY4NWQ2NDJiNzljZDlhNDA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmgiCi0KLSNpbXBvcnQgIkRPTVdpbmRvdy5oIgotI2ltcG9ydCAiSGlzdG9y
eS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9sc0hvc3QuaCIK
LSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0
IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgotI2ltcG9y
dCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMu
aD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5r
aW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1XZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQot
ICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkK
LXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6On5XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2
aWRlb0VsZW1lbnQpCi17Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50ID09IHZpZGVvRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVt
ZW50LT52aWRlb0Z1bGxzY3JlZW5MYXllcigpKQotICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXIobnVsbHB0cik7Ci0KLSAgICBpZiAobV92aWRlb0VsZW1lbnQg
JiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2Vy
dmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJlbW92ZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgIH0KLSAgICBtX2lzTGlzdGVu
aW5nID0gZmFsc2U7Ci0KLSAgICBtX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDsKLQotICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9i
c2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmFkZEV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX2lzTGlzdGVuaW5n
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVF
dmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2
ZW50KQotewotICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC0+dHlwZSgpKTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1l
KGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgaWYgKG1fY2xpZW50
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBib29sIGFsbCA9IGV2ZW50
TmFtZSA9PSBldmVudE5hbWVBbGwoKTsKLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnRO
YW1lID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCkgewotICAgICAgICBzZXRIYXNWaWRlbyht
X3ZpZGVvRWxlbWVudCk7Ci0gICAgICAgIHNldFZpZGVvRGltZW5zaW9ucyhtX3ZpZGVvRWxlbWVu
dCA/IEZsb2F0U2l6ZShtX3ZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCBtX3ZpZGVvRWxlbWVu
dC0+dmlkZW9IZWlnaHQoKSkgOiBGbG9hdFNpemUoKSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQ
bGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXllciA9PSB2aWRlb0xh
eWVyKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IHZpZGVvTGF5ZXI7Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50
OkNHUG9pbnRNYWtlKDAsIDApXTsKLSNlbHNlCi0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIg
c2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UoMC41LCAwLjUpXTsKLSNlbmRpZgotICAgIFttX3Zp
ZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVdOwotICAgIAotICAgIGlm
ICghbV92aWRlb0VsZW1lbnQpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92aWRl
b0VsZW1lbnQtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgaWYgKG1fdmlk
ZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpICE9IG1vZGUpCi0g
ICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKLQotICAgIGlm
IChtX3ZpZGVvRWxlbWVudCAmJiBmaW5pc2hlZFdpdGhNZWRpYSAmJiBtb2RlID09IE1lZGlhUGxh
eWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKSB7Ci0gICAgICAgIGlmIChtX3ZpZGVv
RWxlbWVudC0+ZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaWYg
KERPTVdpbmRvdyogd2luZG93ID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuZG9tV2luZG93
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeSogaGlzdG9yeSA9IHdpbmRvdy0+aGlz
dG9yeSgpKQotICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LT5iYWNrKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKLXsKLSAgICBt
X3ZpZGVvRnJhbWUgPSByZWN0OwotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5k
czpDR1JlY3QocmVjdCldOwotICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCi17Ci0gICAgTWVkaWFQ
bGF5ZXI6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2
aXR5UmVzaXplQXNwZWN0OwotICAgIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHlSZXNpemUpCi0gICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxh
eWVyOjpWaWRlb0dyYXZpdHlSZXNpemU7Ci0gICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQotICAgICAgICB2aWRl
b0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGVs
c2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwpCi0gICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgCi0gICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdy
YXZpdHkodmlkZW9HcmF2aXR5KTsKLX0KLQotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gc0V2ZW50
TmFtZXM7Ci0KLSAgICBpZiAoIXNFdmVudE5hbWVzLmdldCgpLnNpemUoKSkKLSAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCk7Ci0gICAgcmV0
dXJuIHNFdmVudE5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZlbnRz
IjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotewotICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVu
dCkpOwotICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNs
aWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLWJvb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJl
dHVybiBwYWdlLT5pc1Zpc2libGUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8oYm9vbCBoYXNW
aWRlbykKLXsKLSAgICBpZiAoaGFzVmlkZW8gPT0gbV9oYXNWaWRlbykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9oYXNWaWRlbyA9IGhhc1ZpZGVvOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQg
OiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+aGFzVmlkZW9DaGFuZ2VkKG1faGFzVmlkZW8p
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0RpbWVuc2lvbnMoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgaWYg
KG1fdmlkZW9EaW1lbnNpb25zID09IHZpZGVvRGltZW5zaW9ucykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV92aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnM7Ci0KLSAgICBmb3IgKGF1
dG8mIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT52aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKG1fdmlkZW9EaW1lbnNpb25zKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ1MGQyMjllYWQxOWZmMjA1NGZmMmUyMjZlMGU1NzE3ZTllMTRiNzAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9S
TShJT1MpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgiCisj
aW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCitPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKK09CSkNfQ0xB
U1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsK
K09CSkNfQ0xBU1MgVUlXaW5kb3c7CitPQkpDX0NMQVNTIFVJVmlldzsKKworbmFtZXNwYWNlIFdU
RiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJl
Y3Q7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKK2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lv
bkNoYW5nZU9ic2VydmVyOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdAorICAgIDogcHVibGljIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAg
ICwgcHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291
bnRlZDxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4geworCitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFBsYXliYWNrU2Vz
c2lvbk1vZGVsJiBtb2RlbCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1vZGVsKSk7CisgICAgfQorICAgIHZpcnR1YWwg
flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCk7CisgICAgUGxheWJhY2tTZXNzaW9uTW9k
ZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbDsgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKKworICAgIC8vIFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNo
YW5nZWQoZG91YmxlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRU
aW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlk
ZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBv
dmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5
aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1v
ZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgb3ZlcnJpZGU7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJyaWRl
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQs
IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3Qg
U3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVycmlk
ZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBX
ZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBt
X3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQ
T1JUIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbk1vZGVsJik7
CisKKyAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xs
ZXI7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBu
dWxscHRyIH07Cit9OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTViYTkwNWE3MDE5NDk2NTc3MzE3YjEwZDUzMDAyN2ZjMWM1MTUxMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5tbQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorCisjaWYgUExBVEZPUk0oSU9T
KQorI2lmIEhBVkUoQVZLSVQpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJMb2dn
aW5nLmgiCisjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIldlYkFW
UGxheWVyQ29udHJvbGxlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lt
cG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5r
LmgiCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0KFBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKKyAgICA6IG1fcGxheWVyQ29udHJv
bGxlcihhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSkpCisgICAg
LCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKK3sKKyAgICBtb2RlbC5hZGRDbGllbnQo
KnRoaXMpOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlOnRoaXNdOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6Jm1vZGVsXTsK
KworICAgIGR1cmF0aW9uQ2hhbmdlZChtb2RlbC5kdXJhdGlvbigpKTsKKyAgICBjdXJyZW50VGlt
ZUNoYW5nZWQobW9kZWwuY3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZv
XSBzeXN0ZW1VcHRpbWVdKTsKKyAgICBidWZmZXJlZFRpbWVDaGFuZ2VkKG1vZGVsLmJ1ZmZlcmVk
VGltZSgpKTsKKyAgICByYXRlQ2hhbmdlZChtb2RlbC5pc1BsYXlpbmcoKSwgbW9kZWwucGxheWJh
Y2tSYXRlKCkpOworICAgIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChtb2RlbC5zZWVrYWJsZVJhbmdl
cygpLCBtb2RlbC5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCksIG1vZGVsLmxp
dmVVcGRhdGVJbnRlcnZhbCgpKTsKKyAgICBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKG1vZGVs
LmNhblBsYXlGYXN0UmV2ZXJzZSgpKTsKKyAgICBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQobW9kZWwuYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwuYXVkaW9NZWRp
YVNlbGVjdGVkSW5kZXgoKSk7CisgICAgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQobW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpLCBtb2RlbC5sZWdpYmxlTWVk
aWFTZWxlY3RlZEluZGV4KCkpOworICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKG1vZGVsLmV4
dGVybmFsUGxheWJhY2tFbmFibGVkKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
KCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkpOworICAgIHdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChtb2RlbC53aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZCgpKTsKK30KKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6On5Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6bnVsbHB0cl07CisgICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXRFeHRlcm5hbFBsYXliYWNrQWN0aXZlOmZhbHNlXTsKKworICAgIGludmFsaWRh
dGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmVzZXRNZWRp
YVN0YXRlKCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHJlc2V0TWVkaWFTdGF0ZV07Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdlZChk
b3VibGUgZHVyYXRpb24pCit7CisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250
cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworCisgICAgcGxheWVyQ29udHJvbGxl
ci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRl
bnREdXJhdGlvbldpdGhpbkVuZFRpbWVzID0gZHVyYXRpb247CisKKyAgICAvLyBGSVhNRTogd2Ug
dGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KKyAgICBw
bGF5ZXJDb250cm9sbGVyLmNhblBsYXkgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5Q
YXVzZSA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVT
OworICAgIHBsYXllckNvbnRyb2xsZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAgIHBsYXll
ckNvbnRyb2xsZXIuY2FuU2VlayA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9
IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5OworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRU
aW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1l
U3RhbXAgPSAhW21fcGxheWVyQ29udHJvbGxlciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7Cisg
ICAgQVZWYWx1ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVl
VGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCisgICAgICAgIGFuY2hvclRpbWVTdGFt
cDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsKKworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0
VGltaW5nOnRpbWluZ107Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBXZWJBVlBs
YXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0
KCk7CisgICAgZG91YmxlIGR1cmF0aW9uID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRp
b247CisgICAgZG91YmxlIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWU7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IDA7CisgICAgZWxzZQorICAgICAg
ICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247CisgICAg
cGxheWVyQ29udHJvbGxlci5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVkQnVm
ZmVyZWRUaW1lKV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJh
dGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRU
aW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gc2Vla2FibGVSYW5nZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0
aCgpOyBpKyspIHsKKyAgICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJhbmdlcy5zdGFydChpKS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMuZW5k
KGkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworCisgICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0g
Q01UaW1lUmFuZ2VNYWtlKENNVGltZU1ha2VXaXRoU2Vjb25kcyhzdGFydCwgMTAwMCksIENNVGlt
ZU1ha2VXaXRoU2Vjb25kcyhlbmQtc3RhcnQsIDEwMDApKTsKKyAgICAgICAgW3NlZWthYmxlUmFu
Z2VzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOworICAg
IH0KKworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnNlZWth
YmxlUmFuZ2VzLmdldCgpXTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGlt
ZVJhbmdlc0xhc3RNb2RpZmllZFRpbWU6IGxhc3RNb2RpZmllZFRpbWVdOworICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0TGl2ZVVwZGF0ZUludGVydmFsOmxpdmVVcGRhdGVJbnRlcnZhbF07Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit7CisgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKK30KKworc3RhdGlj
IFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCit7CisgICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7CisgICAgZm9yIChhdXRvJiBvcHRp
b24gOiBvcHRpb25zKSB7CisgICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlhU2VsZWN0aW9uT3B0
aW9uPiB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxv
Y10gaW5pdF0pOworICAgICAgICBbd2ViT3B0aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9w
dGlvbi5kaXNwbGF5TmFtZV07CisgICAgICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRp
b24uZ2V0KCldOworICAgIH0KKyAgICByZXR1cm4gd2ViT3B0aW9uczsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRp
b25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOworICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07Cisg
ICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisgICAgICAgIFttX3Bs
YXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9w
dGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4
KV1dOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25z
KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnM6d2ViT3B0aW9ucy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9u
cyBjb3VudF0pCisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0
PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUs
IGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBBVlBsYXllckNvbnRy
b2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZSBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVy
Q29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlTm9uZTsKKyAgICBpZiAodGFyZ2V0VHlwZSA9
PSBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCisgICAgICAgIGV4dGVy
bmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVB
aXJQbGF5OworICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6
OlRhcmdldFR5cGVUVk91dCkKKyAgICAgICAgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXll
ckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0OworCisgICAgV2ViQVZQbGF5ZXJD
b250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwor
ICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6
ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVy
bmFsUGxheWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7CisgICAgcGxheWVyQ29udHJv
bGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFu
Z2VkKGJvb2wgZGlzYWJsZWQpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRBbGxvd3NF
eHRlcm5hbFBsYXliYWNrOiFkaXNhYmxlZF07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQoreworICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0TXV0ZWQ6bXV0ZWRdOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9k
ZWwpCisgICAgICAgIHJldHVybjsKKworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdh
dGU6bnVsbHB0cl07CisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0
aGlzKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKK30KKworfQorCisj
ZW5kaWYgLy8gSEFWRShBVktJVCkKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyNzcxMDNjMzQxMWE5MzA5YzhmYzUyNDkzNjViZjA1ODUx
NDY1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAi
SFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2lu
Y2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW5jbHVkZSAiVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KKworT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBV
SVZpZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBVSVdpbmRvdzsKK09CSkNfQ0xBU1MgVUlWaWV3
OworT0JKQ19DTEFTUyBDQUxheWVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7
CitPQkpDX0NMQVNTIFdlYkFWUGxheWVyTGF5ZXJWaWV3OworT0JKQ19DTEFTUyBXZWJBVlBsYXll
ckxheWVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7CisK
K25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBJbnRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgVmlkZW9GdWxsc2NyZWVu
TW9kZWw7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKKyAgICAKK2NsYXNz
IFdFQkNPUkVfRVhQT1JUIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IGZpbmFsCisgICAg
OiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQmKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlk
ZW9GdWxsc2NyZWVuTW9kZWwqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7Cisg
ICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7
IH0KKworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworCisg
ICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERl
dmljZU5hbWUpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldHVw
RnVsbHNjcmVlbihVSVZpZXcmLCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICos
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBlbnRlckZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhp
dEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IElu
dFJlY3QmIGlubGluZVJlY3QpOworCisgICAgZW51bSBjbGFzcyBFeGl0RnVsbFNjcmVlblJlYXNv
biB7CisgICAgICAgIERvbmVCdXR0b25UYXBwZWQsCisgICAgICAgIEZ1bGxTY3JlZW5CdXR0b25U
YXBwZWQsCisgICAgICAgIFBpbmNoR2VzdHVyZUhhbmRsZWQsCisgICAgICAgIFJlbW90ZUNvbnRy
b2xTdG9wRXZlbnRSZWNlaXZlZCwKKyAgICAgICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQKKyAg
ICB9OworCisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyByZXR1cm4g
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQorICAgIGJvb2wgc2hvdWxkRXhpdEZ1bGxzY3JlZW5X
aXRoUmVhc29uKEV4aXRGdWxsU2NyZWVuUmVhc29uKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQor
ICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKCkgY29uc3QgeyByZXR1cm4g
bV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7Cisg
ICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJv
b2wpPiYmIGNhbGxiYWNrKTsKKyAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
KCkgY29uc3Q7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOworCisgICAg
dm9pZCB3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBkaWRTdGFydFBpY3R1
cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7
CisgICAgdm9pZCB3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGRpZFN0b3BQ
aWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0
b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXikoQk9PTCkpOworCisgICAgdm9pZCBzZXRN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9p
ZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsK
KyAgICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7IH0KKyAgICBib29sIGlzTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlID09IG1vZGU7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQ
T1JUIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0Jik7CisgICAgdm9pZCBiZWdpblNlc3Npb24oKTsKKyAgICB2b2lkIGVudGVyUGljdHVy
ZUluUGljdHVyZSgpOworICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKKyAgICB2
b2lkIHdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxh
eWVyQ29udHJvbGxlcigpIGNvbnN0OworCisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyAgICBSZXRhaW5QdHI8V2ViQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdh
dGU7CisgICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0Nv
bnRyb2xsZXI7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwgeyBudWxscHRyIH07CisgICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhlc2UgYXJlIG9u
bHkgdXNlZCB3aGVuIGZ1bGxzY3JlZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2luZG93
LgorICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV93aW5kb3c7CisgICAgUmV0YWluUHRyPFVJVmll
d0NvbnRyb2xsZXI+IG1fdmlld0NvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFVJVmlldz4gbV9w
YXJlbnRWaWV3OworICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV9wYXJlbnRXaW5kb3c7CisgICAg
UmV0YWluUHRyPFdlYkFWUGxheWVyTGF5ZXJWaWV3PiBtX3BsYXllckxheWVyVmlldzsKKyAgICBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OworICAgIFdURjo6RnVu
Y3Rpb248dm9pZChib29sKT4gbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjazsKKyAgICBSdW5Mb29w
OjpUaW1lcjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV93YXRjaGRvZ1RpbWVyOwor
ICAgIGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZXhpdENvbXBsZXRl
ZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2VudGVyUmVxdWVzdGVkIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBt
X3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1
cmVTdG9wIHsgZmFsc2UgfTsKKworICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4oKTsKK307CisK
K30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9W
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWVjZTYz
NjYwOGUxNGFiNjliNjMwNjE1ZmZmMGI1NjAwYjBhZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
CkBAIC0wLDAgKzEsMTA0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0oSU9TKQor
I2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKworI2lmIEhBVkUoQVZL
SVQpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJHZW9tZXRyeVV0aWxpdGllcy5o
IgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgorI2ltcG9ydCAi
VGltZVJhbmdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIK
KyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW1wb3J0ICJXZWJBVlBsYXllckNv
bnRyb2xsZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQg
PEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CisjaW1wb3J0
IDxvYmpjL21lc3NhZ2UuaD4KKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBTb2Z0
LWxpbmtpbmcgaGVhZGVycyBtdXN0IGJlIGluY2x1ZGVkIGxhc3Qgc2luY2UgdGhleSAjZGVmaW5l
IGZ1bmN0aW9ucywgY29uc3RhbnRzLCBldGMuCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5o
IgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhB
VkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0
aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX0NP
TlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgTlNT
dHJpbmcgKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3RGaWxsLCBOU1N0cmluZyAqKQorCitTT0ZUX0xJTktfRlJBTUVXT1JL
X09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBpY3R1
cmVJblBpY3R1cmVDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBB
VlBsYXllclZpZXdDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBf
X0FWUGxheWVyTGF5ZXJWaWV3KQorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQorU09GVF9M
SU5LX0NMQVNTKFVJS2l0LCBVSUFwcGxpY2F0aW9uKQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBV
SVNjcmVlbikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlXaW5kb3cpCitTT0ZUX0xJTktfQ0xB
U1MoVUlLaXQsIFVJVmlldykKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3Q29udHJvbGxl
cikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlDb2xvcikKK1NPRlRfTElOS19DT05TVEFOVChV
SUtpdCwgVUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCwgVUlXaW5kb3dM
ZXZlbCkKKworc3RhdGljIFVJQ29sb3IgKmNsZWFyVUlDb2xvcigpCit7CisgICAgcmV0dXJuIChV
SUNvbG9yICopW2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdOworfQorCisjaWYgIUxPR19E
SVNBQkxFRAorc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCit7CisgICAg
cmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0
IFNlY29uZHMgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCB7IDFfcyB9OworCitAY2xhc3Mg
V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbjsKKworQGludGVyZmFjZSBXZWJBVlBsYXllclZpZXdD
b250cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdCA8QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVn
YXRlX1dlYktpdE9ubHk+IHsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOworfQorQHByb3BlcnR5IChhc3NpZ24pIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOworLSAoQk9PTClwbGF5
ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250
cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJv
bGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNvbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQorLSAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAgICByZXR1cm4gX2Z1bGxzY3Jl
ZW5JbnRlcmZhY2UuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZToo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAg
ICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Cit9CisKKy0gKHZv
aWQpcGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXll
clZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURfUEFS
QU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+
d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdDb250
cm9sbGVyRGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICop
cGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRy
b2xsZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJGYWlsZWRUb1N0YXJ0
UGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250
cm9sbGVyIHdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKHBs
YXllclZpZXdDb250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIHNlbGYu
ZnVsbHNjcmVlbkludGVyZmFjZS0+ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30K
KworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdG9wUGljdHVyZUluUGljdHVyZToo
QVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5V
U0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRl
cmZhY2UtPndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZp
ZXdDb250cm9sbGVyRGlkU3RvcFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xs
ZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3
Q29udHJvbGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdG9wUGljdHVy
ZUluUGljdHVyZSgpOworfQorCitzdGF0aWMgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OkV4aXRGdWxsU2NyZWVuUmVhc29uIGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKEFWUGxh
eWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCit7CisgICAgc3dp
dGNoIChyZWFzb24pIHsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNj
cmVlblJlYXNvbkRvbmVCdXR0b25UYXBwZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQ7
CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25GdWxs
U2NyZWVuQnV0dG9uVGFwcGVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpGdWxsU2NyZWVuQnV0dG9uVGFwcGVkOwor
ICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGljdHVy
ZUluUGljdHVyZVN0YXJ0ZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVkOwor
ICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGluY2hH
ZXN0dXJlSGFuZGxlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGluY2hHZXN0dXJlSGFuZGxlZDsKKyAgICBjYXNl
IEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblJlbW90ZUNvbnRyb2xT
dG9wRXZlbnRSZWNlaXZlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2Vp
dmVkOworICAgIH0KK30KKworLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJW
aWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVu
V2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJl
YXNvbgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgcmV0
dXJuIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVh
c29uKGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKHJlYXNvbikpOworfQorCistICh2b2lk
KXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmll
d0NvbnRyb2xsZXIgcmVzdG9yZVVzZXJJbnRlcmZhY2VGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdp
dGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCByZXN0b3JlZCkpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNl
bGYuZnVsbHNjcmVlbkludGVyZmFjZS0+cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0
aENvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyKTsKK30KK0BlbmQKKworQGludGVy
ZmFjZSBXZWJBVlBsYXllckxheWVyIDogQ0FMYXllcgorQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbikgTlNTdHJpbmcgKnZpZGVvR3Jhdml0eTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0
ZXI9aXNSZWFkeUZvckRpc3BsYXkpIEJPT0wgcmVhZHlGb3JEaXNwbGF5OworQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3Jl
ZW5JbnRlcmZhY2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBBVlBsYXllckNvbnRy
b2xsZXIgKnBsYXllckNvbnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBD
QUxheWVyICp2aWRlb1N1YmxheWVyOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIG51bGxh
YmxlKSBOU0RpY3Rpb25hcnkgKnBpeGVsQnVmZmVyQXR0cmlidXRlczsKK0Bwcm9wZXJ0eSBDR1Np
emUgdmlkZW9EaW1lbnNpb25zOworQHByb3BlcnR5IENHUmVjdCBtb2RlbFZpZGVvTGF5ZXJGcmFt
ZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyTGF5ZXIgeworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7Cisg
ICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gX2F2UGxheWVyQ29udHJvbGxlcjsK
KyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX3ZpZGVvU3VibGF5ZXI7CisgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBfdmlkZW9HcmF2aXR5OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKHNlbGYpIHsKKyAgICAgICAgW3NlbGYgc2V0
TWFza3NUb0JvdW5kczpZRVNdOworICAgICAgICBfdmlkZW9HcmF2aXR5ID0gZ2V0QVZMYXllclZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClkZWFsbG9jCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJl
cXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSBv
YmplY3Q6bmlsXTsKKyAgICBbX3BpeGVsQnVmZmVyQXR0cmlidXRlcyByZWxlYXNlXTsKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKy0gKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Kilm
dWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNlLmdl
dCgpOworfQorCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgX2Z1bGxzY3JlZW5J
bnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOworfQorCistIChBVlBsYXllckNvbnRyb2xs
ZXIgKilwbGF5ZXJDb250cm9sbGVyCit7CisgICAgcmV0dXJuIChBVlBsYXllckNvbnRyb2xsZXIg
KilfYXZQbGF5ZXJDb250cm9sbGVyLmdldCgpOworfQorCistICh2b2lkKXNldFBsYXllckNvbnRy
b2xsZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKK3sKKyAgICBBU1NF
UlQoIXBsYXllckNvbnRyb2xsZXIgfHwgW3BsYXllckNvbnRyb2xsZXIgaXNLaW5kT2ZDbGFzczpb
V2ViQVZQbGF5ZXJDb250cm9sbGVyIGNsYXNzXV0pOworICAgIF9hdlBsYXllckNvbnRyb2xsZXIg
PSAoV2ViQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcjsKK30KKworLSAodm9p
ZClzZXRWaWRlb1N1YmxheWVyOihDQUxheWVyICopdmlkZW9TdWJsYXllcgoreworICAgIF92aWRl
b1N1YmxheWVyID0gdmlkZW9TdWJsYXllcjsKK30KKworLSAoQ0FMYXllciopdmlkZW9TdWJsYXll
cgoreworICAgIHJldHVybiBfdmlkZW9TdWJsYXllci5nZXQoKTsKK30KKworLSAodm9pZClsYXlv
dXRTdWJsYXllcnMKK3sKKyAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5ZXJdICE9IHNl
bGYpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVs
ZWdhdGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBbX3ZpZGVvU3VibGF5ZXIgc2V0UG9zaXRp
b246Q0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChzZWxmLmJvdW5kcyksIENHUmVjdEdldE1pZFko
c2VsZi5ib3VuZHMpKV07CisKKyAgICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0IDw9
IDAgfHwgc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRmxvYXRSZWN0IHNvdXJjZVZpZGVvRnJhbWU7CisgICAgRmxvYXRSZWN0IHRhcmdldFZp
ZGVvRnJhbWU7CisgICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlkZW9EaW1lbnNp
b25zLndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0OworICAgIAorICAgIGlmIChb
Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVv
R3Jhdml0eV0pIHsKKyAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IHNlbGYubW9kZWxWaWRlb0xh
eWVyRnJhbWU7CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzZWxmLmJvdW5kczsKKyAgICB9
IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkgaXNFcXVhbFRv
U3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgeworICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0g
bGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNl
bGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gbGFy
Z2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYu
Ym91bmRzKTsKKyAgICB9IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsKKyAgICAgICAg
c291cmNlVmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3Qo
dmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7CisgICAgICAgIHNl
bGYubW9kZWxWaWRlb0xheWVyRnJhbWUgPSBDR1JlY3RNYWtlKDAsIDAsIHNvdXJjZVZpZGVvRnJh
bWUud2lkdGgoKSwgc291cmNlVmlkZW9GcmFtZS5oZWlnaHQoKSk7CisgICAgICAgIEFTU0VSVChf
ZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7CisgICAgICAgIF9mdWxsc2NyZWVuSW50ZXJm
YWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFt
ZSk7CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0
aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBVSVZpZXcgKnZpZXcgPSAoVUlW
aWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSh0YXJnZXRWaWRlb0ZyYW1lLndp
ZHRoKCkgLyBzb3VyY2VWaWRlb0ZyYW1lLndpZHRoKCksIHRhcmdldFZpZGVvRnJhbWUuaGVpZ2h0
KCkgLyBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKKyAgICBbdmlldyBzZXRUcmFuc2Zvcm06
dHJhbnNmb3JtXTsKKyAgICAKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmltYXRpb25EdXJhdGlvbiA9
IFtDQVRyYW5zYWN0aW9uIGFuaW1hdGlvbkR1cmF0aW9uXTsKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeIHsKKyAgICAgICAgW05TT2JqZWN0IGNhbmNlbFBy
ZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihy
ZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKKworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0
b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6YW5p
bWF0aW9uRHVyYXRpb24gKyAwLjFdOworICAgIH0pOworfQorCistICh2b2lkKXJlc29sdmVCb3Vu
ZHMKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwor
ICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKFtfdmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBzZWxmKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0KHNlbGYubW9kZWxW
aWRlb0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pICYmIENHQWZmaW5lVHJhbnNmb3JtSXNJZGVu
dGl0eShbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0gdHJhbnNmb3JtXSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NB
VHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07CisgICAgW0NBVHJhbnNhY3Rpb24g
c2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAKKyAgICBpZiAoIUNHUmVjdEVxdWFsVG9SZWN0
KHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pKSB7CisgICAgICAgIHNl
bGYubW9kZWxWaWRlb0xheWVyRnJhbWUgPSBbc2VsZiBib3VuZHNdOworICAgICAgICBBU1NFUlQo
X2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOworICAgICAgICBfZnVsbHNjcmVlbkludGVy
ZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKHNlbGYubW9kZWxWaWRlb0xheWVyRnJh
bWUpOworICAgIH0KKyAgICBbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0gc2V0
VHJhbnNmb3JtOkNHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHldOworICAgIAorICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9HcmF2aXR5OihOU1N0cmluZyAq
KXZpZGVvR3Jhdml0eQoreworICAgIF92aWRlb0dyYXZpdHkgPSB2aWRlb0dyYXZpdHk7CisgICAg
CisgICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCisgICAgICAgIHJldHVy
bjsKKworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jh
dml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVB
c3BlY3Q7CisgICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVz
aXplKCkpCisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5UmVzaXplOworICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpKQorICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlm
ICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwo
KSkKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgCisgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgp
KTsKKyAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZp
dHkoZ3Jhdml0eSk7Cit9CisKKy0gKE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Cit7CisgICAgcmV0
dXJuIF92aWRlb0dyYXZpdHkuZ2V0KCk7Cit9CisKKy0gKENHUmVjdCl2aWRlb1JlY3QKK3sKKyAg
ICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0gMCB8fCBzZWxmLnZpZGVvRGltZW5z
aW9ucy5oZWlnaHQgPD0gMCkKKyAgICAgICAgcmV0dXJuIHNlbGYuYm91bmRzOworICAgIAorICAg
IGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCAvIHNl
bGYudmlkZW9EaW1lbnNpb25zLmhlaWdodDsKKworICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pCisg
ICAgICAgIHJldHVybiBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9B
c3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOworICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdEZpbGwoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKQor
ICAgICAgICByZXR1cm4gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRl
b0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisKKyAgICByZXR1cm4gc2VsZi5ib3VuZHM7Cit9
CisKKysgKE5TU2V0ICopa2V5UGF0aHNGb3JWYWx1ZXNBZmZlY3RpbmdWaWRlb1JlY3QKK3sKKyAg
ICByZXR1cm4gW05TU2V0IHNldFdpdGhPYmplY3RzOkAidmlkZW9EaW1lbnNpb25zIiwgQCJ2aWRl
b0dyYXZpdHkiLCBuaWxdOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViQVZQaWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3IDogVUlWaWV3CitAZW5kCisKK3N0YXRpYyBDbGFzcyBXZWJB
VlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQorewor
ICAgIHJldHVybiBbV2ViQVZQbGF5ZXJMYXllciBjbGFzc107Cit9CisKK3N0YXRpYyBDbGFzcyBn
ZXRXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdDbGFzcygpCit7CisgICAgc3Rh
dGljIENsYXNzIHRoZUNsYXNzID0gbmlsOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25j
ZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7CisgICAgICAgIHRoZUNs
YXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihnZXRVSVZpZXdDbGFzcygpLCAiV2ViQVZQaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3IiwgMCk7CisgICAgICAgIG9iamNfcmVnaXN0ZXJD
bGFzc1BhaXIodGhlQ2xhc3MpOworICAgICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1l
dGFDbGFzcygiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Iik7CisgICAgICAg
IGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClX
ZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOwor
ICAgIH0pOworICAgIAorICAgIHJldHVybiB0aGVDbGFzczsKK30KKworQGludGVyZmFjZSBXZWJB
VlBsYXllckxheWVyVmlldyA6IF9fQVZQbGF5ZXJMYXllclZpZXcKK0Bwcm9wZXJ0eSAocmV0YWlu
KSBVSVZpZXcqIHZpZGVvVmlldzsKK0BlbmQKKworc3RhdGljIENsYXNzIFdlYkFWUGxheWVyTGF5
ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKK3sKKyAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5
ZXIgY2xhc3NdOworfQorCitzdGF0aWMgQVZQbGF5ZXJDb250cm9sbGVyICpXZWJBVlBsYXllckxh
eWVyVmlld19wbGF5ZXJDb250cm9sbGVyKGlkIGFTZWxmLCBTRUwpCit7CisgICAgX19BVlBsYXll
ckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsKKyAgICBXZWJBVlBsYXllckxheWVyICp3
ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXIgcGxheWVy
TGF5ZXJdOworICAgIHJldHVybiBbd2ViQVZQbGF5ZXJMYXllciBwbGF5ZXJDb250cm9sbGVyXTsK
K30KKworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxl
cihpZCBhU2VsZiwgU0VMLCBBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIpCit7
CisgICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAg
V2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICop
W3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0
UGxheWVyQ29udHJvbGxlcjogcGxheWVyQ29udHJvbGxlcl07Cit9CisKK3N0YXRpYyBVSVZpZXcg
KldlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldyhpZCBhU2VsZiwgU0VMKQoreworICAgIF9f
QVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyID0gYVNlbGY7CisgICAgV2ViQVZQbGF5ZXJM
YXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVy
IHBsYXllckxheWVyXTsKKyAgICBDQUxheWVyKiB2aWRlb0xheWVyID0gW3dlYkFWUGxheWVyTGF5
ZXIgdmlkZW9TdWJsYXllcl07CisgICAgaWYgKCF2aWRlb0xheWVyIHx8ICF2aWRlb0xheWVyLmRl
bGVnYXRlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChbW3ZpZGVvTGF5ZXIgZGVs
ZWdhdGVdIGlzS2luZE9mQ2xhc3M6Z2V0VUlWaWV3Q2xhc3MoKV0pOworICAgIHJldHVybiAoVUlW
aWV3ICopW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdOworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXll
ckxheWVyVmlld19zZXRWaWRlb1ZpZXcoaWQgYVNlbGYsIFNFTCwgVUlWaWV3ICp2aWRlb1ZpZXcp
Cit7CisgICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Cisg
ICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVy
ICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAgW3dlYkFWUGxheWVyTGF5ZXIg
c2V0VmlkZW9TdWJsYXllcjpbdmlkZW9WaWV3IGxheWVyXV07Cit9CisKK3N0YXRpYyB2b2lkIFdl
YkFWUGxheWVyTGF5ZXJWaWV3X3N0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCit7CisgICAgV2ViQVZQbGF5ZXJMYXllclZpZXcg
KnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwor
CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAq
KVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBp
cFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07CisgICAg
W3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0KCldOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb1N1YmxheWVyOnBsYXllckxh
eWVyLnZpZGVvU3VibGF5ZXJdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lv
bnM6cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNpb25zXTsKKyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0
VmlkZW9HcmF2aXR5OnBsYXllckxheWVyLnZpZGVvR3Jhdml0eV07CisgICAgW3BpcFBsYXllckxh
eWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBsYXllckxheWVyLm1vZGVsVmlkZW9MYXllckZy
YW1lXTsKKyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0UGxheWVyQ29udHJvbGxlcjpwbGF5ZXJMYXll
ci5wbGF5ZXJDb250cm9sbGVyXTsKKyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0RnVsbHNjcmVlbklu
dGVyZmFjZTpwbGF5ZXJMYXllci5mdWxsc2NyZWVuSW50ZXJmYWNlXTsKKyAgICBbcGlwVmlldyBh
ZGRTdWJ2aWV3OnBsYXllckxheWVyVmlldy52aWRlb1ZpZXddOworfQorCitzdGF0aWMgdm9pZCBX
ZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCit7CisgICAgV2ViQVZQbGF5ZXJMYXllclZpZXcg
KnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIGlmIChVSVZpZXcgKnZpZGVvVmlldyA9IHBs
YXllckxheWVyVmlldy52aWRlb1ZpZXcpCisgICAgICAgIFtwbGF5ZXJMYXllclZpZXcgYWRkU3Vi
dmlldzp2aWRlb1ZpZXddOworICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxh
eWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOworICAgIFdlYkFW
UGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5
ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXll
ciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOworICAgIFtwbGF5ZXJMYXll
ciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpwaXBQbGF5ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJG
cmFtZV07Cit9CisKK3N0YXRpYyBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcg
KldlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQg
YVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3
ID0gYVNlbGY7CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBW
aWV3ID0gW3BsYXllckxheWVyVmlldyB2YWx1ZUZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3Il07CisgICAgaWYgKCFwaXBWaWV3KSB7CisgICAgICAgIHBpcFZpZXcgPSBb
W2dldFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld0NsYXNzKCkgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0WmVyb107CisgICAgICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0VmFs
dWU6cGlwVmlldyBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOwor
ICAgIH0KKyAgICByZXR1cm4gcGlwVmlldzsKK30KKworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJM
YXllclZpZXdfZGVhbGxvYyhpZCBhU2VsZiwgU0VMKQoreworICAgIFdlYkFWUGxheWVyTGF5ZXJW
aWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBSZXRhaW5QdHI8V2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3PiBwaXBWaWV3ID0gYWRvcHROUyhbcGxheWVyTGF5ZXJW
aWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXSk7Cisg
ICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1ZTpuaWwgZm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXciXTsKKyAgICBvYmpjX3N1cGVyIHN1cGVyQ2xhc3MgeyBwbGF5ZXJM
YXllclZpZXcsIGdldF9fQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpIH07CisgICAgYXV0byBzdXBl
cl9kZWFsbG9jID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKG9iamNfc3VwZXIqLCBTRUwpPihv
YmpjX21zZ1NlbmRTdXBlcik7CisgICAgc3VwZXJfZGVhbGxvYygmc3VwZXJDbGFzcywgQHNlbGVj
dG9yKGRlYWxsb2MpKTsKK30KKworI3ByYWdtYSBtYXJrIC0gTWV0aG9kcworCitzdGF0aWMgQ2xh
c3MgZ2V0V2ViQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpCit7CisgICAgc3RhdGljIENsYXNzIHRo
ZUNsYXNzID0gbmlsOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAg
IGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7CisgICAgICAgIHRoZUNsYXNzID0gb2JqY19h
bGxvY2F0ZUNsYXNzUGFpcihnZXRfX0FWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSwgIldlYkFWUGxh
eWVyTGF5ZXJWaWV3IiwgMCk7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNl
bGVjdG9yKGRlYWxsb2MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MsICJ2QDoi
KTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0UGxheWVy
Q29udHJvbGxlcjopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xs
ZXIsICJ2QDpAIik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9y
KHBsYXllckNvbnRyb2xsZXIpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BsYXllckNvbnRy
b2xsZXIsICJAQDoiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0
b3Ioc2V0VmlkZW9WaWV3OiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3
LCAidkA6QCIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcih2
aWRlb1ZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldywgIkBAOiIpOwor
ICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzdGFydFJvdXRpbmdW
aWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJM
YXllclZpZXdfc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcsICJ2QDoiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Io
c3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVAp
V2ViQVZQbGF5ZXJMYXllclZpZXdfc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlldywgInZAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3Ms
IEBzZWxlY3RvcihwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBs
YXllckxheWVyVmlld19waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAiQEA6Iik7Cisg
ICAgICAgIAorICAgICAgICBjbGFzc19hZGRJdmFyKHRoZUNsYXNzLCAiX3BpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXciLCBzaXplb2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3ICopLCBsb2cyKHNpemVvZihXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcgKikpLCAiQCIpOworICAgICAgICAKKyAgICAgICAgb2JqY19yZWdpc3RlckNsYXNzUGFpcih0
aGVDbGFzcyk7CisgICAgICAgIENsYXNzIG1ldGFDbGFzcyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJX
ZWJBVlBsYXllckxheWVyVmlldyIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QobWV0YUNsYXNz
LCBAc2VsZWN0b3IobGF5ZXJDbGFzcyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJD
bGFzcywgIkBAOiIpOworICAgIH0pOworICAgIHJldHVybiB0aGVDbGFzczsKK30KKworUmVmPFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6Y3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UpCit7CisgICAgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBpbnRl
cmZhY2UgPSBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KHBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgIFtpbnRlcmZhY2UtPm1fcGxheWVyVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOmludGVyZmFjZS5wdHIoKV07Cisg
ICAgcmV0dXJuIGludGVyZmFjZTsKK30KKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgOiBtX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgLCBtX3BsYXllclZpZXdDb250
cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pKQorICAgICwgbV93YXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwg
dGhpcywgJlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQp
Cit7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKQoreworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29u
dHJvbGxlciA9IHRoaXMtPnBsYXllckNvbnRyb2xsZXIoKTsKKyAgICBpZiAocGxheWVyQ29udHJv
bGxlciAmJiBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUpCisgICAgICAg
IGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGZhbHNlLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFy
Z2V0VHlwZU5vbmUsICIiKTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAg
ICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKK30KKworV2Vi
QVZQbGF5ZXJDb250cm9sbGVyICpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cGxheWVy
Q29udHJvbGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlLT5wbGF5ZXJDb250cm9sbGVyKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBt
b2RlbCkKK3sKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKworICAgIG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwgPSBtb2RlbDsKKworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOworCisgICAg
aGFzVmlkZW9DaGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsLT5oYXNWaWRlbygpIDogZmFsc2UpOworICAgIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnZpZGVvRGlt
ZW5zaW9ucygpIDogRmxvYXRTaXplKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCit7CisgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIgPSBvYnNlcnZlcjsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit7CisgICAgW3BsYXllckNvbnRyb2xs
ZXIoKSBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlkZW9dOworICAgIFtwbGF5ZXJDb250cm9sbGVy
KCkgc2V0SGFzVmlkZW86aGFzVmlkZW9dOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9E
aW1lbnNpb25zKQoreworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFW
UGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworCisgICAgW3Bs
YXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOworICAgIFtwbGF5
ZXJDb250cm9sbGVyKCkgc2V0Q29udGVudERpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKKyAg
ICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0TmVlZHNMYXlvdXRdOworCisgICAgV2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldyAqKVttX3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3XTsKKyAgICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChX
ZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOworICAgIFtwaXBQbGF5ZXJMYXllciBz
ZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNpb25zXTsKKyAgICBbcGlw
VmlldyBzZXROZWVkc0xheW91dF07Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQorewor
ICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRkZW46ZW5hYmxlZF07Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkK
K3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojph
cHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlzKTsKKyAgICBpZiAobV9zaG91bGRS
ZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCAmJiBtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmlzVmlzaWJsZSgpKSB7CisgICAg
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHdlIGFyZSBib3RoIGluIFBpUCBhbmQgaW4g
RnVsbHNjcmVlbiAoaS5lLiwgdmlhIGF1dG8tUGlQKSwgYW5kIHdlIGRpZCBub3Qgc3RvcCBmdWxs
c2NyZWVuIHVwb24gcmV0dXJuaW5nLCBpdCBtdXN0IGJlCisgICAgLy8gYmVjYXVzZSB0aGUgb3Jp
Z2luYXRpbmcgdmlldyBpcyBub3QgdmlzaWJsZSwgc28gaGlkZSB0aGUgZnVsbHNjcmVlbiB3aW5k
b3cuCisgICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVTdGFuZGFyZCB8IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVBpY3R1cmVJblBpY3R1cmUpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJv
dGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBbbV93aW5k
b3cgc2V0SGlkZGVuOllFU107CisgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
dmlld10gc2V0SGlkZGVuOllFU107CisgICAgICAgIH1dOworICAgIH0KK30KKworQGludGVyZmFj
ZSBVSVdpbmRvdyAoKQorLSAoQk9PTClfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzOworQGVuZAor
CitAaW50ZXJmYWNlIFVJVmlld0NvbnRyb2xsZXIgKCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBh
c3NpZ24sIHNldHRlcj1fc2V0SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOikgQk9PTCBf
aWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOworQGVuZAorCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiB2aWRlb1ZpZXcsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcqIHBhcmVudFZpZXcsIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93
c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3sKKyAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICBMT0coRnVsbHNj
cmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oJXAp
IiwgdGhpcyk7CisKKyAgICBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayA9IGFsbG93
c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIGJvb2wgaXNJ
blBpY3R1cmVJblBpY3R1cmVNb2RlID0gaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICBtX21vZGUgPSBtb2RlOwor
ICAgIG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBwYXJl
bnRWaWV3LndpbmRvdzsKKworICAgIGlmICghW1twYXJlbnRWaWV3IHdpbmRvd10gX2lzSG9zdGVk
SW5Bbm90aGVyUHJvY2Vzc10pIHsKKyAgICAgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgICAg
IG1fd2luZG93ID0gYWRvcHROUyhbYWxsb2NVSVdpbmRvd0luc3RhbmNlKCkgaW5pdFdpdGhGcmFt
ZTpbW2dldFVJU2NyZWVuQ2xhc3MoKSBtYWluU2NyZWVuXSBib3VuZHNdXSk7CisgICAgICAgIFtt
X3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgICAgICBpZiAo
IW1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3ZpZXdDb250cm9sbGVyID0gYWRvcHRO
UyhbYWxsb2NVSVZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0XSk7CisgICAgICAgIFtbbV92
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbbV93aW5kb3cgYm91bmRzXV07CisgICAgICAg
IFttX3ZpZXdDb250cm9sbGVyIF9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6WUVT
XTsKKyAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjptX3ZpZXdDb250cm9s
bGVyLmdldCgpXTsKKyAgICAgICAgW21fd2luZG93IHNldFdpbmRvd0xldmVsOmdldFVJVGV4dEVm
ZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwoKSArIDFdOworICAgICAgICBbbV93aW5k
b3cgbWFrZUtleUFuZFZpc2libGVdOworICAgIH0KKworICAgIGlmICghbV9wbGF5ZXJMYXllclZp
ZXcpCisgICAgICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gYWRvcHROUyhbW2dldFdlYkFWUGxheWVy
TGF5ZXJWaWV3Q2xhc3MoKSBhbGxvY10gaW5pdF0pOworICAgIFttX3BsYXllckxheWVyVmlldyBz
ZXRIaWRkZW46W3BsYXllckNvbnRyb2xsZXIoKSBpc0V4dGVybmFsUGxheWJhY2tBY3RpdmVdXTsK
KyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigp
XTsKKworICAgIGlmICghaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlKSB7CisgICAgICAgIFttX3Bs
YXllckxheWVyVmlldyBzZXRWaWRlb1ZpZXc6JnZpZGVvVmlld107CisgICAgICAgIFttX3BsYXll
ckxheWVyVmlldyBhZGRTdWJ2aWV3OiZ2aWRlb1ZpZXddOworICAgIH0KKworICAgIFdlYkFWUGxh
eWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXll
clZpZXcgcGxheWVyTGF5ZXJdOworCisgICAgW3BsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXll
ckZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgaW5pdGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJlY3Qu
aGVpZ2h0KCkpXTsKKyAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOltwbGF5ZXJD
b250cm9sbGVyKCkgY29udGVudERpbWVuc2lvbnNdXTsKKyAgICBwbGF5ZXJMYXllci5mdWxsc2Ny
ZWVuSW50ZXJmYWNlID0gdGhpczsKKworICAgIGlmICghbV9wbGF5ZXJWaWV3Q29udHJvbGxlcikK
KyAgICAgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jQVZQbGF5ZXJW
aWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhQbGF5ZXJMYXllclZpZXc6bV9wbGF5ZXJM
YXllclZpZXcuZ2V0KCldKTsKKworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dz
UGxheWJhY2tDb250cm9sczpOT107CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxh
eWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcigpXTsK
KyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTptX3BsYXllclZpZXdDb250
cm9sbGVyRGVsZWdhdGUuZ2V0KCldOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldEFs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazptX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5
YmFja107CisKKyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldFBpY3R1cmVJblBpY3R1cmVQb3Nz
aWJsZTptX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFja107CisKKyAgICBpZiAobV92aWV3
Q29udHJvbGxlcikgeworICAgICAgICBbbV92aWV3Q29udHJvbGxlciBhZGRDaGlsZFZpZXdDb250
cm9sbGVyOm1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCldOworICAgICAgICBbW21fdmlld0Nv
bnRyb2xsZXIgdmlld10gYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07
CisgICAgfSBlbHNlCisgICAgICAgIFtwYXJlbnRWaWV3IGFkZFN1YnZpZXc6W21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld11dOworCisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10u
ZnJhbWUgPSBbcGFyZW50VmlldyBjb252ZXJ0UmVjdDppbml0aWFsUmVjdCB0b1ZpZXc6W21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKKworICAgIFtbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZp
ZXdBdXRvcmVzaXppbmdGbGV4aWJsZUJvdHRvbU1hcmdpbiB8IFVJVmlld0F1dG9yZXNpemluZ0Zs
ZXhpYmxlUmlnaHRNYXJnaW4pXTsKKworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBzZXROZWVkc0xheW91dF07CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxh
eW91dElmTmVlZGVkXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRo
aXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAg
ICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigp
OworICAgIH0pOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
ckZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIG1fZXhpdENv
bXBsZXRlZCA9IGZhbHNlOworICAgIG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOworICAgIG1fZW50
ZXJSZXF1ZXN0ZWQgPSB0cnVlOworCisgICAgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQorICAgICAgICBlbnRl
clBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICBlbHNlIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCisgICAgICAgIGVudGVyRnVs
bHNjcmVlblN0YW5kYXJkKCk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0dXJl
SW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgCisgICAg
aWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZVBvc3NpYmxlXSkK
KyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RhcnRQaWN0dXJlSW5QaWN0dXJlXTsK
KyAgICBlbHNlCisgICAgICAgIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5k
YXJkKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCglcCkiLCB0aGlzKTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisKKyAgICBp
ZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlXSkgewor
ICAgICAgICAvLyBOT1RFOiBUaGUgZnVsbHNjcmVlbiBtb2RlIHdpbGwgYmUgcmVzdG9yZWQgaW4g
cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCkuCisg
ICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gdHJ1ZTsK
KyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50
ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOlt0aGlzLCBwcm90ZWN0
ZWRUaGlzXSAoQk9PTCBzdWNjZWVkZWQsIE5TRXJyb3IqKSB7CisgICAgICAgIFVOVVNFRF9QQVJB
TShzdWNjZWVkZWQpOworICAgICAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCAtIGxhbWJkYSglcCkgLSBzdWNj
ZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0cmluZyhzdWNjZWVkZWQpKTsKKyAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CisKKyAgICAg
ICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgIH1dOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCit7CisgICAgbV93YXRjaGRvZ1RpbWVyLnN0b3Ao
KTsKKworICAgIG1fZXhpdFJlcXVlc3RlZCA9IHRydWU7CisgICAgaWYgKG1fZXhpdENvbXBsZXRl
ZCkgeworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOworICAgIAor
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBj
b252ZXJ0UmVjdDpmaW5hbFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
LnN1cGVydmlld107CisKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJB
VlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBpZiAo
W3BsYXllckxheWVyIHZpZGVvR3Jhdml0eV0gIT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6
ZUFzcGVjdCgpKQorICAgICAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OmdldEFWTGF5
ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKV07CisgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKKworICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpIHsKKyAgICAg
ICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKKyAg
ICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICB9IGVsc2UgaWYgKGlzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlIHwg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Cisg
ICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5B
bmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0ws
IE5TRXJyb3IqKSB7CisgICAgICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAgICAgICAgICAgW21fd2luZG93IHNl
dEhpZGRlbjpOT107CisgICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGlj
dHVyZUluUGljdHVyZV07CisgICAgICAgIH1dOworICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgeworICAgICAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0
ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNF
cnJvciopIHsKKyAgICAgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7CisKKyAgICAgICAg
ICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNl
dERpc2FibGVBY3Rpb25zOllFU107CisgICAgICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0
QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKyAgICAgICAgICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwor
ICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAgICAgICAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNd
KCkgeworICAgICAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAg
ICAgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxs
c2NyZWVuKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfV07CisgICAgfTsKK30KKworQGlu
dGVyZmFjZSBVSUFwcGxpY2F0aW9uICgpCistICh2b2lkKV9zZXRTdGF0dXNCYXJPcmllbnRhdGlv
bjooVUlJbnRlcmZhY2VPcmllbnRhdGlvbilvOworQGVuZAorCitAaW50ZXJmYWNlIFVJV2luZG93
ICgpCistIChVSUludGVyZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9yaWVudGF0aW9uOworQGVu
ZAorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVl
bigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgaWYgKG1fd2luZG93KSB7Cisg
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgW21fd2luZG93IHNldFJv
b3RWaWV3Q29udHJvbGxlcjpuaWxdOworICAgICAgICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAg
ICAgICAgICBbW2dldFVJQXBwbGljYXRpb25DbGFzcygpIHNoYXJlZEFwcGxpY2F0aW9uXSBfc2V0
U3RhdHVzQmFyT3JpZW50YXRpb246W21fcGFyZW50V2luZG93IGludGVyZmFjZU9yaWVudGF0aW9u
XV07CisgICAgfQorICAgIAorICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRl
Om5pbF07CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjpu
aWxdOworICAgIAorICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQorICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25I
YW5kbGVyOltdIChCT09MLCBOU0Vycm9yICopIHsgfV07CisgICAgCisgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIGlmIChtX3ZpZXdD
b250cm9sbGVyKQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciByZW1vdmVGcm9tUGFy
ZW50Vmlld0NvbnRyb2xsZXJdOworICAgIAorICAgIFttX3BsYXllckxheWVyVmlldyByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKKyAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1
cGVydmlld107CisKKyAgICBtX3BsYXllckxheWVyVmlldyA9IG5pbDsKKyAgICBtX3BsYXllclZp
ZXdDb250cm9sbGVyID0gbmlsOworICAgIG1fd2luZG93ID0gbmlsOworICAgIG1fcGFyZW50Vmll
dyA9IG5pbDsKKyAgICBtX3BhcmVudFdpbmRvdyA9IG5pbDsKKyAgICAKKyAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOworCisgICAgbV9lbnRlclJlcXVlc3RlZCA9IGZhbHNl
OworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkK
K3sKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmlsOworICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyID0gbmlsOworICAgIAorICAgIGNsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4oKQoreworICAgIGlmICghbV9lbnRlclJlcXVlc3RlZCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
TE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIFttX3dpbmRvdyBzZXRIaWRk
ZW46WUVTXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllF
U107CisKKyAgICBpZiAocGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiBtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsICYmICFtX2V4aXRSZXF1ZXN0ZWQpIHsKKyAgICAgICAgcGxheWJhY2tTZXNzaW9uTW9k
ZWwoKS0+cGF1c2UoKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5v
bmUpOworICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJl
cGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5l
UmVjdCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApIC0gdmlzaWJsZSglcykiLCB0aGlzLCBi
b29sU3RyaW5nKHZpc2libGUpKTsKKyAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjaykg
eworICAgICAgICAKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUg
PSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmlubGluZVJlY3QgdG9WaWV3OlttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisKKyAgICAgICAgV1RGOjpGdW5jdGlvbjx2
b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURk1vdmUobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjayk7
CisgICAgICAgIGNhbGxiYWNrKHZpc2libGUpOworICAgIH0KK30KKworYm9vbCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBp
Y3R1cmUoKSBjb25zdAoreworICAgIHJldHVybiBbcGxheWVyQ29udHJvbGxlcigpIGlzUGxheWlu
Z10gJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVN0YW5kYXJkICYmIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RG
OjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQoreworICAgIG1fcHJlcGFyZVRvSW5s
aW5lQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5mdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGlj
dHVyZSglcCkiLCB0aGlzKTsKKyAgICBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworfQorCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIExP
RyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGlj
dHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVy
ZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXTsKKyAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKworICAgIGlm
IChtX21vZGUgJiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFu
ZGFyZCkgeworICAgICAgICBpZiAoIVttX3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBp
Y3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF0pIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0
ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNF
cnJvciopIHsKKyAgICAgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAg
ICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNd
OworICAgICAgICAgICAgfV07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBbbV93
aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBzZXRIaWRkZW46WUVTXTsKKyAgICB9CisKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1
bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFp
bGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJl
KCVwKSIsIHRoaXMpOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJh
Y2tDb250cm9sczpZRVNdOworCisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2V4aXRDb21wbGV0ZWQgPSB0cnVlOworCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2Ny
ZWVuKCk7CisKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIG1fc2hv
dWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7CisgICAgbV9zaG91
bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOworCisg
ICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0
b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIGlmIChoYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB8fCBtX3Jlc3Rvcmlu
Z0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVy
IHZpZXddIHNldEhpZGRlbjpOT107CisKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkK
KyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSgp
Cit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgaWYgKGhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVz
dG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKSB7CisgICAgICAgIC8vIEFT
U1VNUFRJT046IHdlIGFyZSBleGl0aW5nIHBpcCBiZWNhdXNlIHdlIGFyZSBlbnRlcmluZyBmdWxs
c2NyZWVuCisgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOworCisgICAgW21fcGxheWVyTGF5ZXJW
aWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisK
KyAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSk7CisgICAgCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3Jl
ZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZv
clBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQgKF5jb21wbGV0
aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9w
V2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMpOworICAgIGlmIChtX3Nob3VsZFJldHVy
blRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB8fCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kKSB7CisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxs
c2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7CisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9G
dWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxzZTsKKyAgICAgICAgbV9yZXN0
b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgPSB0cnVlOworCisgICAgICAg
IFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKKworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIHN1
Y2Nlc3MsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQ
aWN0dXJlSW5QaWN0dXJlU3RvcCA9IGZhbHNlOworICAgICAgICAgICAgc2V0TW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsKKyAgICAgICAgICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisgICAgICAgIH1dOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJldGFpblB0cjxpZD4gc3Ryb25nQ29tcGxldGlvbkhhbmRs
ZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CisgICAgZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKFtwcm90ZWN0ZWRUaGlzLCBzdHJvbmdDb21wbGV0aW9uSGFuZGxlcl0o
Ym9vbCByZXN0b3JlZCkgIHsKKyAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBs
ZXRpb25IYW5kbGVyIGxhbWJkYSglcCkgLSByZXN0b3JlZCglcykiLCBwcm90ZWN0ZWRUaGlzLmdl
dCgpLCBib29sU3RyaW5nKHJlc3RvcmVkKSk7CisgICAgICAgIHZvaWQgKF5jb21wbGV0aW9uSGFu
ZGxlcikoQk9PTCByZXN0b3JlZCkgPSBzdHJvbmdDb21wbGV0aW9uSGFuZGxlci5nZXQoKTsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdG9yZWQpOworICAgIH0pOworfQorCitib29sIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFz
b24oVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uIHJl
YXNvbikKK3sKKyAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVy
ZUluUGljdHVyZVN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVy
IHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF0pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3Jl
ZW5XaGVuU3RvcHBpbmdQaVAgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgJiYgKHJlYXNvbiA9
PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZCB8fCByZWFzb24gPT0gRXhp
dEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZCkpCisgICAg
ICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAgCisgICAgbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUsIHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNv
bjo6RG9uZUJ1dHRvblRhcHBlZCk7CisKKyAgICBpZiAoIW1fd2F0Y2hkb2dUaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90KGRlZmF1bHRXYXRjaGRv
Z1RpbWVySW50ZXJ2YWwpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitOT19SRVRVUk5fRFVF
X1RPX0FTU0VSVCB2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1Rp
bWVyRmlyZWQoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCglcCkgLSBubyBleGl0IGZ1bGxzY3JlZW4gcmVz
cG9uc2UgaW4gJWdzOyBmb3JjaW5nIGZ1bGxzY3JlZW4gaGlkZGVuLiIsIHRoaXMsIGRlZmF1bHRX
YXRjaGRvZ1RpbWVySW50ZXJ2YWwudmFsdWUoKSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7CisgICAgaWYgKG1fbW9kZSA9PSBuZXdNb2Rl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUgPSBuZXdNb2RlOworICAgIGlmIChtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxs
c2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7CisgICAgaWYgKG1fbW9kZSA9PSBuZXdN
b2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUgPSBuZXdNb2RlOworICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5m
dWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKworI2VuZGlmIC8vIEhBVkUoQVZLSVQp
CisKK2Jvb2wgV2ViQ29yZTo6c3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyNpZiBQTEFU
Rk9STShJT1MpICYmIEhBVkUoQVZLSVQpCisgICAgcmV0dXJuIFtnZXRBVlBpY3R1cmVJblBpY3R1
cmVDb250cm9sbGVyQ2xhc3MoKSBpc1BpY3R1cmVJblBpY3R1cmVTdXBwb3J0ZWRdOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xs
ZXIuaAppbmRleCBlNWNmZjEyYmJhZmFlNjkxMTgzMTI3YmYyODBmYTkzY2U5MGYyNTEyLi4xYjEw
ZmJhMGQ0MjE5ZjA5MWY3M2I4Yzc5NzA2MDRiYjVkMjBjMGVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5oCkBAIC0yOCw4ICsy
OCw4IEBACiAjaW1wb3J0ICJBVktpdFNQSS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWw7CitjbGFzcyBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDsKIH0KIAogQGludGVyZmFjZSBXZWJBVk1lZGlhU2VsZWN0aW9u
T3B0aW9uIDogTlNPYmplY3QKQEAgLTQ0LDggKzQ0LDggQEAgY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQ7CiB9CiAKIEBwcm9wZXJ0eSAocmV0YWluKSBBVlBsYXllckNvbnRy
b2xsZXIqIHBsYXllckNvbnRyb2xsZXJQcm94eTsKLUBwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3Jl
OjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogZGVsZWdhdGU7Ci1AcHJvcGVydHkgKGFzc2lnbikg
V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQqIHBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbCogZGVsZWdhdGU7CitAcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQqIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKIAogQHByb3BlcnR5
IChyZWFkb25seSkgQk9PTCBjYW5TY2FuRm9yd2FyZDsKIEBwcm9wZXJ0eSBCT09MIGNhblNjYW5C
YWNrd2FyZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBs
YXllckNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5
ZXJDb250cm9sbGVyLm1tCmluZGV4IDZiZmM1Y2ExYWEyNmIyM2U1ZThhNDdhMmY2OGMyMjg3ZjMx
OGFhMDEuLjg1MDMwNmFjMTVlZDBhMThiYzhmMTdiNGYyYjdhNjRjMTBkZWQzMjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5t
bQpAQCAtMzEsOSArMzEsOSBAQAogCiAjaW1wb3J0ICJBVktpdFNQSS5oIgogI2ltcG9ydCAiTG9n
Z2luZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBv
cnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1w
b3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9ydCAiV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KICNp
bXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjMzMDJmYmQxYmU2ODY3ZThmZmY1ZDlhOTc0MDU2MDc4ZTljZGU2NS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotCi0jaWZuZGVmIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0X2gKLSNkZWZp
bmUgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXRfaAotCi0jaWYgUExBVEZPUk0oSU9T
KQotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnRFbnVtcy5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNp
bmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPG9iamMvb2JqYy5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7Ci1PQkpDX0NM
QVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7
Ci1PQkpDX0NMQVNTIFVJV2luZG93OwotT0JKQ19DTEFTUyBVSVZpZXc7Ci0KLW5hbWVzcGFjZSBX
VEYgewotY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRS
ZWN0OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw7Ci1jbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25DaGFuZ2VPYnNlcnZlcjsKLQotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQKLSAgICA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwg
cHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHsKLQot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+
IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChtb2Rl
bCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dCgpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KLQotICAgIC8vIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRN
ZWRpYVN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgb3Zl
cnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91Ymxl
IGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJh
Y2tSYXRlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJs
ZSBsaXZlVXBkYXRlSW50ZXJ2YWwpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgV2ViQVZQbGF5ZXJDb250
cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXJDb250cm9s
bGVyLmdldCgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOwotCi0gICAg
UmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gbV9wbGF5ZXJDb250cm9sbGVyOwotICAg
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0
ciB9OwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZDE2ZGIxZWY0ZGRmYTNlZmIw
NTNlZTBmODUwYjk1OWJmZTJiMzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIK
LQotI2lmIFBMQVRGT1JNKElPUykKLSNpZiBIQVZFKEFWS0lUKQotCi0jaW1wb3J0ICJBVktpdFNQ
SS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24u
aCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxl
ci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbXBvcnQgPEFWRm91
bmRhdGlvbi9BVlRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaW1w
b3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFM
KEFWS2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCYgbW9kZWwpCi0gICAgOiBtX3BsYXllckNvbnRyb2xsZXIoYWRvcHROUyhbW1dlYkFWUGxheWVy
Q29udHJvbGxlciBhbGxvY10gaW5pdF0pKQotICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgm
bW9kZWwpCi17Ci0gICAgbW9kZWwuYWRkQ2xpZW50KCp0aGlzKTsKLSAgICBbbV9wbGF5ZXJDb250
cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTp0aGlzXTsKLSAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldERlbGVnYXRlOiZtb2RlbF07Ci0KLSAgICBkdXJhdGlvbkNoYW5nZWQobW9k
ZWwuZHVyYXRpb24oKSk7Ci0gICAgY3VycmVudFRpbWVDaGFuZ2VkKG1vZGVsLmN1cnJlbnRUaW1l
KCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSk7Ci0gICAgYnVm
ZmVyZWRUaW1lQ2hhbmdlZChtb2RlbC5idWZmZXJlZFRpbWUoKSk7Ci0gICAgcmF0ZUNoYW5nZWQo
bW9kZWwuaXNQbGF5aW5nKCksIG1vZGVsLnBsYXliYWNrUmF0ZSgpKTsKLSAgICBzZWVrYWJsZVJh
bmdlc0NoYW5nZWQobW9kZWwuc2Vla2FibGVSYW5nZXMoKSwgbW9kZWwuc2Vla2FibGVUaW1lUmFu
Z2VzTGFzdE1vZGlmaWVkVGltZSgpLCBtb2RlbC5saXZlVXBkYXRlSW50ZXJ2YWwoKSk7Ci0gICAg
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtb2RlbC5jYW5QbGF5RmFzdFJldmVyc2UoKSk7Ci0g
ICAgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCksIG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkpOwotICAgIGxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSwgbW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpKTsKLSAgICBl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtb2RlbC5leHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpLCBt
b2RlbC5leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNr
TG9jYWxpemVkRGV2aWNlTmFtZSgpKTsKLSAgICB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQobW9kZWwud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSk7Ci19Ci0KLVdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQoKQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlOm51bGxwdHJdOwotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RXh0ZXJuYWxQ
bGF5YmFja0FjdGl2ZTpmYWxzZV07Ci0KLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCi17Ci0gICAg
W21fcGxheWVyQ29udHJvbGxlciByZXNldE1lZGlhU3RhdGVdOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9u
KQotewotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxh
eWVyQ29udHJvbGxlci5nZXQoKTsKLQotICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0
aW9uID0gZHVyYXRpb247Ci0gICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb25XaXRo
aW5FbmRUaW1lcyA9IGR1cmF0aW9uOwotCi0gICAgLy8gRklYTUU6IHdlIHRha2UgdGhpcyBhcyBh
biBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCi0gICAgcGxheWVyQ29udHJvbGxl
ci5jYW5QbGF5ID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGF1c2UgPSBZRVM7Ci0g
ICAgcGxheWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKLSAgICBwbGF5ZXJD
b250cm9sbGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmNh
blNlZWsgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXllckNvbnRy
b2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGFuY2hvclRpbWUpCi17Ci0gICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVtt
X3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOwotICAgIEFWVmFsdWVU
aW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhB
bmNob3JWYWx1ZTpjdXJyZW50VGltZQotICAgICAgICBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGlt
ZVN0YW1wIHJhdGU6MF07Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFRpbWluZzp0aW1p
bmddOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpidWZmZXJl
ZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgV2ViQVZQbGF5ZXJDb250
cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwotICAg
IGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uOwotICAg
IGRvdWJsZSBub3JtYWxpemVkQnVmZmVyZWRUaW1lOwotICAgIGlmICghZHVyYXRpb24pCi0gICAg
ICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOwotICAgIGVsc2UKLSAgICAgICAgbm9ybWFs
aXplZEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZSAvIGR1cmF0aW9uOwotICAgIHBsYXllckNv
bnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFsaXplZEJ1ZmZlcmVkVGlt
ZSldOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpyYXRlQ2hh
bmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFuZ2VzQ2hh
bmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGlt
ZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IHNlZWthYmxlUmFuZ2VzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgo
KTsgaSsrKSB7Ci0gICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5nZXMuc3RhcnQoaSkucmVs
ZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLmVuZChp
KS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLQotICAgICAgICBDTVRpbWVSYW5nZSByYW5nZSA9IENN
VGltZVJhbmdlTWFrZShDTVRpbWVNYWtlV2l0aFNlY29uZHMoc3RhcnQsIDEwMDApLCBDTVRpbWVN
YWtlV2l0aFNlY29uZHMoZW5kLXN0YXJ0LCAxMDAwKSk7Ci0gICAgICAgIFtzZWVrYWJsZVJhbmdl
cyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKLSAgICB9
Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdlczpzZWVrYWJs
ZVJhbmdlcy5nZXQoKV07Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRpbWVS
YW5nZXNMYXN0TW9kaWZpZWRUaW1lOiBsYXN0TW9kaWZpZWRUaW1lXTsKLSAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldExpdmVVcGRhdGVJbnRlcnZhbDpsaXZlVXBkYXRlSW50ZXJ2YWxdOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjYW5QbGF5RmFzdFJldmVy
c2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQotewotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlGYXN0UmV2ZXJzZV07Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYgb3B0
aW9uIDogb3B0aW9ucykgewotICAgICAgICBSZXRhaW5QdHI8V2ViQVZNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24gYWxs
b2NdIGluaXRdKTsKLSAgICAgICAgW3dlYk9wdGlvbiBzZXRMb2NhbGl6ZWREaXNwbGF5TmFtZTpv
cHRpb24uZGlzcGxheU5hbWVdOwotICAgICAgICBbd2ViT3B0aW9ucyBhZGRPYmplY3Q6d2ViT3B0
aW9uLmdldCgpXTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYk9wdGlvbnM7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2Vi
T3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKLSAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCld
OwotICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQotICAgICAgICBb
bV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3
ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJ
bmRleCldXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMo
b3B0aW9ucyk7Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dl
Yk9wdGlvbnMgY291bnRdKQotICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0
aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVu
YWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSB0YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0gICAg
QVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGUgZXh0ZXJuYWxQbGF5YmFja1R5
cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZU5vbmU7Ci0gICAgaWYg
KHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5
KQotICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29udHJvbGxlckV4dGVy
bmFsUGxheWJhY2tUeXBlQWlyUGxheTsKLSAgICBlbHNlIGlmICh0YXJnZXRUeXBlID09IFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQpCi0gICAgICAgIGV4dGVybmFsUGxh
eWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsK
LQotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVy
Q29udHJvbGxlci5nZXQoKTsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tB
aXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2FsaXplZERldmljZU5hbWU7Ci0gICAgcGxh
eWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBl
OwotICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSA9IGVuYWJsZWQ7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQotewotICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0QWxsb3dzRXh0ZXJuYWxQbGF5YmFjazohZGlzYWJsZWRdOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjptdXRlZENoYW5nZWQoYm9vbCBt
dXRlZCkKLXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldE11dGVkOm11dGVkXTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCi17Ci0g
ICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBb
bV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm51bGxwdHJdOwotICAgIG1fcGxheWJhY2tT
ZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25N
b2RlbCA9IG51bGxwdHI7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEhBVkUoQVZLSVQpCi0jZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KaW5kZXggYjA2
MDExODk3NmNiMGI0MGEyOTEzNmUzZWZjMDQ3Njg1MDgwNmY3NC4uZTQ1NTY2MDFhYTU2Njc2NDYy
M2RlNmI0ZTkxYWYxZDJlOGMyNjM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
CkBAIC0zMSwxMyArMzEsMTMgQEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVk
aWFTZWxlY3Rpb25PcHRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgogI2lt
cG9ydCAiUXVhcnR6Q29yZVNQSS5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAi
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCisj
aW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgorI2ltcG9ydCAiVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KICNp
bXBvcnQgPFVJS2l0L1VJVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KQEAg
LTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMgSW50UmVjdCBlbGVtZW50UmVjdEluV2luZG93KEhUTUxW
aWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKICAgICByZXR1cm4gdmlldy0+Y29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiB9CiAK
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OworY2xhc3MgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ7CiAKIEBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciAoZGVsZWdhdGUpCi0tKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjooV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQ7CistKHZvaWQpZGlkRmlu
aXNoRnVsbHNjcmVlbjooVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQ7
CiBAZW5kCiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0IGZpbmFs
Ci0gICAgOiBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgLCBwcml2YXRlIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgLCBwcml2YXRlIFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyCi0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Ci0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0IGZpbmFsCisgICAg
OiBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgLCBwcml2YXRlIFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50CisgICAgLCBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyCisgICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisgICAgLCBwcml2YXRlIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHsKIAogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IGNyZWF0ZSgpCisg
ICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gY3JlYXRlKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQpOwogICAgIH0KIAogICAgIHZvaWQgc2V0Q29udHJvbGxl
cihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiBjb250cm9sbGVyKSB7IG1fY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7IH0KQEAgLTExOSwyMiArMTE5LDIyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGludmFsaWRhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dCgpIHsgfQorICAgIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkg
eyB9CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIC8vIFZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCiAgICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4o
KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgfQog
ICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENsZWFu
dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUoKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKICAgICB2b2lkIGhhc1ZpZGVvQ2hh
bmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29u
c3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bAotICAgIHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmKSBvdmVycmlkZTsKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgIHZvaWQgYWRk
Q2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBy
ZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKICAgICB2
b2lkIHBsYXkoKSBvdmVycmlkZTsKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB0b2dnbGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgdG9nZ2xlTXV0ZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldE11dGVkKGJv
b2wpIGZpbmFsOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAv
LyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRv
dWJsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBidWZmZXJlZFRp
bWVDaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CkBAIC0xNzksMzkgKzE3OSwzOSBAQCBwcml2YXRl
OgogICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAg
ICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVy
cmlkZTsKICAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBl
bmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKSBvdmVycmlkZTsKICAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBv
dmVycmlkZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgdm9pZCBhZGRD
bGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwor
ICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVxdWVzdEZ1bGxz
Y3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9v
bCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFZpZGVv
TGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdy
YXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5KSBvdmVycmlkZTsKICAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwogICAgIGJvb2wg
aXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92
ZXJyaWRlOwogICAgIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEhhc2hTZXQ8V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX3BsYXliYWNrQ2xpZW50czsKLSAgICBIYXNoU2V0
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9mdWxsc2NyZWVuQ2xpZW50czsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1faW50ZXJmYWNlOwot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbV9mdWxsc2Ny
ZWVuTW9kZWw7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
PiBtX3BsYXliYWNrTW9kZWw7CisgICAgSGFzaFNldDxQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCo+IG1fcGxheWJhY2tDbGllbnRzOworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQqPiBtX2Z1bGxzY3JlZW5DbGllbnRzOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBtX2Z1bGxzY3JlZW5Nb2RlbDsKKyAgICBSZWZQdHI8UGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1fcGxheWJhY2tNb2RlbDsKICAgICBSZWZQdHI8SFRN
TFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgUmV0YWluUHRyPFVJVmlldz4gbV92
aWRlb0Z1bGxzY3JlZW5WaWV3OwogICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyPiBtX2NvbnRyb2xsZXI7CiB9OwogCi0jcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIKKyNwcmFnbWEgbWFyayBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1
cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlk
U2V0dXBGdWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBSZXRh
aW5QdHI8Q0FMYXllcj4gdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSBbbV92aWRlb0Z1bGxzY3JlZW5W
aWV3IGxheWVyXTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJv
dGVjdGVkVGhpcywgdGhpcywgdmlkZW9GdWxsc2NyZWVuTGF5ZXJdIHsKICAgICAgICAgW3ZpZGVv
RnVsbHNjcmVlbkxheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6
OkNvbG9yOjp0cmFuc3BhcmVudCldOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0Vmlk
ZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFtwcm90ZWN0ZWRU
aGlzLCB0aGlzXSB7CkBAIC0yMjIsMTAgKzIyMiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQogICAgIH0pOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVl
bigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNj
cmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgbV9m
dWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCwgW3Byb3RlY3RlZFRo
aXMsIHRoaXNdIHsKICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CkBAIC0yMzUsMTUgKzIzNSwxNSBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVl
bigpCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKLSAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0
cik7Ci0gICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KG51bGxwdHIpOworICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxs
cHRyKTsKKyAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIo
bnVsbHB0cik7CiAgICAgbV9pbnRlcmZhY2UgPSBudWxscHRyOwogICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuVmlldyA9IG5pbDsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0
VmlkZW9FbGVtZW50KG51bGxwdHIpOwpAQCAtMjU2LDEwICsyNTYsMTAgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJv
dGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBJbnRSZWN0IGNsaWVudFJlY3QgPSBlbGVtZW50
UmVjdEluV2luZG93KG1fdmlkZW9FbGVtZW50LmdldCgpKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNsaWVu
dFJlY3RdIHsKQEAgLTI2OCwxMiArMjY4LDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCiAgICAgfSk7CiB9
CiAKLSNwcmFnbWEgbWFyayBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorI3ByYWdtYSBt
YXJrIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91Ymxl
IGR1cmF0aW9uKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGR1cmF0aW9uXSB7CiAgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwogICAgICAgICB9KTsKQEAg
LTI4NCwxMCArMjg0LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCiAgICAgICAgIGNsaWVudC0+ZHVy
YXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91
YmxlIGFuY2hvclRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkK
IHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
ICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtwcm90ZWN0ZWRUaGlzLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0gewogICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JU
aW1lKTsKICAgICAgICAgfSk7CkBAIC0yOTgsMTAgKzI5OCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJl
bnRUaW1lLAogICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwg
YW5jaG9yVGltZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1
ZmZlcmVkVGltZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBidWZmZXJlZFRpbWVdIHsKICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKICAg
ICAgICAgfSk7CkBAIC0zMTIsMTAgKzMxMiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbQog
ICAgICAgICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9v
bCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFj
a1JhdGUpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKICAg
ICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tS
YXRlKTsKICAgICAgICAgfSk7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxv
YXQgcGxheQogICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tS
YXRlKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFz
VmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKIHsKICAgICBpZiAoV2Vi
VGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCBoYXNWaWRlb10gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+aGFzVmlkZW9DaGFu
Z2VkKGhhc1ZpZGVvKTsKICAgICAgICAgfSk7CkBAIC0zNDAsMTAgKzM0MCwxMCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBo
YXNWaWRlbykKICAgICAgICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQoaGFzVmlkZW8pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBG
bG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50
KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0RpbWVu
c2lvbnMgPSB2aWRlb0RpbWVuc2lvbnNdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsKICAgICAgICAgfSk7CkBAIC0z
NTQsMTAgKzM1NCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZQogICAgICAgICBjbGllbnQt
PnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNv
bnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3Vi
bGUgbGl2ZVVwZGF0ZUludGVydmFsKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMs
IGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQogewog
ICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIHBsYXRmb3JtVGltZVJhbmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCks
IGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbF0gewogICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKFRpbWVSYW5nZXM6OmNyZWF0ZShwbGF0
Zm9ybVRpbWVSYW5nZXMpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwog
ICAgICAgICB9KTsKQEAgLTM2OCwxMCArMzY4LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2Vz
CiAgICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHRpbWVSYW5nZXMsIGxhc3RN
b2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBj
YW5QbGF5RmFzdFJldmVyc2UpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQogewog
ICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIGNhblBsYXlGYXN0UmV2ZXJzZV0gewogICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOwog
ICAgICAgICB9KTsKQEAgLTM5MSwxMCArMzkxLDEwIEBAIHN0YXRpYyBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IGlzb2xhdGVkQ29weShjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
CiAgICAgcmV0dXJuIG9wdGlvbnNDb3B5OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGlmIChXZWJUaHJlYWRJ
c0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIG9w
dGlvbnMgPSBpc29sYXRlZENvcHkob3B0aW9ucyksIHNlbGVjdGVkSW5kZXhdIHsKICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRp
b25zLCBzZWxlY3RlZEluZGV4KTsKICAgICAgICAgfSk7CkBAIC00MDUsMTAgKzQwNSwxMCBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29ucwogICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7
CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbcHJvdGVjdGVkVGhpcywgb3B0aW9ucyA9IGlzb2xhdGVkQ29weShvcHRpb25zKSwgc2VsZWN0
ZWRJbmRleF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiAgICAgICAgIH0pOwpA
QCAtNDE5LDcgKzQxOSw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvCiAgICAgICAgIGNsaWVu
dC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJ
bmRleCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkRGV2aWNlTmFtZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVk
RGV2aWNlTmFtZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0aGlzLCBl
bmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZS5p
c29sYXRlZENvcHkoKV0gewpAQCAtNDMzLDEwICs0MzMsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFi
bGVkLAogICAgICAgICBjbGllbnQtPmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5
cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9v
bCBkaXNhYmxlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQogewogICAgIGlm
IChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3Rl
Y3RlZFRoaXMsIGRpc2FibGVkXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT53aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwogICAgICAgICB9KTsKQEAg
LTQ0NywxMCArNDQ3LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChiCiAgICAgICAgIGNsaWVu
dC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJv
b2wgbXV0ZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRlZENo
YW5nZWQoYm9vbCBtdXRlZCkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAg
ICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBtdXRlZF0gewogICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+bXV0ZWRDaGFuZ2VkKG11dGVkKTsKICAgICAgICAgfSk7CkBAIC00
NjEsMzQgKzQ2MSwzNCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQo
bXV0ZWQpOwogfQogCi0jcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyNwcmFn
bWEgbWFyayBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQm
IGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVu
dChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCghbV9m
dWxsc2NyZWVuQ2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9mdWxsc2NyZWVuQ2xp
ZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xp
ZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50
KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fZnVs
bHNjcmVlbkNsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fZnVsbHNjcmVlbkNsaWVu
dHMucmVtb3ZlKCZjbGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIG1vZGUsIGZp
bmlzaGVkV2l0aE1lZGlhXSB7CiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAg
ICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobW9kZSwgZmlu
aXNoZWRXaXRoTWVkaWEpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IGZyYW1lKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZs
b2F0UmVjdCBmcmFtZSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgIFJldGFpblB0cjxDQUxheWVyPiB2aWRlb0Z1bGxzY3JlZW5MYXllciA9
IFttX3ZpZGVvRnVsbHNjcmVlblZpZXcgbGF5ZXJdOwogICAgIAogICAgIFt2aWRlb0Z1bGxzY3Jl
ZW5MYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTpbdmlkZW9GdWxsc2NyZWVuTGF5ZXIgdHJhbnNm
b3JtXV07CkBAIC01MDgsMTA1ICs1MDgsMTA1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgZnJhbWUpCiAgICAg
fSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlk
ZW9HcmF2aXR5KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSB2aWRlb0dy
YXZpdHkpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIHZpZGVvR3Jhdml0eV0g
ewogICAgICAgICBpZiAobV9mdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgICAgICBtX2Z1bGxzY3Jl
ZW5Nb2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkodmlkZW9HcmF2aXR5KTsKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQog
ewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
V2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBtb2RlXSB7CiAgICAgICAgIGlmICht
X2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5mdWxsc2Ny
ZWVuTW9kZUNoYW5nZWQobW9kZSk7CiAgICAgfSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAogewogICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVl
bk1vZGVsLT5pc1Zpc2libGUoKSA6IGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlbygpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlbygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9mdWxsc2NyZWVuTW9k
ZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6aXNNdXRlZCgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc011dGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5pc011dGVk
KCkgOiBmYWxzZTsKIH0KIAotRmxvYXRTaXplIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMoKSBjb25zdAorRmxvYXRTaXplIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMoKSBjb25zdAogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNj
cmVlbk1vZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6IEZsb2F0U2l6ZSgpOwogfQogCi0jcHJhZ21h
IG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAorI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tT
ZXNzaW9uTW9kZWwKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fcGxheWJhY2tDbGllbnRzLmNv
bnRhaW5zKCZjbGllbnQpKTsKICAgICBtX3BsYXliYWNrQ2xpZW50cy5hZGQoJmNsaWVudCk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVu
dChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fcGxheWJhY2tDbGllbnRzLmNvbnRhaW5z
KCZjbGllbnQpKTsKICAgICBtX3BsYXliYWNrQ2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkoKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSgpCiB7CiAgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3By
b3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAg
ICAgICAgIG1fcGxheWJhY2tNb2RlbC0+cGxheSgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRo
aXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1f
cGxheWJhY2tNb2RlbC0+cGF1c2UoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCiB7CiAgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4o
W3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAg
ICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+dG9nZ2xlUGxheVN0YXRlKCk7CiAgICAgfSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVk
KCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKCkK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
IFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5
YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT50b2dnbGVNdXRlZCgpOwog
ICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZXRNdXRlZChib29sIG11dGVkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAg
ICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpLCB0aGlzLCBt
dXRlZF0gewpAQCAtNjE1LDE1MSArNjE1LDE1MSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZChib29sIG11dGVkKQogICAgIH0pOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZygpCiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJh
Y2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+YmVnaW5TY3J1YmJpbmcoKTsK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZW5kU2NydWJiaW5nKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVu
ZFNjcnViYmluZygpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAg
ICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZW5k
U2NydWJiaW5nKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB0aW1lXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9k
ZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnNlZWtUb1RpbWUodGltZSk7CiAgICAg
fSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZhc3RT
ZWVrKGRvdWJsZSB0aW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZmFzdFNlZWsoZG91YmxlIHRpbWUpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMs
IHRpbWVdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxh
eWJhY2tNb2RlbC0+ZmFzdFNlZWsodGltZSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
IFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5
YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjYW5uaW5nRm9y
d2FyZCgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJv
dGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAg
ICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5p
bmcoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmco
KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3Bs
YXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmVuZFNjYW5uaW5nKCk7
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGlu
ZGV4KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBpbmRleF0gewogICAgICAg
ICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2
NF90IGluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0
TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0
ZWRUaGlzLCB0aGlzLCBpbmRleF0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAg
ICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgp
OwogICAgIH0pOwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmR1cmF0aW9uKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6ZHVyYXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAg
IHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmR1cmF0aW9uKCkgOiAw
OwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJl
bnRUaW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
Y3VycmVudFRpbWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJl
dHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAw
OwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZl
cmVkVGltZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmJ1ZmZlcmVkVGltZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAg
cmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+YnVmZmVyZWRUaW1lKCkg
OiAwOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Bs
YXlpbmcoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNQ
bGF5aW5nKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4g
bV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5pc1BsYXlpbmcoKSA6IGZhbHNlOwog
fQogCi1mbG9hdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheWJhY2tS
YXRlKCkgY29uc3QKK2Zsb2F0IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5
YmFja1JhdGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVy
biBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPnBsYXliYWNrUmF0ZSgpIDogMDsK
IH0KIAotUmVmPFRpbWVSYW5nZXM+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CitSZWY8VGltZVJhbmdlcz4gVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01v
ZGVsLT5zZWVrYWJsZVJhbmdlcygpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7CiB9CiAKLWRvdWJs
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVUaW1lUmFuZ2Vz
TGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAogewog
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBt
X3BsYXliYWNrTW9kZWwtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7
CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGl2ZVVw
ZGF0ZUludGVydmFsKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5saXZl
VXBkYXRlSW50ZXJ2YWwoKSA6IDA7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAogewogICAg
IEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3Bs
YXliYWNrTW9kZWwtPmNhblBsYXlGYXN0UmV2ZXJzZSgpIDogZmFsc2U7CiB9CiAKLVZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK1ZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBp
ZiAobV9wbGF5YmFja01vZGVsKQpAQCAtNzY3LDEzICs3NjcsMTMgQEAgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9N
ZWRpYVNlbGUKICAgICByZXR1cm4geyB9OwogfQogCi11aW50NjRfdCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAordWlu
dDY0X3QgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rl
ZEluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4g
bV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5hdWRpb01lZGlhU2VsZWN0ZWRJbmRl
eCgpIDogLTE7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBj
b25zdAorVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKQEAgLTc4MSwz
MSArNzgxLDMxIEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotdWludDY0X3QgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAordWludDY0X3QgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAogewogICAgIEFT
U0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXli
YWNrTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSA6IC0xOwogfQogCi1ib29sIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrRW5hYmxl
ZCgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAg
ICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+ZXh0ZXJuYWxQbGF5
YmFja0VuYWJsZWQoKSA6IGZhbHNlOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKK1BsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNr
TW9kZWwtPmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgOiBUYXJnZXRUeXBlTm9uZTsKIH0K
IAotU3RyaW5nIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBs
YXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0CitTdHJpbmcgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFj
a01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNl
TmFtZSgpIDogU3RyaW5nKCk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK2Jvb2wgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9w
bGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZCgpIDogdHJ1ZTsKQEAgLTgxMywxNiArODEzLDE2IEBAIGJvb2wgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29u
c3QKIAogI3ByYWdtYSBtYXJrIE90aGVyCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnNldFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1l
bnQsIFVJVmlldyAqdmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1
bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBVSVZpZXcgKnZpZXcsIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgUmV0YWluUHRyPFVJVmlldz4gdmlld1JlZiA9IHZp
ZXc7CiAgICAgbV92aWRlb0VsZW1lbnQgPSAmdmlkZW9FbGVtZW50OwotICAgIG1fcGxheWJhY2tN
b2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAg
ICBtX3BsYXliYWNrTW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3Jl
YXRlKCk7CiAgICAgbV9wbGF5YmFja01vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwogICAgIG1fcGxh
eWJhY2tNb2RlbC0+c2V0TWVkaWFFbGVtZW50KG1fdmlkZW9FbGVtZW50LmdldCgpKTsKIAotICAg
IG1fZnVsbHNjcmVlbk1vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OmNyZWF0ZSgpOworICAgIG1fZnVsbHNjcmVlbk1vZGVsID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQo
KnRoaXMpOwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobV92aWRlb0Vs
ZW1lbnQuZ2V0KCkpOwogCkBAIC04MzIsMTUgKzgzMiwxNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYg
dmlkZQogICAgIEZsb2F0UmVjdCB2aWRlb0xheWVyRnJhbWUgPSBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCB2aWRlb0VsZW1lbnRDbGllbnRSZWN0LnNpemUoKSk7CiAgICAgbV9mdWxsc2NyZWVuTW9k
ZWwtPnNldFZpZGVvTGF5ZXJGcmFtZSh2aWRlb0xheWVyRnJhbWUpOwogCi0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
cHJvdGVjdGVkVGhpcywgdGhpcywgdmlkZW9FbGVtZW50Q2xpZW50UmVjdCwgdmlld1JlZiwgbW9k
ZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZV0gewogICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKIAotICAgICAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHNlc3Np
b25JbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCp0
aGlzKTsKLSAgICAgICAgbV9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6Y3JlYXRlKHNlc3Npb25JbnRlcmZhY2UuZ2V0KCkpOwotICAgICAgICBtX2ludGVyZmFj
ZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7Ci0gICAgICAgIG1f
aW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKLSAgICAgICAgbV9p
bnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOworICAg
ICAgICBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHNlc3Npb25JbnRlcmZhY2Ug
PSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAg
bV9pbnRlcmZhY2UgPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKHNlc3Np
b25JbnRlcmZhY2UuZ2V0KCkpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCh0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOwogCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuVmll
dyA9IGFkb3B0TlMoW2FsbG9jVUlWaWV3SW5zdGFuY2UoKSBpbml0XSk7CiAgICAgICAgIApAQCAt
ODQ4LDI1ICs4NDgsMjUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGUKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4o
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4o
KQogewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCBpc01haW5UaHJlYWQoKSk7
CiAgICAgSW50UmVjdCBjbGllbnRSZWN0ID0gZWxlbWVudFJlY3RJbldpbmRvdyhtX3ZpZGVvRWxl
bWVudC5nZXQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY2xpZW50UmVj
dF0gewogICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICAgICAgbV9pbnRlcmZhY2Ut
PmV4aXRGdWxsc2NyZWVuKGNsaWVudFJlY3QpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVu
KCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5k
RXhpdEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIG1faW50
ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIEBpbXBsZW1lbnRh
dGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IF9jb250ZXh0OworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gX2NvbnRleHQ7CiAgICAgUmVmUHRyPEhUTUxWaWRl
b0VsZW1lbnQ+IF92aWRlb0VsZW1lbnQ7CiB9CiAKQEAgLTg5MSw3ICs4OTEsNyBAQCAtIChIVE1M
VmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZp
ZXcgKil2aWV3IG1vZGU6KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSltb2RlCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBfY29udGV4dCA9IFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjcmVhdGUoKTsKKyAgICBfY29udGV4
dCA9IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjcmVhdGUoKTsKICAgICBfY29u
dGV4dC0+c2V0Q29udHJvbGxlcihzZWxmKTsKICAgICBfY29udGV4dC0+c2V0VXBGdWxsc2NyZWVu
KCpfdmlkZW9FbGVtZW50LmdldCgpLCB2aWV3LCBtb2RlKTsKIH0KQEAgLTkwOSw3ICs5MDksNyBA
QCAtICh2b2lkKXJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4KICAgICAgICAgX2NvbnRleHQt
PnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAotLSAodm9pZClkaWRGaW5pc2hG
dWxsc2NyZWVuOihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dAor
LSAodm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dCopY29udGV4dAogewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0ID09IF9jb250ZXh0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjRkYmRjYzhi
MGRlYmE5YzgwMjgwMjM0NDVjODc0ZGExMWY3NDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRl
ZiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdF9oCi0jZGVmaW5lIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0X2gKLQotI2lmIFBMQVRGT1JNKElPUykKLQotI2luY2x1ZGUg
IkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2lu
Y2x1ZGUgPG9iamMvb2JqYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1PQkpDX0NMQVNTIEFW
UGxheWVyVmlld0NvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7Ci1PQkpD
X0NMQVNTIFVJV2luZG93OwotT0JKQ19DTEFTUyBVSVZpZXc7Ci1PQkpDX0NMQVNTIENBTGF5ZXI7
Ci1PQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgV2ViQVZQbGF5
ZXJMYXllclZpZXc7Ci1PQkpDX0NMQVNTIFdlYkFWUGxheWVyTGF5ZXI7Ci1PQkpDX0NMQVNTIFdl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFz
cyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFz
cyBGbG9hdFNpemU7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDsKLWNsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOwotICAgIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgZmluYWwKLSAgICA6IHB1YmxpYyBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsKLQotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdCYpOwotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIqKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+
d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQotCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29s
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
Y29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
Ym9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgZmluYWw7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFVJVmlldyYsIGNv
bnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcgKiwgSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFj
ayk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihjb25zdCBJbnRS
ZWN0JiBmaW5hbFJlY3QpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhbnVw
RnVsbHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcHJlcGFyZWRUb1Jl
dHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCk7Ci0K
LSAgICBlbnVtIGNsYXNzIEV4aXRGdWxsU2NyZWVuUmVhc29uIHsKLSAgICAgICAgRG9uZUJ1dHRv
blRhcHBlZCwKLSAgICAgICAgRnVsbFNjcmVlbkJ1dHRvblRhcHBlZCwKLSAgICAgICAgUGluY2hH
ZXN0dXJlSGFuZGxlZCwKLSAgICAgICAgUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkLAot
ICAgICAgICBQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZAotICAgIH07Ci0KLSAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCogbW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsOyB9Ci0gICAgYm9vbCBzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oRXhpdEZ1bGxT
Y3JlZW5SZWFzb24pOwotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgYm9vbCBhbGxvd3NQaWN0
dXJlSW5QaWN0dXJlUGxheWJhY2soKSBjb25zdCB7IHJldHVybiBtX2FsbG93c1BpY3R1cmVJblBp
Y3R1cmVQbGF5YmFjazsgfQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZShXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOwot
ICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdDsKLSAgICB2b2lk
IGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7Ci0KLSAgICB2b2lkIHdpbGxTdGFydFBpY3R1
cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIGRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotICAg
IHZvaWQgZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIHdpbGxTdG9w
UGljdHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsK
LSAgICB2b2lkIHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFu
ZGxlcih2b2lkICheKShCT09MKSk7Ci0KLSAgICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGNsZWFyTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIGJvb2wgaGFzTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlICYgbW9kZTsgfQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0g
bW9kZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKLSAg
ICB2b2lkIGJlZ2luU2Vzc2lvbigpOwotICAgIHZvaWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7
Ci0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOwotICAgIHZvaWQgd2F0Y2hkb2dU
aW1lckZpcmVkKCk7Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVy
KCkgY29uc3Q7Ci0KLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IG1f
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotICAgIFJldGFpblB0cjxXZWJBVlBsYXllclZpZXdD
b250cm9sbGVyRGVsZWdhdGU+IG1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKLSAgICBS
ZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlcjsK
LSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7IG51
bGxwdHIgfTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07Ci0KLSAgICAvLyBUaGVzZSBhcmUgb25seSB1
c2VkIHdoZW4gZnVsbHNjcmVlbiBpcyBwcmVzZW50ZWQgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCi0g
ICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3dpbmRvdzsKLSAgICBSZXRhaW5QdHI8VUlWaWV3Q29u
dHJvbGxlcj4gbV92aWV3Q29udHJvbGxlcjsKLSAgICBSZXRhaW5QdHI8VUlWaWV3PiBtX3BhcmVu
dFZpZXc7Ci0gICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3BhcmVudFdpbmRvdzsKLSAgICBSZXRh
aW5QdHI8V2ViQVZQbGF5ZXJMYXllclZpZXc+IG1fcGxheWVyTGF5ZXJWaWV3OwotICAgIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07Ci0gICAgV1RGOjpGdW5jdGlv
bjx2b2lkKGJvb2wpPiBtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrOwotICAgIFJ1bkxvb3A6OlRp
bWVyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBtX3dhdGNoZG9nVGltZXI7Ci0g
ICAgYm9vbCBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX2V4aXRSZXF1ZXN0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9leGl0Q29tcGxldGVk
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fZW50ZXJSZXF1ZXN0ZWQgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1f
c2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVy
ZVN0b3AgeyBmYWxzZSB9OwotCi0gICAgdm9pZCBkb0VudGVyRnVsbHNjcmVlbigpOwotfTsKLQot
fQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZmZmYzIwMDQ4ZGJlNDNiZGI1NDgxNzg2OGIyY2Ez
NzI3N2M2M2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTA0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LQotI2lmIFBMQVRGT1JNKElPUykKLQotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaCIKLQotI2lmIEhBVkUoQVZLSVQpCi0KLSNpbXBvcnQgIkFWS2l0U1BJLmgiCi0j
aW1wb3J0ICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9y
dCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0j
aW1wb3J0ICJXZWJBVlBsYXllckNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmgi
Ci0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAi
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUu
aD4KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0jaW1wb3J0IDxvYmpjL21lc3NhZ2UuaD4KLSNp
bXBvcnQgPG9iamMvcnVudGltZS5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9y
dCA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBTb2Z0LWxpbmtpbmcgaGVhZGVycyBtdXN0
IGJlIGluY2x1ZGVkIGxhc3Qgc2luY2UgdGhleSAjZGVmaW5lIGZ1bmN0aW9ucywgY29uc3RhbnRz
LCBldGMuCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZUX0xJTktfRlJBTUVX
T1JLKEFWRm91bmRhdGlvbikKLVNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVy
TGF5ZXIpCi1TT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2
aXR5UmVzaXplLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwg
QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19D
T05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxs
LCBOU1N0cmluZyAqKQotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVy
KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBsYXllclZpZXdDb250cm9sbGVy
KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBfX0FWUGxheWVyTGF5ZXJWaWV3KQot
Ci1TT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUFw
cGxpY2F0aW9uKQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVNjcmVlbikKLVNPRlRfTElOS19D
TEFTUyhVSUtpdCwgVUlXaW5kb3cpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJVmlldykKLVNP
RlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3Q29udHJvbGxlcikKLVNPRlRfTElOS19DTEFTUyhV
SUtpdCwgVUlDb2xvcikKLVNPRlRfTElOS19DT05TVEFOVChVSUtpdCwgVUlUZXh0RWZmZWN0c0Jl
bmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCwgVUlXaW5kb3dMZXZlbCkKLQotc3RhdGljIFVJQ29s
b3IgKmNsZWFyVUlDb2xvcigpCi17Ci0gICAgcmV0dXJuIChVSUNvbG9yICopW2dldFVJQ29sb3JD
bGFzcygpIGNsZWFyQ29sb3JdOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGljIGNvbnN0
IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCi17Ci0gICAgcmV0dXJuIHZhbCA/ICJ0cnVlIiA6
ICJmYWxzZSI7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgZGVmYXVsdFdhdGNo
ZG9nVGltZXJJbnRlcnZhbCB7IDFfcyB9OwotCi1AY2xhc3MgV2ViQVZNZWRpYVNlbGVjdGlvbk9w
dGlvbjsKLQotQGludGVyZmFjZSBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgOiBO
U09iamVjdCA8QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlX1dlYktpdE9ubHk+IHsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50
ZXJmYWNlOwotfQotQHByb3BlcnR5IChhc3NpZ24pIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOwotLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxl
cjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4
aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2Ny
ZWVuUmVhc29uKXJlYXNvbjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZQotLSAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQq
KWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAgICByZXR1cm4gX2Z1bGxzY3JlZW5JbnRlcmZhY2Uu
Z2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAgICBfZnVsbHNj
cmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci19Ci0KLS0gKHZvaWQpcGxheWVy
Vmlld0NvbnRyb2xsZXJXaWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250
cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVy
Vmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+d2lsbFN0YXJ0
UGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyRGlk
U3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmll
d0NvbnRyb2xsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwot
ICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7
Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJGYWlsZWRUb1N0YXJ0UGljdHVyZUlu
UGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHdp
dGhFcnJvcjooTlNFcnJvciAqKWVycm9yCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdD
b250cm9sbGVyKTsKLSAgICBVTlVTRURfUEFSQU0oZXJyb3IpOwotICAgIHNlbGYuZnVsbHNjcmVl
bkludGVyZmFjZS0+ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotLSAodm9p
ZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJW
aWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPndp
bGxTdG9wUGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lkKXBsYXllclZpZXdDb250cm9s
bGVyRGlkU3RvcFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5
ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxl
cik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdG9wUGljdHVyZUluUGljdHVy
ZSgpOwotfQotCi1zdGF0aWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRG
dWxsU2NyZWVuUmVhc29uIGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKEFWUGxheWVyVmll
d0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCi17Ci0gICAgc3dpdGNoIChy
ZWFzb24pIHsKLSAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJl
YXNvbkRvbmVCdXR0b25UYXBwZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQ7Ci0g
ICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25GdWxsU2Ny
ZWVuQnV0dG9uVGFwcGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpGdWxsU2NyZWVuQnV0dG9uVGFwcGVkOwot
ICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGljdHVy
ZUluUGljdHVyZVN0YXJ0ZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVk
OwotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGlu
Y2hHZXN0dXJlSGFuZGxlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGluY2hHZXN0dXJlSGFuZGxlZDsKLSAg
ICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblJlbW90ZUNv
bnRyb2xTdG9wRXZlbnRSZWNlaXZlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BF
dmVudFJlY2VpdmVkOwotICAgIH0KLX0KLQotLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjoo
QVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRG
dWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVu
UmVhc29uKXJlYXNvbgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7
Ci0gICAgcmV0dXJuIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+c2hvdWxkRXhpdEZ1bGxzY3Jl
ZW5XaXRoUmVhc29uKGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKHJlYXNvbikpOwotfQot
Ci0tICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICop
cGxheWVyVmlld0NvbnRyb2xsZXIgcmVzdG9yZVVzZXJJbnRlcmZhY2VGb3JQaWN0dXJlSW5QaWN0
dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCByZXN0b3JlZCkpY29t
cGxldGlvbkhhbmRsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIp
OwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1
cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyKTsKLX0KLUBlbmQK
LQotQGludGVyZmFjZSBXZWJBVlBsYXllckxheWVyIDogQ0FMYXllcgotQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbikgTlNTdHJpbmcgKnZpZGVvR3Jhdml0eTsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCBnZXR0ZXI9aXNSZWFkeUZvckRpc3BsYXkpIEJPT0wgcmVhZHlGb3JEaXNwbGF5OwotQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBB
VlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluKSBDQUxheWVyICp2aWRlb1N1YmxheWVyOwotQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHksIG51bGxhYmxlKSBOU0RpY3Rpb25hcnkgKnBpeGVsQnVmZmVyQXR0cmlidXRlczsKLUBw
cm9wZXJ0eSBDR1NpemUgdmlkZW9EaW1lbnNpb25zOwotQHByb3BlcnR5IENHUmVjdCBtb2RlbFZp
ZGVvTGF5ZXJGcmFtZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyTGF5ZXIg
ewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3Jl
ZW5JbnRlcmZhY2U7Ci0gICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gX2F2UGxh
eWVyQ29udHJvbGxlcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX3ZpZGVvU3VibGF5ZXI7Ci0g
ICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfdmlkZW9HcmF2aXR5OwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdAotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKHNlbGYpIHsKLSAg
ICAgICAgW3NlbGYgc2V0TWFza3NUb0JvdW5kczpZRVNdOwotICAgICAgICBfdmlkZW9HcmF2aXR5
ID0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpOwotICAgIH0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFBy
ZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihy
ZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKLSAgICBbX3BpeGVsQnVmZmVyQXR0cmlidXRlcyBy
ZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCi17Ci0gICAgcmV0dXJuIF9mdWxs
c2NyZWVuSW50ZXJmYWNlLmdldCgpOwotfQotCi0tICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZh
Y2U6KFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNl
Ci17Ci0gICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOwotfQot
Ci0tIChBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyCi17Ci0gICAgcmV0dXJu
IChBVlBsYXllckNvbnRyb2xsZXIgKilfYXZQbGF5ZXJDb250cm9sbGVyLmdldCgpOwotfQotCi0t
ICh2b2lkKXNldFBsYXllckNvbnRyb2xsZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNv
bnRyb2xsZXIKLXsKLSAgICBBU1NFUlQoIXBsYXllckNvbnRyb2xsZXIgfHwgW3BsYXllckNvbnRy
b2xsZXIgaXNLaW5kT2ZDbGFzczpbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGNsYXNzXV0pOwotICAg
IF9hdlBsYXllckNvbnRyb2xsZXIgPSAoV2ViQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29u
dHJvbGxlcjsKLX0KLQotLSAodm9pZClzZXRWaWRlb1N1YmxheWVyOihDQUxheWVyICopdmlkZW9T
dWJsYXllcgotewotICAgIF92aWRlb1N1YmxheWVyID0gdmlkZW9TdWJsYXllcjsKLX0KLQotLSAo
Q0FMYXllciopdmlkZW9TdWJsYXllcgotewotICAgIHJldHVybiBfdmlkZW9TdWJsYXllci5nZXQo
KTsKLX0KLQotLSAodm9pZClsYXlvdXRTdWJsYXllcnMKLXsKLSAgICBpZiAoW192aWRlb1N1Ymxh
eWVyIHN1cGVybGF5ZXJdICE9IHNlbGYpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghW19h
dlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX3Zp
ZGVvU3VibGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChzZWxmLmJv
dW5kcyksIENHUmVjdEdldE1pZFkoc2VsZi5ib3VuZHMpKV07Ci0KLSAgICBpZiAoc2VsZi52aWRl
b0RpbWVuc2lvbnMuaGVpZ2h0IDw9IDAgfHwgc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IHNvdXJjZVZpZGVvRnJhbWU7Ci0g
ICAgRmxvYXRSZWN0IHRhcmdldFZpZGVvRnJhbWU7Ci0gICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRp
byA9IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVp
Z2h0OwotICAgIAotICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpIGlzRXF1
YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsKLSAgICAgICAgc291cmNlVmlkZW9GcmFt
ZSA9IHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWU7Ci0gICAgICAgIHRhcmdldFZpZGVvRnJhbWUg
PSBzZWxmLmJvdW5kczsKLSAgICB9IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0KCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgewotICAgICAg
ICBzb3VyY2VWaWRlb0ZyYW1lID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0
KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOwotICAgICAgICB0
YXJnZXRWaWRlb0ZyYW1lID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZp
ZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKLSAgICB9IGVsc2UgaWYgKFtnZXRBVkxheWVy
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVv
R3Jhdml0eV0pIHsKLSAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhB
c3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5
ZXJGcmFtZSk7Ci0gICAgICAgIHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUgPSBDR1JlY3RNYWtl
KDAsIDAsIHNvdXJjZVZpZGVvRnJhbWUud2lkdGgoKSwgc291cmNlVmlkZW9GcmFtZS5oZWlnaHQo
KSk7Ci0gICAgICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7Ci0gICAg
ICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2Vs
Zi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzbWFs
bGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYu
Ym91bmRzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAg
ICBVSVZpZXcgKnZpZXcgPSAoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXTsKLSAg
ICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2Fs
ZSh0YXJnZXRWaWRlb0ZyYW1lLndpZHRoKCkgLyBzb3VyY2VWaWRlb0ZyYW1lLndpZHRoKCksIHRh
cmdldFZpZGVvRnJhbWUuaGVpZ2h0KCkgLyBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKLSAg
ICBbdmlldyBzZXRUcmFuc2Zvcm06dHJhbnNmb3JtXTsKLSAgICAKLSAgICBOU1RpbWVJbnRlcnZh
bCBhbmltYXRpb25EdXJhdGlvbiA9IFtDQVRyYW5zYWN0aW9uIGFuaW1hdGlvbkR1cmF0aW9uXTsK
LSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAg
ICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwotCi0gICAgICAg
IFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgd2l0aE9iamVj
dDpuaWwgYWZ0ZXJEZWxheTphbmltYXRpb25EdXJhdGlvbiArIDAuMV07Ci0gICAgfSk7Ci19Ci0K
LS0gKHZvaWQpcmVzb2x2ZUJvdW5kcwotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1Bl
cmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJv
dW5kcykgb2JqZWN0Om5pbF07Ci0gICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0
ZV0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVy
bGF5ZXJdICE9IHNlbGYpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoQ0dSZWN0RXF1
YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkgJiYgQ0dB
ZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVn
YXRlXSB0cmFuc2Zvcm1dKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsK
LSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIAotICAgIGlm
ICghQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91
bmRzXSkpIHsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IFtzZWxmIGJvdW5k
c107Ci0gICAgICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7Ci0gICAg
ICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2Vs
Zi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgfQotICAgIFsoVUlWaWV3ICopW192aWRlb1N1
YmxheWVyIGRlbGVnYXRlXSBzZXRUcmFuc2Zvcm06Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eV07
Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotLSAodm9pZClzZXRWaWRl
b0dyYXZpdHk6KE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Ci17Ci0gICAgX3ZpZGVvR3Jhdml0eSA9
IHZpZGVvR3Jhdml0eTsKLSAgICAKLSAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVn
YXRlXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAodmlkZW9HcmF2aXR5ID09
IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSkKLSAgICAgICAgZ3Jhdml0eSA9IFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemU7Ci0gICAgaWYg
KHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCi0g
ICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGVsc2UgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxh
eWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpKQotICAgICAgICBncmF2aXR5ID0gV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZp
bGw7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAKLSAgICBB
U1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOwotICAgIF9mdWxsc2NyZWVuSW50
ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShncmF2aXR5KTsKLX0KLQotLSAo
TlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKLXsKLSAgICByZXR1cm4gX3ZpZGVvR3Jhdml0eS5nZXQo
KTsKLX0KLQotLSAoQ0dSZWN0KXZpZGVvUmVjdAotewotICAgIGlmIChzZWxmLnZpZGVvRGltZW5z
aW9ucy53aWR0aCA8PSAwIHx8IHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodCA8PSAwKQotICAg
ICAgICByZXR1cm4gc2VsZi5ib3VuZHM7Ci0gICAgCi0gICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRp
byA9IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVp
Z2h0OwotCi0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkgaXNF
cXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKLSAgICAgICAgcmV0dXJuIGxhcmdlc3RS
ZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5k
cyk7Ci0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpIGlz
RXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pCi0gICAgICAgIHJldHVybiBzbWFsbGVz
dFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91
bmRzKTsKLQotICAgIHJldHVybiBzZWxmLmJvdW5kczsKLX0KLQotKyAoTlNTZXQgKilrZXlQYXRo
c0ZvclZhbHVlc0FmZmVjdGluZ1ZpZGVvUmVjdAotewotICAgIHJldHVybiBbTlNTZXQgc2V0V2l0
aE9iamVjdHM6QCJ2aWRlb0RpbWVuc2lvbnMiLCBAInZpZGVvR3Jhdml0eSIsIG5pbF07Ci19Ci0K
LUBlbmQKLQotQGludGVyZmFjZSBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcg
OiBVSVZpZXcKLUBlbmQKLQotc3RhdGljIENsYXNzIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlld19sYXllckNsYXNzKGlkLCBTRUwpCi17Ci0gICAgcmV0dXJuIFtXZWJBVlBsYXll
ckxheWVyIGNsYXNzXTsKLX0KLQotc3RhdGljIENsYXNzIGdldFdlYkFWUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlld0NsYXNzKCkKLXsKLSAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBu
aWw7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0Y2hf
b25jZSgmb25jZVRva2VuLCBeewotICAgICAgICB0aGVDbGFzcyA9IG9iamNfYWxsb2NhdGVDbGFz
c1BhaXIoZ2V0VUlWaWV3Q2xhc3MoKSwgIldlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVy
VmlldyIsIDApOwotICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsKLSAg
ICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2JqY19nZXRNZXRhQ2xhc3MoIldlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QobWV0YUNs
YXNzLCBAc2VsZWN0b3IobGF5ZXJDbGFzcyksIChJTVApV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MsICJAQDoiKTsKLSAgICB9KTsKLSAgICAKLSAgICByZXR1
cm4gdGhlQ2xhc3M7Ci19Ci0KLUBpbnRlcmZhY2UgV2ViQVZQbGF5ZXJMYXllclZpZXcgOiBfX0FW
UGxheWVyTGF5ZXJWaWV3Ci1AcHJvcGVydHkgKHJldGFpbikgVUlWaWV3KiB2aWRlb1ZpZXc7Ci1A
ZW5kCi0KLXN0YXRpYyBDbGFzcyBXZWJBVlBsYXllckxheWVyVmlld19sYXllckNsYXNzKGlkLCBT
RUwpCi17Ci0gICAgcmV0dXJuIFtXZWJBVlBsYXllckxheWVyIGNsYXNzXTsKLX0KLQotc3RhdGlj
IEFWUGxheWVyQ29udHJvbGxlciAqV2ViQVZQbGF5ZXJMYXllclZpZXdfcGxheWVyQ29udHJvbGxl
cihpZCBhU2VsZiwgU0VMKQotewotICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVy
ID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJB
VlBsYXllckxheWVyICopW3BsYXllckxheWVyIHBsYXllckxheWVyXTsKLSAgICByZXR1cm4gW3dl
YkFWUGxheWVyTGF5ZXIgcGxheWVyQ29udHJvbGxlcl07Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFW
UGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCwgQVZQbGF5
ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKQotewotICAgIF9fQVZQbGF5ZXJMYXllclZp
ZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFW
UGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVy
TGF5ZXJdOwotICAgIFt3ZWJBVlBsYXllckxheWVyIHNldFBsYXllckNvbnRyb2xsZXI6IHBsYXll
ckNvbnRyb2xsZXJdOwotfQotCi1zdGF0aWMgVUlWaWV3ICpXZWJBVlBsYXllckxheWVyVmlld192
aWRlb1ZpZXcoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5
ZXJMYXllciA9IGFTZWxmOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIg
PSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllciBwbGF5ZXJMYXllcl07Ci0gICAgQ0FM
YXllciogdmlkZW9MYXllciA9IFt3ZWJBVlBsYXllckxheWVyIHZpZGVvU3VibGF5ZXJdOwotICAg
IGlmICghdmlkZW9MYXllciB8fCAhdmlkZW9MYXllci5kZWxlZ2F0ZSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICBBU1NFUlQoW1t2aWRlb0xheWVyIGRlbGVnYXRlXSBpc0tpbmRPZkNsYXNzOmdl
dFVJVmlld0NsYXNzKCldKTsKLSAgICByZXR1cm4gKFVJVmlldyAqKVt2aWRlb0xheWVyIGRlbGVn
YXRlXTsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3
KGlkIGFTZWxmLCBTRUwsIFVJVmlldyAqdmlkZW9WaWV3KQotewotICAgIF9fQVZQbGF5ZXJMYXll
clZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKndl
YkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxh
eWVyTGF5ZXJdOwotICAgIFt3ZWJBVlBsYXllckxheWVyIHNldFZpZGVvU3VibGF5ZXI6W3ZpZGVv
VmlldyBsYXllcl1dOwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zdGFy
dFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwg
U0VMKQotewotICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2Vs
ZjsKLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAo
V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW3BsYXllckxheWVyVmlldyBw
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKLQotICAgIFdlYkFWUGxheWVyTGF5ZXIg
KnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXll
ckxheWVyXTsKLSAgICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBs
YXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOwotICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dy
YXZpdHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpXTsKLSAgICBbcGlwUGxh
eWVyTGF5ZXIgc2V0VmlkZW9TdWJsYXllcjpwbGF5ZXJMYXllci52aWRlb1N1YmxheWVyXTsKLSAg
ICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVvRGlt
ZW5zaW9uc107Ci0gICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpwbGF5ZXJMYXll
ci52aWRlb0dyYXZpdHldOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJG
cmFtZTpwbGF5ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJGcmFtZV07Ci0gICAgW3BpcFBsYXllckxh
eWVyIHNldFBsYXllckNvbnRyb2xsZXI6cGxheWVyTGF5ZXIucGxheWVyQ29udHJvbGxlcl07Ci0g
ICAgW3BpcFBsYXllckxheWVyIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6cGxheWVyTGF5ZXIuZnVs
bHNjcmVlbkludGVyZmFjZV07Ci0gICAgW3BpcFZpZXcgYWRkU3VidmlldzpwbGF5ZXJMYXllclZp
ZXcudmlkZW9WaWV3XTsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc3Rv
cFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwg
U0VMKQotewotICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2Vs
ZjsKLSAgICBpZiAoVUlWaWV3ICp2aWRlb1ZpZXcgPSBwbGF5ZXJMYXllclZpZXcudmlkZW9WaWV3
KQotICAgICAgICBbcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKLSAgICBX
ZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKLSAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXll
ciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0g
ICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAq
KVtwaXBWaWV3IGxheWVyXTsKLSAgICBbcGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJh
bWU6cGlwUGxheWVyTGF5ZXIubW9kZWxWaWRlb0xheWVyRnJhbWVdOwotfQotCi1zdGF0aWMgV2Vi
QVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpXZWJBVlBsYXllckxheWVyVmlld19w
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgV2Vi
QVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIFdlYkFWUGlj
dHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IFtwbGF5ZXJMYXllclZpZXcg
dmFsdWVGb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOwotICAgIGlm
ICghcGlwVmlldykgewotICAgICAgICBwaXBWaWV3ID0gW1tnZXRXZWJBVlBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXdDbGFzcygpIGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm9d
OwotICAgICAgICBbcGxheWVyTGF5ZXJWaWV3IHNldFZhbHVlOnBpcFZpZXcgZm9yS2V5OkAiX3Bp
Y3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKLSAgICB9Ci0gICAgcmV0dXJuIHBpcFZp
ZXc7Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MoaWQgYVNl
bGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0g
YVNlbGY7Ci0gICAgUmV0YWluUHRyPFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dz4gcGlwVmlldyA9IGFkb3B0TlMoW3BsYXllckxheWVyVmlldyB2YWx1ZUZvcktleTpAIl9waWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il0pOwotICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0
VmFsdWU6bmlsIGZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Ci0g
ICAgb2JqY19zdXBlciBzdXBlckNsYXNzIHsgcGxheWVyTGF5ZXJWaWV3LCBnZXRfX0FWUGxheWVy
TGF5ZXJWaWV3Q2xhc3MoKSB9OwotICAgIGF1dG8gc3VwZXJfZGVhbGxvYyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCgqKShvYmpjX3N1cGVyKiwgU0VMKT4ob2JqY19tc2dTZW5kU3VwZXIpOwotICAg
IHN1cGVyX2RlYWxsb2MoJnN1cGVyQ2xhc3MsIEBzZWxlY3RvcihkZWFsbG9jKSk7Ci19Ci0KLSNw
cmFnbWEgbWFyayAtIE1ldGhvZHMKLQotc3RhdGljIENsYXNzIGdldFdlYkFWUGxheWVyTGF5ZXJW
aWV3Q2xhc3MoKQotewotICAgIHN0YXRpYyBDbGFzcyB0aGVDbGFzcyA9IG5pbDsKLSAgICBzdGF0
aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9r
ZW4sIF57Ci0gICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihnZXRfX0FW
UGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSwgIldlYkFWUGxheWVyTGF5ZXJWaWV3IiwgMCk7Ci0gICAg
ICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKGRlYWxsb2MpLCAoSU1QKVdl
YkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MsICJ2QDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0
aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0UGxheWVyQ29udHJvbGxlcjopLCAoSU1QKVdlYkFW
UGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIsICJ2QDpAIik7Ci0gICAgICAgIGNs
YXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBsYXllckNvbnRyb2xsZXIpLCAoSU1Q
KVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIsICJAQDoiKTsKLSAgICAgICAg
Y2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0VmlkZW9WaWV3OiksIChJTVAp
V2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3LCAidkA6QCIpOwotICAgICAgICBjbGFz
c19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcih2aWRlb1ZpZXcpLCAoSU1QKVdlYkFWUGxh
eWVyTGF5ZXJWaWV3X3ZpZGVvVmlldywgIkBAOiIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2Qo
dGhlQ2xhc3MsIEBzZWxlY3RvcihzdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0aW5nVmlk
ZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcsICJ2QDoiKTsKLSAgICAgICAgY2xh
c3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc3Rv
cFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgInZAOiIpOwot
ICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihwaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19waWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAiQEA6Iik7Ci0gICAgICAgIAotICAgICAgICBjbGFzc19h
ZGRJdmFyKHRoZUNsYXNzLCAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciLCBzaXpl
b2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopLCBsb2cyKHNpemVvZihX
ZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKikpLCAiQCIpOwotICAgICAgICAK
LSAgICAgICAgb2JqY19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7Ci0gICAgICAgIENsYXNz
IG1ldGFDbGFzcyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBsYXllckxheWVyVmlldyIpOwot
ICAgICAgICBjbGFzc19hZGRNZXRob2QobWV0YUNsYXNzLCBAc2VsZWN0b3IobGF5ZXJDbGFzcyks
IChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOwotICAgIH0pOwot
ICAgIHJldHVybiB0aGVDbGFzczsKLX0KLQotUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi17Ci0g
ICAgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBpbnRlcmZhY2UgPSBhZG9w
dFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KHBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZSkpOwotICAgIFtpbnRlcmZhY2UtPm1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOmludGVyZmFjZS5wdHIoKV07Ci0gICAgcmV0dXJu
IGludGVyZmFjZTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0gICAgOiBtX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0gICAgLCBtX3BsYXllclZpZXdDb250
cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pKQotICAgICwgbV93YXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwg
dGhpcywgJldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmly
ZWQpCi17Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKQotewotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciog
cGxheWVyQ29udHJvbGxlciA9IHRoaXMtPnBsYXllckNvbnRyb2xsZXIoKTsKLSAgICBpZiAocGxh
eWVyQ29udHJvbGxlciAmJiBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUp
Ci0gICAgICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGZhbHNlLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUsICIiKTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlz
KTsKLX0KLQotV2ViQVZQbGF5ZXJDb250cm9sbGVyICpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6cGxheWVyQ29udHJvbGxlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5ZXJDb250cm9sbGVyKCk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKLXsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0
aGlzKTsKLQotICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKLQotICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5h
ZGRDbGllbnQoKnRoaXMpOwotCi0gICAgaGFzVmlkZW9DaGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5oYXNWaWRlbygpIDogZmFsc2UpOwotICAg
IHZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnZpZGVvRGltZW5zaW9ucygpIDogRmxvYXRTaXplKCkpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRXZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2
ZXIpCi17Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKGJv
b2wgaGFzVmlkZW8pCi17Ci0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNFbmFibGVkVmlk
ZW86aGFzVmlkZW9dOwotICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0SGFzVmlkZW86aGFzVmlk
ZW9dOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp2aWRlb0Rp
bWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAg
IFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9w
bGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotCi0gICAgW3BsYXllckxheWVyIHNldFZpZGVv
RGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwotICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0
Q29udGVudERpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKLSAgICBbbV9wbGF5ZXJMYXllclZp
ZXcgc2V0TmVlZHNMYXlvdXRdOwotCi0gICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAq
KVttX3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKLSAg
ICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICop
W3BpcFZpZXcgbGF5ZXJdOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6
cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNpb25zXTsKLSAgICBbcGlwVmlldyBzZXROZWVkc0xheW91
dF07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQotewotICAgIFttX3BsYXll
ckxheWVyVmlldyBzZXRIaWRkZW46ZW5hYmxlZF07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKLXsKLSAgICBM
T0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNh
dGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlzKTsKLSAgICBpZiAobV9zaG91bGRSZXR1cm5U
b0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSBib3RoIGluIFBpUCBhbmQgaW4gRnVsbHNj
cmVlbiAoaS5lLiwgdmlhIGF1dG8tUGlQKSwgYW5kIHdlIGRpZCBub3Qgc3RvcCBmdWxsc2NyZWVu
IHVwb24gcmV0dXJuaW5nLCBpdCBtdXN0IGJlCi0gICAgLy8gYmVjYXVzZSB0aGUgb3JpZ2luYXRp
bmcgdmlldyBpcyBub3QgdmlzaWJsZSwgc28gaGlkZSB0aGUgZnVsbHNjcmVlbiB3aW5kb3cuCi0g
ICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCB8IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVj
dGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBbbV93aW5kb3cg
c2V0SGlkZGVuOllFU107Ci0gICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmll
d10gc2V0SGlkZGVuOllFU107Ci0gICAgICAgIH1dOwotICAgIH0KLX0KLQotQGludGVyZmFjZSBV
SVdpbmRvdyAoKQotLSAoQk9PTClfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzOwotQGVuZAotCi1A
aW50ZXJmYWNlIFVJVmlld0NvbnRyb2xsZXIgKCkKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24sIHNldHRlcj1fc2V0SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOikgQk9PTCBfaWdu
b3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOwotQGVuZAotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiB2aWRlb1ZpZXcsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcqIHBhcmVudFZpZXcsIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93
c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKLXsKLSAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4o
JXApIiwgdGhpcyk7Ci0KLSAgICBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayA9IGFs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2lu
XTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIGJvb2wg
aXNJblBpY3R1cmVJblBpY3R1cmVNb2RlID0gaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICBtX21vZGUgPSBtb2Rl
OwotICAgIG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7Ci0gICAgbV9wYXJlbnRXaW5kb3cgPSBw
YXJlbnRWaWV3LndpbmRvdzsKLQotICAgIGlmICghW1twYXJlbnRWaWV3IHdpbmRvd10gX2lzSG9z
dGVkSW5Bbm90aGVyUHJvY2Vzc10pIHsKLSAgICAgICAgaWYgKCFtX3dpbmRvdykKLSAgICAgICAg
ICAgIG1fd2luZG93ID0gYWRvcHROUyhbYWxsb2NVSVdpbmRvd0luc3RhbmNlKCkgaW5pdFdpdGhG
cmFtZTpbW2dldFVJU2NyZWVuQ2xhc3MoKSBtYWluU2NyZWVuXSBib3VuZHNdXSk7Ci0gICAgICAg
IFttX3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAgICAgICBp
ZiAoIW1fdmlld0NvbnRyb2xsZXIpCi0gICAgICAgICAgICBtX3ZpZXdDb250cm9sbGVyID0gYWRv
cHROUyhbYWxsb2NVSVZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgICAgIFtb
bV92aWV3Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbbV93aW5kb3cgYm91bmRzXV07Ci0gICAg
ICAgIFttX3ZpZXdDb250cm9sbGVyIF9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6
WUVTXTsKLSAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjptX3ZpZXdDb250
cm9sbGVyLmdldCgpXTsKLSAgICAgICAgW21fd2luZG93IHNldFdpbmRvd0xldmVsOmdldFVJVGV4
dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwoKSArIDFdOwotICAgICAgICBbbV93
aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwotICAgIH0KLQotICAgIGlmICghbV9wbGF5ZXJMYXll
clZpZXcpCi0gICAgICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gYWRvcHROUyhbW2dldFdlYkFWUGxh
eWVyTGF5ZXJWaWV3Q2xhc3MoKSBhbGxvY10gaW5pdF0pOwotICAgIFttX3BsYXllckxheWVyVmll
dyBzZXRIaWRkZW46W3BsYXllckNvbnRyb2xsZXIoKSBpc0V4dGVybmFsUGxheWJhY2tBY3RpdmVd
XTsKLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xv
cigpXTsKLQotICAgIGlmICghaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlKSB7Ci0gICAgICAgIFtt
X3BsYXllckxheWVyVmlldyBzZXRWaWRlb1ZpZXc6JnZpZGVvVmlld107Ci0gICAgICAgIFttX3Bs
YXllckxheWVyVmlldyBhZGRTdWJ2aWV3OiZ2aWRlb1ZpZXddOwotICAgIH0KLQotICAgIFdlYkFW
UGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJM
YXllclZpZXcgcGxheWVyTGF5ZXJdOwotCi0gICAgW3BsYXllckxheWVyIHNldE1vZGVsVmlkZW9M
YXllckZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgaW5pdGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJl
Y3QuaGVpZ2h0KCkpXTsKLSAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOltwbGF5
ZXJDb250cm9sbGVyKCkgY29udGVudERpbWVuc2lvbnNdXTsKLSAgICBwbGF5ZXJMYXllci5mdWxs
c2NyZWVuSW50ZXJmYWNlID0gdGhpczsKLQotICAgIGlmICghbV9wbGF5ZXJWaWV3Q29udHJvbGxl
cikKLSAgICAgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhQbGF5ZXJMYXllclZpZXc6bV9wbGF5
ZXJMYXllclZpZXcuZ2V0KCldKTsKLQotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNo
b3dzUGxheWJhY2tDb250cm9sczpOT107Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0
UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcigp
XTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTptX3BsYXllclZpZXdD
b250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNl
dEFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazptX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQ
bGF5YmFja107Ci0KLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldFBpY3R1cmVJblBpY3R1cmVQ
b3NzaWJsZTptX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFja107Ci0KLSAgICBpZiAobV92
aWV3Q29udHJvbGxlcikgewotICAgICAgICBbbV92aWV3Q29udHJvbGxlciBhZGRDaGlsZFZpZXdD
b250cm9sbGVyOm1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCldOwotICAgICAgICBbW21fdmll
d0NvbnRyb2xsZXIgdmlld10gYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XV07Ci0gICAgfSBlbHNlCi0gICAgICAgIFtwYXJlbnRWaWV3IGFkZFN1YnZpZXc6W21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgdmlld11dOwotCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmll
d10uZnJhbWUgPSBbcGFyZW50VmlldyBjb252ZXJ0UmVjdDppbml0aWFsUmVjdCB0b1ZpZXc6W21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKLQotICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwot
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRBdXRvcmVzaXppbmdNYXNrOihV
SVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUJvdHRvbU1hcmdpbiB8IFVJVmlld0F1dG9yZXNpemlu
Z0ZsZXhpYmxlUmlnaHRNYXJnaW4pXTsKLQotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBzZXROZWVkc0xheW91dF07Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IGxheW91dElmTmVlZGVkXTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0KLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhp
cyk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3Rl
Y3RlZFRoaXMsIHRoaXNdIHsKLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KQotICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNj
cmVlbigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjplbnRlckZ1bGxzY3JlZW4oKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLQot
ICAgIG1fZXhpdENvbXBsZXRlZCA9IGZhbHNlOwotICAgIG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNl
OwotICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSB0cnVlOwotCi0gICAgaWYgKG1vZGUoKSA9PSBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQot
ICAgICAgICBlbnRlclBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICBlbHNlIGlmIChtb2RlKCkgPT0g
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCi0gICAg
ICAgIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoJXApIiwg
dGhpcyk7Ci0gICAgCi0gICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUlu
UGljdHVyZVBvc3NpYmxlXSkKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RhcnRQ
aWN0dXJlSW5QaWN0dXJlXTsKLSAgICBlbHNlCi0gICAgICAgIGZhaWxlZFRvU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCglcCki
LCB0aGlzKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7Ci0KLSAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQ
aWN0dXJlSW5QaWN0dXJlQWN0aXZlXSkgewotICAgICAgICAvLyBOT1RFOiBUaGUgZnVsbHNjcmVl
biBtb2RlIHdpbGwgYmUgcmVzdG9yZWQgaW4gcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9w
V2l0aENvbXBsZXRpb25IYW5kbGVyKCkuCi0gICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2Ny
ZWVuV2hlblN0b3BwaW5nUGlQID0gdHJ1ZTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBs
ZXRpb25IYW5kbGVyOlt0aGlzLCBwcm90ZWN0ZWRUaGlzXSAoQk9PTCBzdWNjZWVkZWQsIE5TRXJy
b3IqKSB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzdWNjZWVkZWQpOwotICAgICAgICBMT0coRnVs
bHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3Jl
ZW5TdGFuZGFyZCAtIGxhbWJkYSglcCkgLSBzdWNjZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0cmlu
ZyhzdWNjZWVkZWQpKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQ
bGF5YmFja0NvbnRyb2xzOllFU107Ci0KLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVy
RnVsbHNjcmVlbigpOwotICAgIH1dOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJl
Y3QpCi17Ci0gICAgbV93YXRjaGRvZ1RpbWVyLnN0b3AoKTsKLQotICAgIG1fZXhpdFJlcXVlc3Rl
ZCA9IHRydWU7Ci0gICAgaWYgKG1fZXhpdENvbXBsZXRlZCkgewotICAgICAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpl
eGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
ZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwotICAgIAotICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJlY3Qg
dG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107Ci0KLSAgICBX
ZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxh
eWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBpZiAoW3BsYXllckxheWVyIHZpZGVvR3Jh
dml0eV0gIT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpKQotICAgICAgICBb
cGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVB
c3BlY3QoKV07Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVl
ZGVkXTsKLQotICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpIHsKLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1
bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKLSAgICAgICAgW21fd2luZG93IHNldEhp
ZGRlbjpOT107Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5Q
aWN0dXJlXTsKLSAgICB9IGVsc2UgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlIHwgSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0
aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAg
ICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlU3RhbmRhcmQpOwotICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAg
ICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0g
ICAgICAgIH1dOwotICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRp
b25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAg
ICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKLSAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25z
OllFU107Ci0gICAgICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9y
OmNsZWFyVUlDb2xvcigpXTsKLSAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAgICAgICAgICAgW0NB
VHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdKCkgewotICAgICAgICAg
ICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgICAgICAg
ICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfV07Ci0gICAgfTsKLX0KLQotQGludGVyZmFjZSBVSUFwcGxp
Y2F0aW9uICgpCi0tICh2b2lkKV9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjooVUlJbnRlcmZhY2VP
cmllbnRhdGlvbilvOwotQGVuZAotCi1AaW50ZXJmYWNlIFVJV2luZG93ICgpCi0tIChVSUludGVy
ZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9yaWVudGF0aW9uOwotQGVuZAotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCi17Ci0gICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51
cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0gICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgIFtt
X3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29u
dHJvbGxlcjpuaWxdOwotICAgICAgICBpZiAobV9wYXJlbnRXaW5kb3cpCi0gICAgICAgICAgICBb
W2dldFVJQXBwbGljYXRpb25DbGFzcygpIHNoYXJlZEFwcGxpY2F0aW9uXSBfc2V0U3RhdHVzQmFy
T3JpZW50YXRpb246W21fcGFyZW50V2luZG93IGludGVyZmFjZU9yaWVudGF0aW9uXV07Ci0gICAg
fQotICAgIAotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07Ci0g
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjpuaWxdOwotICAg
IAotICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVBpY3R1cmVJblBpY3R1cmUpKQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
dG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQotICAgICAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltd
IChCT09MLCBOU0Vycm9yICopIHsgfV07Ci0gICAgCi0gICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgIGlmIChtX3ZpZXdDb250cm9sbGVy
KQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciByZW1vdmVGcm9tUGFyZW50Vmlld0Nv
bnRyb2xsZXJdOwotICAgIAotICAgIFttX3BsYXllckxheWVyVmlldyByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKLSAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107
Ci0KLSAgICBtX3BsYXllckxheWVyVmlldyA9IG5pbDsKLSAgICBtX3BsYXllclZpZXdDb250cm9s
bGVyID0gbmlsOwotICAgIG1fd2luZG93ID0gbmlsOwotICAgIG1fcGFyZW50VmlldyA9IG5pbDsK
LSAgICBtX3BhcmVudFdpbmRvdyA9IG5pbDsKLSAgICAKLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVh
bnVwRnVsbHNjcmVlbigpOwotCi0gICAgbV9lbnRlclJlcXVlc3RlZCA9IGZhbHNlOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKLXsKLSAg
ICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmlsOwotICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyID0gbmlsOwotICAgIAotICAgIGNsZWFudXBGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxz
Y3JlZW4oKQotewotICAgIGlmICghbV9lbnRlclJlcXVlc3RlZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAgIFttX3dpbmRvdyBzZXRIaWRk
ZW46WUVTXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllF
U107Ci0KLSAgICBpZiAod2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiBtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsICYmICFtX2V4aXRSZXF1ZXN0ZWQpIHsKLSAgICAgICAgd2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwoKS0+cGF1c2UoKTsKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZU5vbmUpOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVj
dCYgaW5saW5lUmVjdCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApIC0gdmlzaWJsZSgl
cykiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpKTsKLSAgICBpZiAobV9wcmVwYXJlVG9Jbmxp
bmVDYWxsYmFjaykgewotICAgICAgICAKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
dmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmlubGluZVJlY3QgdG9WaWV3
OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107Ci0KLSAgICAgICAgV1RG
OjpGdW5jdGlvbjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURk1vdmUobV9wcmVwYXJlVG9Jbmxp
bmVDYWxsYmFjayk7Ci0gICAgICAgIGNhbGxiYWNrKHZpc2libGUpOwotICAgIH0KLX0KLQotYm9v
bCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxseVNob3dW
aWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAotewotICAgIHJldHVybiBbcGxheWVyQ29udHJv
bGxlcigpIGlzUGxheWluZ10gJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkICYmIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQotewot
ICAgIG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICBp
ZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgp
Ci17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICBzZXRNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBp
Y3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsK
LSAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0g
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50
ZXJpbmdCYWNrZ3JvdW5kXTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1Bs
YXliYWNrQ29udHJvbHM6WUVTXTsKLQotICAgIGlmIChtX21vZGUgJiBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgewotICAgICAgICBpZiAoIVttX3Bs
YXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5n
QmFja2dyb3VuZF0pIHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAgICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVy
Oltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgICAg
ICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAgICAgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgfV07Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0g
ICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBp
Y3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwot
Ci0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlU3RhbmRhcmQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2V4aXRDb21wbGV0ZWQgPSB0
cnVlOwotCi0gICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0KLSAgICBpZiAo
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU5vbmUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxs
c2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7Ci0gICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxz
Y3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOwotCi0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5Q
aWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5G
b3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fd2luZG93
IHNldEhpZGRlbjpOT107Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhp
ZGRlbjpOT107Ci0KLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3Rv
cFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5n
RnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKSB7Ci0gICAgICAgIC8vIEFTU1VNUFRJ
T046IHdlIGFyZSBleGl0aW5nIHBpcCBiZWNhdXNlIHdlIGFyZSBlbnRlcmluZyBmdWxsc2NyZWVu
Ci0gICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
c2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwotCi0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHNl
dEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgW1ttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0KLSAgICBj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSk7Ci0gICAgCi0gICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQot
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBp
Y3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQgKF5jb21wbGV0aW9u
SGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9w
V2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMpOwotICAgIGlmIChtX3Nob3VsZFJldHVy
blRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB8fCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxs
c2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7Ci0gICAgICAgIG1fc2hvdWxkUmV0dXJuVG9G
dWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxzZTsKLSAgICAgICAgbV9yZXN0
b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgPSB0cnVlOwotCi0gICAgICAg
IFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKLQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIHN1
Y2Nlc3MsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQ
aWN0dXJlSW5QaWN0dXJlU3RvcCA9IGZhbHNlOwotICAgICAgICAgICAgc2V0TW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsKLSAgICAgICAgICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgICAgIH1dOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIFJldGFpblB0cjxpZD4gc3Ryb25nQ29tcGxldGlvbkhh
bmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7Ci0gICAgZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKFtwcm90ZWN0ZWRUaGlzLCBzdHJvbmdDb21wbGV0aW9uSGFuZGxl
cl0oYm9vbCByZXN0b3JlZCkgIHsKLSAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0
aENvbXBsZXRpb25IYW5kbGVyIGxhbWJkYSglcCkgLSByZXN0b3JlZCglcykiLCBwcm90ZWN0ZWRU
aGlzLmdldCgpLCBib29sU3RyaW5nKHJlc3RvcmVkKSk7Ci0gICAgICAgIHZvaWQgKF5jb21wbGV0
aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkgPSBzdHJvbmdDb21wbGV0aW9uSGFuZGxlci5nZXQo
KTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdG9yZWQpOwotICAgIH0pOwotfQotCi1i
b29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVl
bldpdGhSZWFzb24oV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2Ny
ZWVuUmVhc29uIHJlYXNvbikKLXsKLSAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJl
YXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQpIHsKLSAgICAgICAgaWYgKFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dy
b3VuZF0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9zaG91bGRSZXR1
cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAgICAgY2xlYXJNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkgJiYgKHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZCB8
fCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRS
ZWNlaXZlZCkpCi0gICAgICAgIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7Ci0g
ICAgCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUsIHJlYXNvbiA9PSBF
eGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZCk7Ci0KLSAgICBpZiAoIW1fd2F0
Y2hkb2dUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRPbmVT
aG90KGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1OT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCglcCkg
LSBubyBleGl0IGZ1bGxzY3JlZW4gcmVzcG9uc2UgaW4gJWdzOyBmb3JjaW5nIGZ1bGxzY3JlZW4g
aGlkZGVuLiIsIHRoaXMsIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwudmFsdWUoKSk7Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwot
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7
Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21v
ZGUgPSBuZXdNb2RlOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYg
fm1vZGU7Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX21vZGUgPSBuZXdNb2RlOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2Rl
KTsKLX0KLQotI2VuZGlmIC8vIEhBVkUoQVZLSVQpCi0KLWJvb2wgV2ViQ29yZTo6c3VwcG9ydHNQ
aWN0dXJlSW5QaWN0dXJlKCkKLXsKLSNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpCi0g
ICAgcmV0dXJuIFtnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyQ2xhc3MoKSBpc1BpY3R1
cmVJblBpY3R1cmVTdXBwb3J0ZWRdOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wOGI4ZDEzNWI1NWEyNjdjMWIyZGFhZGIxM2VjOGY3NDMxMGFiYmM1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisK
KyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OworY2xh
c3MgUGxheWJhY2tTZXNzaW9uTW9kZWw7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYyBmaW5hbAorICAgIDogcHVibGljIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZQorICAgICwgcHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBw
dWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gY3JlYXRlKFBsYXli
YWNrU2Vzc2lvbk1vZGVsJik7CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjKCk7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkg
Y29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQorCisgICAgLy8gUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3Rh
dGUoKSBmaW5hbCB7IH0KKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLypjdXJyZW50VGlt
ZSovLCBkb3VibGUgLyphbmNob3JUaW1lKi8pIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmF0ZUNoYW5nZWQoYm9vbCAvKmlzUGxheWluZyovLCBmbG9hdCAvKnBsYXliYWNrUmF0ZSov
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChj
b25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIC8qbGFzdE1vZGlmaWVkVGltZSovLCBkb3VibGUgLyps
aXZlVXBkYXRlSW50ZXJ2YWwqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyovLCB1aW50
NjRfdCAvKnNlbGVjdGVkSW5kZXgqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdl
ZChib29sIC8qIGVuYWJsZWQgKi8sIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICovKSBm
aW5hbDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CisjaWYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGxh
eUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKik7CisgICAg
V0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKnBsYXlCYWNrQ29udHJv
bHNNYW5hZ2VyKCk7CisjZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2NydWJi
aW5nKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKTsKKworcHJpdmF0
ZToKKyAgICAgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lvbk1v
ZGVsJik7CisgICAgICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsIHsgbnVsbHB0ciB9OworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKKyAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbV9wbGF5YmFja0NvbnRyb2xzTWFu
YWdlciAgeyBudWxscHRyIH07CisKKyAgICB2b2lkIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyVGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBw
bGF5YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKTsKKyNlbmRpZgorCit9OworCit9CisKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ZWYyMjMwNjlhOWNlZTlmMTEyNTEzYmJmZWYw
YjEyYzY3YjI0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCkBAIC0wLDAgKzEsMjU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJJbnRSZWN0
LmgiCisjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiTWVkaWFUaW1l
QVZGb3VuZGF0aW9uLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9y
dCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCIK
KyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KKworI2ltcG9ydCAiQ29yZU1lZGlhU29m
dExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKK1NPRlRfTElO
S19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYz4gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoUGxheWJhY2tT
ZXNzaW9uTW9kZWwmIG1vZGVsKQoreworICAgIGF1dG8gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5l
dyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMobW9kZWwpKTsKKyAgICBtb2RlbC5hZGRDbGll
bnQoaW50ZXJmYWNlKTsKKyAgICByZXR1cm4gaW50ZXJmYWNlOworfQorCitQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Np
b25Nb2RlbCYgbW9kZWwpCisgICAgOiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKK3sK
K30KKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp+UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjKCkKK3sKKyAgICBpbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQoreworI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsK
KworICAgIGNvbnRyb2xzTWFuYWdlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKworICAg
IC8vIEZJWE1FOiBXZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlz
IHJlYWR5LCBidXQgdGhhdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZS4KKyAgICBjb250cm9sc01h
bmFnZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFi
bGVkVmlkZW8gPSBZRVM7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkdXJhdGlvbik7CisjZW5k
aWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hh
bmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAg
ICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhjdXJyZW50VGltZSwgYW5jaG9y
VGltZSwgY29udHJvbHNNYW5hZ2VyLnJhdGUsIGNvbnRyb2xzTWFuYWdlci5wbGF5aW5nKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRUaW1lKTsKKyAgICBVTlVTRURfUEFSQU0oYW5j
aG9yVGltZSk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisjaWYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigp
OworICAgIFtjb250cm9sc01hbmFnZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUg
OiAwLl07CisgICAgW2NvbnRyb2xzTWFuYWdlciBzZXRQbGF5aW5nOmlzUGxheWluZ107CisgICAg
dXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2Rl
bCA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vz
c0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0sIHBsYXliYWNrUmF0ZSwgaXNQbGF5aW5n
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlzUGxheWluZyk7CisgICAgVU5VU0VEX1BBUkFN
KHBsYXliYWNrUmF0ZSk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcobV9w
bGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1l
KCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0sIDAsIGZh
bHNlKTsKKyNlbmRpZgorICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmJlZ2luU2NydWJiaW5n
KCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbmRTY3J1YmJpbmco
KQoreworICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmVuZFNjcnViYmluZygpOworfQorCisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorc3RhdGljIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gdGltZVJhbmdlc1RvQXJyYXkoY29uc3QgVGltZVJhbmdlcyYgdGlt
ZVJhbmdlcykKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJhbmdlQXJyYXkgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgY29uc3Qg
UGxhdGZvcm1UaW1lUmFuZ2VzJiByYW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdlcygpOworICAgICAg
ICBDTVRpbWVSYW5nZSByYW5nZSA9IENNVGltZVJhbmdlTWFrZSh0b0NNVGltZShyYW5nZXMuc3Rh
cnQoaSkpLCB0b0NNVGltZShyYW5nZXMuZW5kKGkpKSk7CisgICAgICAgIFtyYW5nZUFycmF5IGFk
ZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOworICAgIH0KKwor
ICAgIHJldHVybiByYW5nZUFycmF5OworfQorI2VuZGlmCisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGlt
ZVJhbmdlcywgZG91YmxlLCBkb3VibGUpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFNlZWthYmxl
VGltZVJhbmdlczp0aW1lUmFuZ2VzVG9BcnJheSh0aW1lUmFuZ2VzKS5nZXQoKV07CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh0aW1lUmFuZ2VzKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQor
ICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2Vs
ZWN0ZWRJbmRleCldOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgVU5V
U0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25z
dCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAg
ICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2Vs
ZWN0ZWRJbmRleCldOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgVU5V
U0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleDpzZWxlY3RlZEluZGV4XTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVk
SW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjps
ZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlC
YWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6c2VsZWN0
ZWRJbmRleF07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKKyNlbmRp
ZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldENh
blRvZ2dsZVBpY3R1cmVJblBpY3R1cmU6IWVuYWJsZWRdOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OmludmFsaWRhdGUoKQoreworICAgIGlmICghbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCit7
CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIHBsYXlCYWNr
Q29udHJvbHNNYW5hZ2VyKCk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tf
Q09OVFJPTFNfTUFOQUdFUikKKworV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIoKQoreworICAgIHJl
dHVybiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIgKm1hbmFnZXIpCit7CisgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciA9
IG1hbmFnZXI7CisKKyAgICBpZiAoIW1hbmFnZXIgfHwgIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwp
CisgICAgICAgIHJldHVybjsKKworICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9
ICFbbWFuYWdlciByYXRlXSA/IE5BTiA6IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lz
dGVtVXB0aW1lXTsKKyAgICBtYW5hZ2VyLnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3Mo
KSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTptX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJy
ZW50VGltZSgpIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsKKyAgICBk
b3VibGUgZHVyYXRpb24gPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5kdXJhdGlvbigpOworICAg
IG1hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247CisgICAgbWFuYWdlci5oYXNFbmFi
bGVkQXVkaW8gPSBkdXJhdGlvbiA+IDA7CisgICAgbWFuYWdlci5oYXNFbmFibGVkVmlkZW8gPSBk
dXJhdGlvbiA+IDA7CisgICAgbWFuYWdlci5yYXRlID0gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+
aXNQbGF5aW5nKCkgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5wbGF5YmFja1JhdGUoKSA6IDAu
OworICAgIG1hbmFnZXIuc2Vla2FibGVUaW1lUmFuZ2VzID0gdGltZVJhbmdlc1RvQXJyYXkobV9w
bGF5YmFja1Nlc3Npb25Nb2RlbC0+c2Vla2FibGVSYW5nZXMoKSkuZ2V0KCk7CisgICAgbWFuYWdl
ci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKKyAgICBtYW5hZ2VyLnBsYXlpbmcgPSBtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKTsKKyAgICBbbWFuYWdlciBzZXRBdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5hdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1f
cGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsKKyAgICBb
bWFuYWdlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOm1fcGxheWJhY2tTZXNzaW9u
TW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSB3aXRoU2VsZWN0ZWRJbmRleDpz
dGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5sZWdpYmxlTWVk
aWFTZWxlY3RlZEluZGV4KCkpXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJyZW50VGlt
ZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5n
KQoreworICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptYW5hZ2VyID0gcGxheUJhY2tD
b250cm9sc01hbmFnZXIoKTsKKyAgICBpZiAoIW1hbmFnZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsICptb2RlbCA9IHBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7
CisgICAgaWYgKCFtb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIGVmZmVjdGl2
ZUFuY2hvclRpbWUgPSBwbGF5YmFja1JhdGUgPyBhbmNob3JUaW1lIDogTkFOOworICAgIGRvdWJs
ZSBlZmZlY3RpdmVQbGF5YmFja1JhdGUgPSBwbGF5YmFja1JhdGU7CisgICAgaWYgKCFpc1BsYXlp
bmcKKyAgICAgICAgfHwgbW9kZWwtPmlzU2NydWJiaW5nKCkKKyAgICAgICAgfHwgKG1hbmFnZXIu
cmF0ZSA+IDAgJiYgbW9kZWwtPnBsYXliYWNrU3RhcnRlZFRpbWUoKSA+PSBjdXJyZW50VGltZSkK
KyAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA8IDAgJiYgbW9kZWwtPnBsYXliYWNrU3RhcnRlZFRp
bWUoKSA8PSBjdXJyZW50VGltZSkpCisgICAgICAgIGVmZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IDA7
CisKKyAgICBtYW5hZ2VyLnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRp
bWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZSBhbmNob3JUaW1lU3RhbXA6ZWZmZWN0aXZl
QW5jaG9yVGltZSByYXRlOmVmZmVjdGl2ZVBsYXliYWNrUmF0ZV07Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisKK30KKworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFjNzRiODQ4ZmFmOWIyOTBlZWY4NmE3MjkwMmI2MzBkZGRiZWMx
OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorCisjaW5jbHVkZSAi
SFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CitPQkpDX0NMQVNTIE5TV2luZG93OworT0JKQ19DTEFTUyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWNPYmpDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OworY2xh
c3MgRmxvYXRTaXplOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworY2xhc3Mg
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYworICAgIDogcHVibGljIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50CisgICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAg
LCBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHsKKworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBjcmVhdGUo
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7CisgICAgfQorICAgIHZpcnR1YWwgflZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpOworICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2
aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWw7IH0KKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBj
b25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9u
TW9kZWwoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTW9k
ZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciogdmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Vmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIq
KTsKKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBv
dmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGJvb2wgIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKwor
ICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcs
IGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVudGVyRnVsbHNj
cmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50
UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRh
dGUoKTsKKyAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKSB7IH0KKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUs
IGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CisKKyAgICBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQorICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQor
ICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQorICAgIHZvaWQgc2V0TW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQg
Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisK
KyAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKKwor
ICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUo
KSB7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Y09iakMgKnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKTsKKworcHJpdmF0ZToKKyAgICBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJik7
CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2U7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwgeyBudWxscHRyIH07CisgICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OworICAgIEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hY09iakM+IG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQzsK
K307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1MjNm
MTI5OTNkNzgyYzg5MDc2OWQ1NjAyM2IwYzZmZTUxNjFlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
CkBAIC0wLDAgKzEsNTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKQorCisjaW1wb3J0ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiSW50UmVjdC5oIgor
I2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgiCisj
aW1wb3J0ICJQSVBTUEkuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5o
IgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW1wb3J0ICJX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGlt
ZS5oPgorCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVX
T1JLX09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZh
bHVlVGltaW5nKQorCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoUElQKQor
U09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFBJUCwgUElQVmlld0NvbnRyb2xsZXIpCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitAY2xhc3MgV2ViVmlkZW9WaWV3Q29udGFpbmVyOworCitA
cHJvdG9jb2wgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgPE5TT2JqZWN0PgorCistICh2
b2lkKWJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29u
dGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyOworLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VG
b3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0Nv
bnRhaW5lcjsKKworQGVuZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvVmlld0NvbnRhaW5lciA6IE5T
VmlldyB7CisgICAgaWQgPFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiBfdmlkZW9WaWV3
Q29udGFpbmVyRGVsZWdhdGU7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlk
IDxXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdh
dGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvVmlld0NvbnRhaW5lcgorCitA
c3ludGhlc2l6ZSB2aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT1fdmlkZW9WaWV3Q29udGFpbmVy
RGVsZWdhdGU7CisKKy0gKHZvaWQpcmVzaXplV2l0aE9sZFN1cGVydmlld1NpemU6KE5TU2l6ZSlv
bGRCb3VuZHNTaXplCit7CisgICAgW3N1cGVyIHJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXplOm9s
ZEJvdW5kc1NpemVdOworCisgICAgW192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBib3VuZHNE
aWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6c2VsZl07Cit9CisKKy0gKHZvaWQpdmlld0Rp
ZE1vdmVUb1N1cGVydmlldworeworICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3XTsK
KworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgc3VwZXJ2aWV3RGlkQ2hhbmdlRm9y
VmlkZW9WaWV3Q29udGFpbmVyOnNlbGZdOworfQorCitAZW5kCisKK2VudW0gY2xhc3MgUElQU3Rh
dGUgeworICAgIE5vdEluUElQLAorICAgIEluUElQLAorICAgIEV4aXRpbmdQSVAKK307CisKK0Bp
bnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyA6IE5TT2JqZWN0IDxQ
SVBWaWV3Q29udHJvbGxlckRlbGVnYXRlLCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4g
eworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyogX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzsKKyAgICBOU1NpemUgX3ZpZGVvRGltZW5zaW9uczsKKyAgICBSZXRh
aW5QdHI8UElQVmlld0NvbnRyb2xsZXI+IF9waXBWaWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5Q
dHI8TlNWaWV3Q29udHJvbGxlcj4gX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXI7CisgICAg
UmV0YWluUHRyPFdlYlZpZGVvVmlld0NvbnRhaW5lcj4gX3ZpZGVvVmlld0NvbnRhaW5lcjsKKyAg
ICBQSVBTdGF0ZSBfcGlwU3RhdGU7CisgICAgUmV0YWluUHRyPE5TV2luZG93PiBfcmV0dXJuaW5n
V2luZG93OworICAgIE5TUmVjdCBfcmV0dXJuaW5nUmVjdDsKKyAgICBCT09MIF9wbGF5aW5nOwor
ICAgIEJPT0wgX2RpZFJlcXVlc3RFeGl0aW5nUElQOworICAgIEJPT0wgX2V4aXRpbmdUb1N0YW5k
YXJkRnVsbHNjcmVlbjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKy0gKHZvaWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5T
dGF0ZTsKKy0gKHZvaWQpaW52YWxpZGF0ZTsKKworLy8gVHJhY2tpbmcgdmlkZW8gcGxheWJhY2sg
c3RhdGUKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1NpemUgdmlkZW9EaW1lbnNpb25zOworQHBy
b3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWluZzsKKy0gKHZv
aWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0
KXBsYXliYWNrUmF0ZTsKKworLy8gSGFuZGxpbmcgUElQIHRyYW5zaXRpb25zCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgZGlkUmVxdWVzdEV4aXRpbmdQSVA7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSBCT09M
IGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKKworLSAodm9pZClzZXRVcFBJUEZvclZpZGVv
VmlldzooTlNWaWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG93
OihOU1dpbmRvdyAqKXdpbmRvdzsKKy0gKHZvaWQpZW50ZXJQSVA7CistICh2b2lkKWV4aXRQSVA7
CistICh2b2lkKWV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2luZG93OihO
U1dpbmRvdyAqKXdpbmRvdzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQworCitAc3ludGhlc2l6ZSBwbGF5aW5nPV9wbGF5aW5nOwor
QHN5bnRoZXNpemUgdmlkZW9EaW1lbnNpb25zPV92aWRlb0RpbWVuc2lvbnM7CitAc3ludGhlc2l6
ZSBkaWRSZXF1ZXN0RXhpdGluZ1BJUD1fZGlkUmVxdWVzdEV4aXRpbmdQSVA7CitAc3ludGhlc2l6
ZSBleGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW49X2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVl
bjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OihXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IHZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzsKKyAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0
YXRlCit7CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIF9w
aXBWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1ZpZXdDb250
YWluZXJEZWxlZ2F0ZTpuaWxdOworICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBuaWw7CisgICAg
X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgPSBuaWw7CisgICAgX3BpcFN0YXRlID0gUElQ
U3RhdGU6Ok5vdEluUElQOworICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IE5POworICAgIF9l
eGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBOTzsKKyAgICBfcmV0dXJuaW5nV2luZG93ID0g
bmlsOworICAgIF9yZXR1cm5pbmdSZWN0ID0gTlNaZXJvUmVjdDsKK30KKworLSAodm9pZClpbnZh
bGlkYXRlCit7CisgICAgW3NlbGYgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07CisgICAgX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IG51bGxwdHI7CisgICAgX3ZpZGVvRGltZW5zaW9u
cyA9IE5TWmVyb1NpemU7Cit9CisKKy0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxh
eWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZQoreworICAgIF9wbGF5aW5n
ID0gaXNQbGF5aW5nICYmIHBsYXliYWNrUmF0ZTsKKworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIg
c2V0UGxheWluZzpfcGxheWluZ107Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9EaW1lbnNpb25zOihO
U1NpemUpdmlkZW9EaW1lbnNpb25zCit7CisgICAgX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGlt
ZW5zaW9uczsKKworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0QXNwZWN0UmF0aW86X3ZpZGVv
RGltZW5zaW9uc107Cit9CisKKy0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAq
KXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNXaW5kb3cgKil3
aW5kb3cKK3sKKyAgICBBU1NFUlQoIV9waXBWaWV3Q29udHJvbGxlcik7CisgICAgQVNTRVJUKCFf
dmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcik7CisgICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29u
dGFpbmVyKTsKKworICAgIF9waXBWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jUElQVmll
d0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNl
dERlbGVnYXRlOnNlbGZdOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0VXNlckNhblJlc2l6
ZTpZRVNdOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107Cisg
ICAgW3NlbGYgc2V0VmlkZW9EaW1lbnNpb25zOk5TRXF1YWxTaXplcyhfdmlkZW9EaW1lbnNpb25z
LCBOU1plcm9TaXplKSA/IGZyYW1lLnNpemUgOiBfdmlkZW9EaW1lbnNpb25zXTsKKyAgICBpZiAo
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQorICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCk7CisKKyAg
ICBfdmlkZW9WaWV3Q29udGFpbmVyID0gYWRvcHROUyhbW1dlYlZpZGVvVmlld0NvbnRhaW5lciBh
bGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNl
dFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOnNlbGZdOworICAgIFtfdmlkZW9WaWV3Q29udGFp
bmVyIGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKKyAgICB2aWRlb1ZpZXcuZnJhbWUgPSBbX3ZpZGVv
Vmlld0NvbnRhaW5lciBib3VuZHNdOworICAgIHZpZGVvVmlldy5hdXRvcmVzaXppbmdNYXNrID0g
TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZTsKKworICAgIF92aWRlb1Zp
ZXdDb250YWluZXJDb250cm9sbGVyID0gYWRvcHROUyhbW05TVmlld0NvbnRyb2xsZXIgYWxsb2Nd
IGluaXRdKTsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgc2V0Vmlldzpfdmlk
ZW9WaWV3Q29udGFpbmVyLmdldCgpXTsKKyAgICBbd2luZG93LmNvbnRlbnRWaWV3IGFkZFN1YnZp
ZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93QWJvdmUgcmVs
YXRpdmVUbzpuaWxdOworfQorCistICh2b2lkKWVudGVyUElQCit7CisgICAgaWYgKF9waXBTdGF0
ZSA9PSBQSVBTdGF0ZTo6SW5QSVApCisgICAgICAgIHJldHVybjsKKworICAgIFtfdmlkZW9WaWV3
Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9y
R2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVy
IHByZXNlbnRWaWV3Q29udHJvbGxlckFzUGljdHVyZUluUGljdHVyZTpfdmlkZW9WaWV3Q29udGFp
bmVyQ29udHJvbGxlci5nZXQoKV07CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6OkluUElQOwor
fQorCistICh2b2lkKWV4aXRQSVAKK3sKKyAgICBpZiAoX3BpcFN0YXRlICE9IFBJUFN0YXRlOjpJ
blBJUCB8fCAhX3BpcFZpZXdDb250cm9sbGVyIHx8ICFfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJv
bGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gWUVT
OworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3Jv
dW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckNsZWFyKTsKKyAgICBb
X3BpcFZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlcjpfdmlkZW9WaWV3Q29udGFp
bmVyQ29udHJvbGxlci5nZXQoKV07CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6OkV4aXRpbmdQ
SVA7Cit9CisKKy0gKHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJlY3QgaW5X
aW5kb3c6KE5TV2luZG93ICopd2luZG93Cit7CisgICAgX3JldHVybmluZ1dpbmRvdyA9IHdpbmRv
dzsKKyAgICBfcmV0dXJuaW5nUmVjdCA9IHJlY3Q7CisgICAgCisgICAgW19waXBWaWV3Q29udHJv
bGxlciBzZXRSZXBsYWNlbWVudFJlY3Q6cmVjdF07CisgICAgW19waXBWaWV3Q29udHJvbGxlciBz
ZXRSZXBsYWNlbWVudFdpbmRvdzp3aW5kb3ddOworCisgICAgW3NlbGYgZXhpdFBJUF07Cit9CisK
Ky8vIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlCisKKy0gKHZvaWQpYm91bmRzRGlkQ2hh
bmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1Zp
ZXdDb250YWluZXIKK3sKKyAgICBpZiAoIV92aWRlb1ZpZXdDb250YWluZXIgfHwgIV9waXBWaWV3
Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX1VOVVNFRCh2aWRlb1Zp
ZXdDb250YWluZXIsIHZpZGVvVmlld0NvbnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsK
KworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5
ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKK30KKworLSAodm9pZClzdXBl
cnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5l
ciAqKXZpZGVvVmlld0NvbnRhaW5lcgoreworICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5lciB8
fCAhX3BpcFZpZXdDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQodmlk
ZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250YWluZXIpOworCisgICAgaWYgKCFbdmlk
ZW9WaWV3Q29udGFpbmVyIGlzRGVzY2VuZGFudE9mOltfcGlwVmlld0NvbnRyb2xsZXIgdmlld11d
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmNlIHRoZSB2aWV3IGlzIG1vdmVkIGludG8g
dGhlIHBpcCB2aWV3LCBtYWtlIHN1cmUgaXQgcmVzaXplcyB3aXRoIHRoZSBwaXAgdmlldy4KKyAg
ICB2aWRlb1ZpZXdDb250YWluZXIuZnJhbWUgPSBbdmlkZW9WaWV3Q29udGFpbmVyIHN1cGVydmll
d10uYm91bmRzOworICAgIHZpZGVvVmlld0NvbnRhaW5lci5hdXRvcmVzaXppbmdNYXNrID0gTlNW
aWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZTsKK30KKworLy8gUElQVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZQorCistIChCT09MKXBpcFNob3VsZENsb3NlOihQSVBWaWV3Q29udHJv
bGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250
cm9sbGVyKTsKKworICAgIGlmICghX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyB8fCAhX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIo
KSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlF
UzsKKyAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcigpLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKKworICAgIHJldHVy
biBOTzsKK30KKworLSAodm9pZClwaXBEaWRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAK
K3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CisK
KyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpICYmIF92aWRlb1ZpZXdDb250YWlu
ZXIgJiYgX3JldHVybmluZ1dpbmRvdyAmJiAhTlNFcXVhbFJlY3RzKF9yZXR1cm5pbmdSZWN0LCBO
U1plcm9SZWN0KSkgeworICAgICAgICBbTlNBbmltYXRpb25Db250ZXh0IHJ1bkFuaW1hdGlvbkdy
b3VwOl4oTlNBbmltYXRpb25Db250ZXh0ICpjb250ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0
LmFsbG93c0ltcGxpY2l0QW5pbWF0aW9uID0gTk87CisgICAgICAgICAgICBbX3ZpZGVvVmlld0Nv
bnRhaW5lciBzZXRGcmFtZTpfcmV0dXJuaW5nUmVjdF07CisgICAgICAgICAgICBfdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVy
RnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7CisgICAgICAgICAgICBfdmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xh
eWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
KTsKKworICAgICAgICAgICAgW1tfcmV0dXJuaW5nV2luZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2
aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJl
bGF0aXZlVG86bmlsXTsKKyAgICAgICAgfSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIH0K
KworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKSB7CisgICAgICAgIGlmICgh
c2VsZi5pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikgeworICAgICAgICAgICAgaWYgKFZp
ZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IF92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpIHsKKyAgICAgICAgICAgICAg
ICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgICAgICAgICAgICAgIHZp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPmNsZWFyTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsK
KworICAgICAgICBpZiAoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIGZ1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlciA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKCkpCisgICAgICAgICAgICBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgfQorfQorCistICh2b2lkKXBpcEFjdGlvblBs
YXk6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBp
cCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOworCisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9u
TW9kZWwoKSkKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+cGxheSgpOworfQorCistICh2b2lkKXBpcEFjdGlvblBhdXNlOihQSVBW
aWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3Bp
cFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
ICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkp
CisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCktPnBhdXNlKCk7Cit9CisKKy0gKHZvaWQpcGlwQWN0aW9uU3RvcDooUElQVmlld0NvbnRy
b2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29u
dHJvbGxlcik7CisKKyAgICBpZiAoIV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25N
b2RlbCA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCk7CisgICAgaWYgKHBsYXliYWNrU2Vzc2lvbk1vZGVsKQorICAgICAgICBwbGF5YmFja1Nlc3Np
b25Nb2RlbC0+cGF1c2UoKTsKKworICAgIC8vIEZJWE1FIDI1MDk2MTcwOiBTaG91bGQgYW5pbWF0
ZSBvbmx5IGlmIHRoZSBwYWdlIHdpdGggdGhlIHZpZGVvIGlzIHVub2JzY3VyZWQuIEZvciBub3cs
IGFsd2F5cyBjbG9zZSB3aXRob3V0IGFuaW1hdGlvbi4KKyAgICBbc2VsZiBleGl0UElQXTsKK30K
KworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAgIDogbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQoreworICAgIEFTU0VSVChtX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSk7CisgICAgYXV0byBt
b2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgp
OworICAgIG1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOworICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOm1vZGVsLT5pc1BsYXlpbmcoKSBuZXdQbGF5YmFj
a1JhdGU6bW9kZWwtPnBsYXliYWNrUmF0ZSgpXTsKK30KKworVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCkKK3sKKyAgICBpZiAobV9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIG1f
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5yZW1vdmVD
bGllbnQoKnRoaXMpOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9G
dWxsc2NyZWVuTW9kZWwqIG1vZGVsKQoreworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
KQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwor
ICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKKyAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0
aGlzKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNl
cnZlcikKK3sKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7Cisg
ICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUg
PSBuZXdNb2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOwor
ICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb2Rl
ID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOmlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6cGxheWJh
Y2tSYXRlXTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNv
bnRyb2xzTWFuYWdlcigpCit7CisgICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPmVuc3Vy
ZUNvbnRyb2xzTWFuYWdlcigpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNP
YmpDICpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMoKQoreworICAgIGlmICghbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKQor
ICAgICAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBhZG9wdE5TKFtbV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBhbGxvY10gaW5pdFdpdGhWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6dGhpc10pOworCisgICAgcmV0dXJuIG1fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQy5nZXQoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywgY29uc3QgSW50
UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmVQbGF5YmFjaykKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5pdGlhbFJlY3Q6eyVkLCAlZCwgJWQs
ICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhpcywgaW5pdGlhbFJlY3QueCgpLCBp
bml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgp
LCBwYXJlbnRXaW5kb3csIG1vZGUpOworCisgICAgVU5VU0VEX1BBUkFNKGFsbG93c1BpY3R1cmVJ
blBpY3R1cmVQbGF5YmFjayk7CisgICAgQVNTRVJUKG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisKKyAgICBtX21vZGUg
PSBtb2RlOworCisgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSBzZXRVcFBJUEZv
clZpZGVvVmlldzombGF5ZXJIb3N0ZWRWaWV3IHdpdGhGcmFtZTooTlNSZWN0KWluaXRpYWxSZWN0
IGluV2luZG93OnBhcmVudFdpbmRvd107CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CisgICAgICAgIGlm
IChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKKyAgICB9KTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbigpCit7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVl
biglcCkiLCB0aGlzKTsKKworICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgeworICAgICAgICBbbV93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGVudGVyUElQXTsKKworI2lmIEVOQUJMRShXRUJf
UExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICAgICAgW21fcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3Rp
dmU6WUVTXTsKKyNlbmRpZgorCisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxz
Y3JlZW4oKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
eGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRX
aW5kb3cpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6OmV4aXRGdWxsc2NyZWVuKCVwKSwgZmluYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVu
dFdpbmRvdzolcCIsIHRoaXMsIGZpbmFsUmVjdC54KCksIGZpbmFsUmVjdC55KCksIGZpbmFsUmVj
dC53aWR0aCgpLCBmaW5hbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7CisKKyNpZiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVB
Y3RpdmU6Tk9dOworI2VuZGlmCisKKyAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChmaW5hbFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDIGV4aXRQSVBdOworICAgIGVsc2UKKyAgICAgICAgW21fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OmZpbmFsUmVjdCBpbldpbmRv
dzpwYXJlbnRXaW5kb3ddOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25U
b01vZGUoJXApLCBtb2RlOiVkIiwgdGhpcywgbW9kZSk7CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5w
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOwor
I2VuZGlmCisKKyAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRS
ZXF1ZXN0RXhpdGluZ1BJUF0pCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaXNFeGl0aW5n
VG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkOworICAgIC8vIE9uIE1hYywgc3RhbmRhcmQgZnVsbHNj
cmVlbiBpcyBoYW5kbGVkIGJ5IHRoZSBGdWxsc2NyZWVuIEFQSSBhbmQgbm90IGJ5IFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuCisgICAgLy8gSnVzdCB1cGRhdGUgbV9tb2RlIGRpcmVjdGx5IHRvIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIGluIHRoYXQg
Y2FzZSB0byBrZWVwCisgICAgLy8gbV9tb2RlIGluIHN5bmMgd2l0aCB0aGUgZnVsbHNjcmVlbiBt
b2RlIGluIEhUTUxNZWRpYUVsZW1lbnQuCisgICAgaWYgKGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxs
c2NyZWVuKQorICAgICAgICBtX21vZGUgPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVTdGFuZGFyZDsKKworICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMgc2V0RXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOmlzRXhpdGluZ1RvU3RhbmRhcmRG
dWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQ
SVBdOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxz
Y3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIFttX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07CisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKKworICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSglcCkiLCB0aGlzKTsKKworICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7CisgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIg
PSBuaWw7CisKKyAgICBjbGVhbnVwRnVsbHNjcmVlbigpOworCisgICAgW21fd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlXTsKKyAgICBtX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgPSBuaWw7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgY29u
c3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKK3sKKyAgICByZXR1cm4gdmFsID8gInRydWUi
IDogImZhbHNlIjsKK30KKyNlbmRpZgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYg
aW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKK3sKKyAgICBMT0coRnVsbHNjcmVl
biwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5l
KCVwKSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5k
b3c6JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpLCBpbmxpbmVSZWN0LngoKSwgaW5saW5l
UmVjdC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5saW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50
V2luZG93KTsKKworICAgIGlmICghdmlzaWJsZSkgeworICAgICAgICBbbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUKHBhcmVudFdpbmRvdyk7CisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpaW5saW5lUmVjdCBpbldpbmRv
dzpwYXJlbnRXaW5kb3ddOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCit7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKCVwKSwgZW5hYmxlZDolcyIsIHRoaXMsIGJvb2xTdHJpbmcoZW5hYmxlZCkpOwor
CisgICAgaWYgKGVuYWJsZWQgJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCisgICAgICAgIGV4aXRGdWxsc2NyZWVu
KEludFJlY3QoKSwgbmlsKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoJXApOiVzIiwgdGhp
cywgYm9vbFN0cmluZyhoYXNWaWRlbykpOworCisgICAgaWYgKCFoYXNWaWRlbykKKyAgICAgICAg
ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVv
RGltZW5zaW9ucykKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCglcCksIHdpZHRoOiUuMGYsIGhlaWdodDol
LjBmIiwgdGhpcywgdmlkZW9EaW1lbnNpb25zLndpZHRoKCksIHZpZGVvRGltZW5zaW9ucy5oZWln
aHQoKSk7CisKKyAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSB6ZXJvIHdoZW4gd2UgYXJl
IHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgdmlkZW8gdG8gYW5vdGhlci4gSWdub3JlIHplcm8gdmFs
dWVzLgorICAgIGlmICghdmlkZW9EaW1lbnNpb25zLmlzWmVybygpKQorICAgICAgICBbbV93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNldFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVu
c2lvbnNdOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aXNQbGF5aW5n
VmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc01vZGUo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSkgJiYgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpc1BsYXlp
bmddOworfQorCitib29sIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgcmV0dXJu
IFBJUExpYnJhcnkoKSAmJiBnZXRQSVBWaWV3Q29udHJvbGxlckNsYXNzKCk7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oCmluZGV4IDcwNWQ2M2I0OGE5OWFlZTFlODkzOTY1NjI0MDEz
MjI0M2U0NzJjNGQuLjc2N2YwMTI4NzMwMDAxYWI0ZDc5ZmU2MDNjMTIyNzc0YWY3MTNlMjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlci5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIHN0cnVjdCBNZWRpYVNl
bGVjdGlvbk9wdGlvbjsKIH0KIApAQCAtNTgsMTAgKzU4LDEwIEBAIFdFQkNPUkVfRVhQT1JUCiAg
ICAgZmxvYXQgX3JhdGU7CiAgICAgQk9PTCBfY2FuVG9nZ2xlUGxheWJhY2s7CiAKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOworICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM+IF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiB9CiAKLUBwcm9wZXJ0
eSAoYXNzaWduKSBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqIHdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsK
IEBwcm9wZXJ0eSAocmVhZHdyaXRlKSBOU1RpbWVJbnRlcnZhbCBjb250ZW50RHVyYXRpb247CiBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFkd3JpdGUpIEFWVmFsdWVUaW1pbmcgKnRp
bWluZzsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1RpbWVJbnRlcnZhbCBzZWVrVG9UaW1lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyLm1tCmluZGV4IDdiNDRhMDc0ZGYyOTgwNjJmODA1M2U5ZWJjN2QzMTQ1MWU4
MmU1ZTUuLmFiYmRiNTI3NzIwNzI0YWZlNTQ3MzExNzQwOGI0MzdhMDk0OTJhZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIubW0KQEAgLTI5LDggKzI5LDggQEAKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQogCiAjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgotI2ltcG9ydCAi
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisj
aW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5n
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTksOCArNTksOCBAQCBA
c3ludGhlc2l6ZSBjYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlOwogCiAtICh2b2lkKWRlYWxsb2MK
IHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAgICAgICAgX3dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIo
bnVsbHB0cik7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgICAg
IF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2Vy
KG51bGxwdHIpOwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIApAQCAtOTMsNyArOTMsNyBAQCAt
ICh2b2lkKXNlZWtUb1RpbWU6KE5TVGltZUludGVydmFsKXRpbWUgdG9sZXJhbmNlQmVmb3JlOihO
U1RpbWVJbnRlcnZhbCl0b2xlcmFuYwogewogICAgIFVOVVNFRF9QQVJBTSh0b2xlcmFuY2VCZWZv
cmUpOwogICAgIFVOVVNFRF9QQVJBTSh0b2xlcmFuY2VBZnRlcik7Ci0gICAgX3dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2Vla1RvVGlt
ZSh0aW1lKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5zZWVrVG9UaW1lKHRpbWUpOwogfQogCiAtICh2b2lkKWNhbmNlbFRodW1ibmFp
bEFuZEF1ZGlvQW1wbGl0dWRlU2FtcGxlR2VuZXJhdGlvbgpAQCAtMTI1LDEyICsxMjUsMTIgQEAg
LSAoQk9PTCljYW5CZWdpblRvdWNoQmFyU2NydWJiaW5nCiAKIC0gKHZvaWQpYmVnaW5Ub3VjaEJh
clNjcnViYmluZwogewotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPmJlZ2lu
U2NydWJiaW5nKCk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+YmVnaW5TY3J1
YmJpbmcoKTsKIH0KIAogLSAodm9pZCllbmRUb3VjaEJhclNjcnViYmluZwogewotICAgIF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPmVuZFNjcnViYmluZygpOworICAgIF9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMtPmVuZFNjcnViYmluZygpOwogfQogCiAjaWYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTMwMApAQCAtMTkyLDcgKzE5Miw3IEBAIC0gKHZv
aWQpc2V0Q3VycmVudEF1ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbjooQVZUb3VjaEJh
ck1lZGlhU2VsZWN0aW9uT3B0CiAgICAgaWYgKGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb24gJiYg
X2F1ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMpCiAgICAgICAgIGluZGV4ID0gW19h
dWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zIGluZGV4T2ZPYmplY3Q6YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbl07CiAKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4
ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOworICAgIF9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4IDogVUlOVDY0X01BWCk7CiB9CiAKIC0g
KE5TQXJyYXk8QVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uICo+ICopbGVnaWJsZVRvdWNo
QmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zCkBAIC0yMjIsNyArMjIyLDcgQEAgLSAodm9pZClzZXRD
dXJyZW50TGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246KEFWVG91Y2hCYXJNZWRp
YVNlbGVjdGlvbk8KICAgICBpZiAobGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uICYmIF9sZWdp
YmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMpCiAgICAgICAgIGluZGV4ID0gW19sZWdp
YmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMgaW5kZXhPZk9iamVjdDpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25dOwogCi0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGlu
ZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOworICAgIF9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5UNjRfTUFYKTsKIH0K
IAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCkBAIC0yOTIs
NDcgKzI5Miw0NyBAQCAtICh2b2lkKXNldExlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4OihOU1VJ
bnRlZ2VyKXNlbGVjdGVkSW5kZXgKICAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAImN1
cnJlbnRMZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbiJdOwogfQogCi0tIChXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YworLSAoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKilwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMKIHsKLSAgICByZXR1cm4gX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5nZXQo
KTsKKyAgICByZXR1cm4gX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5nZXQoKTsKIH0KIAot
LSAodm9pZClzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6KFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYyopd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjCistICh2b2lk
KXNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzooUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjKilwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYyA9PSB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisg
ICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPT0gcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CisgICAgaWYgKF9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMt
PnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxwdHIpOwogCi0gICAgX3dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYyA9IHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKKyAg
ICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjID0gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOwogCi0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCi0gICAgICAg
IF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKHNlbGYpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQorICAgICAg
ICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdl
cihzZWxmKTsKIH0KIAogLSAodm9pZCl0b2dnbGVQbGF5YmFjawogewotICAgIGlmIChfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBsYXlTdGF0
ZSgpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBs
YXlTdGF0ZSgpOwogfQogCiAtICh2b2lkKXNldFBsYXlpbmc6KEJPT0wpcGxheWluZwogewotICAg
IGlmICghX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyB8fCAhX3dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICBpZiAoIV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgfHwgIV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEJPT0wg
aXNDdXJyZW50bHlQbGF5aW5nID0gc2VsZi5wbGF5aW5nOwogICAgIGlmICghaXNDdXJyZW50bHlQ
bGF5aW5nICYmIHBsYXlpbmcpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKKyAgICAgICAgX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOwogICAg
IGVsc2UgaWYgKGlzQ3VycmVudGx5UGxheWluZyAmJiAhcGxheWluZykKLSAgICAgICAgX3dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1
c2UoKTsKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNz
aW9uTW9kZWwoKS0+cGF1c2UoKTsKIH0KIAogLSAoQk9PTClpc1BsYXlpbmcKIHsKLSAgICBpZiAo
X3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfd2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICByZXR1cm4gX3dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+
aXNQbGF5aW5nKCk7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAg
ICAgcmV0dXJuIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCktPmlzUGxheWluZygpOwogCiAgICAgcmV0dXJuIE5POwogfQpAQCAtMzQwLDggKzM0MCw4
IEBAIC0gKEJPT0wpaXNQbGF5aW5nCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDEzMDAKIC0gKHZvaWQpdG9nZ2xlUGljdHVyZUluUGljdHVyZQogewotICAgIGlmIChf
d2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBp
Y3R1cmVJblBpY3R1cmUoKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAm
JiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQor
ICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODEyNGMxZTFiZmUwMTVi
ZDI5YzBlZjA3YTcwZTM3MWMxOWI1MWU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0KLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51
bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1PQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWw7Ci0KLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YyBmaW5hbAotICAgIDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgICwg
cHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291
bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gY3JlYXRlKFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsJik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjKCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQotCi0gICAgLy8g
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNl
dE1lZGlhU3RhdGUoKSBmaW5hbCB7IH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUg
LypjdXJyZW50VGltZSovLCBkb3VibGUgLyphbmNob3JUaW1lKi8pIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAvKmlzUGxheWluZyovLCBmbG9hdCAvKnBs
YXliYWNrUmF0ZSovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWthYmxlUmFu
Z2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIC8qbGFzdE1vZGlmaWVkVGltZSov
LCBkb3VibGUgLypsaXZlVXBkYXRlSW50ZXJ2YWwqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRl
eCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0
aW9ucyovLCB1aW50NjRfdCAvKnNlbGVjdGVkSW5kZXgqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lICovKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0
ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0j
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01h
bmFnZXIgKik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIg
KnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0jZW5kaWYKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGJlZ2luU2NydWJiaW5nKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJp
bmcoKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51bGxwdHIgfTsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1fcGxh
eWJhY2tDb250cm9sc01hbmFnZXIgIHsgbnVsbHB0ciB9OwotCi0gICAgdm9pZCB1cGRhdGVQbGF5
YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxheWluZyk7Ci0jZW5kaWYKLQot
fTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGI0NGE2MWM1MGUwMTYyYzNjMTBlNzE3NWQ4MWM2ZjJhMjQ4NGNlYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0KLSNpZiBQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLQotI2ltcG9y
dCAiQVZLaXRTUEkuaCIKLSNpbXBvcnQgIkludFJlY3QuaCIKLSNpbXBvcnQgIk1lZGlhU2VsZWN0
aW9uT3B0aW9uLmgiCi0jaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKLSNpbXBvcnQg
IlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCi0j
aW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9u
L0FWVGltZS5oPgotCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZUX0xJTktf
RlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0
LCBBVlZhbHVlVGltaW5nKQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1SZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYg
bW9kZWwpCi17Ci0gICAgYXV0byBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYyhtb2RlbCkpOwotICAgIG1vZGVsLmFkZENsaWVudChpbnRlcmZh
Y2UpOwotICAgIHJldHVybiBpbnRlcmZhY2U7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsJiBtb2RlbCkKLSAgICA6IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQotewot
fQotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMoKQotewotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCi17
Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpOwotCi0gICAgY29udHJvbHNNYW5hZ2VyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9u
OwotCi0gICAgLy8gRklYTUU6IFdlIHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxh
eWJhY2sgaXMgcmVhZHksIGJ1dCB0aGF0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLgotICAgIGNv
bnRyb2xzTWFuYWdlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7Ci0gICAgY29udHJvbHNNYW5hZ2Vy
Lmhhc0VuYWJsZWRWaWRlbyA9IFlFUzsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGR1cmF0aW9u
KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3Vy
cmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCi17
Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpOwotICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGN1cnJlbnRU
aW1lLCBhbmNob3JUaW1lLCBjb250cm9sc01hbmFnZXIucmF0ZSwgY29udHJvbHNNYW5hZ2VyLnBs
YXlpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudFRpbWUpOwotICAgIFVOVVNF
RF9QQVJBTShhbmNob3JUaW1lKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNr
UmF0ZSkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAg
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKCk7Ci0gICAgW2NvbnRyb2xzTWFuYWdlciBzZXRSYXRlOmlzUGxheWluZyA/
IHBsYXliYWNrUmF0ZSA6IDAuXTsKLSAgICBbY29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6aXNQ
bGF5aW5nXTsKLSAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6
IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgcGxheWJhY2tS
YXRlLCBpc1BsYXlpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXNQbGF5aW5nKTsKLSAg
ICBVTlVTRURfUEFSQU0ocGxheWJhY2tSYXRlKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YmVnaW5TY3J1YmJpbmcoKQotewotI2lmIEVOQUJMRShX
RUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xz
TWFuYWdlclRpbWluZyhtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Npb25N
b2RlbC0+Y3VycmVudFRpbWUoKSA6IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lz
dGVtVXB0aW1lXSwgMCwgZmFsc2UpOwotI2VuZGlmCi0gICAgd2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKS0+YmVnaW5TY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmVuZFNjcnViYmluZygpCi17Ci0gICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KS0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0aW1lUmFuZ2VzVG9B
cnJheShjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQotewotICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gcmFuZ2VBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3Ro
KCk7IGkrKykgewotICAgICAgICBjb25zdCBQbGF0Zm9ybVRpbWVSYW5nZXMmIHJhbmdlcyA9IHRp
bWVSYW5nZXMucmFuZ2VzKCk7Ci0gICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01UaW1lUmFu
Z2VNYWtlKHRvQ01UaW1lKHJhbmdlcy5zdGFydChpKSksIHRvQ01UaW1lKHJhbmdlcy5lbmQoaSkp
KTsKLSAgICAgICAgW3JhbmdlQXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENNVGlt
ZVJhbmdlOnJhbmdlXV07Ci0gICAgfQotCi0gICAgcmV0dXJuIHJhbmdlQXJyYXk7Ci19Ci0jZW5k
aWYKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUsIGRvdWJsZSkKLXsK
LSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNr
Q29udHJvbHNNYW5hZ2VyKCkgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnRpbWVSYW5nZXNUb0FycmF5
KHRpbWVSYW5nZXMpLmdldCgpXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRpbWVSYW5nZXMp
OwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJ
bmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0
ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRl
eCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsK
LSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNr
Q29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5k
ZXhdOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotI2lmIEVOQUJMRShX
RUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFn
ZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4XTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
IGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSwgY29uc3QgU3RyaW5nJikKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0Q2FuVG9nZ2xlUGlj
dHVyZUluUGljdHVyZTohZW5hYmxlZF07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShlbmFibGVk
KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6aW52
YWxpZGF0ZSgpCi17Ci0gICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMp
OwotICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRyOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSNp
ZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgcGxheUJhY2tDb250
cm9sc01hbmFnZXIoKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQotCi1XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpCi17Ci0gICAgcmV0
dXJuIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXI7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciAqbWFuYWdlcikKLXsKLSAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
ID0gbWFuYWdlcjsKLQotICAgIGlmICghbWFuYWdlciB8fCAhbV9wbGF5YmFja1Nlc3Npb25Nb2Rl
bCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1w
ID0gIVttYW5hZ2VyIHJhdGVdID8gTkFOIDogW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBz
eXN0ZW1VcHRpbWVdOwotICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFz
cygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1
cnJlbnRUaW1lKCkgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOwotICAg
IGRvdWJsZSBkdXJhdGlvbiA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmR1cmF0aW9uKCk7Ci0g
ICAgbWFuYWdlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBtYW5hZ2VyLmhhc0Vu
YWJsZWRBdWRpbyA9IGR1cmF0aW9uID4gMDsKLSAgICBtYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9
IGR1cmF0aW9uID4gMDsKLSAgICBtYW5hZ2VyLnJhdGUgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5pc1BsYXlpbmcoKSA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBsYXliYWNrUmF0ZSgpIDog
MC47Ci0gICAgbWFuYWdlci5zZWVrYWJsZVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2VzVG9BcnJheSht
X3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZWVrYWJsZVJhbmdlcygpKS5nZXQoKTsKLSAgICBtYW5h
Z2VyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwotICAgIG1hbmFnZXIucGxheWluZyA9IG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpOwotICAgIFttYW5hZ2VyIHNldEF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4o
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSldOwotICAg
IFttYW5hZ2VyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Np
b25Nb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4
OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgoKSldOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6dXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1Bs
YXlpbmcpCi17Ci0gICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBwbGF5
QmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIGlmICghbWFuYWdlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwgKm1vZGVsID0gd2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwoKTsKLSAgICBpZiAoIW1vZGVsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3Vi
bGUgZWZmZWN0aXZlQW5jaG9yVGltZSA9IHBsYXliYWNrUmF0ZSA/IGFuY2hvclRpbWUgOiBOQU47
Ci0gICAgZG91YmxlIGVmZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKLSAgICBp
ZiAoIWlzUGxheWluZwotICAgICAgICB8fCBtb2RlbC0+aXNTY3J1YmJpbmcoKQotICAgICAgICB8
fCAobWFuYWdlci5yYXRlID4gMCAmJiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGltZSgpID49IGN1
cnJlbnRUaW1lKQotICAgICAgICB8fCAobWFuYWdlci5yYXRlIDwgMCAmJiBtb2RlbC0+cGxheWJh
Y2tTdGFydGVkVGltZSgpIDw9IGN1cnJlbnRUaW1lKSkKLSAgICAgICAgZWZmZWN0aXZlUGxheWJh
Y2tSYXRlID0gMDsKLQotICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFz
cygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lIGFuY2hvclRpbWVTdGFt
cDplZmZlY3RpdmVBbmNob3JUaW1lIHJhdGU6ZWZmZWN0aXZlUGxheWJhY2tSYXRlXTsKLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLQotfQotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3
ODNlYzk0NDA3NmNhNThkNjAzZjQwYWI4MThjZDU1YTEwYmU5MTEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY19oCi0jZGVmaW5lIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hY19oCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkKLQotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVt
cy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgotI2luY2x1
ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotT0JKQ19DTEFT
UyBOU1dpbmRvdzsKLU9CSkNfQ0xBU1MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2Jq
QzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEZsb2F0U2l6
ZTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKLWNsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOwotCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMKLSAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudAotICAgICwgcHJpdmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAot
ICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiB7
Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yz4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOwotICAgIH0K
LSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKTsKLSAgICBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbCogd2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsKik7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIHdlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXI7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7Ci0K
LSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkgb3Zl
cnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChi
b29sICBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7Ci0K
LSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0dXBGdWxsc2NyZWVuKE5TVmlldyYgbGF5ZXJIb3N0ZWRW
aWV3LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdywg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1Bp
Y3R1cmVJblBpY3R1cmVQbGF5YmFjayk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnRlckZ1
bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuKGNvbnN0
IEludFJlY3QmIGZpbmFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdyk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZh
bGlkYXRlKCk7Ci0gICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkgeyB9Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNp
YmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOwotCi0gICAg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KLSAgICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7
IH0KLSAgICBib29sIGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09IG1vZGU7IH0KLSAgICB2b2lkIHNl
dE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2
b2lkIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
OwotCi0gICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7
Ci0KLSAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0
aXZlKCkgeyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWNPYmpDICp2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYyYpOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IG1fcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0ciB9OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIgfTsKLSAg
ICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OwotICAgIFJldGFp
blB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDPiBtX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakM7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmU2NDJjOGVjMGNiZjk0NzVlODQ5NmRmN2M4
NzAyYzI0ODY1NTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw1NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgiCi0KLSNpZiBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLQotI2ltcG9ydCAiQVZLaXRTUEku
aCIKLSNpbXBvcnQgIkludFJlY3QuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk1l
ZGlhVGltZUFWRm91bmRhdGlvbi5oIgotI2ltcG9ydCAiUElQU1BJLmgiCi0jaW1wb3J0ICJUaW1l
UmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgotI2ltcG9y
dCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaCIKLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLQotI2ltcG9ydCAiQ29yZU1l
ZGlhU29mdExpbmsuaCIKLQotU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKLVNP
RlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKLQotU09GVF9MSU5L
X1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKFBJUCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05B
TChQSVAsIFBJUFZpZXdDb250cm9sbGVyKQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
QGNsYXNzIFdlYlZpZGVvVmlld0NvbnRhaW5lcjsKLQotQHByb3RvY29sIFdlYlZpZGVvVmlld0Nv
bnRhaW5lckRlbGVnYXRlIDxOU09iamVjdD4KLQotLSAodm9pZClib3VuZHNEaWRDaGFuZ2VGb3JW
aWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRh
aW5lcjsKLS0gKHZvaWQpc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihX
ZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXI7Ci0KLUBlbmQKLQotQGlu
dGVyZmFjZSBXZWJWaWRlb1ZpZXdDb250YWluZXIgOiBOU1ZpZXcgewotICAgIGlkIDxXZWJWaWRl
b1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOwotfQot
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpZCA8V2ViVmlkZW9WaWV3Q29udGFpbmVy
RGVsZWdhdGU+IHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBXZWJWaWRlb1ZpZXdDb250YWluZXIKLQotQHN5bnRoZXNpemUgdmlkZW9WaWV3Q29u
dGFpbmVyRGVsZWdhdGU9X3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOwotCi0tICh2b2lkKXJl
c2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXplOihOU1NpemUpb2xkQm91bmRzU2l6ZQotewotICAgIFtz
dXBlciByZXNpemVXaXRoT2xkU3VwZXJ2aWV3U2l6ZTpvbGRCb3VuZHNTaXplXTsKLQotICAgIFtf
dmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29u
dGFpbmVyOnNlbGZdOwotfQotCi0tICh2b2lkKXZpZXdEaWRNb3ZlVG9TdXBlcnZpZXcKLXsKLSAg
ICBbc3VwZXIgdmlld0RpZE1vdmVUb1N1cGVydmlld107Ci0KLSAgICBbX3ZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlIHN1cGVydmlld0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjpzZWxm
XTsKLX0KLQotQGVuZAotCi1lbnVtIGNsYXNzIFBJUFN0YXRlIHsKLSAgICBOb3RJblBJUCwKLSAg
ICBJblBJUCwKLSAgICBFeGl0aW5nUElQCi19OwotCi1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hY09iakMgOiBOU09iamVjdCA8UElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZSwgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IHsKLSAgICBXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7
Ci0gICAgTlNTaXplIF92aWRlb0RpbWVuc2lvbnM7Ci0gICAgUmV0YWluUHRyPFBJUFZpZXdDb250
cm9sbGVyPiBfcGlwVmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPE5TVmlld0NvbnRyb2xs
ZXI+IF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyOwotICAgIFJldGFpblB0cjxXZWJWaWRl
b1ZpZXdDb250YWluZXI+IF92aWRlb1ZpZXdDb250YWluZXI7Ci0gICAgUElQU3RhdGUgX3BpcFN0
YXRlOwotICAgIFJldGFpblB0cjxOU1dpbmRvdz4gX3JldHVybmluZ1dpbmRvdzsKLSAgICBOU1Jl
Y3QgX3JldHVybmluZ1JlY3Q7Ci0gICAgQk9PTCBfcGxheWluZzsKLSAgICBCT09MIF9kaWRSZXF1
ZXN0RXhpdGluZ1BJUDsKLSAgICBCT09MIF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YzooV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil3ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM7Ci0tICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGU7Ci0t
ICh2b2lkKWludmFsaWRhdGU7Ci0KLS8vIFRyYWNraW5nIHZpZGVvIHBsYXliYWNrIHN0YXRlCi1A
cHJvcGVydHkgKG5vbmF0b21pYykgTlNTaXplIHZpZGVvRGltZW5zaW9uczsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBnZXR0ZXI9aXNQbGF5aW5nKSBCT09MIHBsYXlpbmc7Ci0tICh2b2lkKXVwZGF0
ZUlzUGxheWluZzooQk9PTClpc1BsYXlpbmcgbmV3UGxheWJhY2tSYXRlOihmbG9hdClwbGF5YmFj
a1JhdGU7Ci0KLS8vIEhhbmRsaW5nIFBJUCB0cmFuc2l0aW9ucwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBCT09MIGRpZFJlcXVlc3RFeGl0aW5nUElQOwotQHByb3BlcnR5IChub25h
dG9taWMsIGdldHRlcj1pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikgQk9PTCBleGl0aW5n
VG9TdGFuZGFyZEZ1bGxzY3JlZW47Ci0KLS0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6KE5T
VmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNXaW5k
b3cgKil3aW5kb3c7Ci0tICh2b2lkKWVudGVyUElQOwotLSAodm9pZClleGl0UElQOwotLSAodm9p
ZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpcmVjdCBpbldpbmRvdzooTlNXaW5kb3cg
Kil3aW5kb3c7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMKLQotQHN5bnRoZXNpemUgcGxheWluZz1fcGxheWluZzsKLUBzeW50aGVz
aXplIHZpZGVvRGltZW5zaW9ucz1fdmlkZW9EaW1lbnNpb25zOwotQHN5bnRoZXNpemUgZGlkUmVx
dWVzdEV4aXRpbmdQSVA9X2RpZFJlcXVlc3RFeGl0aW5nUElQOwotQHN5bnRoZXNpemUgZXhpdGlu
Z1RvU3RhbmRhcmRGdWxsc2NyZWVuPV9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzooV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil3ZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSB3ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7Ci0gICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Ok5v
dEluUElQOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZUZ1bGxz
Y3JlZW5TdGF0ZQotewotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsK
LSAgICBfcGlwVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXIg
cmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0VmlkZW9W
aWV3Q29udGFpbmVyRGVsZWdhdGU6bmlsXTsKLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gbmls
OwotICAgIF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyID0gbmlsOwotICAgIF9waXBTdGF0
ZSA9IFBJUFN0YXRlOjpOb3RJblBJUDsKLSAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBOTzsK
LSAgICBfZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuID0gTk87Ci0gICAgX3JldHVybmluZ1dp
bmRvdyA9IG5pbDsKLSAgICBfcmV0dXJuaW5nUmVjdCA9IE5TWmVyb1JlY3Q7Ci19Ci0KLS0gKHZv
aWQpaW52YWxpZGF0ZQotewotICAgIFtzZWxmIGludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGVdOwot
ICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSBudWxscHRyOwotICAgIF92aWRl
b0RpbWVuc2lvbnMgPSBOU1plcm9TaXplOwotfQotCi0tICh2b2lkKXVwZGF0ZUlzUGxheWluZzoo
Qk9PTClpc1BsYXlpbmcgbmV3UGxheWJhY2tSYXRlOihmbG9hdClwbGF5YmFja1JhdGUKLXsKLSAg
ICBfcGxheWluZyA9IGlzUGxheWluZyAmJiBwbGF5YmFja1JhdGU7Ci0KLSAgICBbX3BpcFZpZXdD
b250cm9sbGVyIHNldFBsYXlpbmc6X3BsYXlpbmddOwotfQotCi0tICh2b2lkKXNldFZpZGVvRGlt
ZW5zaW9uczooTlNTaXplKXZpZGVvRGltZW5zaW9ucwotewotICAgIF92aWRlb0RpbWVuc2lvbnMg
PSB2aWRlb0RpbWVuc2lvbnM7Ci0KLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldEFzcGVjdFJh
dGlvOl92aWRlb0RpbWVuc2lvbnNdOwotfQotCi0tICh2b2lkKXNldFVwUElQRm9yVmlkZW9WaWV3
OihOU1ZpZXcgKil2aWRlb1ZpZXcgd2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgaW5XaW5kb3c6KE5T
V2luZG93ICopd2luZG93Ci17Ci0gICAgQVNTRVJUKCFfcGlwVmlld0NvbnRyb2xsZXIpOwotICAg
IEFTU0VSVCghX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIpOwotICAgIEFTU0VSVCghX3Zp
ZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAgICBfcGlwVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFth
bGxvY1BJUFZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgW19waXBWaWV3Q29u
dHJvbGxlciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFVz
ZXJDYW5SZXNpemU6WUVTXTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFBsYXlpbmc6X3Bs
YXlpbmddOwotICAgIFtzZWxmIHNldFZpZGVvRGltZW5zaW9uczpOU0VxdWFsU2l6ZXMoX3ZpZGVv
RGltZW5zaW9ucywgTlNaZXJvU2l6ZSkgPyBmcmFtZS5zaXplIDogX3ZpZGVvRGltZW5zaW9uc107
Ci0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKLSAgICAgICAg
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwo
KS0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdEZpbGwpOwotCi0gICAgX3ZpZGVvVmlld0NvbnRhaW5lciA9IGFkb3B0
TlMoW1tXZWJWaWRlb1ZpZXdDb250YWluZXIgYWxsb2NdIGluaXRXaXRoRnJhbWU6ZnJhbWVdKTsK
LSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTpz
ZWxmXTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBhZGRTdWJ2aWV3OnZpZGVvVmlld107Ci0g
ICAgdmlkZW9WaWV3LmZyYW1lID0gW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXTsKLSAgICB2
aWRlb1ZpZXcuYXV0b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hl
aWdodFNpemFibGU7Ci0KLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciA9IGFkb3B0
TlMoW1tOU1ZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW192aWRlb1ZpZXdDb250
YWluZXJDb250cm9sbGVyIHNldFZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKV07Ci0gICAg
W3dpbmRvdy5jb250ZW50VmlldyBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkg
cG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsKLX0KLQotLSAodm9pZCll
bnRlclBJUAotewotICAgIGlmIChfcGlwU3RhdGUgPT0gUElQU3RhdGU6OkluUElQKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgdmlld10ubGF5
ZXIuYmFja2dyb3VuZENvbG9yID0gQ0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JCbGFj
ayk7Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBwcmVzZW50Vmlld0NvbnRyb2xsZXJBc1BpY3R1
cmVJblBpY3R1cmU6X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIuZ2V0KCldOwotICAgIF9w
aXBTdGF0ZSA9IFBJUFN0YXRlOjpJblBJUDsKLX0KLQotLSAodm9pZClleGl0UElQCi17Ci0gICAg
aWYgKF9waXBTdGF0ZSAhPSBQSVBTdGF0ZTo6SW5QSVAgfHwgIV9waXBWaWV3Q29udHJvbGxlciB8
fCAhX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckNv
bnRyb2xsZXIgdmlld10ubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gQ0dDb2xvckdldENvbnN0YW50
Q29sb3Ioa0NHQ29sb3JDbGVhcik7Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBkaXNtaXNzVmll
d0NvbnRyb2xsZXI6X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIuZ2V0KCldOwotICAgIF9w
aXBTdGF0ZSA9IFBJUFN0YXRlOjpFeGl0aW5nUElQOwotfQotCi0tICh2b2lkKWV4aXRQSVBBbmlt
YXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwotewot
ICAgIF9yZXR1cm5pbmdXaW5kb3cgPSB3aW5kb3c7Ci0gICAgX3JldHVybmluZ1JlY3QgPSByZWN0
OwotICAgIAotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UmVwbGFjZW1lbnRSZWN0OnJlY3Rd
OwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UmVwbGFjZW1lbnRXaW5kb3c6d2luZG93XTsK
LQotICAgIFtzZWxmIGV4aXRQSVBdOwotfQotCi0vLyBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxl
Z2F0ZQotCi0tICh2b2lkKWJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2Vi
VmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyCi17Ci0gICAgaWYgKCFfdmlk
ZW9WaWV3Q29udGFpbmVyIHx8ICFfcGlwVmlld0NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVF9VTlVTRUQodmlkZW9WaWV3Q29udGFpbmVyLCB2aWRlb1ZpZXdDb250YWlu
ZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoW192aWRl
b1ZpZXdDb250YWluZXIgYm91bmRzXSk7Ci19Ci0KLS0gKHZvaWQpc3VwZXJ2aWV3RGlkQ2hhbmdl
Rm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdD
b250YWluZXIKLXsKLSAgICBpZiAoIV92aWRlb1ZpZXdDb250YWluZXIgfHwgIV9waXBWaWV3Q29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHZpZGVvVmlld0NvbnRhaW5l
ciA9PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsKLQotICAgIGlmICghW3ZpZGVvVmlld0NvbnRhaW5l
ciBpc0Rlc2NlbmRhbnRPZjpbX3BpcFZpZXdDb250cm9sbGVyIHZpZXddXSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gT25jZSB0aGUgdmlldyBpcyBtb3ZlZCBpbnRvIHRoZSBwaXAgdmlldywg
bWFrZSBzdXJlIGl0IHJlc2l6ZXMgd2l0aCB0aGUgcGlwIHZpZXcuCi0gICAgdmlkZW9WaWV3Q29u
dGFpbmVyLmZyYW1lID0gW3ZpZGVvVmlld0NvbnRhaW5lciBzdXBlcnZpZXddLmJvdW5kczsKLSAg
ICB2aWRlb1ZpZXdDb250YWluZXIuYXV0b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dpZHRoU2l6YWJs
ZSB8IE5TVmlld0hlaWdodFNpemFibGU7Ci19Ci0KLS8vIFBJUFZpZXdDb250cm9sbGVyRGVsZWdh
dGUKLQotLSAoQk9PTClwaXBTaG91bGRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAg
ICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgfHwgIV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCi0g
ICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBZRVM7Ci0g
ICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIoKS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7Ci0KLSAgICByZXR1
cm4gTk87Ci19Ci0KLS0gKHZvaWQpcGlwRGlkQ2xvc2U6KFBJUFZpZXdDb250cm9sbGVyICopcGlw
Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwot
Ci0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSAmJiBfdmlkZW9W
aWV3Q29udGFpbmVyICYmIF9yZXR1cm5pbmdXaW5kb3cgJiYgIU5TRXF1YWxSZWN0cyhfcmV0dXJu
aW5nUmVjdCwgTlNaZXJvUmVjdCkpIHsKLSAgICAgICAgW05TQW5pbWF0aW9uQ29udGV4dCBydW5B
bmltYXRpb25Hcm91cDpeKE5TQW5pbWF0aW9uQ29udGV4dCAqY29udGV4dCkgewotICAgICAgICAg
ICAgY29udGV4dC5hbGxvd3NJbXBsaWNpdEFuaW1hdGlvbiA9IE5POwotICAgICAgICAgICAgW192
aWRlb1ZpZXdDb250YWluZXIgc2V0RnJhbWU6X3JldHVybmluZ1JlY3RdOwotICAgICAgICAgICAg
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwo
KS0+c2V0VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOwotICAg
ICAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7Ci0KLSAgICAgICAgICAgIFtbX3JldHVybmluZ1dp
bmRvdyBjb250ZW50Vmlld10gYWRkU3VidmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpIHBv
c2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxhdGl2ZVRvOm5pbF07Ci0gICAgICAgIH0gY29tcGxl
dGlvbkhhbmRsZXI6bmlsXTsKLSAgICB9Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYykgewotICAgICAgICBpZiAoIXNlbGYuaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxz
Y3JlZW4pIHsKLSAgICAgICAgICAgIGlmIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogdmlkZW9G
dWxsc2NyZWVuTW9kZWwgPSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCgpKSB7Ci0gICAgICAgICAgICAgICAgdmlkZW9GdWxsc2NyZWVuTW9k
ZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVOb25lKTsKLSAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+
c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0KLSAgICAgICAgaWYg
KFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIgPSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcigpKQotICAgICAgICAgICAgZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRFeGl0RnVsbHNjcmVlbigpOwotICAgIH0KLX0KLQotLSAodm9pZClwaXBBY3Rpb25QbGF5OihQ
SVBWaWV3Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0g
X3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKLX0KLQotLSAodm9pZClwaXBBY3Rpb25Q
YXVzZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHBpcCwg
cGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwotfQotCi0tICh2b2lkKXBp
cEFjdGlvblN0b3A6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNF
RChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwotCi0gICAgaWYgKCFfd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsID0gX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgcGxh
eWJhY2tTZXNzaW9uTW9kZWwtPnBhdXNlKCk7Ci0KLSAgICAvLyBGSVhNRSAyNTA5NjE3MDogU2hv
dWxkIGFuaW1hdGUgb25seSBpZiB0aGUgcGFnZSB3aXRoIHRoZSB2aWRlbyBpcyB1bm9ic2N1cmVk
LiBGb3Igbm93LCBhbHdheXMgY2xvc2Ugd2l0aG91dCBhbmltYXRpb24uCi0gICAgW3NlbGYgZXhp
dFBJUF07Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICA6
IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLXsK
LSAgICBBU1NFUlQobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCkpOwotICAgIGF1dG8gbW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+
d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKLSAgICBtb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsK
LSAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzptb2Rl
bC0+aXNQbGF5aW5nKCkgbmV3UGxheWJhY2tSYXRlOm1vZGVsLT5wbGF5YmFja1JhdGUoKV07Ci19
Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6fldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYygpCi17Ci0gICAgaWYgKG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBp
ZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKiBtb2RlbCkKLXsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsID0gbW9kZWw7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwp
Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRXZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2
ZXIpCi17Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldE1vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgfCBtb2RlOwot
ICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tb2Rl
ID0gbmV3TW9kZTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhck1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgJiB+bW9k
ZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
bW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cmF0ZUNoYW5nZWQoYm9v
bCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBbdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzppc1BsYXlpbmcgbmV3UGxheWJhY2tSYXRl
OnBsYXliYWNrUmF0ZV07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjplbnN1cmVDb250cm9sc01hbmFnZXIoKQotewotICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlLT5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjT2JqQyAqV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlT2JqQykKLSAgICAgICAgbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDID0g
YWRvcHROUyhbW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgYWxsb2NdIGluaXRX
aXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOnRoaXNdKTsKLQotICAgIHJldHVybiBt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMuZ2V0KCk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhv
c3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2lu
ZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9v
bCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4s
ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbiglcCksIGlu
aXRpYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCwgbW9kZTolZCIsIHRo
aXMsIGluaXRpYWxSZWN0LngoKSwgaW5pdGlhbFJlY3QueSgpLCBpbml0aWFsUmVjdC53aWR0aCgp
LCBpbml0aWFsUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93LCBtb2RlKTsKLQotICAgIFVOVVNF
RF9QQVJBTShhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOwotICAgIEFTU0VSVChtb2Rl
ID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBp
Y3R1cmUpOwotCi0gICAgbV9tb2RlID0gbW9kZTsKLQotICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDKCkgc2V0VXBQSVBGb3JWaWRlb1ZpZXc6JmxheWVySG9zdGVkVmlldyB3aXRoRnJh
bWU6KE5TUmVjdClpbml0aWFsUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOwotCi0gICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
LSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVk
VGhpcywgdGhpc10gewotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0g
ICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVu
KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
bnRlckZ1bGxzY3JlZW4oKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAgICBpZiAo
bW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpIHsKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyBlbnRlclBJUF07Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
Ci0gICAgICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01h
bmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOllFU107Ci0jZW5kaWYKLQotICAgICAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfQotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50
UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQotewotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbigl
cCksIGZpbmFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBm
aW5hbFJlY3QueCgpLCBmaW5hbFJlY3QueSgpLCBmaW5hbFJlY3Qud2lkdGgoKSwgZmluYWxSZWN0
LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOwotCi0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQotICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tD
b250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKLSNlbmRpZgot
Ci0gICAgaWYgKFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZGlkUmVxdWVzdEV4
aXRpbmdQSVBdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZmluYWxSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsK
LSAgICBlbHNlCi0gICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhp
dFBJUEFuaW1hdGluZ1RvUmVjdDpmaW5hbFJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0
aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKCVwKSwgbW9k
ZTolZCIsIHRoaXMsIG1vZGUpOwotCi0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQotICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9s
c01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKLSNlbmRpZgotCi0gICAg
aWYgKFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZGlkUmVxdWVzdEV4aXRpbmdQ
SVBdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxs
c2NyZWVuID0gbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVTdGFuZGFyZDsKLSAgICAvLyBPbiBNYWMsIHN0YW5kYXJkIGZ1bGxzY3JlZW4gaXMgaGFuZGxl
ZCBieSB0aGUgRnVsbHNjcmVlbiBBUEkgYW5kIG5vdCBieSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLgotICAgIC8vIEp1c3QgdXBkYXRlIG1fbW9kZSBkaXJlY3RseSB0byBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCBpbiB0aGF0IGNhc2UgdG8ga2Vl
cAotICAgIC8vIG1fbW9kZSBpbiBzeW5jIHdpdGggdGhlIGZ1bGxzY3JlZW4gbW9kZSBpbiBIVE1M
TWVkaWFFbGVtZW50LgotICAgIGlmIChpc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikKLSAg
ICAgICAgbV9tb2RlID0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQ7Ci0KLSAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNldEV4
aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjppc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbl07
Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCkK
LXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAgICBbbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07Ci0KLSAgICBpZiAobV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRDbGVhbnVwRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6aW52YWxpZGF0ZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoJXApIiwgdGhpcyk7Ci0KLSAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsID0gbmlsOwotICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
ID0gbmlsOwotCi0gICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLQotICAgIFttX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU9iakMgaW52YWxpZGF0ZV07Ci0gICAgbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDID0gbmlsOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGljIGNv
bnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCi17Ci0gICAgcmV0dXJuIHZhbCA/ICJ0cnVl
IiA6ICJmYWxzZSI7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJl
Y3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpCi17Ci0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5U
b0lubGluZSglcCksIHZpc2libGU6JXMsIGlubGluZVJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFy
ZW50V2luZG93OiVwIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSwgaW5saW5lUmVjdC54KCks
IGlubGluZVJlY3QueSgpLCBpbmxpbmVSZWN0LndpZHRoKCksIGlubGluZVJlY3QuaGVpZ2h0KCks
IHBhcmVudFdpbmRvdyk7Ci0KLSAgICBpZiAoIXZpc2libGUpIHsKLSAgICAgICAgW21fd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChwYXJlbnRXaW5kb3cpOwotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KWlubGluZVJlY3Qg
aW5XaW5kb3c6cGFyZW50V2luZG93XTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcm
KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCglcCksIGVuYWJsZWQ6JXMiLCB0aGlzLCBib29sU3Ry
aW5nKGVuYWJsZWQpKTsKLQotICAgIGlmIChlbmFibGVkICYmIG1fbW9kZSA9PSBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQotICAgICAg
ICBleGl0RnVsbHNjcmVlbihJbnRSZWN0KCksIG5pbCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKLXsKLSAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlk
ZW9DaGFuZ2VkKCVwKTolcyIsIHRoaXMsIGJvb2xTdHJpbmcoaGFzVmlkZW8pKTsKLQotICAgIGlm
ICghaGFzVmlkZW8pCi0gICAgICAgIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRGltZW5zaW9uc0NoYW5n
ZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRGltZW5zaW9uc0NoYW5n
ZWQoJXApLCB3aWR0aDolLjBmLCBoZWlnaHQ6JS4wZiIsIHRoaXMsIHZpZGVvRGltZW5zaW9ucy53
aWR0aCgpLCB2aWRlb0RpbWVuc2lvbnMuaGVpZ2h0KCkpOwotCi0gICAgLy8gV2lkdGggYW5kIGhl
aWdodCBjYW4gYmUgemVybyB3aGVuIHdlIGFyZSB0cmFuc2l0aW9uaW5nIGZyb20gb25lIHZpZGVv
IHRvIGFub3RoZXIuIElnbm9yZSB6ZXJvIHZhbHVlcy4KLSAgICBpZiAoIXZpZGVvRGltZW5zaW9u
cy5pc1plcm8oKSkKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBz
ZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4o
KSBjb25zdAotewotICAgIHJldHVybiBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpICYmIFttX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU9iakMgaXNQbGF5aW5nXTsKLX0KLQotYm9vbCBzdXBwb3J0c1Bp
Y3R1cmVJblBpY3R1cmUoKQotewotICAgIHJldHVybiBQSVBMaWJyYXJ5KCkgJiYgZ2V0UElQVmll
d0NvbnRyb2xsZXJDbGFzcygpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCmluZGV4IDRhMTcwYTM2NzZhMTkwM2Q0NzRiOTA5MWNjYzkxMjE0NmM3ZjE4
ODEuLjg4NjljMDE3Y2I3ZGNmMzFmMzY0N2UzZGE0NjBmYTlhNzA0MjZjZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTMxOSw4ICszMTksOCBAQAogCiAKICNpZiBQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSNpbXBvcnQgPFdl
YkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQV9J
TlRFUkFDVElPTikKQEAgLTkyNjIsMTEgKzkyNjIsMTEgQEAgLSAodm9pZClfc2V0VXBQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9u
TW9kZWwpCi0gICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICAgICAgX3ByaXZhdGUt
PnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmNyZWF0ZSgpOwogICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbC0+c2V0TWVkaWFF
bGVtZW50KCZtZWRpYUVsZW1lbnQpOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKQotICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
ID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoKl9wcml2YXRlLT5wbGF5
YmFja1Nlc3Npb25Nb2RlbCk7CisgICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UgPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBs
YXliYWNrU2Vzc2lvbk1vZGVsKTsKIAogICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaCBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAppbmRleCBhNzhiMDkwZTA3YmU0MzYx
OTZhNjk1Y2ExMjg3ZTg3OGQyNjY2MWNjLi5iZGVkZjc3M2RkZmRlMDY2ZmE1MmUxNzU2Y2I2ODIy
Mjc0NmNmNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCkBAIC01
NCw4ICs1NCw4IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93OwogY2xh
c3MgVmFsaWRhdGlvbkJ1YmJsZTsKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsK
LWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OworY2xhc3MgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ7CiAjZW5kaWYKIH0KIApAQCAtMzM4LDggKzMzOCw4IEBAIHByaXZhdGU6CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQot
ICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4g
cGxheWJhY2tTZXNzaW9uTW9kZWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYz4gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJhY2tTZXNzaW9u
TW9kZWw7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4g
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
RGF0YS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5kZXgg
Nzc5NzM2YTE2YWZmNjBlM2ZhNWEwYWM3ZWEzNjQwNmRjMzY0ZjJlNC4uZjkzMGZhOTZjODg1YmJm
Zjc0MDRmMDcyMzU5Njc1OTU1ZmM0YjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3RGF0YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXdEYXRhLm1tCkBAIC01MSw4ICs1MSw4IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29yZS9X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogQk9PTCBhcHBsaWNhdGlvbklzVGVybWlu
YXRpbmcgPSBOTzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDgzYWQwZThhNTc4
ZTEyZDY4NzU1NjBiMDg3ODFhNzc0NzE4NDQ2MTUuLmUyNGUzMDU4YjY3MmI3ODBlY2Q0OTc3ZTY3
MjYyNGJjODRkMTMwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKKysrIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTU0LDgg
KzE1NCw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYlBhc3RlYm9hcmRQcm94eSBc
CiAgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yIFwKICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eSBcCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciBcCi0gICAgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5IFwKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIFwKKyAgICBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgXAogICAgIFdlYlByb2Nlc3MgXAogICAgIFdlYlBy
b2Nlc3NDb25uZWN0aW9uIFwKICAgICBXZWJQcm9jZXNzUG9vbCBcCkBAIC0xNjgsOCArMTY4LDgg
QEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViU29ja2V0U3RyZWFtIFwKICAgICBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXIgXAogICAgIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
IFwKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIFwKLSAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkgXAorICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgXAorICAgIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eSBcCiAjCiAKIFNDUklQVFMgPSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDY0MDcxY2JmMTAx
ZjAxN2RkZThjYWE1MzgxMjdmM2VhMzliYjc3YzQuLjliMmQ1OWE4YTU2YWE5NmFhNGRkYjI0NWZi
MWQ1Njc3MWQ4MjRmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogI2ltcG9ydCAiUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgi
CiAjaW1wb3J0ICJXS1BERlZpZXcuaCIKICNpbXBvcnQgIldLUGFzc3dvcmRWaWV3LmgiCiAjaW1w
b3J0ICJXS1Njcm9sbFZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlclJl
Z2lzdHJ5LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNp
bXBvcnQgIl9XS0RyYWdnYWJsZUVsZW1lbnRJbmZvSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlci5oIgogI2ltcG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1ODBmOTU3N2YwNDQzMGNjYzY0Y2Yz
M2NlZTdlN2E4OWI5NTNmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgKQEAgLTAsMCArMSwyMzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nl
c3Npb25Nb2RlbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg+CisjZWxzZQorI2luY2x1ZGUgPFdlYkNvcmUv
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElP
UykKK3R5cGVkZWYgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQgUGxhdGZv
cm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisjZWxzZQordHlwZWRlZiBXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2Ns
YXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0IGZpbmFsOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ+LCBwdWJsaWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWwgIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gY3JlYXRlKFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5QbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQoKSB7IH0KKworICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9t
YW5hZ2VyID0gbnVsbHB0cjsgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICB2
b2lkIGFkZENsaWVudChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIGZpbmFs
OworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50JilmaW5hbDsKKworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSk7CisgICAgdm9p
ZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlKTsKKyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5n
ZWQoZG91YmxlKTsKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7
CisgICAgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRl
KTsKKyAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiwg
ZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAg
IHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIGF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFT
ZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBhdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAg
IHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCwgUGxheWJhY2tT
ZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKTsKKyAg
ICB2b2lkIG11dGVkQ2hhbmdlZChib29sKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OworCisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0KFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29u
dGV4dElkKQorICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKKyAgICAgICAgLCBtX2NvbnRl
eHRJZChjb250ZXh0SWQpCisgICAgeworICAgIH0KKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsCisgICAgdm9pZCBwbGF5KCkgZmluYWw7CisgICAgdm9pZCBwYXVzZSgpIGZpbmFsOworICAg
IHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7CisgICAgdm9pZCBiZWdpblNjcnViYmluZygp
IGZpbmFsOworICAgIHZvaWQgZW5kU2NydWJiaW5nKCkgZmluYWw7CisgICAgdm9pZCBzZWVrVG9U
aW1lKGRvdWJsZSkgZmluYWw7CisgICAgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7
CisgICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOworICAgIHZvaWQgYmVnaW5T
Y2FubmluZ0JhY2t3YXJkKCkgZmluYWw7CisgICAgdm9pZCBlbmRTY2FubmluZygpIGZpbmFsOwor
ICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkgZmluYWw7CisgICAgdm9p
ZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgdG9n
Z2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOworICAgIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5h
bDsKKyAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOworCisgICAgZG91YmxlIHBsYXliYWNr
U3RhcnRlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrU3RhcnRlZFRpbWU7
IH0KKyAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2R1cmF0aW9u
OyB9CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jdXJy
ZW50VGltZTsgfQorICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2J1ZmZlcmVkVGltZTsgfQorICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9pc1BsYXlpbmc7IH0KKyAgICBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9pc1NjcnViYmluZzsgfQorICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcGxheWJhY2tSYXRlOyB9CisgICAgUmVmPFdlYkNvcmU6OlRpbWVS
YW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVrYWJsZVJh
bmdlcy5jb3B5UmVmKCk7IH0KKyAgICBkb3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlm
aWVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1v
ZGlmaWVkVGltZTsgfQorICAgIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdCB7IHJl
dHVybiBtX2xpdmVVcGRhdGVJbnRlcnZhbDsgfQorICAgIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jYW5QbGF5RmFzdFJldmVyc2U7IH0KKyAgICBWZWN0
b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsg
fQorICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleDsgfQorICAgIFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQorICAgIHVp
bnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7IH0KKyAgICBib29sIGV4dGVybmFsUGxheWJhY2tF
bmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZDsg
fQorICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBl
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGU7IH0KKyAgICBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tM
b2NhbGl6ZWREZXZpY2VOYW1lOyB9CisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQ7IH0KKyAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGVkOyB9
CisKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKKyAgICB1aW50
NjRfdCBtX2NvbnRleHRJZDsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIGRvdWJsZSBtX3BsYXliYWNrU3RhcnRlZFRpbWUg
eyAwIH07CisgICAgYm9vbCBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSB7IGZhbHNl
IH07CisgICAgZG91YmxlIG1fZHVyYXRpb24geyAwIH07CisgICAgZG91YmxlIG1fY3VycmVudFRp
bWUgeyAwIH07CisgICAgZG91YmxlIG1fYnVmZmVyZWRUaW1lIHsgMCB9OworICAgIGJvb2wgbV9p
c1BsYXlpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1NjcnViYmluZyB7IGZhbHNlIH07Cisg
ICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAwIH07CisgICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5n
ZXM+IG1fc2Vla2FibGVSYW5nZXMgeyBXZWJDb3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKSB9Owor
ICAgIGRvdWJsZSBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgeyAwIH07Cisg
ICAgZG91YmxlIG1fbGl2ZVVwZGF0ZUludGVydmFsIHsgMCB9OworICAgIGJvb2wgbV9jYW5QbGF5
RmFzdFJldmVyc2UgeyBmYWxzZSB9OworICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKKyAgICB1aW50NjRfdCBtX2F1
ZGlvTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9OworICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNl
bGVjdGlvbk9wdGlvbj4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOworICAgIHVpbnQ2
NF90IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKKyAgICBib29sIG1fZXh0ZXJu
YWxQbGF5YmFja0VuYWJsZWQgeyBmYWxzZSB9OworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsg
UGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lIH07CisgICAgU3RyaW5nIG1fZXh0
ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWU7CisgICAgYm9vbCBtX3dpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9
OworfTsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNv
dW50ZWQ8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgUGxh
dGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgp
OworICAgIHZvaWQgcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OworICAgIGZyaWVuZCBj
bGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CisKKyAgICBleHBsaWNpdCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5Jik7CisgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKworICAgIHR5
cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgUmVm
UHRyPFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBs
ZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZvcm1QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAg
Ly8gTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisgICAgdm9pZCBzZXRVcFBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9p
ZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgdm9pZCByZXNldE1lZGlhU3Rh
dGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKTsKKyAg
ICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVm
ZmVyZWRUaW1lKTsKKyAgICB2b2lkIHNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRv
dWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKKyAgICB2
b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZh
bHVlKTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAg
dm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsK
KyAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXpl
ZERldmljZU5hbWUpOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pOworICAgIHZvaWQgcGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFy
dGVkVGltZSk7CisgICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
aXNQbGF5aW5nLCBkb3VibGUgcmF0ZSk7CisgICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVu
dElEUmVzcG9uc2UodWludDY0X3QsIFN0cmluZykgY29uc3Q7CisgICAgdm9pZCBtdXRlZENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKKworICAgIC8vIE1lc3NhZ2VzIHRv
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKyAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQ
bGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGlt
ZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsK
KyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQg
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5k
ZXgpOworICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNl
dE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisKKyAgICBXZWJQYWdlUHJveHkqIG1f
cGFnZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRl
eHRNYXA7CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Cisg
ICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWM4Zjc5ZDFiMjQ1NWE3ODBm
ODIyN2EzZWZhNDkxNjlmZDA1ZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpA
QCAtMCwwICsxLDQ1IEBACisjIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKK21lc3NhZ2VzIC0+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSB7CisgICAgUmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBDdXJy
ZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRv
dWJsZSBob3N0VGltZSkKKyAgICBCdWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKKyAgICBTZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFu
Z2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkK
KyAgICBDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
YWx1ZSkKKyAgICBBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgTGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25P
cHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgQXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCisgICAgTGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBFeHRlcm5hbFBsYXliYWNrUHJv
cGVydGllc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90
IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQorICAgIFdpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJs
ZWQpCisgICAgRHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0
aW9uKQorICAgIFBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCisgICAgUmF0ZUNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCisgICAgTXV0ZWRDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7CisgICAgU2V0VXBQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQ2xlYXJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlcigpCisKKyAgICBIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWlu
dDY0X3QgY29udGV4dElkLCBTdHJpbmcgaWQpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQyYzM5OWU4ZGI4NmE5MTUwNWEyYWRkNjY0NGRkODkwMzYyMjdl
NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCkBAIC0wLDAgKzEsNTY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oIgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQ
cm94eS5oIgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworI3ByYWdtYSBtYXJrIC0gUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFk
ZCgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJlbW92
ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VS
VChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xpZW50cy5yZW1vdmUoJmNs
aWVudCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KCkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnBsYXkobV9jb250ZXh0SWQp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGF1c2UoKQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGF1c2UobV9jb250ZXh0SWQpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBsYXlTdGF0
ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpi
ZWdpblNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5iZWdpblNjcnViYmluZyhtX2NvbnRleHRJZCk7CisKKyAgICBtX2lzU2NydWJiaW5nID0gdHJ1
ZTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZygp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY3J1YmJpbmco
bV9jb250ZXh0SWQpOworCisgICAgbV9pc1NjcnViYmluZyA9IGZhbHNlOworICAgIG1fcGxheWJh
Y2tTdGFydGVkVGltZU5lZWRzVXBkYXRlID0gaXNQbGF5aW5nKCk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIGlm
IChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwg
dGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhk
b3VibGUgdGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZh
c3RTZWVrKG1fY29udGV4dElkLCB0aW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5u
aW5nQmFja3dhcmQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6ZW5kU2Nhbm5pbmcoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25J
ZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBvcHRp
b25JZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRv
Z2dsZU11dGVkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnRv
Z2dsZU11dGVkKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5zZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91
YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCit7CisgICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lID0g
cGxheWJhY2tTdGFydGVkVGltZTsKKyAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0
ZSA9IGZhbHNlOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRp
b25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBtX2R1cmF0aW9uID0gZHVyYXRpb247
CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+ZHVy
YXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUpCit7CisgICAgbV9j
dXJyZW50VGltZSA9IGN1cnJlbnRUaW1lOworICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKKyAgICBpZiAobV9wbGF5YmFja1N0
YXJ0ZWRUaW1lTmVlZHNVcGRhdGUpCisgICAgICAgIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2Vk
KGN1cnJlbnRUaW1lKTsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAg
ICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFu
Z2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgbV9idWZmZXJlZFRpbWUgPSBidWZmZXJl
ZFRpbWU7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVu
dC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBs
YXliYWNrUmF0ZSkKK3sKKyAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKKyAgICBtX3BsYXli
YWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKKyAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYgc2Vla2FibGVSYW5nZXMsIGRvdWJsZSBsYXN0TW9k
aWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIG1fc2Vla2FibGVS
YW5nZXMgPSBzZWVrYWJsZVJhbmdlczsKKyAgICBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2Rp
ZmllZFRpbWUgPSBsYXN0TW9kaWZpZWRUaW1lOworICAgIG1fbGl2ZVVwZGF0ZUludGVydmFsID0g
bGl2ZVVwZGF0ZUludGVydmFsOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQor
ICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdlcywgbGFz
dE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5
RmFzdFJldmVyc2UpCit7CisgICAgbV9jYW5QbGF5RmFzdFJldmVyc2UgPSBjYW5QbGF5RmFzdFJl
dmVyc2U7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVu
dC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCkKK3sKKyAg
ICBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnM7CisgICAgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4OworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQt
PmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9ucywgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cywgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2xlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOworICAg
IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7
CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5s
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zLCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0
X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gc2Vs
ZWN0ZWRJbmRleDsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2xlZ2li
bGVNZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4OworCisgICAgZm9yIChhdXRvKiBj
bGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3Ry
aW5nJiBsb2NhbGl6ZWROYW1lKQoreworICAgIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBl
bmFibGVkOworICAgIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgPSB0eXBlOworICAgIG1f
ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUgPSBsb2NhbGl6ZWROYW1lOworCisg
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkTmFtZSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQoYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKK3sKKyAgICBt
X3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQ7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVu
dC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11
dGVkQ2hhbmdlZChib29sIG11dGVkKQoreworICAgIG1fbXV0ZWQgPSBtdXRlZDsKKyAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQo
bXV0ZWQpOworfQorCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkK
KworUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KHBhZ2UpKTsKK30KKworUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFn
ZVByb3h5JiBwYWdlKQorICAgIDogbV9wYWdlKCZwYWdlKQoreworICAgIG1fcGFnZS0+cHJvY2Vz
cygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKK30K
KworUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+UGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5KCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGludmFsaWRh
dGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUo
KQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZSA9IG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8m
IHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSB0dXBsZTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsK
KyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5j
bGVhcigpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNl
VHVwbGUgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dD4gbW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywg
Y29udGV4dElkKTsKKyAgICBSZWY8UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGlu
dGVyZmFjZSA9IFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9kZWwp
OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShp
bnRlcmZhY2UpKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVy
ZmFjZVR1cGxlJiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29u
dGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOworICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpKTsKK30KKworUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9jbGllbnRDb3VudHMuYWRk
KGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZW1v
dmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBpZiAoIW1fY2xp
ZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBlbnN1
cmVJbnRlcmZhY2UoY29udGV4dElkKS5pbnZhbGlkYXRlKCk7CisgICAgbV9jb250ZXh0TWFwLnJl
bW92ZShjb250ZXh0SWQpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyCisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRV
cFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNv
bnRleHRJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkKQorICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkKTsKKworICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4dElk
OworICAgIGVuc3VyZUludGVyZmFjZShtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkuZW5zdXJl
Q29udHJvbHNNYW5hZ2VyKCk7CisgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCk7CisKKyAgICBtX3BhZ2UtPnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hh
bmdlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQpOworI2VuZGlmCit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdl
ckNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4
dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisgICAgbV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQgPSAwOworICAgIG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsK
KyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVzZXRNZWRp
YVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKS5yZXNldE1lZGlhU3RhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYnVmZmVy
ZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6c2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RN
b2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgUmVmPFRpbWVS
YW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHJhbmdlIDogcmFuZ2VzKSB7CisgICAgICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5m
aXJzdCkpOworICAgICAgICBBU1NFUlQoaXNmaW5pdGUocmFuZ2Uuc2Vjb25kKSk7CisgICAgICAg
IEFTU0VSVChyYW5nZS5zZWNvbmQgPj0gcmFuZ2UuZmlyc3QpOworICAgICAgICB0aW1lUmFuZ2Vz
LT5hZGQocmFuZ2UuZmlyc3QsIHJhbmdlLnNlY29uZCk7CisgICAgfQorCisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5zZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1vZGlm
aWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sIHZhbHVlKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY2FuUGxheUZhc3RS
ZXZlcnNlQ2hhbmdlZCh2YWx1ZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5k
ZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQ
cm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMy
X3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUgPSBzdGF0aWNf
Y2FzdDxQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU+KHRh
cmdldFR5cGUpOworICAgIEFTU0VSVCh0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJn
ZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBl
VFZPdXQgfHwgdHlwZSA9PSBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUpOwor
CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFi
bGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm11
dGVkQ2hhbmdlZChtdXRlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCit7
CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGlt
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkK
K3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2Vk
KHBsYXliYWNrU3RhcnRlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91
YmxlIHJhdGUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yYXRlQ2hhbmdlZChpc1Bs
YXlpbmcsIHJhdGUpOworfQorCisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpo
YW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJp
bmcgaWRlbnRpZmllcikgY29uc3QKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKGNvbnRl
eHRJZCA9PSBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgbV9wYWdlLT5oYW5k
bGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UoaWRlbnRpZmllcik7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShjb250ZXh0SWQpOworICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsKKyNl
bmRpZgorfQorCisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyCisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5KHVpbnQ2NF90IGNv
bnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OlBsYXkoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQbGF5
U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdp
blNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpF
bmRTY3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIHRpbWUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWsodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkZhc3RTZWVrKGNvbnRleHRJZCwgdGltZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVn
aW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQo
Y29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQor
eworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVn
aW5TY2FubmluZ0JhY2t3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29u
dGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6RW5kU2Nhbm5pbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNv
bnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGNvbnRleHRJZCwg
aW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xl
UGljdHVyZUluUGljdHVyZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OlRvZ2dsZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElk
LCBib29sIG11dGVkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1fcGFnZS0+cGFnZUlEKCkp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENvbnRyb2xs
ZWRFbGVtZW50SUQoKQoreworICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAg
ICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpIYW5k
bGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOworfQorCitQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2Uo
KQoreworICAgIGlmICghbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICByZXR1cm4gJmludGVyZmFjZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE3NzI1NmU0YWVlODFlZDQ2Y2NhZDZmZGUyNjA5YjNlYmM0
OTZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9W
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPFdlYkNvcmUvVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8V2ViQ29yZS9W
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9T
KQordHlwZWRlZiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBQbGF0Zm9y
bVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyNlbHNlCit0eXBlZGVmIFdlYkNvcmU6OlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYyBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xh
c3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OworCitjbGFzcyBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWwKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVk
PFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlbAorICAgICwgcHVibGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyICB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ+IGNyZWF0ZShWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIs
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2
NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29u
dGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisK
KyAgICBQbGF0Zm9ybVZpZXcgKmxheWVySG9zdFZpZXcoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
SG9zdFZpZXcuZ2V0KCk7IH0KKyAgICB2b2lkIHNldExheWVySG9zdFZpZXcoUmV0YWluUHRyPFBs
YXRmb3JtVmlldz4mJiBsYXllckhvc3RWaWV3KSB7IG1fbGF5ZXJIb3N0VmlldyA9IFdURk1vdmUo
bGF5ZXJIb3N0Vmlldyk7IH0KKworcHJpdmF0ZToKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQoVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiwgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0JiwgdWludDY0X3QpOworCisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2
b2lkIGFkZENsaWVudChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJy
aWRlOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlz
aGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZy
YW1lKFdlYkNvcmU6OkZsb2F0UmVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVy
R3Jhdml0eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQorICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3ZpZGVvRGltZW5zaW9uczsgfQorCisgICAgLy8gVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIKKyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZv
aWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNj
cmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOworCisg
ICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgUmVmPFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsKKyAgICB1aW50
NjRfdCBtX2NvbnRleHRJZDsKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1WaWV3ICo+IG1fbGF5ZXJI
b3N0VmlldzsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
Kj4gbV9jbGllbnRzOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsK
KyAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OworfTsKKworY2xhc3MgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJv
eHkmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAg
dm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgYm9vbCBoYXNNb2RlKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3Q7
CisgICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNv
bnN0OworICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKKyAgICBib29sIGlz
VmlzaWJsZSgpIGNvbnN0OworCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCisgICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2Ny
ZWVuKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OworCisgICAgZXhwbGljaXQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5KFdlYlBhZ2VQcm94eSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOwor
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jikgb3ZlcnJpZGU7CisKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVN
b2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNl
VHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcgorICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVj
dCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7Cisg
ICAgdm9pZCBzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOworICAgIHZvaWQg
c2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJik7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50
UmVjdCBmaW5hbFJlY3QpOworICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KTsKKyNpZiBQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICB2b2lk
IGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQs
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Cisj
ZW5kaWYKKworICAgIC8vIE1lc3NhZ2VzIHRvIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyAgICB2
b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdp
dGhNZWRpYSA9IGZhbHNlKTsKKyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IHNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVj
dCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdl
YkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOworICAgIHZvaWQgZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgV2ViUGFnZVByb3h5
KiBtX3BhZ2U7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZh
Y2VUdXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkIHsgMCB9OworICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7
Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmVmYzNiNTA0N2VmNDdhYmExOTU3MWU3NjQzYTA3MmVjZTgyMjBhZWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorbWVz
c2FnZXMgLT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IHsKKyAgICBTZXRIYXNWaWRlbyh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCisgICAgU2V0VmlkZW9EaW1lbnNpb25z
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucykK
KyAgICBTZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2
aWRlb0xheWVySUQsIFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdT
Y2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkK
KyAgICBFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIEV4aXRGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCisgICAg
Q2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIFByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50
UmVjdCBpbmxpbmVSZWN0KQorI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQorICAgIEV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQorI2VuZGlmCit9CisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjY2I5YjI5MjE5NjgyNjg2NGYwMDkx
MDA4ZjkzMDg5ODg4YTE4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCkBAIC0wLDAgKzEsNTIy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkuaCIKKworI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKwor
I2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiVmlkZW9GdWxs
c2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQ
cm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2lt
cG9ydCA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxh
eWVyRW51bXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4K
KworI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkuaCIKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisjZW5kaWYKKworQGludGVyZmFjZSBXS0xh
eWVySG9zdFZpZXcgOiBQbGF0Zm9ybVZpZXcKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IHVpbnQzMl90IGNvbnRleHRJRDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLTGF5ZXJIb3N0
VmlldworCisjaWYgUExBVEZPUk0oSU9TKQorKyAoQ2xhc3MpbGF5ZXJDbGFzcyB7CisgICAgcmV0
dXJuIFtDQUxheWVySG9zdCBjbGFzc107Cit9CisjZWxzZQorLSAoQ0FMYXllciAqKW1ha2VCYWNr
aW5nTGF5ZXIKK3sKKyAgICByZXR1cm4gW1tbQ0FMYXllckhvc3QgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKK30KKyNlbmRpZgorCistICh1aW50MzJfdCljb250ZXh0SUQgeworICAgIHJldHVy
biBbW3NlbGYgbGF5ZXJIb3N0XSBjb250ZXh0SWRdOworfQorCistICh2b2lkKXNldENvbnRleHRJ
RDoodWludDMyX3QpY29udGV4dElEIHsKKyAgICBbW3NlbGYgbGF5ZXJIb3N0XSBzZXRDb250ZXh0
SWQ6Y29udGV4dElEXTsKK30KKworLSAoQ0FMYXllckhvc3QgKilsYXllckhvc3QgeworICAgIHJl
dHVybiAoQ0FMYXllckhvc3QgKilbc2VsZiBsYXllcl07Cit9CisKK0BlbmQKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgUExBVEZPUk0oSU9T
KSAmJiAhSEFWRShBVktJVCkKKworUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4g
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKK3sKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmludmFsaWRhdGUoKQoreworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworCit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCit7CisK
K30KKyNlbHNlCisKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAor
CitWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAg
ICA6IG1fbWFuYWdlcigmbWFuYWdlcikKKyAgICAsIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwocGxh
eWJhY2tTZXNzaW9uTW9kZWwpCisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisK
K1ZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dCgpCit7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQo
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xp
ZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29u
dGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5y
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUobV9jb250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlh
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJG
cmFtZShXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsK
K30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2
aXR5KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJH
cmF2aXR5KG1fY29udGV4dElkLCBncmF2aXR5KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRleHRJZCwg
bW9kZSk7Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojppc1Zpc2libGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX21hbmFnZXIgPyBtX21hbmFnZXItPmlzVmlzaWJsZSgp
IDogZmFsc2U7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1
cEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
ZGlkU2V0dXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4o
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlkRXhpdEZ1bGxz
Y3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZShtX2NvbnRleHRJZCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eQorCitSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5PiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBh
Z2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5KHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkpOworfQorCitWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJv
eHkmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5KQorICAgIDogbV9wYWdlKCZwYWdlKQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkocGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQoreworICAgIG1fcGFnZS0+
cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlz
KTsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp+VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5KCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlu
dmFsaWRhdGUoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFs
aWRhdGUoKQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZSA9IG51bGxwdHI7CisKKyAgICBmb3Ig
KGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZv
cm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKyAgICAgICAgc3RkOjp0aWUo
bW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRh
dGUoKTsKKyAgICAgICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVydmll
d107CisgICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOworICAgIH0KKwor
ICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRG
dWxsc2NyZWVuKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKQorICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxz
Y3JlZW4oKTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Cit7
CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAg
ICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlKCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPm1heUF1dG9tYXRpY2FsbHlT
aG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgZm9y
IChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3Rk
OjpnZXQ8MT4odHVwbGUpLT5pc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorI2VuZGlmCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlv
bkRpZEJlY29tZUFjdGl2ZSgpCit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1h
cC52YWx1ZXMoKSkKKyAgICAgICAgc3RkOjpnZXQ8MT4odHVwbGUpLT5hcHBsaWNhdGlvbkRpZEJl
Y29tZUFjdGl2ZSgpOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50
ZXJmYWNlVHVwbGUgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byYgcGxheWJhY2tTZXNzaW9u
TW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJlTW9kZWwoY29udGV4
dElkKTsKKyAgICBSZWY8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbCA9IFZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25Nb2Rl
bCwgY29udGV4dElkKTsKKyAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7Cisg
ICAgUmVmPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0
Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6Y3JlYXRlKHBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSk7CisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmFkZENsaWVudEZvckNv
bnRleHQoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuTW9k
ZWwoJm1vZGVsLmdldCgpKTsKKyAgICBpbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdU
Rk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQorCitWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJm
YWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1v
ZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitQbGF0Zm9ybVZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZSYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQsIDEpOwor
ICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUrKzsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92
ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIEFTU0VSVChtX2Ns
aWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKKworICAgIGludCBjbGllbnRDb3VudCA9
IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOworICAgIEFTU0VSVChjbGllbnRDb3VudCA+
IDApOworICAgIGNsaWVudENvdW50LS07CisKKyAgICBpZiAoY2xpZW50Q291bnQgPD0gMCkgewor
ICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+cmVtb3ZlQ2xpZW50Rm9yQ29u
dGV4dChjb250ZXh0SWQpOworICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElk
KTsKKyAgICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291
bnQpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5X
aXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0
b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpCit7CisgICAgQVNTRVJUKHZp
ZGVvTGF5ZXJJRCk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9k
ZWw7CisgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZh
Y2U7CisKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwor
CisgICAgUmV0YWluUHRyPFdLTGF5ZXJIb3N0Vmlldz4gdmlldyA9IHN0YXRpY19jYXN0PFdLTGF5
ZXJIb3N0Vmlldyo+KG1vZGVsLT5sYXllckhvc3RWaWV3KCkpOworICAgIGlmICghdmlldykgewor
ICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLTGF5ZXJIb3N0VmlldyBhbGxvY10gaW5pdF0pOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgW3ZpZXcgc2V0V2FudHNMYXllcjpZRVNdOworI2Vu
ZGlmCisgICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KHZpZXcpOworICAgIH0KKyAgICBb
dmlldyBzZXRDb250ZXh0SUQ6dmlkZW9MYXllcklEXTsKKyAgICBpZiAoaG9zdGluZ0RldmljZVNj
YWxlRmFjdG9yICE9IDEpIHsKKyAgICAgICAgLy8gSW52ZXJ0IHRoZSBzY2FsZSB0cmFuc2Zvcm0g
YWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFyOi8vcHJvYmxlbS8xODMxNjU0Mj4u
CisgICAgICAgIGZsb2F0IGludmVyc2VTY2FsZSA9IDEgLyBob3N0aW5nRGV2aWNlU2NhbGVGYWN0
b3I7CisgICAgICAgIFtbdmlldyBsYXllcl0gc2V0U3VibGF5ZXJUcmFuc2Zvcm06Q0FUcmFuc2Zv
cm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VTY2FsZSwgMSldOworICAgIH0KKwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBVSVZpZXcgKnBhcmVudFZpZXcgPSBkb3duY2FzdDxSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqbV9wYWdlLT5kcmF3aW5nQXJlYSgpKS5yZW1v
dGVMYXllclRyZWVIb3N0KCkucm9vdExheWVyKCk7CisgICAgaW50ZXJmYWNlLT5zZXR1cEZ1bGxz
Y3JlZW4oKm1vZGVsLT5sYXllckhvc3RWaWV3KCksIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCB2
aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKKyNlbHNlCisgICAg
SW50UmVjdCBpbml0aWFsV2luZG93UmVjdDsKKyAgICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3co
aW5pdGlhbFJlY3QsIGluaXRpYWxXaW5kb3dSZWN0KTsKKyAgICBpbnRlcmZhY2UtPnNldHVwRnVs
bHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5pdGlhbFdpbmRvd1JlY3QsIG1fcGFn
ZS0+cGxhdGZvcm1XaW5kb3coKSwgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYWxsb3dzUGljdHVyZUlu
UGljdHVyZSk7CisjZW5kaWYKKyAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1
cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCB2aWRlb0Z1bGxzY3JlZW5Nb2RlICYgTWVkaWFQ
bGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0SGFzVmlkZW8odWludDY0X3QgY29u
dGV4dElkLCBib29sIGhhc1ZpZGVvKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQp
Lmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBG
bG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKS52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKQoreworICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0
SWQpOworICAgIGludGVyZmFjZS5lbnRlckZ1bGxzY3JlZW4oKTsKKworICAgIC8vIE9ubHkgb25l
IGNvbnRleHQgY2FuIGJlIGluIGEgZ2l2ZW4gZnVsbCBzY3JlZW4gbW9kZSBhdCBhIHRpbWU6Cisg
ICAgZm9yIChhdXRvJiBjb250ZXh0UGFpciA6IG1fY29udGV4dE1hcCkgeworICAgICAgICBhdXRv
JiBvdGhlckNvbnRleHRJZCA9IGNvbnRleHRQYWlyLmtleTsKKyAgICAgICAgaWYgKGNvbnRleHRJ
ZCA9PSBvdGhlckNvbnRleHRJZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1
dG8mIG90aGVySW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4oY29udGV4dFBhaXIudmFsdWUpOworICAg
ICAgICBpZiAob3RoZXJJbnRlcmZhY2UtPmhhc01vZGUoaW50ZXJmYWNlLm1vZGUoKSkpCisgICAg
ICAgICAgICBvdGhlckludGVyZmFjZS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwor
ICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCit7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxs
c2NyZWVuKGZpbmFsUmVjdCk7CisjZWxzZQorICAgIEludFJlY3QgZmluYWxXaW5kb3dSZWN0Owor
ICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhmaW5hbFJlY3QsIGZpbmFsV2luZG93UmVjdCk7
CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxXaW5k
b3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3JtV2luZG93KCkpOworI2VuZGlmCit9CisKKyNpZiBQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01v
ZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29u
dGV4dElkKS5leGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodGFyZ2V0TW9kZSk7
Cit9CisjZW5kaWYKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29u
dGV4dElkKS5jbGVhbnVwRnVsbHNjcmVlbigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCit7CisgICAgbV9wYWdl
LT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlz
aWJsZSwgaW5saW5lUmVjdCk7CisjZWxzZQorICAgIEludFJlY3QgaW5saW5lV2luZG93UmVjdDsK
KyAgICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3coaW5saW5lUmVjdCwgaW5saW5lV2luZG93UmVj
dCk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5s
aW5lKHZpc2libGUsIGlubGluZVdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7
CisjZW5kaWYKK30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQorewor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKGNvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRp
ZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxzY3JlZW4oY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVs
bHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPmRpZEV4
aXRGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpk
aWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+ZGlkRW50ZXJGdWxsc2Ny
ZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBbQ0FUcmFuc2Fj
dGlvbiBmbHVzaF07CisgICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVy
dmlld107CisgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNj
cmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKworICAgIGludGVyZmFjZS0+c2V0
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAg
ICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICBtYWNoX3BvcnRfbmFtZV90IGZlbmNlUG9ydCA9IFtV
SVdpbmRvdyBfc3luY2hyb25pemVEcmF3aW5nQWNyb3NzUHJvY2Vzc2VzXTsKKyNlbHNlCisgICAg
ICAgIE1hY2hTZW5kUmlnaHQgZmVuY2VTZW5kUmlnaHQ7CisgICAgICAgIGlmIChEcmF3aW5nQXJl
YVByb3h5KiBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgICAg
IGZlbmNlU2VuZFJpZ2h0ID0gZHJhd2luZ0FyZWEtPmNyZWF0ZUZlbmNlKCk7CisgICAgICAgIG1h
Y2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gZmVuY2VTZW5kUmlnaHQubGVha1NlbmRSaWdodCgp
OworI2VuZGlmCisKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBD
OjpBdHRhY2htZW50KGZlbmNlUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgfQorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6c2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0
eUVudW0oY29udGV4dElkLCAodW5zaWduZWQpZ3Jhdml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1Zp
ZGVvSW5QaWN0dXJlSW5QaWN0dXJlRGlkQ2hhbmdlKG1fcGFnZSwgbW9kZSAmIE1lZGlhUGxheWVy
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hh
bmdlZChjb250ZXh0SWQsIG1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKworYm9vbCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpICYmIG1fcGFnZS0+aXNJbldpbmRvdygpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3Bh
Z2UtPmlzVmlld1Zpc2libGUoKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlz
Vmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzMzYmU2NWE5OGMyMTlj
MGRiOTFkMDMyODQyOTVlY2U1ZjU0NzNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTZWxlY3Rpb25PcHRpb24uaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxXZWJDb3Jl
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShJT1MpCi10eXBlZGVmIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotI2Vsc2UKLXR5cGVkZWYgV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIFBsYXRmb3JtV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBX
ZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7Ci0KLWNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCBmaW5hbDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgcHVibGljIFdlYkNvcmU6OldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsICB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBjb250
ZXh0SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0KCkgeyB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7
IH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQo
V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lk
IHJlbW92ZUNsaWVudChXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpZmlu
YWw7Ci0KLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpOwotICAgIHZvaWQgY3VycmVu
dFRpbWVDaGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSk7Ci0gICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUpOwotICAgIHZv
aWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSk7Ci0gICAg
dm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYsIGRvdWJsZSBs
YXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKLSAgICB2b2lkIGNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgYXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxl
Z2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsK
LSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wsIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJik7Ci0gICAg
dm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCk7Ci0gICAgdm9p
ZCBtdXRlZENoYW5nZWQoYm9vbCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKLQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90
IGNvbnRleHRJZCkKLSAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCi0gICAgICAgICwgbV9j
b250ZXh0SWQoY29udGV4dElkKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbAotICAgIHZvaWQgcGxheSgpIGZpbmFsOwotICAgIHZvaWQgcGF1c2UoKSBmaW5h
bDsKLSAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOwotICAgIHZvaWQgYmVnaW5TY3J1
YmJpbmcoKSBmaW5hbDsKLSAgICB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFsOwotICAgIHZvaWQg
c2Vla1RvVGltZShkb3VibGUpIGZpbmFsOwotICAgIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUp
IGZpbmFsOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsKLSAgICB2b2lk
IGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOwotICAgIHZvaWQgZW5kU2Nhbm5pbmcoKSBm
aW5hbDsKLSAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpIGZpbmFsOwot
ICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2
b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSBmaW5hbDsKLSAgICB2b2lkIHRvZ2dsZU11dGVk
KCkgZmluYWw7Ci0gICAgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKLQotICAgIGRvdWJsZSBw
bGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wbGF5YmFja1N0YXJ0
ZWRUaW1lOyB9Ci0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9k
dXJhdGlvbjsgfQotICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fY3VycmVudFRpbWU7IH0KLSAgICBkb3VibGUgYnVmZmVyZWRUaW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9idWZmZXJlZFRpbWU7IH0KLSAgICBib29sIGlzUGxheWluZygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9Ci0gICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1faXNTY3J1YmJpbmc7IH0KLSAgICBmbG9hdCBwbGF5YmFja1JhdGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrUmF0ZTsgfQotICAgIFJlZjxXZWJDb3Jl
OjpUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vl
a2FibGVSYW5nZXMuY29weVJlZigpOyB9Ci0gICAgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xh
c3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlZWthYmxlVGltZVJhbmdl
c0xhc3RNb2RpZmllZFRpbWU7IH0KLSAgICBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29u
c3QgeyByZXR1cm4gbV9saXZlVXBkYXRlSW50ZXJ2YWw7IH0KLSAgICBib29sIGNhblBsYXlGYXN0
UmV2ZXJzZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2FuUGxheUZhc3RSZXZlcnNlOyB9Ci0g
ICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnM7IH0KLSAgICB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7IH0KLSAgICBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7IH0K
LSAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4OyB9Ci0gICAgYm9vbCBleHRlcm5hbFBs
YXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0Vu
YWJsZWQ7IH0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlOyB9Ci0gICAgU3RyaW5nIGV4dGVybmFsUGxh
eWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5h
bFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsgfQotICAgIGJvb2wgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3dpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkOyB9Ci0gICAgYm9vbCBpc011dGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9tdXRlZDsgfQotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBtX21hbmFn
ZXI7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKLSAgICBkb3VibGUgbV9wbGF5
YmFja1N0YXJ0ZWRUaW1lIHsgMCB9OwotICAgIGJvb2wgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVl
ZHNVcGRhdGUgeyBmYWxzZSB9OwotICAgIGRvdWJsZSBtX2R1cmF0aW9uIHsgMCB9OwotICAgIGRv
dWJsZSBtX2N1cnJlbnRUaW1lIHsgMCB9OwotICAgIGRvdWJsZSBtX2J1ZmZlcmVkVGltZSB7IDAg
fTsKLSAgICBib29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNTY3J1YmJp
bmcgeyBmYWxzZSB9OwotICAgIGZsb2F0IG1fcGxheWJhY2tSYXRlIHsgMCB9OwotICAgIFJlZjxX
ZWJDb3JlOjpUaW1lUmFuZ2VzPiBtX3NlZWthYmxlUmFuZ2VzIHsgV2ViQ29yZTo6VGltZVJhbmdl
czo6Y3JlYXRlKCkgfTsKLSAgICBkb3VibGUgbV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZp
ZWRUaW1lIHsgMCB9OwotICAgIGRvdWJsZSBtX2xpdmVVcGRhdGVJbnRlcnZhbCB7IDAgfTsKLSAg
ICBib29sIG1fY2FuUGxheUZhc3RSZXZlcnNlIHsgZmFsc2UgfTsKLSAgICBWZWN0b3I8V2ViQ29y
ZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7Ci0g
ICAgdWludDY0X3QgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKLSAgICBWZWN0b3I8
V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uczsKLSAgICB1aW50NjRfdCBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07Ci0g
ICAgYm9vbCBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgbV9leHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSB7IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9u
ZSB9OwotICAgIFN0cmluZyBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOwot
ICAgIGJvb2wgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX211dGVkIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRp
YyBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCk7Ci0K
LSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKiBjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKTsKLSAgICB2b2lkIHJlcXVlc3RD
b250cm9sbGVkRWxlbWVudElEKCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OwotCi0gICAgZXhwbGljaXQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5KFdlYlBhZ2VQcm94eSYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8UmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0
Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7Ci0g
ICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFBsYXRmb3JtV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLQotICAg
IC8vIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgotICAgIHZvaWQgc2V0
VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAg
IHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIHZvaWQgcmVzZXRNZWRp
YVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSk7
Ci0gICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IGJ1ZmZlcmVkVGltZSk7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2Vz
LCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0g
ICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCB2YWx1ZSk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6
TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwot
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2Nh
bGl6ZWREZXZpY2VOYW1lKTsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQgZHVyYXRpb25DaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKTsKLSAgICB2b2lkIHBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNr
U3RhcnRlZFRpbWUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpOwotICAgIHZvaWQgaGFuZGxlQ29udHJvbGxlZEVs
ZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90LCBTdHJpbmcpIGNvbnN0OwotICAgIHZvaWQgbXV0ZWRD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7Ci0KLSAgICAvLyBNZXNzYWdl
cyB0byBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0gICAgdm9pZCBwbGF5KHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQg
dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjcnVi
YmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZW5kU2NydWJiaW5nKHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91
YmxlIHRpbWUpOwotICAgIHZvaWQgZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
dGltZSk7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgdm9pZCBlbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAg
ICB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2
NF90IGluZGV4KTsKLSAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIHRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCBzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotCi0gICAgV2ViUGFnZVBy
b3h5KiBtX3BhZ2U7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4g
bV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsg
MCB9OwotICAgIEhhc2hDb3VudGVkU2V0PHVpbnQ2NF90PiBtX2NsaWVudENvdW50czsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY2MzZhODMyNzNlYjhlMTQ0YTZhMTAzNTA1NTc4OWMyM2UwOTEyN2QuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IHsKLSAgICBSZXNldE1lZGlhU3RhdGUodWludDY0
X3QgY29udGV4dElkKQotICAgIEN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQotICAgIEJ1ZmZlcmVkVGltZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQotICAgIFNlZWth
YmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBh
aXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3Vi
bGUgbGl2ZVVwZGF0ZUludGVydmFsKQotICAgIENhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQotICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLSAgICBMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxX
ZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKLSAgICBBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLSAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQot
ICAgIEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmlj
ZU5hbWUpCi0gICAgV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKLSAgICBEdXJhdGlvbkNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi0gICAgUGxheWJhY2tTdGFydGVkVGltZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLSAgICBS
YXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0
ZSkKLSAgICBNdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKLSAg
ICBTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkK
LSAgICBDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKLQotICAgIEhhbmRsZUNvbnRyb2xs
ZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZCkKLX0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRmOWQzM2Y5ZmMwODkzYTgyMDk3YTVlZWM4Zjg2ZjVhYTg2NTNjZmYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgotCi0jaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgotI2lt
cG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojph
ZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBB
U1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLmFkZCgm
Y2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJlbW92
ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFT
U0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUo
JmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5
KCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnBsYXkobV9jb250
ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGF1c2Uo
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cGF1c2UobV9jb250
ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xl
UGxheVN0YXRlKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnRv
Z2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAg
ICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmluZyhtX2NvbnRleHRJZCk7Ci0KLSAgICBtX2lz
U2NydWJiaW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmVuZFNjcnViYmluZygpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5h
Z2VyLT5lbmRTY3J1YmJpbmcobV9jb250ZXh0SWQpOwotCi0gICAgbV9pc1NjcnViYmluZyA9IGZh
bHNlOwotICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlID0gaXNQbGF5aW5nKCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRv
dWJsZSB0aW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2Vl
a1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1fY29udGV4dElkLCB0aW1lKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJk
KCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikK
LSAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nQmFja3dhcmQobV9jb250ZXh0SWQpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQot
ewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZW5kU2Nhbm5pbmcobV9j
b250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24obV9jb250ZXh0
SWQsIG9wdGlvbklkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbiht
X2NvbnRleHRJZCwgb3B0aW9uSWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikK
LSAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKG1fY29udGV4dElkKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZU11dGVkKCkK
LXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnRvZ2dsZU11dGVkKG1f
Y29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNl
dE11dGVkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5h
Z2VyLT5zZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBs
YXliYWNrU3RhcnRlZFRpbWUpCi17Ci0gICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lID0gcGxheWJh
Y2tTdGFydGVkVGltZTsKLSAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGZh
bHNlOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25D
aGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBtX2R1cmF0aW9uID0gZHVyYXRpb247Ci0g
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+ZHVyYXRp
b25DaGFuZ2VkKGR1cmF0aW9uKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUpCi17Ci0gICAgbV9j
dXJyZW50VGltZSA9IGN1cnJlbnRUaW1lOwotICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKLSAgICBpZiAobV9wbGF5YmFja1N0
YXJ0ZWRUaW1lTmVlZHNVcGRhdGUpCi0gICAgICAgIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2Vk
KGN1cnJlbnRUaW1lKTsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAg
ICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpidWZmZXJlZFRpbWVD
aGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgbV9idWZmZXJlZFRpbWUgPSBidWZm
ZXJlZFRpbWU7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNs
aWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZs
b2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKLSAgICBt
X3BsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1f
Y2xpZW50cykKLSAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNr
UmF0ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrYWJs
ZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYgc2Vla2FibGVSYW5nZXMsIGRvdWJs
ZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewotICAgIG1f
c2Vla2FibGVSYW5nZXMgPSBzZWVrYWJsZVJhbmdlczsKLSAgICBtX3NlZWthYmxlVGltZVJhbmdl
c0xhc3RNb2RpZmllZFRpbWUgPSBsYXN0TW9kaWZpZWRUaW1lOwotICAgIG1fbGl2ZVVwZGF0ZUlu
dGVydmFsID0gbGl2ZVVwZGF0ZUludGVydmFsOwotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9j
bGllbnRzKQotICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJh
bmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQo
Ym9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCi17Ci0gICAgbV9jYW5QbGF5RmFzdFJldmVyc2UgPSBj
YW5QbGF5RmFzdFJldmVyc2U7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0g
ICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVy
c2UpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0
ZWRJbmRleCkKLXsKLSAgICBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gYXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCA9IGF1ZGlv
TWVkaWFTZWxlY3RlZEluZGV4OwotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQot
ICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9ucywgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgbGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCkK
LXsKLSAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zOwotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IGxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXg7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykK
LSAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX2F1ZGlvTWVk
aWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKLQotICAgIGZvciAoYXV0byogY2xpZW50
IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKLXsKLSAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZElu
ZGV4OwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVu
dC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWROYW1lKQotewotICAg
IG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBlbmFibGVkOwotICAgIG1fZXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUgPSB0eXBlOwotICAgIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERl
dmljZU5hbWUgPSBsb2NhbGl6ZWROYW1lOwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCi0gICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwg
dHlwZSwgbG9jYWxpemVkTmFtZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCB3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKLXsKLSAgICBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7Ci0gICAgZm9yIChhdXRvKiBj
bGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVk
KQotewotICAgIG1fbXV0ZWQgPSBtdXRlZDsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xp
ZW50cykKLSAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0ZWQpOwotfQotCi0jcHJhZ21h
IG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKLQotUmVmUHRyPFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpj
cmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KHBhZ2UpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVBy
b3h5JiBwYWdlKQotICAgIDogbV9wYWdlKCZwYWdlKQotewotICAgIG1fcGFnZS0+cHJvY2Vzcygp
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKLX0K
LQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5KCkKLXsKLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlu
dmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Omlu
dmFsaWRhdGUoKQotewotICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci0KLSAg
ICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJl
ZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgICAgICBSZWZQ
dHI8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZTsKLSAgICAg
ICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKLQotICAgICAgICBpbnRlcmZh
Y2UtPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKLSAg
ICBtX2NsaWVudENvdW50cy5jbGVhcigpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVm
PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAgICBSZWY8UGxhdGZv
cm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRmb3JtV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9kZWwpOwotCi0gICAgcmV0dXJuIHN0ZDo6
bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKLX0KLQotV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29u
dGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5k
SW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
cmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsK
LX0KLQotUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJ
ZCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9jbGllbnRDb3VudHMuYWRk
KGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpy
ZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBpZiAoIW1f
Y2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBl
bnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5pbnZhbGlkYXRlKCk7Ci0gICAgbV9jb250ZXh0TWFw
LnJlbW92ZShjb250ZXh0SWQpOwotfQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkID09IGNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkKTsKLQotICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0g
Y29udGV4dElkOwotICAgIGVuc3VyZUludGVyZmFjZShtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCkuZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0KLSAgICBtX3BhZ2UtPnZpZGVvQ29udHJvbHNNYW5h
Z2VyRGlkQ2hhbmdlKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlQ2xp
ZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgbV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQgPSAwOwotICAgIG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFnZXJE
aWRDaGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBlbnN1cmVJ
bnRlcmZhY2UoY29udGV4dElkKS5yZXNldE1lZGlhU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQotewotICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuY3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJ1ZmZlcmVkVGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQotewotICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuYnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla2FibGVSYW5nZXNWZWN0b3JD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJs
ZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50
ZXJ2YWwpCi17Ci0gICAgUmVmPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpj
cmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDogcmFuZ2VzKSB7Ci0gICAgICAg
IEFTU0VSVChpc2Zpbml0ZShyYW5nZS5maXJzdCkpOwotICAgICAgICBBU1NFUlQoaXNmaW5pdGUo
cmFuZ2Uuc2Vjb25kKSk7Ci0gICAgICAgIEFTU0VSVChyYW5nZS5zZWNvbmQgPj0gcmFuZ2UuZmly
c3QpOwotICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFuZ2UuZmlyc3QsIHJhbmdlLnNlY29uZCk7
Ci0gICAgfQotCi0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrYWJsZVJhbmdlc0NoYW5n
ZWQodGltZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQotewotICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh2YWx1ZSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2Vs
ZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojps
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVk
SW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwg
U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU+KHRhcmdldFR5cGUp
OwotICAgIEFTU0VSVCh0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBl
QWlyUGxheSB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZP
dXQgfHwgdHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUpOwot
Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFi
bGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bXV0ZWRDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLm11dGVkQ2hhbmdlZChtdXRlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVy
YXRpb24pCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5kdXJhdGlvbkNoYW5nZWQoZHVy
YXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJh
Y2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tT
dGFydGVkVGltZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXliYWNrU3RhcnRl
ZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IGlzUGxheWluZywgZG91YmxlIHJhdGUpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5y
YXRlQ2hhbmdlZChpc1BsYXlpbmcsIHJhdGUpOwotfQotCi0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0
X3QgY29udGV4dElkLCBTdHJpbmcgaWRlbnRpZmllcikgY29uc3QKLXsKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgaWYgKGNvbnRleHRJZCA9PSBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAg
ICAgICAgbV9wYWdlLT5oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UoaWRlbnRpZmll
cik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQpOwotICAgIFVOVVNFRF9QQVJB
TShpZGVudGlmaWVyKTsKLSNlbmRpZgotfQotCi0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBsYXkoY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpw
YXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBs
YXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUoY29udGV4dElkKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjcnViYmluZyhj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY3J1
YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91
YmxlIHRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWsodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkZhc3RTZWVrKGNvbnRleHRJZCwgdGltZSks
IG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2Fu
bmluZ0ZvcndhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0
X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5k
U2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2Nhbm5pbmcoY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5k
ZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQot
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBp
Y3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlUGljdHVyZUluUGljdHVy
ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2ds
ZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IG11dGVkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1fcGFnZS0+cGFnZUlEKCkpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENvbnRyb2xs
ZWRFbGVtZW50SUQoKQotewotICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAg
ICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpI
YW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi1QbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpjb250cm9sc01hbmFnZXJJ
bnRlcmZhY2UoKQotewotICAgIGlmICghbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJm
YWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICByZXR1cm4gJmludGVyZmFjZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcz
MTkyMjg4MTY3MTg5ODgxMjY3OTdlZDFmM2U4ODk0NGY1M2RmOTUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eV9oCi0jZGVmaW5lIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eV9oCi0KLSNp
ZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZl
ci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1WaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0K
LSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi10eXBlZGVm
IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IFBsYXRmb3JtV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwotI2Vsc2UKLXR5cGVkZWYgV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjIFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci1j
bGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7
Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCBmaW5hbAotICAgIDogcHVi
bGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PgotICAgICwgcHVi
bGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgLCBwdWJsaWMgV2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gY3JlYXRlKFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
KG1hbmFnZXIsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpKTsKLSAgICB9Ci0gICAg
dmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCk7Ci0KLSAgICB2b2lkIGlu
dmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotICAgIFBsYXRmb3JtVmlldyAq
bGF5ZXJIb3N0VmlldygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJIb3N0Vmlldy5nZXQoKTsgfQot
ICAgIHZvaWQgc2V0TGF5ZXJIb3N0VmlldyhSZXRhaW5QdHI8UGxhdGZvcm1WaWV3PiYmIGxheWVy
SG9zdFZpZXcpIHsgbV9sYXllckhvc3RWaWV3ID0gV1RGTW92ZShsYXllckhvc3RWaWV3KTsgfQot
Ci1wcml2YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmLCB1
aW50NjRfdCk7Ci0KLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgIHZvaWQgYWRk
Q2xpZW50KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyRnJh
bWUoV2ViQ29yZTo6RmxvYXRSZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJH
cmF2aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNo
YW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KSBvdmVycmlkZTsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJv
b2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9Ci0gICAg
V2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9Ci0KLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcgotICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEV4aXRGdWxs
c2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJy
aWRlOwotICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7Ci0K
LSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKLSAgICBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOwot
ICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwotICAgIFJldGFpblB0cjxQbGF0Zm9ybVZpZXcgKj4g
bV9sYXllckhvc3RWaWV3OwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdmlkZW9E
aW1lbnNpb25zOwotICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07Ci19OwotCi1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYp
OwotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpOwotCi0gICAg
dm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3Jl
ZW4oKTsKLSAgICBib29sIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdDsKLSAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93
VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJl
Y29tZUFjdGl2ZSgpOwotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Q7Ci0KLSNpZiBQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSAgICBib29sIGlzUGxh
eWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7Ci0KLSAg
ICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5Jiwg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIHR5
cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Piwg
UmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZh
Y2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgUGxh
dGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRf
dCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpOwotCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCi0g
ICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJf
dCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9h
dCBob3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICB2b2lk
IHNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0gICAgdm9pZCBzZXRWaWRl
b0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
KTsKLSAgICB2b2lkIGVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZp
bmFsUmVjdCk7Ci0gICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpOwotI2lmIFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIHZvaWQgZXhpdEZ1
bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSNlbmRpZgot
Ci0gICAgLy8gTWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgotICAgIHZvaWQg
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1l
ZGlhID0gZmFsc2UpOwotICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCk7Ci0gICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwot
ICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2V0
VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0KTsK
LSAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSk7Ci0gICAgdm9pZCBmdWxs
c2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIHZvaWQgZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICBXZWJQYWdlUHJveHkq
IG1fcGFnZTsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVy
ZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50
czsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKLQotI2VuZGlmIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjI4MTVkNjcyMzhlOWQzYWZmY2YwMWY0ZjRkYmQ0MDUyNDA4NDRjZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1t
ZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgewotICAgIFNldEhhc1Zp
ZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKLSAgICBTZXRWaWRlb0RpbWVu
c2lvbnModWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNp
b25zKQotICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQz
Ml90IHZpZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0aWFsUmVjdCwgZmxvYXQgaG9z
dGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0
dXJlKQotICAgIEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRXhpdEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkK
LSAgICBDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgUHJlcGFyZWRU
b1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3Jl
OjpJbnRSZWN0IGlubGluZVJlY3QpCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpCi0gICAgRXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9N
b2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCi0jZW5kaWYKLX0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDYxMjlhZDlhMTQxZDQxNmIxYjliZWQyZTMzN2FlNmFhZTFkYWUxYzUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDUyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKLQotI2lmIFBMQVRGT1JN
KElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKLSNpbXBvcnQgIkRy
YXdpbmdBcmVhUHJveHkuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzUHJveHku
aCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9y
dCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWVyRW51bXMuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvUXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1w
b3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbXBv
cnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKLSNpbXBvcnQgIlVJS2l0U1BJ
LmgiCi0jZW5kaWYKLQotQGludGVyZmFjZSBXS0xheWVySG9zdFZpZXcgOiBQbGF0Zm9ybVZpZXcK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIHVpbnQzMl90IGNvbnRleHRJRDsKLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFdLTGF5ZXJIb3N0VmlldwotCi0jaWYgUExBVEZPUk0oSU9TKQot
KyAoQ2xhc3MpbGF5ZXJDbGFzcyB7Ci0gICAgcmV0dXJuIFtDQUxheWVySG9zdCBjbGFzc107Ci19
Ci0jZWxzZQotLSAoQ0FMYXllciAqKW1ha2VCYWNraW5nTGF5ZXIKLXsKLSAgICByZXR1cm4gW1tb
Q0FMYXllckhvc3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLX0KLSNlbmRpZgotCi0tICh1
aW50MzJfdCljb250ZXh0SUQgewotICAgIHJldHVybiBbW3NlbGYgbGF5ZXJIb3N0XSBjb250ZXh0
SWRdOwotfQotCi0tICh2b2lkKXNldENvbnRleHRJRDoodWludDMyX3QpY29udGV4dElEIHsKLSAg
ICBbW3NlbGYgbGF5ZXJIb3N0XSBzZXRDb250ZXh0SWQ6Y29udGV4dElEXTsKLX0KLQotLSAoQ0FM
YXllckhvc3QgKilsYXllckhvc3QgewotICAgIHJldHVybiAoQ0FMYXllckhvc3QgKilbc2VsZiBs
YXllcl07Ci19Ci0KLUBlbmQKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiAhSEFWRShBVktJVCkKLQotUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQotewot
fQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0
b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQotewotCi19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCi17Ci0KLX0KLSNl
bHNlCi0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAotCi1X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRl
eHRJZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICAsIG1fcGxheWJhY2tTZXNzaW9u
TW9kZWwocGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQp
Ci17Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6fldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkK
LXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGll
bnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQot
ewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50
cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgaWYgKG1f
bWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobV9jb250
ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3Qg
ZnJhbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRl
b0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJHcmF2aXR5KG1fY29udGV4dElk
LCBncmF2aXR5KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRleHRJZCwgbW9kZSk7Ci19Ci0KLWJv
b2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX21hbmFnZXIgPyBtX21hbmFnZXItPmlzVmlzaWJsZSgpIDogZmFsc2U7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3Jl
ZW4oKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZGlkU2V0dXBG
dWxsc2NyZWVuKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAg
ICAgICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQot
ewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZGlkRXhpdEZ1bGxzY3Jl
ZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3Jl
ZW5NYXlSZXR1cm5Ub0lubGluZShtX2NvbnRleHRJZCk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQotCi1SZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQ
YWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5KHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkp
OwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQotICAgIDogbV9wYWdlKCZwYWdl
KQotICAgICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5KQotewotICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCkKLXsKLSAgICBp
ZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQotewotICAgIG1f
cGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8mIHR1cGxlIDog
bV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLSAgICAgICAgc3RkOjp0aWUobW9kZWwsIGlu
dGVyZmFjZSkgPSB0dXBsZTsKLQotICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKLSAg
ICAgICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAg
ICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOwotICAgIH0KLQotICAgIG1fY29u
dGV4dE1hcC5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQot
ICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4o
KTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Ci17Ci0g
ICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBp
ZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlKCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKSB7Ci0gICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPm1heUF1dG9tYXRpY2FsbHlT
aG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAg
Zm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAo
c3RkOjpnZXQ8MT4odHVwbGUpLT5pc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBs
aWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCi17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29u
dGV4dE1hcC52YWx1ZXMoKSkKLSAgICAgICAgc3RkOjpnZXQ8MT4odHVwbGUpLT5hcHBsaWNhdGlv
bkRpZEJlY29tZUFjdGl2ZSgpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVh
dGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byYgcGxh
eWJhY2tTZXNzaW9uTW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJl
TW9kZWwoY29udGV4dElkKTsKLSAgICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBw
bGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKTsKLSAgICBhdXRvJiBwbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJlSW50ZXJm
YWNlKGNvbnRleHRJZCk7Ci0gICAgUmVmPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6Y3Jl
YXRlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHktPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIGludGVyZmFj
ZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsKLSAgICBpbnRlcmZh
Y2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7Ci0K
LSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVy
ZmFjZSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJm
YWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9j
b250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYg
KGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKGNvbnRleHRJZCkpOwotfQotCi1QbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQsIDEpOwotICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUrKzsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNs
aWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIEFTU0VSVChtX2NsaWVu
dENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKLQotICAgIGludCBjbGllbnRDb3VudCA9IG1f
Y2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOwotICAgIEFTU0VSVChjbGllbnRDb3VudCA+IDAp
OwotICAgIGNsaWVudENvdW50LS07Ci0KLSAgICBpZiAoY2xpZW50Q291bnQgPD0gMCkgewotICAg
ICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+cmVtb3ZlQ2xpZW50Rm9yQ29udGV4
dChjb250ZXh0SWQpOwotICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKTsK
LSAgICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQp
OwotfQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3Jl
ZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nRGV2aWNlU2NhbGVG
YWN0b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1
bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpCi17Ci0gICAgQVNTRVJU
KHZpZGVvTGF5ZXJJRCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
PiBpbnRlcmZhY2U7Ci0KLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgYWRkQ2xpZW50Rm9yQ29udGV4dChjb250
ZXh0SWQpOwotCi0gICAgUmV0YWluUHRyPFdLTGF5ZXJIb3N0Vmlldz4gdmlldyA9IHN0YXRpY19j
YXN0PFdLTGF5ZXJIb3N0Vmlldyo+KG1vZGVsLT5sYXllckhvc3RWaWV3KCkpOwotICAgIGlmICgh
dmlldykgewotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLTGF5ZXJIb3N0VmlldyBhbGxvY10g
aW5pdF0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgW3ZpZXcgc2V0V2FudHNMYXllcjpZ
RVNdOwotI2VuZGlmCi0gICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KHZpZXcpOwotICAg
IH0KLSAgICBbdmlldyBzZXRDb250ZXh0SUQ6dmlkZW9MYXllcklEXTsKLSAgICBpZiAoaG9zdGlu
Z0RldmljZVNjYWxlRmFjdG9yICE9IDEpIHsKLSAgICAgICAgLy8gSW52ZXJ0IHRoZSBzY2FsZSB0
cmFuc2Zvcm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFyOi8vcHJvYmxlbS8x
ODMxNjU0Mj4uCi0gICAgICAgIGZsb2F0IGludmVyc2VTY2FsZSA9IDEgLyBob3N0aW5nRGV2aWNl
U2NhbGVGYWN0b3I7Ci0gICAgICAgIFtbdmlldyBsYXllcl0gc2V0U3VibGF5ZXJUcmFuc2Zvcm06
Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VTY2FsZSwgMSldOwot
ICAgIH0KLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBVSVZpZXcgKnBhcmVudFZpZXcgPSBkb3du
Y2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqbV9wYWdlLT5kcmF3aW5nQXJl
YSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExheWVyKCk7Ci0gICAgaW50ZXJmYWNlLT5z
ZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3RWaWV3KCksIGluaXRpYWxSZWN0LCBwYXJl
bnRWaWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKLSNl
bHNlCi0gICAgSW50UmVjdCBpbml0aWFsV2luZG93UmVjdDsKLSAgICBtX3BhZ2UtPnJvb3RWaWV3
VG9XaW5kb3coaW5pdGlhbFJlY3QsIGluaXRpYWxXaW5kb3dSZWN0KTsKLSAgICBpbnRlcmZhY2Ut
PnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5pdGlhbFdpbmRvd1Jl
Y3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSwgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYWxsb3dz
UGljdHVyZUluUGljdHVyZSk7Ci0jZW5kaWYKLSAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlk
ZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCB2aWRlb0Z1bGxzY3JlZW5Nb2Rl
ICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0SGFzVmlkZW8o
dWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQotewotICAgIGVuc3VyZUludGVyZmFj
ZShjb250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29u
dGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBlbnN1cmVJ
bnRlcmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9u
cyk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3Vy
ZUludGVyZmFjZShjb250ZXh0SWQpOwotICAgIGludGVyZmFjZS5lbnRlckZ1bGxzY3JlZW4oKTsK
LQotICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGluIGEgZ2l2ZW4gZnVsbCBzY3JlZW4g
bW9kZSBhdCBhIHRpbWU6Ci0gICAgZm9yIChhdXRvJiBjb250ZXh0UGFpciA6IG1fY29udGV4dE1h
cCkgewotICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9IGNvbnRleHRQYWlyLmtleTsKLSAg
ICAgICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJZCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4oY29udGV4
dFBhaXIudmFsdWUpOwotICAgICAgICBpZiAob3RoZXJJbnRlcmZhY2UtPmhhc01vZGUoaW50ZXJm
YWNlLm1vZGUoKSkpCi0gICAgICAgICAgICBvdGhlckludGVyZmFjZS0+cmVxdWVzdEhpZGVBbmRF
eGl0RnVsbHNjcmVlbigpOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50
UmVjdCBmaW5hbFJlY3QpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIGVuc3VyZUludGVyZmFj
ZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVjdCk7Ci0jZWxzZQotICAgIEludFJl
Y3QgZmluYWxXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhmaW5hbFJl
Y3QsIGZpbmFsV2luZG93UmVjdCk7Ci0gICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhp
dEZ1bGxzY3JlZW4oZmluYWxXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3JtV2luZG93KCkpOwot
I2VuZGlmCi19Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNj
cmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKLXsK
LSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbldpdGhvdXRBbmlt
YXRpb25Ub01vZGUodGFyZ2V0TW9kZSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
LXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVwRnVsbHNjcmVlbigpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1JldHVy
blRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRS
ZWN0IGlubGluZVJlY3QpCi17Ci0gICAgbV9wYWdlLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUoKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElk
KS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVjdCk7Ci0jZWxzZQot
ICAgIEludFJlY3QgaW5saW5lV2luZG93UmVjdDsKLSAgICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5k
b3coaW5saW5lUmVjdCwgaW5saW5lV2luZG93UmVjdCk7Ci0gICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlubGluZVdpbmRvd1Jl
Y3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7Ci0jZW5kaWYKLX0KLQotI3ByYWdtYSBtYXJr
IE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKGNv
bnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVl
bihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBtX3BhZ2UtPmRpZEV4aXRGdWxs
c2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRF
bnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZS0+ZGlkRW50ZXJGdWxsc2Ny
ZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVh
bnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7Ci0KLSAgICBzdGQ6OnRpZShtb2RlbCwg
aW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBb
Q0FUcmFuc2FjdGlvbiBmbHVzaF07Ci0gICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3Zl
RnJvbVN1cGVydmlld107Ci0gICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRD
bGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLQotICAgIGlu
dGVyZmFjZS0+c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lKTsKLSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUodWlu
dDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCi17Ci0gICAgQGF1dG9y
ZWxlYXNlcG9vbCB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBtYWNoX3BvcnRfbmFtZV90
IGZlbmNlUG9ydCA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVEcmF3aW5nQWNyb3NzUHJvY2Vzc2Vz
XTsKLSNlbHNlCi0gICAgICAgIE1hY2hTZW5kUmlnaHQgZmVuY2VTZW5kUmlnaHQ7Ci0gICAgICAg
IGlmIChEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEo
KSkKLSAgICAgICAgICAgIGZlbmNlU2VuZFJpZ2h0ID0gZHJhd2luZ0FyZWEtPmNyZWF0ZUZlbmNl
KCk7Ci0gICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gZmVuY2VTZW5kUmlnaHQu
bGVha1NlbmRSaWdodCgpOwotI2VuZGlmCi0KLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoY29u
dGV4dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwgTUFDSF9NU0dfVFlQRV9N
T1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdy
YXZpdHkpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElkLCAodW5zaWduZWQpZ3Jh
dml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17
Ci0gICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJlRGlkQ2hh
bmdlKG1fcGFnZSwgbW9kZSAmIE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQ
aWN0dXJlSW5QaWN0dXJlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChjb250ZXh0SWQsIG1vZGUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS0+aXNWaWV3VmlzaWJs
ZSgpICYmIG1fcGFnZS0+aXNJbldpbmRvdygpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zpc2libGUo
KTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlzVmlld1Zpc2libGUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZXdJbXBsLm1tCmluZGV4IDdmMWU5ODU5ODZlNTM1OGM0NTQ4Y2E1OTkzZWFhNjNlYzFi
YTljMDMuLjlhZWRlNzBhZTE3MTM3ZmFhMTIzY2I1MGU4ZTYzODQ5YTVlMjJkODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTQxLDYgKzQx
LDcgQEAKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgi
CiAjaW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5o
IgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJlbW90ZU9iamVj
dFJlZ2lzdHJ5TWVzc2FnZXMuaCIKQEAgLTYyLDcgKzYzLDYgQEAKICNpbXBvcnQgIldlYkV2ZW50
RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYlBh
Z2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAj
aW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFsLmgiCkBAIC0xMTcwLDggKzEx
NzAsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNoQmFyKCkKICAgICAgICAg
W21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0Q2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZTpZ
RVNdOwogICAgIH0KIAotICAgIGlmIChQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSogaW50ZXJmYWNlID0gbV9wYWdlLT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCktPmNvbnRyb2xz
TWFuYWdlckludGVyZmFjZSgpKQotICAgICAgICBbbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBz
ZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6aW50ZXJmYWNlXTsKKyAgICBpZiAoUGxh
dGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGludGVyZmFjZSA9IG1fcGFnZS0+cGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpLT5jb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKSkKKyAgICAgICAg
W21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OmludGVyZmFjZV07CiAKICAgICBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CiAgICAg
W21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxl
cjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNDA3NWVhMjM4NDUxM2RiYjlkMGY3ZTM4NjU0ODgx
ZGVhOTU5MGM5Yi4uZThmMTI5YTc5OTA5ZWUzMGM5OGNmYzllMjVhODMwZGE4ZDQyMTBiOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE1Miw5ICsxNTIs
OSBAQAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3Jt
YW5jZURhdGEuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNp
bmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IlZpZXdTbmFwc2hvdFN0b3JlLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1J1bkxvb3BPYnNlcnZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvcldp
bmRvdy5oPgpAQCAtMTgwLDcgKzE4MCw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNp
bmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKQEAgLTM5NCw4ICszOTQsOCBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdl
Q2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIHVpbgogICAgIG1f
ZnVsbFNjcmVlbk1hbmFnZXIgPSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRo
aXMsIG1fcGFnZUNsaWVudC5mdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkpOwogI2VuZGlm
CiAjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIG1fcGxheWJhY2tTZXNzaW9uTWFu
YWdlciA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsKLSAg
ICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CisgICAgbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUo
KnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTYzNiw4ICs2MzYsOCBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3MoKQogICAgIG1fZnVsbFNjcmVlbk1hbmFn
ZXIgPSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsIG1fcGFnZUNsaWVu
dC5mdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0o
SU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQotICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsKLSAgICBtX3ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhp
cywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpOworICAgIG1f
dmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKEFQUExFX1BBWSkKQEAgLTQyOTUsMTIgKzQyOTUsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnNldEZ1bGxzY3JlZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RnVsbHNjcmVlbkNsaWVu
dD4mJgogI2VuZGlmCiAgICAgCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6cGxheWJhY2tTZXNzaW9u
TWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6cGxh
eWJhY2tTZXNzaW9uTWFuYWdlcigpCiB7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTWFu
YWdlci5nZXQoKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBXZWJQYWdl
UHJveHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5KiBXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewogICAgIHJldHVy
biBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYTkwODgwM2ZkNWUyMjgxOGNiMDRlMTY3M2M1N2U4YmY4
NzIwMTdmMS4uZmQwZmQ3ZWRmZTZlZGMyNTdlODhiNDNkNDcwYzhiZjJiZWZhNjI2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjAwLDkgKzIwMCw5IEBAIGNs
YXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJDb250ZXh0TWVudVByb3h5Owog
Y2xhc3MgV2ViRWRpdENvbW1hbmRQcm94eTsKIGNsYXNzIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CitjbGFzcyBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJOYXZpZ2F0aW9uU3RhdGU7Ci1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViVVJMU2NoZW1lSGFu
ZGxlcjsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CkBAIC0zNDIsOCArMzQyLDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0RnVsbHNjcmVlbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGdWxsc2Ny
ZWVuQ2xpZW50PiYmKTsKICNlbmRpZgogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQp
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQot
ICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxheWJhY2tTZXNzaW9uTWFuYWdl
cigpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogdmlkZW9GdWxsc2NyZWVu
TWFuYWdlcigpOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxheWJhY2tTZXNz
aW9uTWFuYWdlcigpOworICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogdmlkZW9GdWxs
c2NyZWVuTWFuYWdlcigpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkBAIC0xNjc4LDgg
KzE2NzgsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZF
KEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eT4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggYzFiYTc2NGYwMTU0MjcxMWUyOWFkNWY5YTA3MzQy
Nzc2ODI4YWJiYS4uYzkyZWE5ZjRjM2IzM2YzYThmY2M5YTIwZGRmMjYyODA1ZTQ5YzlkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAg
LTQxLDExICs0MSwxMSBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIK
ICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0ICJVc2VyRGF0YS5oIgorI2ltcG9ydCAiVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJWaWV3VXBkYXRlRGlzcGF0Y2hl
ck1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJv
eHkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2ZmUyYTI0NTFhZWE4
ZmI4MjM0Y2IzZjJmN2JhZmI2NTg2YjM3ZDRlLi5iOWUxNzcxODYwYjhkZWYzNWZjNjlkYmI5MzIz
NWM0ZThjYjM0YjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC04NzEsOCArODcxLDggQEAKIAkJMzdGQzE5NDcxODUwRkJGMjAw
OENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5NDYxODUwRkJGMjAw
OENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RkMxOTRBMTg1MTBE
NkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0ODE4NTEwRDZBMDA4
Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICovOyB9OwogCQkzN0ZD
MTk0QjE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0OTE4
NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi87IH07
Ci0JCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJM0Y0MThFRkIxODg3QkQ5NzAwMjc5
NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNzE4
ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLzsgfTsKKwkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkzRjQxOEVGQjE4
ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
NDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkzRjg3QjlCRDE1ODk0MDEyMDA5MEZGNjIgLyogV2Vi
Q29sb3JDaG9vc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuY3BwICov
OyB9OwogCQkzRjg3QjlCRTE1ODk0MDE5MDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlCQjE1ODkz
RjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi87IH07CiAJCTNGODdCOUMwMTU4OTQw
RDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9y
UGlja2VyLmggKi87IH07CkBAIC0xMTE0LDkgKzExMTQsOSBAQAogCQk1MjcyRDRDOTFFNzM1RjA5
MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkQ0QzcxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJv
dGVjdGlvblNwYWNlTlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1MjcyRDRDQTFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VO
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJE
NEM4MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tICovOyB9OwogCQk1
MjhDMzdDMTE5NUNCQjFBMDBEOEI5Q0MgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTlGMjgxMDE5NThG
NDc4MDA4Q0FDNzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQjAxQzU3NDk1QTAwREUz
NEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OwotCQk1MkQ1QTFCMTFDNTc0
OTYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMxQzU3NDk0RTAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKLQkJNTJE
NUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFCNDFDNTc0
OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKKwkJNTJE
NUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3
NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OworCQk1
MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMx
QzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsK
KwkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFCNDFD
NTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKIAkJNTMw
MjU4M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkUxRENCQkQx
RDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovOyB9OwogCQk1MzAyNTgz
QzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkYxRENCQkQxRDAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLzsgfTsKIAkJNTMwMjU4M0QxRENCQkQy
MjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5l
dHdvcmtDYXB0dXJlRXZlbnQuY3BwICovOyB9OwpAQCAtMTkyNSwxNCArMTkyNSwxNCBAQAogCQlD
RDc4RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTYxREI3REMwQTAw
MTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLzsgfTsKIAkJQ0Q3OEUxMTkxREI3RTVB
RDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTgxREI3RTVBRDAwMTRBMkRFIC8qIF9X
S0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2
aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RBMDQxRjMxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggKi87IH07
Ci0JCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlB
MTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi87IH07
Ci0JCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
OTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovOyB9Owot
CQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmgg
Ki87IH07Ci0JCUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Lm1tICovOyB9OwotCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCUNEQTI5
QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI1
MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAq
LzsgfTsKLQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJQ0RBMjlB
MkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVz
c2FnZXMuaCAqLzsgfTsKKwkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5t
bSAqLzsgfTsKKwkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi87IH07
CisJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLzsg
fTsKKwkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0g
Ki87IH07CisJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OworCQlDREEyOUEyQTFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OworCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQlDREMzODJGRTE3MjExNzk5
MDA4QTJGQzMgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0
ZW1TaGltTGlicmFyeS5tbSAqLzsgfTsKIAkJQ0RDMzgzMDcxNzIxMTdERDAwOEEyRkMzIC8qIENv
b2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFn
ZVNoaW1MaWJyYXJ5LmNwcCAqLzsgfTsKIAkJQ0RDMzgzMEMxNzIxMjI4MjAwOEEyRkMzIC8qIENv
b2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RDMzgzMEIxNzIxMjFDRTAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VT
aGltTGlicmFyeS5oICovOyB9OwpAQCAtMzA5NCwxMCArMzA5NCwxMCBAQAogCQkzN0ZDMTk0NjE4
NTBGQkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0TG9hZERl
bGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDMTk0ODE4
NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tOU1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDMTk0OTE4NTEw
RDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjYx
ODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjcxODg3QkQ5
NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZE
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAv
KiBXZWJDb2xvckNob29zZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViQ29sb3JDaG9vc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4
N0I5QkIxNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvckNob29zZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzgxLDEyICszMzgxLDEyIEBACiAJCTUyNzJCMjg5
MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MjcyRDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Byb3RlY3Rpb25TcGFjZU5TLmg7IHBh
dGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MjcyRDRDODFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUHJvdGVjdGlvblNwYWNl
TlMubW07IHBhdGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUy
RDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBQjFD
NTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQUMxQzU3NDk0RTAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1l
c3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFCNDFDNTc0OUYy
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODJFMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5o
OyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODMwMURDQkJEMUQwMERBODlDMiAv
KiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQyNjQsMTYgKzQyNjQsMTYgQEAKIAkJQ0Q3OEUxMTYxREI3REMwQTAwMTRBMkRFIC8qIEFQ
SUZ1bGxzY3JlZW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJ
RnVsbHNjcmVlbkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDc4RTEx
ODFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDREEwNDFGMzFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0JvYXJk
U2VydmljZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0JvYXJk
U2VydmljZXNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMTgxQ0JE
QkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNE
QTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTFGMUNCRUI1
RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTIyMUNCRUI2MUEw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNDFDQkVCNjdBMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RB
MjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjYx
Q0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5
QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTIyMUNCRUI2
MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjUxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEy
OUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDMzgy
RjcxNzIxMTUwNjAwOEEyRkMzIC8qIENGTmV0d29yay5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFt
ZSA9IENGTmV0d29yay5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9DRk5ldHdvcmsuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlD
REMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MzA2MTcyMTE3OTkwMDhBMkZDMyAvKiBXZWJQcm9j
ZXNzU2hpbS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IFdlYlByb2Nlc3NTaGltLmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwpAQCAtNTIwNywxNyArNTIwNywxNyBAQAogCQkJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAv
KiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUFDMDI3M0UxOTY2
MjJENjAwQzEyQjc1IC8qIFdlYlBhZ2VQcm94eUNvY29hLm1tICovLAogCQkJCTdDNDY5NENCMUE0
QjUxMEEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSAqLywKLQkJCQlDREEy
OUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmgg
Ki8sCi0JCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAorCQkJCUNEQTI5QTFFMUNC
RUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKKwkJCQlD
REEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluICovLAorCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJN0NFNEQyMTUxQTQ5MTQ4NDAwQzdGMTUyIC8q
IFdlYlByb2Nlc3NQb29sQ29jb2EubW0gKi8sCiAJCQkJMUEwNEY2MTcxQTRBM0E3QTAwQTIxQjZF
IC8qIFdlYlByb2Nlc3NQcm94eUNvY29hLm1tICovLAogCQkJCTdBQUQxNzVFMUVBNkFGMzcwMDNC
MDg5NCAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAqLywKIAkJCQk1
MUQxMjQzMTFFNkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlckNvY29hLmggKi8s
CiAJCQkJNTFEMTI0MzIxRTZERTUyMTAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXJDb2Nv
YS5tbSAqLywKLQkJCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmggKi8sCi0JCQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQk1MkQ1QTFB
QzFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICov
LAorCQkJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaCAqLywKKwkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTUyRDVBMUFDMUM1NzQ5NEUwMERF
MzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJMkRGQzdEQjkx
QkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggKi8sCiAJCQkJMkRGQzdEQkExQkNDQzE5
NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tICovLAogCQkJCTFBRDAxQkNCMTkwNUQ1NDkwMEM5
QzQ1RiAvKiBXS1JlbG9hZEZyYW1lRXJyb3JSZWNvdmVyeUF0dGVtcHRlci5oICovLApAQCAtNjM5
OSwxNCArNjM5OSwxNCBAQAogCQkJCUNENDkxQjA1MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlci5jcHAgKi8sCiAJCQkJQ0Q0OTFCMDYxRTcwRDA1RjAwMDA5MDY2IC8q
IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q0OTFCMEExRTczMkQxMjAwMDA5
MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCUNEQTI5
QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8sCi0J
CQkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8sCisJCQkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLywKKwkJCQlDREEyOUExQzFDQkRCRjVCMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKKwkJCQlDREEyOUEx
ODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLywKIAkJCQlF
Q0E2ODBENzFFNjkwREY4MDA3MzFEMjAgLyogV2ViUHJvY2Vzc0NvY29hLmggKi8sCiAJCQkJN0M2
RTcwRjkxOEIyRDRBMDAwRjI0RTJFIC8qIFdlYlByb2Nlc3NDb2NvYS5tbSAqLywKLQkJCQk1MkQ1
QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovLAot
CQkJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1lc3NhZ2VzLmluICovLAotCQkJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovLAorCQkJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8sCisJCQkJNTJENUExQjMxQzU3NDlGMjAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNTJENUEx
QjQxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8sCiAJCQkp
OwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc4OTEs
MTAgKzc4OTEsMTAgQEAKIAkJCQkxQUIxRjc5MzFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVu
dENvb3JkaW5hdG9yTWVzc2FnZXMuaCAqLywKIAkJCQkxQUIxRjc5NDFEMUIzNjEzMDA3QzlCRDEg
LyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJ
CTFBQjFGNzk1MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1l
c3NhZ2VzLmggKi8sCi0JCQkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCUNEQTI5QTI1MUNCRUI2
N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLywKLQkJ
CQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKKwkJCQlDREEy
OUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8sCisJCQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJ
CUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oICovLAogCQkJCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUEwNDNGNjgxMjUxNEQ4QjAw
RkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJCQlCQzMwNjZC
QzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCkBA
IC03OTE2LDEwICs3OTE2LDEwIEBACiAJCQkJMUFBRjA4QjYxOTI2OUU2RDAwQjYzOTBDIC8qIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2VzLmggKi8sCiAJCQkJN0MzNjFENzYxOTI4MDNC
RDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLywKIAkJCQk3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovLAotCQkJCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVG
RCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJ
CQkzRjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1l
c3NhZ2VzLmggKi8sCi0JCQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJM0Y0MThFRjgx
ODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
LmggKi8sCisJCQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVG
RCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLywKKwkJCQkzRjQxOEVGNzE4
ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLywKKwkJCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gIkRlcml2ZWQg
U291cmNlcyI7CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0MjsKQEAgLTg3NTksMTAg
Kzg3NTksMTAgQEAKIAkJCQkxQUIxRjc5OTFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENv
b3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4NTBGRTcxRUQ3
QzM5RjAwRkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzRTczNjExMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTI5MUNCRUI2
N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5
QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFENTkyOUYxNjZF
MDYwMDAwRTZCRjAyIC8qIFdlYlBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1
NzQ0RjAxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRDNCOTQ4NDcxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04ODE1LDcgKzg4MTUsNyBAQAogCQkJCTdDMzYxRDc5MTkyODAzQkQwMDM2QTU5RCAv
KiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNTczOUJCRDFCNDIwNDJEMDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4M0VFNTc1QzFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyRDVBMUIwMUM1NzQ5NUEwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERkM3REJCMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJW
aWV3SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlDRDU1QUExMjhFMjk0RjAwMTMzQzg1IC8q
IFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQky
OTIzMkRGNDE4QjI5RDY4MDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1h
Yy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDM2OSwxMCArMTAzNjksMTAgQEAKIAkJCQkxQTNFNzM2
MjExQ0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUMwMzM3REREMTI3QTUyMUMwMDhGRjRGNCAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9p
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0QTIxODg0RTRGMDAwRUQ4NkRCIC8qIFdl
YlBsYXRmb3JtVG91Y2hQb2ludElPUy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUExQTFD
QkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTIxMUNC
RUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gaW4gU291
cmNlcyAqLywKLQkJCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNE
QTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMjEx
Q0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFENTky
OUUxNjZFMDYwMDAwRTZCRjAyIC8qIFdlYlBsdWdJbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQTA4RkVFNDFENTkzRTJBMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTc0NEVGMTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQb3B1
cEl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQ0NSwxMCArMTA0NDUsMTAgQEAKIAkJCQk3
QzM2MUQ3ODE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTU3MzlCQkUxQjQyMDQ2NjAw
RDI1OEMxIC8qIFdlYlVzZXJNZWRpYUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4M0VF
NTc1QjFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQkzRjQxOEVGOTE4ODdCRDk3MDAy
Nzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJM0Y0MThFRkIxODg3QkQ5
NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNGNDE4RUY5MTg4N0JE
OTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRjQxOEVGQjE4ODdCRDk3
MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJERkM3REJDMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3
SW1wbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REQxMTI3QTI5ODAwMDhGRjRGNCAvKiBX
ZWJXaGVlbEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODE2MEQwMTg3NjQ1NTcwMDIx
RTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKaW5kZXggNGQyMmFmZjEyODlmNzAyZThlNTg0YTY3MjNiNWM2YWU5ZWRk
OWI4Zi4uZmVlMGQyODY3N2QwMDBhNWE3OTcwZGFkNDlhNTE5MGY0ZDI4YWRhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcApAQCAtNzgsOCArNzgsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgorI2luY2x1
ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMDg1OWY2NjVm
NzBlZTYxYmU1MjA3ZDUyYTU4MzliYmVkY2ExMzc0Ni4uODgzZjYxYmFlM2YxZDdjMmQwYWNlMzhl
ODU3YjcwYzJkNTQzM2VlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcApAQCAtMjE4LDEwICsyMTgsMTAgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQogI2luY2x1ZGUgIlBERlBsdWdpbi5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIuaCIKICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUg
IlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlICJXS1N0cmluZ0NGLmgiCi0jaW5j
bHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4K
ICNlbmRpZgogCkBAIC0zNDcwLDE3ICszNDcwLDE3IEBAIFJlbW90ZVdlYkluc3BlY3RvclVJKiBX
ZWJQYWdlOjpyZW1vdGVJbnNwZWN0b3JVSSgpCiB9CiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBI
QVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIFdlYlBhZ2U6OnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoKQorUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgV2ViUGFnZTo6cGxheWJhY2tT
ZXNzaW9uTWFuYWdlcigpCiB7CiAgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCi0g
ICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuICptX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXI7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIFdlYlBh
Z2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgV2Vi
UGFnZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CiAgICAgaWYgKCFtX3ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZSgqdGhpcywgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigp
KTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkpOwogICAgIHJldHVy
biAqbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAxNDJmNTdkNTc1YTZhNmYxMzE0NmE5
YmY0MjI0MmU5MmM3MTg0YzYxLi5iN2ViYmU4MWFkOGJiYzUxZjJlZjI4YTVmOGFmZjdiMDUwZjRl
NDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAg
LTE4NiwxMSArMTg2LDExIEBAIGNsYXNzIFdlYk5vdGlmaWNhdGlvbkNsaWVudDsKIGNsYXNzIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOwogY2xhc3MgV2ViUGFnZUdyb3VwUHJveHk7CiBjbGFz
cyBXZWJQYWdlT3ZlcmxheTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CitjbGFz
cyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwogY2xhc3MgV2ViUG9wdXBNZW51OwogY2xhc3MgV2Vi
VW5kb1N0ZXA7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI7Ci1jbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNz
IFdlYldoZWVsRXZlbnQ7CiBlbnVtIEZpbmRPcHRpb25zIDogdWludDE2X3Q7CiBzdHJ1Y3QgQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb247CkBAIC0yNjYsOCArMjY2LDggQEAgcHVibGljOgogICAgIGJv
b2wgaXNJbnNwZWN0b3JQYWdlKCkgeyByZXR1cm4gISFtX2luc3BlY3RvclVJIHx8ICEhbV9yZW1v
dGVJbnNwZWN0b3JVSTsgfQogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyJiB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CisgICAgUGxheWJhY2tTZXNzaW9u
TWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOworICAgIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXImIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKElP
UykKICAgICB2b2lkIHNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhib29sKTsK
QEAgLTE0MDAsOCArMTQwMCw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFJlbW90ZVdlYkluc3Bl
Y3RvclVJPiBtX3JlbW90ZUluc3BlY3RvclVJOwogCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFW
RShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCi0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gbV92
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
PiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKElP
UykKICAgICBib29sIG1fYWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrIHsgZmFsc2Ug
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2YTI4MTdiOTAyZGRhMjk2YmEzNmJiMWNl
OGFjZTYyNzkwMTNmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEF0dGFjaG1lbnQ7CitjbGFzcyBD
b25uZWN0aW9uOworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIE1lc3NhZ2VSZWNlaXZlcjsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTm9kZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworCitjbGFz
cyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0IGZpbmFsCisgICAgOiBwdWJsaWMgUmVm
Q291bnRlZDxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PgorICAgICwgcHVibGljIFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgICwgcHVibGljIFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRl
eHRJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0K
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dDsKKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgIHZvaWQgcmVzZXRN
ZWRpYVN0YXRlKCkgZmluYWw7CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAor
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgZmluYWw7CisgICAgdm9pZCBjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgZmluYWw7
CisgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgZmluYWw7CisgICAgdm9pZCBw
bGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkgZmlu
YWw7CisgICAgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKSBmaW5hbDsKKyAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRl
SW50ZXJ2YWwpIGZpbmFsOworICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29s
IHZhbHVlKSBmaW5hbDsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIGZpbmFsOworICAgIHZvaWQg
YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CisgICAgdm9p
ZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOworICAg
IHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgZmluYWw7CisgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgZmluYWw7CisgICAgdm9pZCBtdXRlZENoYW5nZWQo
Ym9vbCkgZmluYWw7CisKKyAgICBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlciogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90IG1fY29udGV4dElkOworfTsK
KworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdl
Jik7CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOworCisgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsK
KworICAgIHZvaWQgc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50Jik7CisgICAgdm9pZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Cisg
ICAgdWludDY0X3QgY29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQmKTsKKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OworCisgICAgZXhwbGljaXQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJik7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50PiwgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+PiBN
b2RlbEludGVyZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxB
bmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxl
JiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIGVuc3Vy
ZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dCh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRf
dCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpOworCisgICAgLy8gSW50ZXJmYWNlIHRvIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQKKyAgICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlKTsKKyAg
ICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpOworICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpOworICAgIHZvaWQgcGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJh
Y2tTdGFydGVkVGltZSk7CisgICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpOworICAgIHZvaWQgc2Vla2FibGVS
YW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdl
cyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsK
KyAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIHZhbHVlKTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxl
Z2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5h
bWUpOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5CisgICAgdm9pZCBwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBw
YXVzZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIHZvaWQgZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9p
ZCBzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQg
ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBiZWdp
blNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY2Fu
bmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY2FubmluZyh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIHNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lk
IGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCk7Cisg
ICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCB0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0TXV0ZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKKworICAgIFdlYlBhZ2UqIG1fcGFnZTsK
KyAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqLCB1aW50NjRfdD4gbV9tZWRp
YUVsZW1lbnRzOworICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1f
Y29udGV4dE1hcDsKKyAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAg
fTsKKyAgICBIYXNoQ291bnRlZFNldDx1aW50NjRfdD4gbV9jbGllbnRDb3VudHM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZTU4ZGM5ODQ3Y2VkYzkyMjliN2Ez
ZGUyMzIxN2M0N2ZlY2NmMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0wLDAg
KzEsNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBQTEFU
Rk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCittZXNzYWdlcyAtPiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIHsKKyAgICBQbGF5KHVp
bnQ2NF90IGNvbnRleHRJZCkKKyAgICBQYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgVG9n
Z2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBCZWdpblNjcnViYmluZyh1aW50
NjRfdCBjb250ZXh0SWQpCisgICAgRW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAg
ICBTZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCisgICAgRmFzdFNl
ZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKKyAgICBCZWdpblNjYW5uaW5nRm9y
d2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2
NF90IGNvbnRleHRJZCkKKyAgICBFbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAg
U2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4
KQorICAgIFNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2
NF90IGluZGV4KQorICAgIEhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90
IGNvbnRleHRJZCkKKyAgICBUb2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKKyAgICBUb2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2V0TXV0ZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTE0MWUzOGY1NDQ1M2RiMTUyYjMxZDJhYmUxZjRjYmIwNjAzOGJhYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tbQpAQCAtMCwwICsxLDQ3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisKKyNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCisKKyNpbXBvcnQgIkF0dGFjaG1lbnQuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2lt
cG9ydCAiV2ViUGFnZS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgorI2ltcG9ydCA8V2ViQ29y
ZS9Db2xvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9F
dmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgorI2ltcG9ydCA8bWFjaC9t
YWNoX3BvcnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgdWludDY0X3QgbmV4dENvbnRleHRJZCgpCit7CisgICAgc3RhdGljIHVp
bnQ2NF90IGNvbnRleHRJZCA9IDA7CisgICAgcmV0dXJuICsrY29udGV4dElkOworfQorCisjcHJh
Z21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0CisKK1BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoUGxh
eWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIDog
bV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQoreworfQor
CitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6cmVzZXRNZWRpYVN0YXRlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21h
bmFnZXItPnJlc2V0TWVkaWFTdGF0ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmR1cmF0aW9uQ2hhbmdl
ZChtX2NvbnRleHRJZCwgZHVyYXRpb24pOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJs
ZSBhbmNob3JUaW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
Y3VycmVudFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1l
Q2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAg
ICAgIG1fbWFuYWdlci0+YnVmZmVyZWRUaW1lQ2hhbmdlZChtX2NvbnRleHRJZCwgYnVmZmVyZWRU
aW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpyYXRlQ2hh
bmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cmF0ZUNoYW5nZWQobV9jb250ZXh0SWQsIGlzUGxh
eWluZywgcGxheWJhY2tSYXRlKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVk
VGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnBsYXliYWNr
U3RhcnRlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlm
aWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChtX2NvbnRleHRJZCwg
cmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5n
ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQobV9jb250ZXh0SWQsIHZhbHVlKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwg
b3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRleHRJ
ZCwgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29u
dGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBs
b2NhbGl6ZWREZXZpY2VOYW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFu
YWdlci0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQobV9jb250ZXh0SWQsIGVuYWJsZWQsIHR5cGUs
IGxvY2FsaXplZERldmljZU5hbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2Fi
bGVkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+d2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKG1fY29udGV4dElkLCBkaXNhYmxlZCk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wg
bXV0ZWQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5tdXRlZENo
YW5nZWQobV9jb250ZXh0SWQsIG11dGVkKTsKK30KKworI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcgorCitSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUGxheWJhY2tTZXNzaW9uTWFuYWdlcihwYWdlKSk7Cit9CisKK1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1f
cGFnZSgmcGFnZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Ojp+UGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1f
Y29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJm
YWNlKSA9IHR1cGxlOworICAgICAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwor
ICAgICAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOworCisgICAgICAgIGludGVy
ZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwor
ICAgIG1fbWVkaWFFbGVtZW50cy5jbGVhcigpOworICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7
CisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJm
YWNlVHVwbGUgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudD4gbW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZSA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29u
dGV4dElkKTsKKyAgICBtb2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2UpOworCisgICAgcmV0dXJu
IHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKK30K
KworUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1v
ZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKwor
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4g
KnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpl
bnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpn
ZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKKyAg
ICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAg
IHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKTsKKworICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtZWRpYUVsZW1lbnQgPSBt
b2RlbC0+bWVkaWFFbGVtZW50KCk7CisgICAgbW9kZWwtPnNldE1lZGlhRWxlbWVudChudWxscHRy
KTsKKyAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOworICAgIGludGVyZmFjZS0+
aW52YWxpZGF0ZSgpOworICAgIG1fbWVkaWFFbGVtZW50cy5yZW1vdmUobWVkaWFFbGVtZW50Lmdl
dCgpKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpCit7CisgICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkp
OworICAgIGlmIChtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKSkKKyAgICAgICAgcmVt
b3ZlQ29udGV4dChjb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYg
bWVkaWFFbGVtZW50KQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBhdXRvIGZvdW5kSXRlcmF0
b3IgPSBtX21lZGlhRWxlbWVudHMuZmluZCgmbWVkaWFFbGVtZW50KTsKKyAgICBpZiAoZm91bmRJ
dGVyYXRvciAhPSBtX21lZGlhRWxlbWVudHMuZW5kKCkpIHsKKyAgICAgICAgdWludDY0X3QgY29u
dGV4dElkID0gZm91bmRJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmIChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCA9PSBjb250ZXh0SWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICAgICAgcmVtb3ZlQ2xp
ZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisgICAgICAgIG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOworICAgIH0gZWxzZSB7CisgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1lbnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBb
Jl0geyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9KTsKKyAgICAgICAgYXV0byBjb250ZXh0SWQg
PSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAobV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQpCisgICAgICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQg
PSBjb250ZXh0SWQ7CisgICAgICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TWVkaWFFbGVt
ZW50KCZtZWRpYUVsZW1lbnQpOworICAgIH0KKworICAgIGFkZENsaWVudEZvckNvbnRleHQobV9j
b250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0
aElEKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisjZW5k
aWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjbGVhclBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQ2xpZW50Rm9yQ29u
dGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisgICAgbV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQgPSAwOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworI2VuZGlmCit9CisKK3VpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNv
bnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVs
ZW1lbnQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5zdXJlKCZt
ZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOworICAgIHVpbnQ2
NF90IGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7CisgICAgcmV0dXJu
IGNvbnRleHRJZDsKK30KKworI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OgorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlc2V0
TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0ZShjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCit7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkR1cmF0aW9uQ2hhbmdlZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkK
K3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpi
dWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGlt
ZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6QnVmZmVyZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXliYWNr
U3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3Rh
cnRlZFRpbWUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OlBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgcGxheWJh
Y2tTdGFydGVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlp
bmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5nZWQoY29udGV4dElkLCBpc1BsYXlp
bmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZp
ZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIFZlY3RvcjxzdGQ6OnBh
aXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBkb3VibGUgc3RhcnQg
PSB0aW1lUmFuZ2VzLnJhbmdlcygpLnN0YXJ0KGkpLnRvRG91YmxlKCk7CisgICAgICAgIGRvdWJs
ZSBlbmQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLmVuZChpKS50b0RvdWJsZSgpOworICAgICAgICBy
YW5nZXNWZWN0b3IuYXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsKKyAgICB9CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNlZWthYmxlUmFuZ2Vz
VmVjdG9yQ2hhbmdlZChjb250ZXh0SWQsIFdURk1vdmUocmFuZ2VzVmVjdG9yKSwgbGFzdE1vZGlm
aWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQo
Y29udGV4dElkLCB2YWx1ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0
ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBl
bmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUg
dGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkV4dGVybmFsUGxheWJh
Y2tQcm9wZXJ0aWVzQ2hhbmdlZChjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
eworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRl
eCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdl
ZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQoreworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpXaXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQoY29udGV4dElkLCBkaXNhYmxlZCkpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgbXV0ZWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6Ok11dGVkQ2hhbmdlZChjb250ZXh0SWQsIG11dGVkKSk7Cit9CisKKyNw
cmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eToKKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXkoKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5wYXVzZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQbGF5U3RhdGUoKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7
CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjcnViYmluZygpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY3J1YmJpbmcoKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIHRpbWUpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9U
aW1lKHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVrKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5mYXN0U2Vlayh0aW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nQmFj
a3dhcmQoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyh1
aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRT
Y2FubmluZygpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlv
bih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVz
dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBlbGVtZW50ID0gZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5tZWRpYUVsZW1lbnQoKTsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkhhbmRsZUNv
bnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQsIGVsZW1lbnQtPmdldElkQXR0cmli
dXRlKCkpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVNdXRlZCgpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3sK
KyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE11dGVkKG11dGVkKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY4ZDNjMjQ5MjU1MTJiYTMzOGRiMDljMmMxMmY3NWM3NTI5MjNjZDYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRFbnVtcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1DQUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJUEMg
eworY2xhc3MgQXR0YWNobWVudDsKK2NsYXNzIENvbm5lY3Rpb247CitjbGFzcyBEZWNvZGVyOwor
Y2xhc3MgTWVzc2FnZVJlY2VpdmVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBG
bG9hdFNpemU7CitjbGFzcyBOb2RlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
TGF5ZXJIb3N0aW5nQ29udGV4dDsKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKK2NsYXNz
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ+CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dD4gY3JlYXRlKFZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZp
cnR1YWwgflZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKTsKKworICAgIHZvaWQgaW52
YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQorCisgICAgTGF5ZXJIb3N0aW5nQ29u
dGV4dCogbGF5ZXJIb3N0aW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4
dC5nZXQoKTsgfQorICAgIHZvaWQgc2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9w
dHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4mJik7CisKKyAgICBib29sIGlzQW5pbWF0aW5nKCkgY29u
c3QgeyByZXR1cm4gbV9pc0FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0SXNBbmltYXRpbmcoYm9v
bCBmbGFnKSB7IG1faXNBbmltYXRpbmcgPSBmbGFnOyB9CisKKyAgICBib29sIHRhcmdldElzRnVs
bHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0SXNGdWxsc2NyZWVuOyB9CisgICAgdm9p
ZCBzZXRUYXJnZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1fdGFyZ2V0SXNGdWxsc2NyZWVu
ID0gZmxhZzsgfQorCisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIGZ1bGxzY3JlZW5Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVu
TW9kZTsgfQorICAgIHZvaWQgc2V0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIHsgbV9mdWxsc2NyZWVuTW9kZSA9
IG1vZGU7IH0KKworICAgIGJvb2wgaXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1
bGxzY3JlZW47IH0KKyAgICB2b2lkIHNldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV9pc0Z1
bGxzY3JlZW4gPSBmbGFnOyB9CisKK3ByaXZhdGU6CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQKKyAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3Zl
cnJpZGU7CisKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlciogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90IG1fY29udGV4dElkOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRleHQ7Cisg
ICAgYm9vbCBtX2lzQW5pbWF0aW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdGFyZ2V0SXNGdWxs
c2NyZWVuIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbV9mdWxsc2NyZWVuTW9kZSB7IFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKKyAgICBib29sIG1faXNGdWxs
c2NyZWVuIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKKyAgICB2
aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CisgICAgCisgICAgdm9pZCBpbnZhbGlk
YXRlKCk7CisgICAgCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIEludGVyZmFjZSB0byBDaHJvbWVD
bGllbnQKKyAgICBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3Q7CisgICAgdm9pZCBlbnRl
clZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50
JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsK
KyAgICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRN
TFZpZGVvRWxlbWVudCYpOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhv
dXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisKK3Byb3RlY3RlZDoKKyAgICBm
cmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDsKKworICAgIGV4cGxp
Y2l0IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXImKTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBj
cmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50
ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIGVuc3VyZU1v
ZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1v
dmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250
ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dAorICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBoYXNWaWRlbyk7CisgICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisKKyAgICAv
LyBNZXNzYWdlcyBmcm9tIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQorICAgIHZvaWQgcmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlh
KTsKKyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRp
ZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51
cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJG
cmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMs
IElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZp
dHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSk7CisgICAgdm9pZCBm
dWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxl
KTsKKyAgICAKKyAgICBXZWJQYWdlKiBtX3BhZ2U7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQqLCB1aW50NjRfdD4gbV92aWRlb0VsZW1lbnRzOworICAgIEhhc2hNYXA8
dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKKyAgICB1aW50NjRf
dCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90
LCBpbnQ+IG1fY2xpZW50Q291bnRzOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWM0YjU2ODk1NTllZTc1ZDk5NDE2ZTgwNGM3ZmNmNjk3YmIwMjUxMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDM1IEBACisjIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZF
KEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKK21lc3NhZ2VzIC0+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgeworICAgIFJlcXVlc3RG
dWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZp
bmlzaGVkV2l0aE1lZGlhKQorICAgIERpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCisgICAgRGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIERpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkQ2xlYW51cEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKQorICAgIFNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVu
dCBmZW5jZVBvcnQpCisgICAgU2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdW5zaWduZWQgZ3Jhdml0eSkKKyAgICBGdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKKyAgICBGdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCit9CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY4MGI5ZGFiNDZiMmZjNjU1ZjczMjBlN2E1
NWQwOTIxMTgyMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCkBAIC0wLDAgKzEsNDY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLmgiCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAi
QXR0YWNobWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorI2ltcG9y
dCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3Iu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1l
cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRN
TFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5
ZXJCYWNraW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZGVvLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlclZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgorI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMg
SW50UmVjdCBpbmxpbmVWaWRlb0ZyYW1lKEhUTUxWaWRlb0VsZW1lbnQmIGVsZW1lbnQpCit7Cisg
ICAgZWxlbWVudC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlmICgh
cmVuZGVyZXIpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byByZWN0ID0gcmVuZGVyZXIt
PnZpZGVvQm94KCk7CisgICAgcmVjdC5tb3ZlQnkocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCkubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS52aWV3
KCktPmNvbnRlbnRzVG9Sb290VmlldyhyZWN0KTsKK30KKworI3ByYWdtYSBtYXJrIC0gVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdlcigmbWFuYWdl
cikKKyAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKworVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDo6flZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKQorewor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVySG9zdGlu
Z0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYgY29udGV4dCkK
K3sKKyAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29s
IGhhc1ZpZGVvKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+aGFz
VmlkZW9DaGFuZ2VkKG1fY29udGV4dElkLCBoYXNWaWRlbyk7Cit9CisKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9h
dFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIHZpZGVvRGltZW5z
aW9ucyk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKworUmVm
PFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZShX
ZWJQYWdlJiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIo
cGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikpOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCisgICAgOiBtX3BhZ2UoJnBhZ2UpCisg
ICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIocGxheWJhY2tTZXNzaW9uTWFuYWdlcikKK3sK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdl
SUQoKSwgKnRoaXMpOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcigpCit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1
ZXMoKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IG1vZGVsOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4g
aW50ZXJmYWNlOworICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwor
CisgICAgICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7CisgICAgICAgIG1vZGVs
LT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlk
YXRlKCk7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV92aWRlb0Vs
ZW1lbnRzLmNsZWFyKCk7CisgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKKyAgICAKKyAgICBp
ZiAobV9wYWdlKQorICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6aW52YWxpZGF0ZSgpCit7CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIG1fcGFnZSA9IG51bGxwdHI7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVs
SW50ZXJmYWNlVHVwbGUgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWwgPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+
IGludGVyZmFjZSA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhp
cywgY29udGV4dElkKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmFkZENsaWVudEZv
ckNvbnRleHQoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29u
dGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNz
KCkpOworICAgIG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFjZSk7CisKKyAgICByZXR1cm4gc3Rk
OjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQorCitW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJ
bnRlcmZhY2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3Rk
OjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3Vy
ZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwx
PihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3Rk
Ojp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0
SWQpOworCisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5yZW1vdmVDbGllbnRGb3JDb250
ZXh0KGNvbnRleHRJZCk7CisKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVt
ZW50ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOworICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQo
bnVsbHB0cik7CisgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKyAgICBpbnRl
cmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICBtX3ZpZGVvRWxlbWVudHMucmVtb3ZlKHZpZGVvRWxl
bWVudC5nZXQoKSk7CisgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNv
bnRleHRJZCwgMSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIEFT
U0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKKworICAgIGludCBjbGll
bnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOworICAgIEFTU0VSVChjbGll
bnRDb3VudCA+IDApOworICAgIGNsaWVudENvdW50LS07CisKKyAgICBpZiAoY2xpZW50Q291bnQg
PD0gMCkgeworICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKTsKKyAgICAg
ICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOworfQorCisjcHJh
Z21hIG1hcmsgSW50ZXJmYWNlIHRvIENocm9tZUNsaWVudDoKKworYm9vbCBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKK3sKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIHJldHVybiBTZXR0aW5nczo6YXZL
aXRFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVybiBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgJiYgc3VwcG9ydHNQaWN0
dXJlSW5QaWN0dXJlKCk7CisjZW5kaWYKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50JiB2
aWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlKQoreworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworCisgICAgdWludDY0X3Qg
Y29udGV4dElkID0gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5jb250ZXh0SWRGb3JNZWRpYUVs
ZW1lbnQodmlkZW9FbGVtZW50KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmlkZW9FbGVtZW50
cy5hZGQoJnZpZGVvRWxlbWVudCwgY29udGV4dElkKTsKKyAgICBVTlVTRURfUEFSQU0oYWRkUmVz
dWx0KTsKKyAgICBBU1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9PSBjb250ZXh0SWQp
OworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwor
ICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKTsKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisgICAgaWYg
KCFpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKKyAgICAgICAgaW50ZXJmYWNlLT5z
ZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvckV4dGVy
bmFsSG9zdGluZ1Byb2Nlc3MoKSk7CisKKyAgICBhdXRvIHZpZGVvUmVjdCA9IGlubGluZVZpZGVv
RnJhbWUodmlkZW9FbGVtZW50KTsKKyAgICBGbG9hdFJlY3QgdmlkZW9MYXllckZyYW1lID0gRmxv
YXRSZWN0KDAsIDAsIHZpZGVvUmVjdC53aWR0aCgpLCB2aWRlb1JlY3QuaGVpZ2h0KCkpOworCisg
ICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG9sZE1vZGUgPSBp
bnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCk7CisgICAgaW50ZXJmYWNlLT5zZXRUYXJnZXRJc0Z1
bGxzY3JlZW4odHJ1ZSk7CisgICAgaW50ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsK
KyAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KCZ2aWRlb0VsZW1lbnQpOworICAgIGlmIChvbGRN
b2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpCisg
ICAgICAgIG1vZGVsLT5zZXRWaWRlb0xheWVyRnJhbWUodmlkZW9MYXllckZyYW1lKTsKKworICAg
IGlmIChpbnRlcmZhY2UtPmlzQW5pbWF0aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnRl
cmZhY2UtPnNldElzQW5pbWF0aW5nKHRydWUpOworCisgICAgYm9vbCBhbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlID0gdmlkZW9FbGVtZW50LndlYmtpdFN1cHBvcnRzUHJlc2VudGF0aW9uTW9kZShIVE1M
VmlkZW9FbGVtZW50OjpWaWRlb1ByZXNlbnRhdGlvbk1vZGU6OlBpY3R1cmVJblBpY3R1cmUpOwor
ICAgIAorICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQoY29udGV4dElkLCBpbnRlcmZhY2UtPmxheWVySG9z
dGluZ0NvbnRleHQoKS0+Y29udGV4dElEKCksIHZpZGVvUmVjdCwgbV9wYWdlLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpLCBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCksIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQmIHZpZGVvRWxlbWVudCkKK3sKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBBU1NF
UlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKKworICAgIHVpbnQ2
NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZpZGVvRWxlbWVudCk7CisgICAg
YXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRl
cmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKworICAgIGlmIChpbnRlcmZhY2Uu
aXNBbmltYXRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50ZXJmYWNlLnNldElzQW5p
bWF0aW5nKHRydWUpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQsIGlubGluZVZpZGVvRnJhbWUo
dmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCit7CisjaWYgUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisgICAgQVNTRVJU
KG1fcGFnZSk7CisgICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlucygmdmlkZW9FbGVt
ZW50KSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2
aWRlb0VsZW1lbnQpOworICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7CisK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9k
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlkZW9FbGVt
ZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0TW9kZSk7CisjZW5kaWYKK30KKworI3ByYWdt
YSBtYXJrIEludGVyZmFjZSB0byBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OgorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVv
KGNvbnRleHRJZCwgaGFzVmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgaWYgKG1fcGFn
ZSkKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OlNldFZpZGVvRGltZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyksIG1f
cGFnZS0+cGFnZUlEKCkpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRo
TWVkaWEpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yZXF1ZXN0RnVsbHNjcmVlbk1v
ZGUobW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3Jl
ZW5Nb2RlKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgQVNTRVJU
KG1fcGFnZSk7CisgICAgUGxhdGZvcm1MYXllciogdmlkZW9MYXllciA9IFtDQUxheWVyIGxheWVy
XTsKKyNpZm5kZWYgTkRFQlVHCisgICAgW3ZpZGVvTGF5ZXIgc2V0TmFtZTpAIldlYiB2aWRlbyBm
dWxsc2NyZWVuIG1hbmFnZXIgbGF5ZXIiXTsKKyNlbmRpZgorCisgICAgW0NBVHJhbnNhY3Rpb24g
YmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisKKyAg
ICBbdmlkZW9MYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgwLCAwKV07CisgICAgW3ZpZGVv
TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3I6OnRy
YW5zcGFyZW50KV07CisKKyAgICAvLyBTZXQgYSBzY2FsZSBmYWN0b3IgaGVyZSB0byBtYWtlIGNv
bnZlcnRSZWN0OnRvTGF5ZXI6bmlsIHRha2Ugc2NhbGUgZmFjdG9yIGludG8gYWNjb3VudC4gPHJk
YXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KKyAgICAvLyBUaGlzIHNjYWxlIGZhY3RvciBpcyBpbnZl
cnRlZCBpbiB0aGUgaG9zdGluZyBwcm9jZXNzLgorICAgIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3Rv
ciA9IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBbdmlkZW9MYXllciBzZXRUcmFu
c2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0b3IsIGhvc3RpbmdT
Y2FsZUZhY3RvciwgMSldOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5n
Q29udGV4dCgpLT5zZXRSb290TGF5ZXIodmlkZW9MYXllcik7CisKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAKKyAgICBtb2RlbC0+
c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9MYXllciwgW3Byb3RlY3RlZFRoaXMsIHRoaXMs
IGNvbnRleHRJZF0geworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7CisgICAgICAgICAgICBp
ZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1bGxzY3JlZW4oY29u
dGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIH0pOwor
ICAgIH0pOworICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisgICAgCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBt
b2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcoZmFsc2Up
OworICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKworICAgIGlmIChpbnRl
cmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgp
OworICAgIGlmICghdmlkZW9FbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBleGl0
IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBkdXJpbmcgYW4g
YW5pbWF0aW9uLgorICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnRdIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmV4aXRWaWRlb0Z1bGxzY3Jl
ZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQoreworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
KyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgCisgICAgbW9kZWwtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRo
ZW4oW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0geworICAgICAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhp
cywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7CisgICAgICAgICAgICBtb2RlbC0+c2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRl
cmZhY2VdIHsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+
c2V0Um9vdExheWVyKG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNl
LT5zZXRMYXllckhvc3RpbmdDb250ZXh0KG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwg
cHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVs
OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7
CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7Cisg
ICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworICAgIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVu
TW9kZSgpOworICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuID0gaW50ZXJmYWNlLT50YXJnZXRJ
c0Z1bGxzY3JlZW4oKTsKKworICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwp
OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlk
ZW9FbGVtZW50KCk7CisKKyAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgIHJlbW92ZUNsaWVu
dEZvckNvbnRleHQoY29udGV4dElkKTsKKworICAgIGlmICghdmlkZW9FbGVtZW50IHx8ICF0YXJn
ZXRJc0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnQsIG1v
ZGVdIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0Vs
ZW1lbnQsIG1vZGUpOworICAgIH0pOworfQorICAgIAordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25l
ZCBncmF2aXR5KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdy
YXZpdHkoKFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7Cit9Cisg
ICAgCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lu
bGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK3sKKyAgICBpZiAo
IW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgbW9kZWwgPSBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpOworCisgICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQorICAgICAgICBtb2RlbC52
aWRlb0VsZW1lbnQoKS0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2UpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpQcmVwYXJl
ZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVlLCBpbmxpbmVWaWRlb0ZyYW1lKCptb2Rl
bC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKyAgICAKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNl
UG9ydCkKK3sKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZh
Y2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOworCisgICAgaWYgKHN0ZDo6aXNuYW4oYm91bmRzLngoKSkgfHwgc3Rk
Ojppc25hbihib3VuZHMueSgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy53aWR0aCgpKSB8fCBzdGQ6
OmlzbmFuKGJvdW5kcy5oZWlnaHQoKSkpIHsKKyAgICAgICAgYXV0byB2aWRlb1JlY3QgPSBpbmxp
bmVWaWRlb0ZyYW1lKCptb2RlbC0+dmlkZW9FbGVtZW50KCkpOworICAgICAgICBib3VuZHMgPSBG
bG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZpZGVvUmVjdC5oZWlnaHQoKSk7Cisg
ICAgfQorICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlv
biBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsKKyAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3Rp
bmdDb250ZXh0KCkpCisgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5z
ZXRGZW5jZVBvcnQoZmVuY2VQb3J0LnBvcnQoKSk7CisgICAgbW9kZWwtPnNldFZpZGVvTGF5ZXJG
cmFtZShib3VuZHMpOworICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCks
IGZlbmNlUG9ydC5wb3J0KCkpOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUzY2IxNjk4YmRiMTU1Zjk2
Njk4MTExZjA1MTVmMjM4ODdmNWRhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIEF0dGFjaG1lbnQ7Ci1jbGFz
cyBDb25uZWN0aW9uOwotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIE1lc3NhZ2VSZWNlaXZlcjsKLX0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTm9kZTsKLX0KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwot
Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0IGZpbmFsCi0gICAgOiBw
dWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PgotICAg
ICwgcHVibGljIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgICwgcHVi
bGljIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGNyZWF0ZShX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KCk7Ci0KLSAgICB2b2lkIGludmFsaWRh
dGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDsKLQotICAgIC8vIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZQotICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgZmluYWw7Ci0K
LSAgICAvLyBXZWJQbGF5YmFja01vZGVsQ2xpZW50Ci0gICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQo
ZG91YmxlKSBmaW5hbDsKLSAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBmaW5hbDsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNo
YW5nZWQoZG91YmxlKSBmaW5hbDsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2Vk
KGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKSBmaW5hbDsKLSAgICB2b2lkIHJhdGVDaGFuZ2Vk
KGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIGZpbmFsOwotICAgIHZvaWQgc2Vl
a2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUgbGFz
dE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgZmluYWw7Ci0gICAgdm9p
ZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgdmFsdWUpIGZpbmFsOwotICAgIHZvaWQg
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIGZp
bmFsOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkgZmluYWw7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sIGVuYWJsZWQsIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1l
KSBmaW5hbDsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChi
b29sKSBmaW5hbDsKLSAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBmaW5hbDsKLQotICAgIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KiBtX21hbmFnZXI7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci19OwotCi1jbGFzcyBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2UmKTsK
LSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7Ci0KLSAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwot
Ci0gICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQmKTsKLSAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKLSAg
ICB1aW50NjRfdCBjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudCYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI7Ci0KLSAgICBleHBsaWNpdCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2Um
KTsKLQotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6V2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+LCBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBs
ZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIE1vZGVs
SW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7Ci0gICAgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIGVu
c3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCByZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBhZGRDbGll
bnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDbGllbnRG
b3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICAvLyBJbnRlcmZhY2UgdG8gV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAotICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUpOwotICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSk7Ci0gICAg
dm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZl
cmVkVGltZSk7Ci0gICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKLSAgICB2b2lkIHJhdGVDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSk7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBj
b25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJs
ZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOwotICAgIHZvaWQgYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFdl
YkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgYXVkaW9NZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
LCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKLSAgICB2b2lk
IG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotCi0gICAgLy8gTWVzc2Fn
ZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKLSAgICB2b2lkIHBsYXkodWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGJl
Z2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBlbmRTY3J1YmJpbmco
dWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSB0aW1lKTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4
dElkKTsKLSAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5k
ZXgpOwotICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJl
cXVlc3QodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1
cmUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2dsZU11dGVkKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0
ZWQpOwotCi0gICAgV2ViUGFnZSogbV9wYWdlOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCosIHVpbnQ2NF90PiBtX21lZGlhRWxlbWVudHM7Ci0gICAgSGFzaE1hcDx1aW50
NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1f
Y29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OwotICAgIEhhc2hDb3VudGVkU2V0PHVpbnQ2
NF90PiBtX2NsaWVudENvdW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmlu
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTY2NmE3MTU0Y2M0YTk0NGQwNGVjYTg2
Y2IzMDMwMDZiZDc3OGExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMgQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdl
cyAtPiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIHsKLSAgICBQbGF5KHVpbnQ2NF90IGNvbnRl
eHRJZCkKLSAgICBQYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgVG9nZ2xlUGxheVN0YXRl
KHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBCZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0
SWQpCi0gICAgRW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBTZWVrVG9UaW1l
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi0gICAgRmFzdFNlZWsodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgdGltZSkKLSAgICBCZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRf
dCBjb250ZXh0SWQpCi0gICAgQmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICBFbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgU2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotICAgIFNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQot
ICAgIEhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCkK
LSAgICBUb2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBUb2dn
bGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgU2V0TXV0ZWQodWludDY0X3QgY29udGV4
dElkLCBib29sIG11dGVkKQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NWEyN2U0OGIyYTQyODI5ZmI0NDIyNGMxNzRkOWIy
MzgzNTViNWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgot
Ci0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBdHRhY2htZW50LmgiCi0jaW1wb3J0ICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIldlYlBhZ2UuaCIKLSNpbXBvcnQgIldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3MuaCIKLSNpbXBv
cnQgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVS
YW5nZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVXNlckdlc3R1cmVJbmRpY2F0b3IuaD4KLSNpbXBv
cnQgPG1hY2gvbWFjaF9wb3J0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIHVpbnQ2NF90IG5leHRDb250ZXh0SWQoKQotewotICAg
IHN0YXRpYyB1aW50NjRfdCBjb250ZXh0SWQgPSAwOwotICAgIHJldHVybiArK2NvbnRleHRJZDsK
LX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAot
Ci1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2
NF90IGNvbnRleHRJZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICAsIG1fY29udGV4
dElkKGNvbnRleHRJZCkKLXsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoKQotewotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSgpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yZXNldE1lZGlhU3RhdGUobV9j
b250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgaWYgKG1fbWFuYWdlcikK
LSAgICAgICAgbV9tYW5hZ2VyLT5kdXJhdGlvbkNoYW5nZWQobV9jb250ZXh0SWQsIGR1cmF0aW9u
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKLXsKLSAg
ICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmN1cnJlbnRUaW1lQ2hhbmdlZCht
X2NvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1
ZmZlcmVkVGltZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmJ1
ZmZlcmVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1Bs
YXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPnJhdGVDaGFuZ2VkKG1fY29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNr
UmF0ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5wbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZChtX2NvbnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUs
IGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQobV9jb250ZXh0SWQsIHJhbmdlcywg
bGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJv
b2wgdmFsdWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5jYW5Q
bGF5RmFzdFJldmVyc2VDaGFuZ2VkKG1fY29udGV4dElkLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIG9w
dGlvbnMsIHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5sZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJ
bmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlv
bkluZGV4Q2hhbmdlZChtX2NvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikK
LSAgICAgICAgbV9tYW5hZ2VyLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9j
b250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKG1fY29udGV4dElkLCBl
bmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChtX2NvbnRleHRJZCwg
ZGlzYWJsZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+bXV0ZWRDaGFuZ2VkKG1fY29udGV4dElkLCBtdXRlZCk7Ci19Ci0KLSNwcmFn
bWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotUmVmPFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZShXZWJQYWdlJiBw
YWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIocGFnZSkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UpCi0gICAgOiBtX3BhZ2UoJnBhZ2UpCi17Ci0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlE
KCksICp0aGlzKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6fldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIoKQotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAu
dmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkg
PSB0dXBsZTsKLSAgICAgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLSAgICAg
ICAgbW9kZWwtPnNldE1lZGlhRWxlbWVudChudWxscHRyKTsKLQotICAgICAgICBpbnRlcmZhY2Ut
PmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKLSAgICBt
X21lZGlhRWxlbWVudHMuY2xlYXIoKTsKLSAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwotCi0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFn
ZS0+cGFnZUlEKCkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVy
ZmFjZVR1cGxlIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0PiBpbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojpj
cmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7Ci0gICAgbW9kZWwtPmFkZENsaWVudCgqaW50ZXJmYWNl
KTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUo
aW50ZXJmYWNlKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJm
YWNlVHVwbGUmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4
dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOwotICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNy
ZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29u
dGV4dCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2Rl
bCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAg
ICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbWVkaWFFbGVtZW50ID0gbW9kZWwtPm1lZGlhRWxl
bWVudCgpOwotICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7Ci0gICAgbW9kZWwt
PnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLSAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsK
LSAgICBtX21lZGlhRWxlbWVudHMucmVtb3ZlKG1lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgbV9j
b250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAg
IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKLSAgICBp
ZiAobV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCi0gICAgICAgIHJlbW92ZUNvbnRl
eHQoY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRV
cFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlh
RWxlbWVudCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgYXV0byBmb3VuZEl0ZXJhdG9yID0g
bV9tZWRpYUVsZW1lbnRzLmZpbmQoJm1lZGlhRWxlbWVudCk7Ci0gICAgaWYgKGZvdW5kSXRlcmF0
b3IgIT0gbV9tZWRpYUVsZW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNvbnRleHRJ
ZCA9IGZvdW5kSXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQgPT0gY29udGV4dElkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgICAgIHJlbW92ZUNsaWVudEZv
ckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgICAgICBtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsKLSAgICB9IGVsc2UgewotICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsg
cmV0dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7Ci0gICAgICAgIGF1dG8gY29udGV4dElkID0gYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkKQotICAgICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCk7Ci0gICAgICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29u
dGV4dElkOwotICAgICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE1lZGlhRWxlbWVudCgm
bWVkaWFFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6U2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJ
RChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2xlYXJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlcigpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmICghbV9jb250cm9sc01h
bmFnZXJDb250ZXh0SWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbW92ZUNsaWVudEZvckNv
bnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgIG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkID0gMDsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6Q2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLSNlbmRpZgotfQotCi11aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYg
bWVkaWFFbGVtZW50KQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1lbnRzLmVu
c3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9KTsKLSAg
ICB1aW50NjRfdCBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOwotICAg
IHJldHVybiBjb250ZXh0SWQ7Ci19Ci0KLSNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDoKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSZXNldE1l
ZGlhU3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIGR1cmF0aW9uKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpEdXJhdGlvbkNoYW5nZWQoY29udGV4dElkLCBkdXJhdGlv
biksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50
VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkN1cnJlbnRUaW1lQ2hhbmdlZChjb250ZXh0
SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkJ1ZmZlcmVkVGltZUNoYW5n
ZWQoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQotewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpQbGF5
YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpy
YXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5
YmFja1JhdGUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OlJhdGVDaGFuZ2VkKGNvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFj
a1JhdGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBX
ZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwg
ZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPGRvdWJs
ZSwgZG91YmxlPj4gcmFuZ2VzVmVjdG9yOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJh
bmdlcy5yYW5nZXMoKS5zdGFydChpKS50b0RvdWJsZSgpOwotICAgICAgICBkb3VibGUgZW5kID0g
dGltZVJhbmdlcy5yYW5nZXMoKS5lbmQoaSkudG9Eb3VibGUoKTsKLSAgICAgICAgcmFuZ2VzVmVj
dG9yLmFwcGVuZCh7IHN0YXJ0LCBlbmQgfSk7Ci0gICAgfQotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZWVrYWJsZVJhbmdlc1ZlY3Rv
ckNoYW5nZWQoY29udGV4dElkLCBXVEZNb3ZlKHJhbmdlc1ZlY3RvciksIGxhc3RNb2RpZmllZFRp
bWUsIGxpdmVVcGRhdGVJbnRlcnZhbCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIHZhbHVlKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2Vk
KGNvbnRleHRJZCwgdmFsdWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9w
dGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1l
KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5nZWQoY29udGV4dElkLCBlbmFi
bGVkLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odGFyZ2V0VHlwZSksIGxvY2FsaXplZERldmljZU5h
bWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxlY3RlZElu
ZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRD
aGFuZ2VkKGNvbnRleHRJZCwgZGlzYWJsZWQpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQot
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpNdXRlZENoYW5nZWQoY29udGV4dElkLCBtdXRlZCkpOwotfQotCi0jcHJhZ21hIG1hcmsg
TWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0g
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5KCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkucGF1c2UoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGxheVN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY3J1YmJpbmcoKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJpbmcodWludDY0X3QgY29u
dGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5n
VXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2NydWJiaW5nKCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla1RvVGltZSh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuc2Vla1RvVGltZSh0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQotewotICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuZmFzdFNlZWsodGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElk
KQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0ZvcndhcmQo
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nQmFj
a3dhcmQodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuZW5kU2Nhbm5pbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDY0X3QgaW5kZXgpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWxlY3RB
dWRpb01lZGlhT3B0aW9uKGluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBpbmRleCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbihpbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQotewot
ICAgIGF1dG8gZWxlbWVudCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubWVkaWFFbGVtZW50KCk7
Ci0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9u
c2UoY29udGV4dElkLCBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpKSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xl
TXV0ZWQodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkudG9nZ2xlTXV0ZWQoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpz
ZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi17Ci0gICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5zZXRNdXRlZChtdXRlZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE4ZTQ3YzBlZDFhYTJlNjM2YjI2ZjY4NjlhOGIyNTFj
ZTgxZDljNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcl9oCi0jZGVmaW5lIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJfaAotCi0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRFbnVtcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1DQUxheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBJ
UEMgewotY2xhc3MgQXR0YWNobWVudDsKLWNsYXNzIENvbm5lY3Rpb247Ci1jbGFzcyBEZWNvZGVy
OwotY2xhc3MgTWVzc2FnZVJlY2VpdmVyOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBGbG9hdFNpemU7Ci1jbGFzcyBOb2RlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKLWNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7Ci0KLWNsYXNzIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQKLSAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQobWFuYWdl
ciwgY29udGV4dElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0g
bnVsbHB0cjsgfQotCi0gICAgTGF5ZXJIb3N0aW5nQ29udGV4dCogbGF5ZXJIb3N0aW5nQ29udGV4
dCgpIHsgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC5nZXQoKTsgfQotICAgIHZvaWQgc2V0
TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4m
Jik7Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc0FuaW1hdGlu
ZzsgfQotICAgIHZvaWQgc2V0SXNBbmltYXRpbmcoYm9vbCBmbGFnKSB7IG1faXNBbmltYXRpbmcg
PSBmbGFnOyB9Ci0KLSAgICBib29sIHRhcmdldElzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0SXNGdWxsc2NyZWVuOyB9Ci0gICAgdm9pZCBzZXRUYXJnZXRJc0Z1bGxzY3JlZW4o
Ym9vbCBmbGFnKSB7IG1fdGFyZ2V0SXNGdWxsc2NyZWVuID0gZmxhZzsgfQotCi0gICAgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIGZ1bGxzY3JlZW5N
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZTsgfQotICAgIHZvaWQgc2V0RnVs
bHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpIHsgbV9mdWxsc2NyZWVuTW9kZSA9IG1vZGU7IH0KLQotICAgIGJvb2wgaXNG
dWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1bGxzY3JlZW47IH0KLSAgICB2b2lkIHNl
dElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV9pc0Z1bGxzY3JlZW4gPSBmbGFnOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICB2b2lkIGhh
c1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0No
YW5nZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0KLSAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImLCB1
aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciogbV9t
YW5hZ2VyOwotICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxM
YXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRleHQ7Ci0gICAgYm9vbCBtX2lz
QW5pbWF0aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdGFyZ2V0SXNGdWxsc2NyZWVuIHsgZmFs
c2UgfTsKLSAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbV9mdWxsc2NyZWVuTW9kZSB7IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKLSAgICBib29sIG1faXNGdWxsc2NyZWVuIHsgZmFs
c2UgfTsKLX07Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyPiBjcmVhdGUoV2ViUGFnZSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKLSAgICB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7Ci0gICAgCi0gICAgdm9pZCBpbnZh
bGlkYXRlKCk7Ci0gICAgCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIEludGVyZmFjZSB0byBDaHJv
bWVDbGllbnQKLSAgICBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3Q7Ci0gICAgdm9pZCBl
bnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KTsKLSAgICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudCYpOwotICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdp
dGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0KLXByb3RlY3RlZDoKLSAg
ICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDsKLQotICAg
IGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYsIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXImKTsKLQotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7Ci0gICAgTW9k
ZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0
SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICAvLyBJ
bnRlcmZhY2UgdG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAotICAgIHZvaWQg
aGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbyk7Ci0gICAg
dm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJik7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eQotICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90
IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKTsKLSAgICB2b2lkIGRpZFNldHVwRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQp
OwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwg
dW5zaWduZWQgZ3Jhdml0eSk7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUpOwotICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKTsKLSAgICAKLSAgICBXZWJQYWdlKiBtX3Bh
Z2U7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxheWJhY2tTZXNzaW9u
TWFuYWdlcjsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqLCB1aW50NjRf
dD4gbV92aWRlb0VsZW1lbnRzOwotICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNl
VHVwbGU+IG1fY29udGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRl
eHRJZCB7IDAgfTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1fY2xpZW50Q291bnRzOwot
fTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9T
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQot
Ci0jZW5kaWYgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEz
NTljMjVhYWU3YjAxNWUzMDEzZDlhMWIxNTA3YjYxMGEyZmJjYTUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwK
QEAgLTEsMzUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0j
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyIHsKLSAgICBSZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKLSAgICBEaWRT
ZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotICAgIERpZEV4aXRGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBEaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKQotICAgIERpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAg
ICBTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpG
bG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQotICAgIFNldFZpZGVv
TGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpCi0g
ICAgRnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1v
ZGUpCi0gICAgRnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBpc1BhZ2VWaXNpYmxlKQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNDYxNzRlZjNhZDgzZTA4ZjQzYWQ4ZTM3YWJm
YjUxMjg5YTgwNjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIK
LQotI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBdHRhY2htZW50
LmgiCi0jaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIldlYlBhZ2Uu
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbXBvcnQgIldlYlBy
b2Nlc3MuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgot
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBv
cnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5o
PgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVz
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1M
VmlkZW9FbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2lt
cG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXll
ckJhY2tpbmcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlkZW8uaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBJ
bnRSZWN0IGlubGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxlbWVudCYgZWxlbWVudCkKLXsKLSAg
ICBlbGVtZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7Ci0gICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFy
ZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIHJlY3QgPSByZW5kZXJlci0+
dmlkZW9Cb3goKTsKLSAgICByZWN0Lm1vdmVCeShyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoKS5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZpZXco
KS0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIDogbV9tYW5h
Z2VyKCZtYW5hZ2VyKQotICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotewotfQotCi1XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5n
Q29udGV4dD4mJiBjb250ZXh0KQotewotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdURk1v
dmUoY29udGV4dCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgaWYgKG1fbWFuYWdlcikK
LSAgICAgICAgbV9tYW5hZ2VyLT5oYXNWaWRlb0NoYW5nZWQobV9jb250ZXh0SWQsIGhhc1ZpZGVv
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2aWRlb0Rp
bWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAg
IGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChtX2NvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcgotCi1SZWY8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4g
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlLCBwbGF5YmFja1Nl
c3Npb25NYW5hZ2VyKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLSAgICA6IG1fcGFnZSgmcGFnZSkKLSAgICAsIG1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlcihwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQotewotICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgp
LCAqdGhpcyk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZh
bHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0g
dHVwbGU7Ci0KLSAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKLSAgICAg
ICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLQotICAgICAgICBpbnRlcmZhY2Ut
PmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKLSAgICBt
X3ZpZGVvRWxlbWVudHMuY2xlYXIoKTsKLSAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwotICAg
IAotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9wYWdlKTsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsKLX0KLQotV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwotICAgIG1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlci0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwot
Ci0gICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRl
eHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7Ci0gICAgbW9kZWwtPmFkZENs
aWVudCgqaW50ZXJmYWNlKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZSht
b2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkp
OwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1
cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwwPihl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAg
ICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNv
bnRleHRJZCk7Ci0KLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPnJlbW92ZUNsaWVudEZv
ckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRl
b0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7Ci0gICAgbW9kZWwtPnNldFZpZGVvRWxl
bWVudChudWxscHRyKTsKLSAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAg
IGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIG1fdmlkZW9FbGVtZW50cy5yZW1vdmUodmlk
ZW9FbGVtZW50LmdldCgpKTsKLSAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50
cy5hZGQoY29udGV4dElkLCAxKTsKLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotCi0g
ICAgaW50IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7Ci0gICAg
QVNTRVJUKGNsaWVudENvdW50ID4gMCk7Ci0gICAgY2xpZW50Q291bnQtLTsKLQotICAgIGlmIChj
bGllbnRDb3VudCA8PSAwKSB7Ci0gICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0
SWQpOwotICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7
Ci19Ci0KLSNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50OgotCi1ib29sIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAot
ewotI2lmIFBMQVRGT1JNKElPUykKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgcmV0dXJu
IFNldHRpbmdzOjphdktpdEVuYWJsZWQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1vZGUgPT0gSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSAm
JiBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhU
TUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgQVNTRVJU
KG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7
Ci0KLSAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNv
bnRleHRJZEZvck1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQpOwotICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV92aWRlb0VsZW1lbnRzLmFkZCgmdmlkZW9FbGVtZW50LCBjb250ZXh0SWQpOwotICAgIFVO
VVNFRF9QQVJBTShhZGRSZXN1bHQpOwotICAgIEFTU0VSVChhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID09IGNvbnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIGFkZENsaWVudEZvckNvbnRl
eHQoY29udGV4dElkKTsKLSAgICBpZiAoIWludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgp
KQotICAgICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5n
Q29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKLQotICAgIGF1dG8g
dmlkZW9SZWN0ID0gaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpOwotICAgIEZsb2F0UmVj
dCB2aWRlb0xheWVyRnJhbWUgPSBGbG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZp
ZGVvUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgb2xkTW9kZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsKLSAgICBp
bnRlcmZhY2UtPnNldFRhcmdldElzRnVsbHNjcmVlbih0cnVlKTsKLSAgICBpbnRlcmZhY2UtPnNl
dEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOwotICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQoJnZpZGVv
RWxlbWVudCk7Ci0gICAgaWYgKG9sZE1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlTm9uZSkKLSAgICAgICAgbW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZSh2
aWRlb0xheWVyRnJhbWUpOwotCi0gICAgaWYgKGludGVyZmFjZS0+aXNBbmltYXRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcodHJ1ZSk7Ci0KLSAg
ICBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUgPSB2aWRlb0VsZW1lbnQud2Via2l0U3VwcG9y
dHNQcmVzZW50YXRpb25Nb2RlKEhUTUxWaWRlb0VsZW1lbnQ6OlZpZGVvUHJlc2VudGF0aW9uTW9k
ZTo6UGljdHVyZUluUGljdHVyZSk7Ci0gICAgCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChjb250
ZXh0SWQsIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5jb250ZXh0SUQoKSwgdmlk
ZW9SZWN0LCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVl
bk1vZGUoKSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JW
aWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50KQotewot
ICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFpbnMo
JnZpZGVvRWxlbWVudCkpOwotCi0gICAgdWludDY0X3QgY29udGV4dElkID0gbV92aWRlb0VsZW1l
bnRzLmdldCgmdmlkZW9FbGVtZW50KTsKLSAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRl
cmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4o
ZmFsc2UpOwotCi0gICAgaWYgKGludGVyZmFjZS5pc0FuaW1hdGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbnRlcmZhY2Uuc2V0SXNBbmltYXRpbmcodHJ1ZSk7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2Ny
ZWVuKGNvbnRleHRJZCwgaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVv
RnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dCYgdmlkZW9FbGVtZW50LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKLXsKLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSAgICBBU1NFUlQobV9wYWdlKTsKLSAgICBBU1NFUlQo
bV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKLQotICAgIHVpbnQ2NF90
IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZpZGVvRWxlbWVudCk7Ci0gICAgYXV0
byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZh
Y2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKLQotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbldpdGhv
dXRBbmltYXRpb25Ub01vZGUoY29udGV4dElkLCB0YXJnZXRNb2RlKSwgbV9wYWdlLT5wYWdlSUQo
KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh2aWRlb0VsZW1lbnQpOwotICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXRNb2RlKTsKLSNlbmRpZgotfQotCi0jcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRv
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6aGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBo
YXNWaWRlbykKLXsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0SGFzVmlkZW8oY29udGV4dElk
LCBoYXNWaWRlbyksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBj
b25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBpZiAobV9wYWdlKQotICAg
ICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6U2V0VmlkZW9EaW1lbnNpb25zKGNvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eToKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpy
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdp
dGhNZWRpYSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJlcXVlc3RGdWxsc2NyZWVu
TW9kZShtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVs
bHNjcmVlbk1vZGUpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAg
ICBBU1NFUlQobV9wYWdlKTsKLSAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NBTGF5
ZXIgbGF5ZXJdOwotI2lmbmRlZiBOREVCVUcKLSAgICBbdmlkZW9MYXllciBzZXROYW1lOkAiV2Vi
IHZpZGVvIGZ1bGxzY3JlZW4gbWFuYWdlciBsYXllciJdOwotI2VuZGlmCi0KLSAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVT
XTsKLQotICAgIFt2aWRlb0xheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDAsIDApXTsKLSAg
ICBbdmlkZW9MYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpD
b2xvcjo6dHJhbnNwYXJlbnQpXTsKLQotICAgIC8vIFNldCBhIHNjYWxlIGZhY3RvciBoZXJlIHRv
IG1ha2UgY29udmVydFJlY3Q6dG9MYXllcjpuaWwgdGFrZSBzY2FsZSBmYWN0b3IgaW50byBhY2Nv
dW50LiA8cmRhcjovL3Byb2JsZW0vMTgzMTY1NDI+LgotICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9y
IGlzIGludmVydGVkIGluIHRoZSBob3N0aW5nIHByb2Nlc3MuCi0gICAgZmxvYXQgaG9zdGluZ1Nj
YWxlRmFjdG9yID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIFt2aWRlb0xheWVy
IHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3Rvciwg
aG9zdGluZ1NjYWxlRmFjdG9yLCAxKV07Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFj
ZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNl
LT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKLQotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBzdHJvbmdUaGlzKHRoaXMpOwotICAg
IAotICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyLCBbc3Ryb25n
VGhpcywgdGhpcywgY29udGV4dElkXSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKLSAgICAg
ICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNj
cmVlbihjb250ZXh0SWQpLCBzdHJvbmdUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICAgICAg
fSk7Ci0gICAgfSk7Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLSAgICAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1
cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRJc0Fu
aW1hdGluZyhmYWxzZSk7Ci0gICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwot
Ci0gICAgaWYgKGludGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+
dmlkZW9FbGVtZW50KCk7Ci0gICAgaWYgKCF2aWRlb0VsZW1lbnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIGV4aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVz
dGVkIGR1cmluZyBhbiBhbmltYXRpb24uCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHZpZGVvRWxlbWVudF0gewotICAgICAgICBpZiAo
c3Ryb25nVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgc3Ryb25nVGhpcy0+ZXhpdFZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50KTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAgICBtb2RlbC0+d2FpdEZvclByZXBh
cmVkRm9ySW5saW5lVGhlbihbc3Ryb25nVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVs
XSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKLSAgICAgICAgICAgIG1v
ZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtzdHJvbmdUaGlzLCBjb250ZXh0SWQs
IGludGVyZmFjZV0gewotICAgICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0gewotICAg
ICAgICAgICAgICAgICAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgp
LT5zZXRSb290TGF5ZXIobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZh
Y2UtPnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fcGFnZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBz
dHJvbmdUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQotewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNl
KTsKLSAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0gICAgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxz
Y3JlZW5Nb2RlKCk7Ci0gICAgYm9vbCB0YXJnZXRJc0Z1bGxzY3JlZW4gPSBpbnRlcmZhY2UtPnRh
cmdldElzRnVsbHNjcmVlbigpOwotCi0gICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KG5pbCk7Ci0gICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVs
LT52aWRlb0VsZW1lbnQoKTsKLQotICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgcmVtb3Zl
Q2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotCi0gICAgaWYgKCF2aWRlb0VsZW1lbnQgfHwg
IXRhcmdldElzRnVsbHNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHZpZGVvRWxlbWVudCwg
bW9kZV0gewotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgc3Ry
b25nVGhpcy0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVu
dCwgbW9kZSk7Ci0gICAgfSk7Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVk
IGdyYXZpdHkpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRWaWRlb0xheWVyR3Jh
dml0eSgoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKLX0K
LSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQotewotICAg
IGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBtb2RlbCA9IGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCk7Ci0KLSAgICBpZiAoIWlzUGFnZVZpc2libGUpCi0gICAgICAgIG1v
ZGVsLnZpZGVvRWxlbWVudCgpLT5zY3JvbGxJbnRvVmlld0lmTm90VmlzaWJsZShmYWxzZSk7Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OlByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIHRydWUsIGlubGluZVZpZGVvRnJh
bWUoKm1vZGVsLnZpZGVvRWxlbWVudCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotICAgIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFj
aG1lbnQgZmVuY2VQb3J0KQotewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpZiAoc3RkOjppc25hbihi
b3VuZHMueCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy55KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRz
LndpZHRoKCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLmhlaWdodCgpKSkgewotICAgICAgICBhdXRv
IHZpZGVvUmVjdCA9IGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLT52aWRlb0VsZW1lbnQoKSk7Ci0g
ICAgICAgIGJvdW5kcyA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlkZW9S
ZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwot
ICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwotICAgIGlmIChpbnRl
cmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKLSAgICAgICAgaW50ZXJmYWNlLT5sYXllckhv
c3RpbmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgpKTsKLSAgICBtb2Rl
bC0+c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7Ci0gICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUo
bWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7Ci0gICAgW0NBVHJhbnNhY3Rpb24g
Y29tbWl0XTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315313</attachid>
            <date>2017-07-12 17:17:37 -0700</date>
            <delta_ts>2017-07-13 11:17:16 -0700</delta_ts>
            <desc>Better diff. No filename change.</desc>
            <filename>bug-174437-20170712171736.patch</filename>
            <type>text/plain</type>
            <size>420795</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzODQ3ZWU5NmI5OTI2
ODM4MGIzYWNmZGI2MGU3ZjBkOGI1MDMyOC4uNTA5ZTU2ZThhYjNiZmUwMzQ5YzBhMWZlNmJhMzJj
MDZhNTA3NDhhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1MCBAQAorMjAxNy0wNy0xMiAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVm
aXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50
ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFj
a1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVu
ZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFt
ZXNwYWNlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmguCisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6flBsYXliYWNrU2Vzc2lvbk1v
ZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojp+UGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlh
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpi
ZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0
b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5Q
bGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI6On5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgu
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6flZpZGVvRnVsbHNjcmVl
bk1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
LgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbS4KKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcyk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENs
aWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3Zl
Q2xpZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zp
c2libGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhh
c1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmguCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
LgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJh
bmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICgtW1dlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSBmdWxsc2NyZWVuSW50ZXJmYWNlXSk6CisgICAgICAgICgtW1dl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0p
OgorICAgICAgICAoY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckxheWVyIGZ1bGxzY3JlZW5JbnRlcmZhY2VdKToKKyAgICAgICAgKC1bV2ViQVZQ
bGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0pOgorICAgICAgICAoLVtXZWJBVlBs
YXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpdKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpjcmVhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIp
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNj
cmVlbk1vZGVsKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVs
bHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRU
b1N0YXJ0UGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVT
dG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dl
YkFWUGxheWVyQ29udHJvbGxlci5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZCk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnBhdXNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKToK
KyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmR1cmF0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpjdXJyZW50VGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRl
cnZhbCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxh
eUZhc3RSZXZlcnNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxz
Y3JlZW46bW9kZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRGaW5pc2hGdWxsc2NyZWVuOl0pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENs
ZWFudXBGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hh
bmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdl
c0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
Om11dGVkQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVu
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnBsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnBhdXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YmVnaW5TY3J1YmJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2Fi
bGVSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJ
bnRlcnZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxs
c2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJiaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjph
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0uCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6XSk6Cisg
ICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgaW52YWxpZGF0ZV0p
OgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIHNldFVwUElQ
Rm9yVmlkZW9WaWV3OndpdGhGcmFtZTppbldpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250
YWluZXI6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
cGlwU2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakMgcGlwRGlkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgcGlwQWN0aW9uUGxheTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25QYXVzZTpdKToKKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25TdG9wOl0pOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhck1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlk
ZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZWVrVG9UaW1lOnRvbGVyYW5jZUJlZm9yZTp0b2xl
cmFuY2VBZnRlcjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgYmVn
aW5Ub3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlciBlbmRUb3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOl0p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDdXJyZW50TGVnaWJs
ZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hY10pOgorICAgICAgICAo
LVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHRvZ2dsZVBsYXli
YWNrXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6
XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGlzUGxheWluZ10pOgor
ICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciB0b2dnbGVQaWN0dXJlSW5QaWN0
dXJlXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hY10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6XSk6IERlbGV0
ZWQuCisKIDIwMTctMDctMTEgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBOQVZJR0FUT1JfSFdDT05DVVJSRU5DWQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDE4
NGEyMTA3YTUyM2M5Zjg4ZTM0MTAzNmFhN2E3Mzg2MzEzMzI0MGMuLmJkYTNkMjkyMjRmMWI2ODEy
MDM1YWIzNzUzNGY5M2MzMzY3MWJmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNy0wNy0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXli
YWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
cmVtb3ZlcyB0aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxz
Y3JlZW4qIGFuZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAg
IFRoaXMgcHJlZml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUg
V2ViS2l0IG9yIFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZv
ck1lZGlhRWxlbWVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAg
ICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKwogMjAxNy0wNy0xMSAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIE5BVklHQVRPUl9IV0NPTkNVUlJF
TkNZCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggMDNkZTVjZGIwYjc3Yjg3ZjQwZTY0MzhiNjBkYjM4MjEzZmI4NzQy
YS4uN2UzZGQ3MzBjYThkMTM5ZTYyM2RjN2Q3MzU0MGUwOWEzMGQ2N2E3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI2MyBAQAorMjAxNy0wNy0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3Jl
ZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNs
YXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUg
YWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW06CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGlj
dHVyZUluUGljdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6dG9nZ2xlTXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnNldE11dGVkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVk
VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6flBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRD
bGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElE
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla2FibGVSYW5n
ZXNWZWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVD
b250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmZhc3RTZWVrKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5T
Y2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Ojp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbS4KKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4pOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxs
c2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpk
aWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5k
SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2V0dXBGdWxsc2NyZWVuV2l0aElEKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9EaW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXll
ckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNoQmFyKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV93
ZWFrUHRyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhdHRhY2hU
b1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKiBXZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxheWJhY2tTZXNzaW9u
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVz
c2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vz
cy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6bmV4dENvbnRleHRJZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZl
cmVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1
cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tD
b250cm9sc01hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Ojpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyYXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnNldE11dGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oLgorICAgICAgICAoV2ViS2l0OjpWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0uCisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVySG9zdGluZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpoYXNWaWRlb0NoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAgICAg
KFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Up
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCk6
CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRG
b3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVt
b3ZlQ2xpZW50Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpoYXNWaWRlb0NoYW5nZWQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0
OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAg
IChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51
bSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBSZW1vdmVkLgorCiAyMDE3LTA3LTExICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgTkFWSUdBVE9S
X0hXQ09OQ1VSUkVOQ1kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA5M2VjODYxOTRmNGY4NGU1NGQ3NmMwZjQ5ZDJlNzZlODc2MjNj
YTJmLi42MjIzMGZhNWRlMzJiY2FiMDNiYTkwZTFiZGJlNTUxZWMyZjI5OTc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjg1
LDggKzE2ODUsOCBAQAogCQkzRjgwMjAzNjFFOUU0N0MzMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzRjgwMjAzMTFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5j
cHAgKi87IH07CiAJCTNGODAyMDM3MUU5RTQ3QzUwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJl
RGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0Y4MDIwMzQxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyLmggKi87IH07CiAJCTNGODAyMDM4MUU5RTQ3QzkwMERFQzYxRCAvKiBDb3JlQXVkaW9D
YXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwICovOyB9OwotCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi87IH07Ci0JCTNGQkM0QUY0MTg5ODgx
NTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjIxODk4ODE1NjAw
NDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0ZCQzRBRjMxODk4ODE1NjAw
NDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OworCQkzRkJDNEFGNDE4
OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRjFGQTY2MUU3MzUwRkQwMEMx
MDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlLmNwcCAqLzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAx
IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNGQzQzNEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2Nr
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5
QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CkBA
IC0yNDc1LDExICsyNDc1LDExIEBACiAJCTUxRkI1NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Ns
b3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgKi87IH07CiAJ
CTUxRkI2N0RCMUFFNkI4MkIwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNjdE
OTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovOyB9
OwogCQk1MUZCNjdEQzFBRTZCODJGMDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI2
N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyMTMxRTVCMUM0
RjE1NzYwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMUU1QTFDNEYxNTYx
MDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovOyB9OworCQk1
MjEzMUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzFFNUEx
QzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLzsgfTsK
IAkJNTI2NzI0RjMxQ0IyRkVBRDAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3
MjRGMTFDQjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSAq
LzsgfTsKIAkJNTJCMEQ0QkUxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkQxQzU3RkQx
RTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QzEx
QzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQjZDOUMyMTVFM0Y0
REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJEMTVFM0Y0REYwMDY5MEIwNSAv
KiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJNTJCNkM5QzMxNUUzRjRERjAw
NjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJFMTVFM0Y0REYwMDY5MEIwNSAvKiBET01O
YW1lZEZsb3dDb2xsZWN0aW9uLmggKi87IH07CiAJCTUyQjZDOUM1MTVFM0Y0REYwMDY5MEIwNSAv
KiBOYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjZDOUMwMTVFM0Y0REYwMDY5MEIwNSAvKiBOYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCAqLzsgfTsKQEAgLTI0ODcsOSArMjQ4Nyw5IEBACiAJCTUyQ0NBOUUyMTVFM0Y2
MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5RTAxNUUzRjYyQzAwNTNDNzdG
IC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTUyQ0NBOUUzMTVFM0Y2
MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0NBOUUxMTVFM0Y2MkMwMDUzQzc3RiAv
KiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJNTJENUExOEYxQzU0NTkyMzAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gKi87IH07Ci0JCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi87IH07CisJCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQubW0gKi87IH07CiAJCTUyRTJDQUZDMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRp
YVByb2R1Y2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkUyQ0FGQjE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRjEwODY1MTYyQjZEQTQw
MDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhl
ZENvbnRlbnRDaGVja2VyLmNwcCAqLzsgfTsKIAkJNTJGMTA4NjYxNjJCNkRBODAwOUFDODFFIC8q
IE1peGVkQ29udGVudENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVj
a2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTYyMDAsMTUgKzYyMDAsMTUgQEAKIAkJQ0RBMDdGQkUxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3Rl
bVNsZWVwTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTA3RkJDMThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RBMDdG
QzExOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwN0ZCRjE4RTBBMjJCMDA0
Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSAqLzsgfTsKIAkJQ0RBMDdGQzIxOEUw
QTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA3RkMwMThFMEEyMkIwMDQ2OTlGQSAv
KiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmggKi87IH07Ci0JCUNEQTI5QTA5MUNCRDk5RjQwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUNEQTI5QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSAqLzsgfTsKLQkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLzsgfTsKLQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKKwkJQ0RBMjlBMDkxQ0JEOTlGNDAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMEUx
Q0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEMxQ0JE
OUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9
OworCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
NDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovOyB9
OworCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMzAx
Q0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkYxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OwogCQlD
REEyOUEzMTFDQkY3NERBMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkQxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAqLzsgfTsKLQkJQ0RBMjlBMzIx
Q0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRTFDQkY3
M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEzMjFDQzAx
QTk1MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJFMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTc5ODI0MTcwQTI1ODMwMEQ0NUM1
NSAvKiBBdWRpb1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBNzk4MjMxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAg
Ki87IH07CiAJCUNEQTc5ODI3MTcwQTI3OTEwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyNTE3
MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICovOyB9OwogCQlDREE3OTgyQTE3
MEEzRDAwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTkzMjYsOCArOTMyNiw4IEBACiAJCTNGODAyMDMyMUU5RTM4MUQwMERFQzYxRCAvKiBDb3Jl
QXVkaW9DYXB0dXJlRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
cmVBdWRpb0NhcHR1cmVEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4
MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4MDIwMzQx
RTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVF
MzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU1ZpZXdw
b3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE3MTU5RDlB
NTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTNGRkZGOUFCMTU5RDlCMDYwMDIwQkJENSAvKiBWaWV3cG9ydFN0eWxlUmVz
b2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRT
dHlsZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjI5LDEy
ICsxMDIyOSwxMiBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1
QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50
RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMTFD
QjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYyMUNCMkZERjYw
MDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QkQxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRm
b3JtVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRDE1RTNGNERGMDA2
OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkUxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRjE1
RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDI0NCw5ICsxMDI0NCw5IEBACiAJCTUyQ0NBOUUxMTVFM0Y2MkMwMDUz
Qzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyRDVBMThFMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE0MUM1NzQ4
ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBNTFD
NTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQTYxQzU3NDg4OTAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRTJDQUZCMTlGRjAyMDcw
MDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhUHJvZHVjZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGMTA4
NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWl4ZWRDb250ZW50Q2hlY2tlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhl
ZENvbnRlbnRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1peGVk
Q29udGVudENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzM4LDE2
ICsxNDczOCwxNiBAQAogCQlDREEwN0ZCQzE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBM
aXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1TbGVlcExp
c3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTA3RkJGMThFMEEyMkIw
MDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQzAxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNs
ZWVwTGlzdGVuZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVt
U2xlZXBMaXN0ZW5lck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEw
ODFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEy
OUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RB
MjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
QTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExNDFD
QkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExNTFDQkRBNTZDMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyQzFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5
ZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFWUGxh
eWVyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyRDFD
QkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdWRpb1Nlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBNzk4MjMx
NzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBdWRpb1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uSU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkxMzgsMTQgKzE5MTM4LDE0IEBACiAJ
CQkJRTFBMzE2MkMxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5tbSAqLywKIAkJCQlDRDU4OTZFMDFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIuaCAqLywKIAkJCQlDRDU4OTZERjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIubW0gKi8sCi0JCQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovLAotCQkJCUNEQTI5QTE0MUNC
REE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8sCisJ
CQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oICovLAorCQkJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRDgyMDMwNzEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLywKIAkJCQlDRDgyMDMwODEz
OTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5o
ICovLAogCQkJCUNEODIwMzA5MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLm1tICovLAotCQkJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLywKLQkJCQk1MjEzMUU1QTFDNEYx
NTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovLAorCQkJ
CTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
aCAqLywKKwkJCQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLm1tICovLAogCQkJCUNEODIwMzBFMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5k
b3dBbmltYXRpb24uaCAqLywKIAkJCQlDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLm1tICovLAogCQkJCTkzODBGNDc3MDlBMTFBQ0MwMDFGREIzNCAvKiBXaWRn
ZXRNYWMubW0gKi8sCkBAIC0yMTE1MCwxNCArMjExNTAsMTQgQEAKIAkJCQlGRTBEODRFQTEwNDg0
MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gKi8sCiAJCQkJRjQ4MjIzMEYxRTM4NjlCODAwNjZG
Qzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaCAqLywKIAkJCQlGNDgyMjMwRTFFMzg2
OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbSAqLywKLQkJCQlDREEy
OUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCAqLywKLQkJCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0gKi8sCisJCQkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8sCisJCQkJQ0RBMjlBMkYxQ0JGNzNGQzAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovLAogCQkJCTFGODc1
NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAq
LywKIAkJCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFj
a2VyQ2xpZW50Lm1tICovLAogCQkJCTNGNDJCMzFCMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLywKIAkJCQkzRjQyQjMxQzE4ODExOTFCMDAy
NzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovLAotCQkJCTNG
QkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oICovLAotCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLywKKwkJCQkzRkJDNEFGMTE4OTg4MTU2
MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJRTQ1
MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gaW9zOwpAQCAtMjEyMDQsMTQgKzIxMjA0LDE0IEBACiAJCQkJQ0RDOTc5RjMxQzQ5OEMwOTAw
REI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLmggKi8sCiAJCQkJQ0RDOTc5RjIxQzQ5OEMw
OTAwREI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLm1tICovLAogCQkJCTVERkVCQUI2MTg1
OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKLQkJCQlDREEyOUEwODFD
QkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8sCi0JCQkJ
Q0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8s
Ci0JCQkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50LmggKi8sCi0JCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovLAotCQkJCTUyQjBENEJGMUM1N0ZE
NjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAotCQkJ
CTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICov
LAotCQkJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oICovLAotCQkJCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLywKKwkJCQlDREEyOUEwODFDQkQ5
OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8sCisJCQkJQ0RBMjlB
MEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8sCisJCQkJQ0RB
MjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
LmggKi8sCisJCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lm1tICovLAorCQkJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAorCQkJCTUyRDVBMUE0MUM1NzQ4ODkw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovLAorCQkJCTUyRDVBMUE1MUM1NzQ4
ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovLAorCQkJ
CTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzAxMTgsMTEgKzMwMTE4LDExIEBACiAJCQkJMDcwOUQ3OTMxQUU1NTU3RTAw
NEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxQTMxNjJEMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNENTg5NkUyMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMDkxQ0JEOTlG
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQlD
REEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMDkxQ0JE
OTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEw
QjFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZF
IC8qIFdlYlNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1
MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNTY5RDFCMEQ3RTJCODIwMDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDEzOSwxNCArMzAxMzksMTQgQEAKIAkJCQkxRjg3NTZCMjFFMjJD
MzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BM
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkIwRDRDMDFDNTdGRDY2
MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q4MjAzMEExMzk1QUI2QTAwRjk1NkM2
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTNG
NDJCMzFEMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBDMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkz
RkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyRDVBMUE3
MUM1NzQ4OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzRkJDNEFGNDE4OTg4MTU2MDA0
NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRDVBMUE3MUM1NzQ4OUQwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQTgxQzU3NDhBMzAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGMTIxNzFGNjE2QThDRjBCMDAwMDUzQ0EgLyogV2ViVlRURWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjEwQjY5ODAxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRv
a2VuLmggaW4gSGVhZGVycyAqLywKQEAgLTMzODM1LDkgKzMzODM1LDkgQEAKIAkJCQkwNzA5RDc5
MjFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMUEzMTYyRTEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q1ODk2RTExQ0QyQjE1MTAwQjNC
Q0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5
QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTE2
MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291
cmNlcyAqLywKKwkJCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0FGMzQ4MjBBNkM0MDUy
MDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdBQUJE
MUExNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
N0FBQkQxRDE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMzODUzLDkgKzMzODUzLDkgQEAKIAkJCQlDRDgyMDMwQjEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTNGNDJCMzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
QVZLaXQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDgyMDMwRDEzOTVBQjZBMDBGOTU2QzYgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk1
MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MjEz
MUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjEyMTcxRjUxNkE4
Q0VEMjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQy
MUE4MDIxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMTBCNjk4MTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXgg
MjY2MDI2OTI4ZjM2NWIzY2Y2ODg1M2MzNTQ4YzA4NDA0YjFiZmIwNS4uMGQ0NjExYzUwOTYyZWI4
ODEwYTIxYzI0ZjlkY2U5MWYyMzM2YWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKICNp
bmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCkBAIC0xNTYsNyArMTU2LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1
ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCIKICNlbmRpZgogCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAu
Li4pIFJFTEVBU0VfTE9HX0lGKGRvY3VtZW50KCkucGFnZSgpICYmIGRvY3VtZW50KCkucGFnZSgp
LT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTWVkaWEsICIlcCAtIEhUTUxNZWRpYUVsZW1l
bnQ6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAKaW5kZXggMzZjZjQ5N2I5OWI4OTdhOGFhZGRlYWY2MjZiOWFhYjM4ZmZj
MmJhMS4uNjU4OTVmOTM4OTdmMDY4NDE0N2I5ZDBjY2YxNTcwY2I3OTY4N2NjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC00OCw3ICs0OCw3IEBACiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRl
ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLmgKaW5kZXggYzU5YjhjODY0NmJiOGVkNDFlZTcyMDM3NzNjZGQ5
OTA4Y2FmZjllMi4uMDAzNzJhZmM3NTU5NjFlMWYxMjBlZWJiNmQyOTRiODQwYWZmMjNiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZV9oCi0jZGVmaW5lIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZV9oCisjcHJhZ21hIG9u
Y2UKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKIApAQCAtMzgsOSArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFRpbWVSYW5nZXM7CiAKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSB7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgewogcHVibGljOgotICAgIHZp
cnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSgpIHsgfTsKKyAgICB2aXJ0dWFsIH5Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UoKSB7IH07CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVk
aWFTdGF0ZSgpID0gMDsKIH07CiAKQEAgLTQ4LDQgKzQ3LDQgQEAgcHVibGljOgogCiAjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQogCi0jZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKaW5kZXggMDZkNTNmMGY3NzY5
Mzc3NWFkNDg2MWMyMjMwNGFjOTM4MDA5YzgyMy4uYTg3NDQxNTc0NjlhMmE3YjJlNzYzOWUxZjlh
M2FlNzE0ZGYyODY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oCkBAIC0zNCwxNCArMzQsMTQgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGltZVJhbmdlczsKLWNsYXNzIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ7CiBzdHJ1
Y3QgTWVkaWFTZWxlY3Rpb25PcHRpb247CiAKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
IHsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5X
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50
KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSA9IDA7CisgICAgdmly
dHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENs
aWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIHBsYXkoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOwpAQCAt
ODMsOSArODMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTXV0ZWQoKSBjb25zdCA9
IDA7CiB9OwogCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7CitjbGFzcyBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQoKSB7IH07CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQoKSB7IH07CiAgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChk
b3VibGUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIC8q
IGN1cnJlbnRUaW1lICovLCBkb3VibGUgLyogYW5jaG9yVGltZSAqLykgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSB7IH0KQEAgLTk3LDcgKzk3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1
aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4ICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXVkaW9N
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2Nh
bGl6ZWREZXZpY2VOYW1lICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBtdXRlZENo
YW5nZWQoYm9vbCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgK
aW5kZXggYWQ4OTUxMzc1ODg0ZDZjODFhN2YyMzg5NmQ4YzRmNjUzMzkwMzhjNS4uM2E3MzE0M2I0
YmY5YmRlZTM3MzgyNjlkMTgyMDFiODlkMzBkMmIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJFdmVudExpc3Rl
bmVyLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM5LDE1ICszOSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBBdWRpb1RyYWNrOwogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIFRl
eHRUcmFjazsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKK2NsYXNzIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwsIHB1YmxpYyBF
dmVudExpc3RlbmVyIHsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50IGZp
bmFsIDogcHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudD4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkpOwogICAgIH0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCopOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9CiAKQEAgLTU1LDggKzU1LDgg
QEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJik7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykg
Y29uc3QgZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0
ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xp
ZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwbGF5KCkgZmluYWw7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBwYXVzZSgpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7CkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdFQkNPUkVf
RVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKIAogcHJpdmF0ZToK
ICAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7CkBAIC0xMDMsNyArMTAzLDcgQEAg
cHJpdmF0ZToKIAogICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsK
ICAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgSGFzaFNldDxQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKICAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
az4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7CiAgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNr
Pj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0KaW5kZXggY2ZjZGU0MzNmMDM3MDIxZTUxYTBiNDY4NmUyZmI1MTdkN2U5N2Y3NC4u
ODc0ZGZmNzAxMDI0YjNiZDhiMmEwOTFmNmY2NTY3Y2FlODRlMzFjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgogCiAj
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQogCkBAIC00NywxNiArNDcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6V2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQoKQorUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKICAgICA6IEV2ZW50TGlzdGVuZXIo
RXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiB7CiB9CiAKLVdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQoKQorUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5QbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudCgpCiB7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVs
ZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogewogICAgIGlmIChtX21lZGlh
RWxlbWVudCA9PSBtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTg1LDEyICs4NSwx
MiBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVs
ZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaQogICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVu
dE5hbWVBbGwoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3Jl
OjpFdmVudCogZXZlbnQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpo
YW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZl
bnQqIGV2ZW50KQogewogICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC0+dHlwZSgpKTsKIH0K
IAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZl
bnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpB
dG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBpZiAobV9jbGllbnRzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTc2LDc5ICsxNzYsNzkgQEAgdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRv
bWljU3QKICAgICAgICAgICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKGlzTXV0ZWQoKSk7CiAgICAg
fQogfQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50
KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
CiAgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JiBjbGllbnQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpy
ZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBB
U1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2NsaWVudHMucmVtb3Zl
KCZjbGllbnQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpwbGF5KCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkoKQog
ewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBsYXko
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2Uo
KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2UoKQogewogICAg
IGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBsYXlT
dGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5
U3RhdGUoKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpiZWdpblNjcnViYmluZygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpiZWdpblNjcnViYmluZygpCiB7CiAgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygpCiB7CiAgICAg
aWYgKG1fbWVkaWFFbGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5n
KCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtU
b1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVrKGRvdWJsZSB0
aW1lKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PmZhc3RTZWVrKHRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7CiAgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKIHsKICAgICBp
ZiAobV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5n
KE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCiB7CiAgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVkaW9NZWRp
YU9wdGlvbih1aW50NjRfdCBzZWxlY3RlZEF1ZGlvSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVj
dGVkQXVkaW9JbmRleCkKIHsKICAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1
cm47CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBzZWxlY3QKICAgICAgICAg
bV9hdWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJsZWQoaSA9PSBzZWxlY3RlZEF1ZGlvSW5k
ZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpCiB7CiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcx
LDcgKzI3MSw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRlCiAgICAgbV9tZWRpYUVsZW1lbnQt
PnNldFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjayk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgp
CiB7CiAgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpID09IE1lZGlhUGxh
eWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQogICAgICAgICBt
X21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKQEAgLTI3OSwxOCArMjc5LDE4IEBAIHZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBp
Y3R1cmUoKQogICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKE1lZGlhUGxh
eWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlTXV0ZWQoKQordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlTXV0ZWQoKQogewogICAg
IHNldE11dGVkKCFpc011dGVkKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRNdXRlZChib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKIHsKICAgICBpZiAobV9tZWRp
YUVsZW1lbnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRNdXRlZChtdXRlZCk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1
cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKQogewogICAgIGlmICghbV9tZWRpYUVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKQogICAg
IH0KIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRl
TWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpCiB7CiAgICAgYXV0byBhdWRpb0lu
ZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKICAgICBhdXRvIGxlZ2libGVJbmRleCA9
IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbklu
ZGljZXMoKQogICAgIH0KIH0KIAotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX21lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zNDEsNyArMzQxLDcg
QEAgZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1N0
YXJ0ZWRUaW1lKCkgY29uc3QKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrU3Rh
cnRlZFRpbWUoKTsKIH0KIAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQorY29uc3QgVmVj
dG9yPEF0b21pY1N0cmluZz4mIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNl
cnZlZEV2ZW50TmFtZXMoKQogewogICAgIC8vIEZJWE1FKDE1NzQ1Mik6IFJlbW92ZSB0aGUgcmln
aHQtaGFuZCBjb25zdHJ1Y3RvciBub3RhdGlvbiBvbmNlIE5ldmVyRGVzdHJveWVkIHN1cHBvcnRz
IGluaXRpYWxpemVyX2xpc3RzLgogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRv
bWljU3RyaW5nPj4gbmFtZXMgPSBWZWN0b3I8QXRvbWljU3RyaW5nPih7CkBAIC0zNTksNjAgKzM1
OSw2MCBAQCBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6Om9ic2VydmVkRXZlbnROYQogICAgIHJldHVybiBuYW1lcy5nZXQoKTsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCitjb25zdCBBdG9taWNTdHJpbmcmICBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBldmVudE5hbWVBbGwoImFsbEV2ZW50cyIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIHJldHVybiBldmVudE5hbWVBbGw7CiB9
CiAKLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZHVyYXRpb24o
KSBjb25zdAorZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlv
bigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVkaWFF
bGVtZW50LT5kdXJhdGlvbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKIH0KIAotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpj
dXJyZW50VGltZSgpIGNvbnN0Citkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmN1cnJlbnRUaW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBt
X21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSA6IDA7CiB9CiAKLWRvdWJsZSBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YnVmZmVyZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YnVmZmVyZWRUaW1lKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWF4QnVmZmVyZWRU
aW1lKCkgOiAwOwogfQogCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojppc1BsYXlpbmcoKSBjb25zdAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6aXNQbGF5aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyAhbV9t
ZWRpYUVsZW1lbnQtPnBhdXNlZCgpIDogZmFsc2U7CiB9CiAKLWZsb2F0IFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAorZmxvYXQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUmF0ZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrUmF0ZSgpIDog
MDsKIH0KIAotUmVmPFRpbWVSYW5nZXM+IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CitSZWY8VGltZVJhbmdlcz4gUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGUoKSA6IFRpbWVSYW5n
ZXM6OmNyZWF0ZSgpOwogfQogCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAorZG91Ymxl
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0
TW9kaWZpZWRUaW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21l
ZGlhRWxlbWVudC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDogMDsKIH0K
IAotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsaXZlVXBkYXRl
SW50ZXJ2YWwoKSBjb25zdAorZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdAogewogICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dCA/IG1fbWVkaWFFbGVtZW50LT5saXZlVXBkYXRlSW50ZXJ2YWwoKSA6IDA7CiB9CiAgICAgCi1i
b29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVy
c2UoKSBjb25zdAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y2FuUGxh
eUZhc3RSZXZlcnNlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21l
ZGlhRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAgOiBmYWxzZTsKIH0KIAotVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAogewogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gYXVkaW9PcHRpb25zOwogCkBAIC00MjgsNyArNDI4LDcgQEAgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9N
ZWRpYVNlbGUKICAgICByZXR1cm4gYXVkaW9PcHRpb25zOwogfQogCi11aW50NjRfdCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBj
b25zdAordWludDY0X3QgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVk
aWFTZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgbV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGlm
IChtX2F1ZGlvVHJhY2tzRm9yTWVudVtpbmRleF0tPmVuYWJsZWQoKSkKQEAgLTQzNyw3ICs0Mzcs
NyBAQCB1aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAogICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KCk7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlT3B0aW9uczsKIApA
QCAtNDUyLDcgKzQ1Miw3IEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlCiAgICAgcmV0dXJuIGxl
Z2libGVPcHRpb25zOwogfQogCi11aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit1aW50NjRfdCBQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgp
IGNvbnN0CiB7CiAgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDY0X3Q+OjptYXgoKTsKICAgICB1aW50NjRfdCBvZmZJbmRleCA9IDA7CkBAIC00ODks
MTIgKzQ4OSwxMiBAQCB1aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CiAgICAgcmV0dXJuIHNlbGVjdGVk
SW5kZXg7CiB9CiAKLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4
dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPndlYmtpdEN1cnJlbnRQbGF5YmFj
a1RhcmdldElzV2lyZWxlc3MoKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CitQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
bWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKICAg
ICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwpAQCAtNTEyLDE5ICs1MTIsMTkgQEAgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWEKICAgICB9CiB9CiAKLVN0cmluZyBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBj
b25zdAorU3RyaW5nIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBs
YXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fbWVkaWFFbGVt
ZW50ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQogICAgICAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlz
cGxheU5hbWUoKTsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotYm9vbCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQoKSBjb25zdAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAogewogICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCkud2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKm1fbWVkaWFFbGVtZW50KTsKIH0KIAotYm9vbCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6aXNNdXRlZCgpIGNvbnN0Citib29sIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Ojppc011dGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bXV0ZWQoKSA6IGZhbHNlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLmgKaW5kZXggMzkwNzVjNzgxMGRhOWI0MjdhNjE4NTRjOTk3ZDUz
YjM1ZWIwYjFmOS4uZTQ3ZGM4MTVkYjEzMDYwNjQ5ZjQ5ZTk0MjVlOTAxOGY1MzczYjY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCkBAIC0yMywxNyArMjMsMTUgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotCi0jaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyX2gKLSNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXJfaAorI3ByYWdt
YSBvbmNlCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeworY2xhc3MgVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKCkgeyB9OworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSA9IDA7CkBAIC00NSw0ICs0MywzIEBAIHB1Ymxp
YzoKIAogI2VuZGlmCiAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKaW5kZXggYjE2ODdmODE1MzA1Y2Nj
MWMzMWI1NGMwMzljYjNkZGIzODUyMjliMi4uYWM4NDlmYzIwZGEwY2I0MmJkOTI3NjE3ZjE0MThm
OWI3NzMwYzI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCkBAIC0yNCwyNCArMjQsMjMgQEAKICAqLwogCiAK
LSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKIAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1
ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9u
TW9kZWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50OwogCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7
CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSB7IH07Ci0g
ICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50Jik9IDA7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWwoKSB7IH07
CisgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50Jik9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdp
dGhNZWRpYSA9IGZhbHNlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZShGbG9hdFJlY3QpID0gMDsKQEAgLTU0LDkgKzUzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKIH07CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCgpIHsgfQorICAg
IHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAwOwogfTsKQEAgLTY3LDQgKzY2LDMg
QEAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKIAogI2Vu
ZGlmCiAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKaW5kZXgg
ZmVlMWI5ZGUyNzVjZTk4Mjg3ODAzYTFkOTg0ZmEyMzFjZDIxMmEzZS4uMmJjZDJhMzlmZDY3MTEz
NTg1Y2JkMWE4YWU4NmE1YmNlYTczNTgzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5oCkBAIC0yMyw5ICsyMyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLQotI2lm
bmRlZiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudF9oCi0jZGVmaW5lIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50X2gKKyNwcmVhZ21hIG9uY2UKIAogI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKIApAQCAtMzMsNyArMzEsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVv
RnVsbHNjcmVlbk1vZGVsLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00NCwxNSArNDIsMTUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQXVkaW9UcmFjazsKIGNsYXNzIEhUTUxWaWRl
b0VsZW1lbnQ7CiBjbGFzcyBUZXh0VHJhY2s7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Owog
Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3MgVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWws
IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBjcmVhdGUoKQorICAgIHN0YXRpYyBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IGNyZWF0ZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQoKSk7CiAgICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgSFRN
TFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0VsZW1l
bnQuZ2V0KCk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxh
eWVyKFBsYXRmb3JtTGF5ZXIqLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlciA9IFtdIHsgfSk7CkBAIC02Miw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0
ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOwogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzOyB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xp
ZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVy
cmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBv
dmVycmlkZTsKQEAgLTc0LDcgKzcyLDcgQEAgcHVibGljOgogCiAKIHByb3RlY3RlZDoKLSAgICBX
RUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRIYXNWaWRlbyhib29sKTsKQEAgLTg2LDcgKzg0LDcgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAg
UmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiAgICAgYm9v
bCBtX2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsKLSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQqPiBtX2NsaWVudHM7CiAgICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKICAg
ICBGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lvbnM7CiAgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFt
ZTsKQEAgLTk4LDQgKzk2LDMgQEAgcHJpdmF0ZToKIAogI2VuZGlmCiAKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQppbmRleCBjYTRmYmUwMTcwMmNjNTBlNGE0
MzlmODY4NWQ2NDJiNzljZDlhNDA3Li4wODE2ZWE5Y2JmMTc1NjUxODViMGVjNjllYjFjNWFjNmVk
ODMyYTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpAQCAtMjYs
MTMgKzI2LDEzIEBACiAjaW1wb3J0ICJjb25maWcuaCIKIAogI2lmIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCisjaW1wb3J0ICJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogCiAjaW1wb3J0ICJET01XaW5kb3cuaCIK
ICNpbXBvcnQgIkhpc3RvcnkuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlh
Q29udHJvbHNIb3N0LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKICNp
bXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CkBAIC00NywxNiArNDcsMTYg
QEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCitWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQoKQogICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3Rl
bmVyVHlwZSkKIHsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6On5X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCitWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKIHsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVt
ZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRl
b0VsZW1lbnQpCiB7CiAgICAgaWYgKG1fdmlkZW9FbGVtZW50ID09IHZpZGVvRWxlbWVudCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtODEsMTIgKzgxLDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRl
CiAgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCiB7CiAgICAgdXBkYXRlRm9y
RXZlbnROYW1lKGV2ZW50LT50eXBlKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJp
bmcmIGV2ZW50TmFtZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVw
ZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogewog
ICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDAsNyAr
MTAwLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRl
Rm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3QKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBs
YXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0Vmlk
ZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciogdmlkZW9MYXllciwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKG1fdmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpA
QCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqCiAgICAgbV92aWRlb0Vs
ZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFtX3ZpZGVv
RWxlbWVudCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTMzLDcgKzEzMyw3
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OndhaXRGb3JQcmVw
YXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jCiAgICAgbV92aWRlb0VsZW1lbnQtPndhaXRGb3JQ
cmVwYXJlZEZvcklubGluZVRoZW4oV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RnVsbHNjcmVl
bk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJv
b2wgZmluaXNoZWRXaXRoTWVkaWEpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCiB7CiAgICAgaWYgKG1f
dmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpICE9IG1vZGUp
CiAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKQEAgLTE0
OCw3ICsxNDgsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpy
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudAogICAgIH0KIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZs
b2F0UmVjdCByZWN0KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0
VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0KQogewogICAgIG1fdmlkZW9GcmFtZSA9IHJl
Y3Q7CiAgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOkNHUmVjdChyZWN0KV07
CkBAIC0xNTYsMTQgKzE1NiwxNCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCiAgICAgICAgIG1fdmlk
ZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQogewogICAgIE1lZGlhUGxheWVyOjpW
aWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6
ZUFzcGVjdDsKLSAgICBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5UmVzaXplKQorICAgIGlmIChncmF2aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHlSZXNpemUpCiAgICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVy
OjpWaWRlb0dyYXZpdHlSZXNpemU7Ci0gICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQorICAgIGVsc2UgaWYgKGdy
YXZpdHkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkK
ICAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFz
cGVjdDsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gVmlk
ZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpCiAgICAgICAg
IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxs
OwogICAgIGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNzEsNyArMTcx
LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9M
YXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWUKICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0Vmlk
ZW9GdWxsc2NyZWVuR3Jhdml0eSh2aWRlb0dyYXZpdHkpOwogfQogCi1jb25zdCBWZWN0b3I8QXRv
bWljU3RyaW5nPiYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVk
RXZlbnROYW1lcygpCitjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcygpCiB7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFZlY3RvcjxBdG9taWNTdHJpbmc+PiBzRXZlbnROYW1lczsKIApAQCAtMTgw
LDMxICsxODAsMzEgQEAgY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmEKICAgICByZXR1cm4gc0V2ZW50
TmFtZXMuZ2V0KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCitjb25zdCBBdG9taWNTdHJpbmcmIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpldmVudE5hbWVBbGwoKQogewogICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZl
bnRzIjsKICAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3Jl
ZW5Nb2RlKQogewogICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKICAgICAgICAgbV92aWRlb0VsZW1l
bnQtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6YWRkQ2xpZW50KFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjphZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVu
dCkKIHsKICAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9j
bGllbnRzLmFkZCgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBj
bGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZW1vdmVDbGll
bnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9j
bGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQp
OwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zpc2li
bGUoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aXNWaXNp
YmxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fdmlkZW9FbGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yMTUsNyArMjE1LDcgQEAgYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhhc1ZpZGVvKGJvb2wg
aGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRIYXNW
aWRlbyhib29sIGhhc1ZpZGVvKQogewogICAgIGlmIChoYXNWaWRlbyA9PSBtX2hhc1ZpZGVvKQog
ICAgICAgICByZXR1cm47CkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8oYm9vbCBoYXNWaWRlbykKICAgICAgICAg
Y2xpZW50LT5oYXNWaWRlb0NoYW5nZWQobV9oYXNWaWRlbyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9h
dFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OnNldFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9u
cykKIHsKICAgICBpZiAobV92aWRlb0RpbWVuc2lvbnMgPT0gdmlkZW9EaW1lbnNpb25zKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
QVZQbGF5ZXJDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQ
bGF5ZXJDb250cm9sbGVyLmgKaW5kZXggZTVjZmYxMmJiYWZhZTY5MTE4MzEyN2JmMjgwZmE5M2Nl
OTBmMjUxMi4uMWIxMGZiYTBkNDIxOWYwOTFmNzNiOGM3OTcwNjA0YmI1ZDIwYzBlZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIu
aApAQCAtMjgsOCArMjgsOCBAQAogI2ltcG9ydCAiQVZLaXRTUEkuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw7Ci1jbGFzcyBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsOworY2xh
c3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ7CiB9CiAKIEBpbnRlcmZhY2UgV2ViQVZN
ZWRpYVNlbGVjdGlvbk9wdGlvbiA6IE5TT2JqZWN0CkBAIC00NCw4ICs0NCw4IEBAIGNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OwogfQogCiBAcHJvcGVydHkgKHJldGFpbikg
QVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyUHJveHk7Ci1AcHJvcGVydHkgKGFz
c2lnbikgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIGRlbGVnYXRlOwotQHByb3Bl
cnR5IChhc3NpZ24pIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KiBw
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CitAcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uTW9kZWwqIGRlbGVnYXRlOworQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7
CiAKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wgY2FuU2NhbkZvcndhcmQ7CiBAcHJvcGVydHkg
Qk9PTCBjYW5TY2FuQmFja3dhcmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5tbQppbmRleCA2YmZjNWNhMWFhMjZiMjNlNWU4YTQ3
YTJmNjhjMjI4N2YzMThhYTAxLi44NTAzMDZhYzE1ZWQwYTE4YmM4ZjE3YjRmMmI3YTY0YzEwZGVk
MzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJD
b250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXll
ckNvbnRyb2xsZXIubW0KQEAgLTMxLDkgKzMxLDkgQEAKIAogI2ltcG9ydCAiQVZLaXRTUEkuaCIK
ICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCAiVGltZVJh
bmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNp
bXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24v
QVZUaW1lLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKaW5kZXggMjMzMDJmYmQx
YmU2ODY3ZThmZmY1ZDlhOTc0MDU2MDc4ZTljZGU2NS4uZDUwZDIyOWVhZDE5ZmYyMDU0ZmYyZTIy
NmUwZTU3MTdlOWUxNGI3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKQEAgLTIzLDE3
ICsyMywxNSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0KLSNpZm5kZWYgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXRfaAotI2RlZmluZSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIFBMQVRGT1JNKElPUykKIAogI2luY2x1ZGUg
IkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNp
bmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIK
ICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPG9iamMvb2JqYy5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01MiwyNiArNTAsMjYgQEAgY2xhc3MgU3RyaW5nOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWw7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKIGNsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbkNoYW5nZU9ic2VydmVyOwogCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdAotICAgIDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAg
LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gewor
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQKKyAgICA6
IHB1YmxpYyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ+IHsKIAogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9k
ZWwpCisgICAgc3RhdGljIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gY3JlYXRl
KFBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1vZGVsKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1v
ZGVsKSk7CiAgICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0KCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQorICAgIHZpcnR1
YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCk7CisgICAgUGxheWJhY2tTZXNzaW9u
TW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbDsgfQogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAg
Ly8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNl
dE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGFuY2hvclRpbWUpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYnVmZmVyZWRU
aW1lQ2hhbmdlZChkb3VibGUpIG92ZXJyaWRlOwpAQCAtODAsNyArNzgsNyBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92
ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVu
YWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJp
bmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwogCkBA
IC04OSwxNCArODcsMTMgQEAgcHVibGljOgogICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxh
eWVyQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOwog
CiAgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gbV9wbGF5ZXJDb250cm9sbGVy
OwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsg
bnVsbHB0ciB9OworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsIHsgbnVsbHB0ciB9OwogfTsKIAogfQogCiAjZW5kaWYKIAotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0KaW5kZXggMjdkMTZkYjFlZjRkZGZhM2VmYjA1M2VlMGY4NTBiOTU5
YmZlMmIzNy4uOTViYTkwNWE3MDE5NDk2NTc3MzE3YjEwZDUzMDAyN2ZjMWM1MTUxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQpAQCAtMjUsNyArMjUsNyBAQAogCiAKICNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIK
KyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCiAKICNpZiBQTEFURk9S
TShJT1MpCiAjaWYgSEFWRShBVktJVCkKQEAgLTMzLDkgKzMzLDkgQEAKICNpbXBvcnQgIkFWS2l0
U1BJLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlv
bi5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgIlRpbWVSYW5n
ZXMuaCIKICNpbXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAg
LTQ4LDcgKzQ4LDcgQEAgU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGlt
aW5nKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCYgbW9kZWwpCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQogICAgIDog
bV9wbGF5ZXJDb250cm9sbGVyKGFkb3B0TlMoW1tXZWJBVlBsYXllckNvbnRyb2xsZXIgYWxsb2Nd
IGluaXRdKSkKICAgICAsIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQogewpAQCAtNjgs
NyArNjgsNyBAQCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZQogICAgIHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZChtb2RlbC53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgp
KTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6On5XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdCgpCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6flBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCkKIHsKICAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTpudWxscHRyXTsKICAgICBbbV9wbGF5ZXJDb250
cm9sbGVyIHNldEV4dGVybmFsUGxheWJhY2tBY3RpdmU6ZmFsc2VdOwpAQCAtNzYsMTIgKzc2LDEy
IEBAIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+V2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQoKQogICAgIGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmVzZXRNZWRpYVN0YXRlKCkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCiB7CiAgICAgW21fcGxheWVy
Q29udHJvbGxlciByZXNldE1lZGlhU3RhdGVdOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJh
dGlvbikKIHsKICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBt
X3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CiAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlv
bikKICAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJvbGxlclN0YXR1
c1JlYWR5VG9QbGF5OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGlt
ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmN1cnJlbnRUaW1lQ2hhbmdl
ZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQogewogICAgIE5TVGltZUlu
dGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbbV9wbGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFO
IDogYW5jaG9yVGltZTsKICAgICBBVlZhbHVlVGltaW5nICp0aW1pbmcgPSBbZ2V0QVZWYWx1ZVRp
bWluZ0NsYXNzKCkgdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUKQEAgLTEw
Niw3ICsxMDYsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjdXJy
ZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkbwogICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0VGltaW5nOnRpbWluZ107CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91
YmxlIGJ1ZmZlcmVkVGltZSkKIHsKICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNv
bnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CiAgICAgZG91YmxlIGR1cmF0aW9u
ID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb247CkBAIC0xMTgsMTIgKzExOCwxMiBA
QCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpidWZmZXJlZFRpbWVDaGFu
Z2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCiAgICAgcGxheWVyQ29udHJvbGxlci5sb2FkZWRUaW1l
UmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVkQnVmZmVyZWRUaW1lKV07CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewogICAg
IFttX3BsYXllckNvbnRyb2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAw
Ll07CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1v
ZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2Vz
JiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJ
bnRlcnZhbCkKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHNlZWthYmxlUmFuZ2Vz
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAKQEAgLTE0MCw3ICsx
NDAsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJh
bmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdAogICAgIFttX3BsYXllckNvbnRyb2xsZXIg
c2V0TGl2ZVVwZGF0ZUludGVydmFsOmxpdmVVcGRhdGVJbnRlcnZhbF07CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQo
Ym9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQog
ewogICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlGYXN0
UmV2ZXJzZV07CiB9CkBAIC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGkK
ICAgICByZXR1cm4gd2ViT3B0aW9uczsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CiAgICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRpb25z
LmdldCgpXTsKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVgogICAg
ICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2Vs
ZWN0ZWRJbmRleCldXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3
ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwogICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRpb25zLmdl
dCgpXTsKQEAgLTE3MiwxMiArMTcyLDEyIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0CiAgICAg
ICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNl
bGVjdGVkSW5kZXgpXV07CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIGNvbnN0IFN0
cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIGNvbnN0IFN0
cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKIHsKICAgICBBVlBsYXllckNvbnRyb2xsZXJFeHRl
cm5hbFBsYXliYWNrVHlwZSBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29udHJvbGxl
ckV4dGVybmFsUGxheWJhY2tUeXBlTm9uZTsKLSAgICBpZiAodGFyZ2V0VHlwZSA9PSBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCisgICAgaWYgKHRhcmdldFR5cGUg
PT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5KQogICAgICAgICBleHRl
cm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBl
QWlyUGxheTsKLSAgICBlbHNlIGlmICh0YXJnZXRUeXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpUYXJnZXRUeXBlVFZPdXQpCisgICAgZWxzZSBpZiAodGFyZ2V0VHlwZSA9PSBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZVRWT3V0KQogICAgICAgICBleHRlcm5hbFBsYXliYWNr
VHlwZSA9IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlVFZPdXQ7CiAKICAg
ICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRy
b2xsZXIuZ2V0KCk7CkBAIC0xODYsMTcgKzE4NiwxNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdl
YgogICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSA9IGVuYWJsZWQ7
CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQordm9pZCBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2Vk
KGJvb2wgZGlzYWJsZWQpCiB7CiAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRBbGxvd3NFeHRl
cm5hbFBsYXliYWNrOiFkaXNhYmxlZF07CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCiB7CiAgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRNdXRlZDptdXRlZF07CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCiB7CiAgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQppbmRl
eCBiMDYwMTE4OTc2Y2IwYjQwYTI5MTM2ZTNlZmMwNDc2ODUwODA2Zjc0Li5lNDU1NjYwMWFhNTY2
NzY0NjIzZGU2YjRlOTFhZjFkMmU4YzI2MzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQubW0KQEAgLTMxLDEzICszMSwxMyBAQAogCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0
ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmgi
CiAjaW1wb3J0ICJRdWFydHpDb3JlU1BJLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1w
b3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9ydCAiV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCisjaW1wb3J0ICJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5o
PgogI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5o
PgpAQCAtOTIsMjQgKzkyLDI0IEBAIHN0YXRpYyBJbnRSZWN0IGVsZW1lbnRSZWN0SW5XaW5kb3co
SFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQogICAgIHJldHVybiB2aWV3LT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsK
IH0KIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ7CitjbGFzcyBW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDsKIAogQGludGVyZmFjZSBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyIChkZWxlZ2F0ZSkKLS0odm9pZClkaWRGaW5pc2hGdWxsc2NyZWVu
OihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dDsKKy0odm9pZClk
aWRGaW5pc2hGdWxsc2NyZWVuOihWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29u
dGV4dDsKIEBlbmQKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQg
ZmluYWwKLSAgICA6IHByaXZhdGUgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICAsIHByaXZh
dGUgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHByaXZhdGUgV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKLSAgICAsIHByaXZhdGUgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwKLSAgICAsIHByaXZhdGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAs
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4geworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQgZmluYWwK
KyAgICA6IHByaXZhdGUgVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICAsIHByaXZhdGUgVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAsIHByaXZhdGUgVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIKKyAgICAsIHByaXZhdGUgUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICAsIHByaXZh
dGUgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gewogCiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gY3JlYXRl
KCkKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBjcmVh
dGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRDb250
cm9sbGVyKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpIHsgbV9jb250
cm9sbGVyID0gY29udHJvbGxlcjsgfQpAQCAtMTE5LDIyICsxMTksMjIgQEAgcHVibGljOgogICAg
IHZvaWQgaW52YWxpZGF0ZSgpOwogCiBwcml2YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0KCkgeyB9CisgICAgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQoKSB7IH0KIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisgICAg
Ly8gVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKICAgICB2b2lkIGRpZFNldHVwRnVsbHNj
cmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGUg
eyB9CiAgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlk
Q2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZSgpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAogICAgIHZvaWQgaGFzVmlk
ZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQm
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCYpIG92ZXJyaWRlOworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisgICAgdm9p
ZCBhZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICB2
b2lkIHJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKICAg
ICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIG92ZXJyaWRlOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB0b2dnbGVNdXRlZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TXV0
ZWQoYm9vbCkgZmluYWw7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAor
ICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAgICAgdm9pZCBkdXJhdGlvbkNoYW5n
ZWQoZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUg
Y3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGJ1ZmZl
cmVkVGltZUNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKQEAgLTE3OSwzOSArMTc5LDM5IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJyaWRl
OwogICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
IG92ZXJyaWRlOwogICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
Y29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChi
b29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2Fs
aXplZERldmljZU5hbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJv
b2wpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICB2b2lk
IGFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJp
ZGU7CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50
KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0
VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWaWRlb0xh
eWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkpIG92ZXJyaWRlOwogICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGhhc1ZpZGVvKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJy
aWRlOwogICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSGFzaFNldDxX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fcGxheWJhY2tDbGllbnRzOwotICAgIEhh
c2hTZXQ8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2Z1bGxzY3JlZW5DbGllbnRz
OwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZh
Y2U7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtX2Z1
bGxzY3JlZW5Nb2RlbDsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ+IG1fcGxheWJhY2tNb2RlbDsKKyAgICBIYXNoU2V0PFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50Kj4gbV9wbGF5YmFja0NsaWVudHM7CisgICAgSGFzaFNldDxWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCo+IG1fZnVsbHNjcmVlbkNsaWVudHM7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1fZnVsbHNjcmVlbk1vZGVsOworICAgIFJlZlB0cjxQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbV9wbGF5YmFja01vZGVsOwogICAgIFJlZlB0
cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRhaW5QdHI8VUlWaWV3
PiBtX3ZpZGVvRnVsbHNjcmVlblZpZXc7CiAgICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKIH07CiAKLSNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorI3ByYWdtYSBtYXJrIFZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRp
ZFNldHVwRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAg
IFJldGFpblB0cjxDQUxheWVyPiB2aWRlb0Z1bGxzY3JlZW5MYXllciA9IFttX3ZpZGVvRnVsbHNj
cmVlblZpZXcgbGF5ZXJdOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB2aWRlb0Z1bGxzY3JlZW5MYXllcl0gewogICAgICAgICBb
dmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2Vi
Q29yZTo6Q29sb3I6OnRyYW5zcGFyZW50KV07CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5z
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgW3Byb3Rl
Y3RlZFRoaXMsIHRoaXNdIHsKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCiAgICAgfSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxs
c2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRG
dWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAg
ICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsLCBbcHJvdGVj
dGVkVGhpcywgdGhpc10gewogICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKQEAgLTIzNSwxNSArMjM1LDE1
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxs
c2NyZWVuKCkKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwotICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChu
dWxscHRyKTsKLSAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIobnVsbHB0cik7CisgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbk1vZGVs
KG51bGxwdHIpOworICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcihudWxscHRyKTsKICAgICBtX2ludGVyZmFjZSA9IG51bGxwdHI7CiAgICAgbV92aWRlb0Z1
bGxzY3JlZW5WaWV3ID0gbmlsOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwt
PnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVs
LT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7CkBAIC0yNTYsMTAgKzI1NiwxMCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigp
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIEludFJlY3QgY2xpZW50UmVjdCA9IGVs
ZW1lbnRSZWN0SW5XaW5kb3cobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywg
Y2xpZW50UmVjdF0gewpAQCAtMjY4LDEyICsyNjgsMTIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKICAgICB9
KTsKIH0KIAotI3ByYWdtYSBtYXJrIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisjcHJh
Z21hIG1hcmsgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChk
b3VibGUgZHVyYXRpb24pCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgZHVyYXRpb25dIHsKICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7CiAgICAgICAgIH0p
OwpAQCAtMjg0LDEwICsyODQsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKICAgICAgICAgY2xpZW50
LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JU
aW1lKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lXSB7CiAgICAg
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFu
Y2hvclRpbWUpOwogICAgICAgICB9KTsKQEAgLTI5OCwxMCArMjk4LDEwIEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUg
Y3VycmVudFRpbWUsCiAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRU
aW1lLCBhbmNob3JUaW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3Vi
bGUgYnVmZmVyZWRUaW1lKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAg
ICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGJ1ZmZlcmVkVGltZV0gewogICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUp
OwogICAgICAgICB9KTsKQEAgLTMxMiwxMCArMzEyLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVk
VGltCiAgICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdl
ZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBs
YXliYWNrUmF0ZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZV0g
ewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5
YmFja1JhdGUpOwogICAgICAgICB9KTsKQEAgLTMyNiwxMCArMzI2LDEwIEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5CiAgICAgICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5
YmFja1JhdGUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewogICAgIGlm
IChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3Rl
Y3RlZFRoaXMsIGhhc1ZpZGVvXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5oYXNWaWRl
b0NoYW5nZWQoaGFzVmlkZW8pOwogICAgICAgICB9KTsKQEAgLTM0MCwxMCArMzQwLDEwIEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChi
b29sIGhhc1ZpZGVvKQogICAgICAgICBjbGllbnQtPmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNv
bnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1
cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVv
RGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uc10gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh2aWRlb0RpbWVuc2lvbnMpOwogICAgICAgICB9KTsK
QEAgLTM1NCwxMCArMzU0LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplCiAgICAgICAgIGNs
aWVudC0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh2aWRlb0RpbWVuc2lvbnMpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5n
ZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUs
IGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJh
bmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwp
CiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbcHJvdGVjdGVkVGhpcywgcGxhdGZvcm1UaW1lUmFuZ2VzID0gdGltZVJhbmdlcy5yYW5n
ZXMoKSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsXSB7CiAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQoVGltZVJhbmdlczo6Y3JlYXRl
KHBsYXRmb3JtVGltZVJhbmdlcyksIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZh
bCk7CiAgICAgICAgIH0pOwpAQCAtMzY4LDEwICszNjgsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVS
YW5nZXMKICAgICAgICAgY2xpZW50LT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywg
bGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChi
b29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2Up
CiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbcHJvdGVjdGVkVGhpcywgY2FuUGxheUZhc3RSZXZlcnNlXSB7CiAgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJz
ZSk7CiAgICAgICAgIH0pOwpAQCAtMzkxLDEwICszOTEsMTAgQEAgc3RhdGljIFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gaXNvbGF0ZWRDb3B5KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGkKICAgICByZXR1cm4gb3B0aW9uc0NvcHk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKFdlYlRo
cmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhp
cywgb3B0aW9ucyA9IGlzb2xhdGVkQ29weShvcHRpb25zKSwgc2VsZWN0ZWRJbmRleF0gewogICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogICAgICAgICB9KTsKQEAgLTQwNSwxMCArNDA1LDEw
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zCiAgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBvcHRpb25zID0gaXNvbGF0ZWRDb3B5KG9wdGlvbnMpLCBz
ZWxlY3RlZEluZGV4XSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5sZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKICAgICAgICAg
fSk7CkBAIC00MTksNyArNDE5LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY28KICAgICAgICAg
Y2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxl
Y3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBs
b2NhbGl6ZWREZXZpY2VOYW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2Nh
bGl6ZWREZXZpY2VOYW1lKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewogICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHRo
aXMsIGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUgPSBsb2NhbGl6ZWREZXZpY2VO
YW1lLmlzb2xhdGVkQ29weSgpXSB7CkBAIC00MzMsMTAgKzQzMywxMCBAQCB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
IGVuYWJsZWQsCiAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxl
ZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZChib29sIGRpc2FibGVkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCiB7CiAg
ICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
cHJvdGVjdGVkVGhpcywgZGlzYWJsZWRdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPndp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7CiAgICAgICAgIH0p
OwpAQCAtNDQ3LDEwICs0NDcsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGIKICAgICAgICAg
Y2xpZW50LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5n
ZWQoYm9vbCBtdXRlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11
dGVkQ2hhbmdlZChib29sIG11dGVkKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkg
ewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIG11dGVkXSB7CiAgICAg
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tdXRlZENoYW5nZWQobXV0ZWQpOwogICAgICAgICB9KTsK
QEAgLTQ2MSwzNCArNDYxLDM0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQogICAgICAgICBjbGllbnQtPm11dGVkQ2hh
bmdlZChtdXRlZCk7CiB9CiAKLSNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAor
I3ByYWdtYSBtYXJrIFZpZGVvRnVsbHNjcmVlbk1vZGVsCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRk
Q2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJU
KCFtX2Z1bGxzY3JlZW5DbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2Z1bGxzY3Jl
ZW5DbGllbnRzLmFkZCgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVD
bGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQo
bV9mdWxsc2NyZWVuQ2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9mdWxsc2NyZWVu
Q2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBm
aW5pc2hlZFdpdGhNZWRpYSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgbW9k
ZSwgZmluaXNoZWRXaXRoTWVkaWFdIHsKICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbk1vZGVsKQog
ICAgICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtb2Rl
LCBmaW5pc2hlZFdpdGhNZWRpYSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgZnJhbWUp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUoRmxvYXRSZWN0IGZyYW1lKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHZpZGVvRnVsbHNjcmVlbkxh
eWVyID0gW21fdmlkZW9GdWxsc2NyZWVuVmlldyBsYXllcl07CiAgICAgCiAgICAgW3ZpZGVvRnVs
bHNjcmVlbkxheWVyIHNldFN1YmxheWVyVHJhbnNmb3JtOlt2aWRlb0Z1bGxzY3JlZW5MYXllciB0
cmFuc2Zvcm1dXTsKQEAgLTUwOCwxMDUgKzUwOCwxMDUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eSB2aWRlb0dyYXZpdHkpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IHZp
ZGVvR3Jhdml0eSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgdmlkZW9HcmF2
aXR5XSB7CiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVs
bHNjcmVlbk1vZGVsLT5zZXRWaWRlb0xheWVyR3Jhdml0eSh2aWRlb0dyYXZpdHkpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2Ny
ZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVu
TW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIG1vZGVdIHsKICAgICAgICAg
aWYgKG1fZnVsbHNjcmVlbk1vZGVsKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPmZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZChtb2RlKTsKICAgICB9KTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNWaXNpYmxlKCkgY29uc3QKK2Jvb2wgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9mdWxs
c2NyZWVuTW9kZWwtPmlzVmlzaWJsZSgpIDogZmFsc2U7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1bGxzY3Jl
ZW5Nb2RlbC0+aGFzVmlkZW8oKSA6IGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmlzTXV0ZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmlz
TXV0ZWQoKSA6IGZhbHNlOwogfQogCi1GbG9hdFNpemUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9ucygpIGNvbnN0CitGbG9hdFNpemUgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9ucygpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9m
dWxsc2NyZWVuTW9kZWwtPnZpZGVvRGltZW5zaW9ucygpIDogRmxvYXRTaXplKCk7CiB9CiAKLSNw
cmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCisjcHJhZ21hIG1hcmsgLSBQbGF5
YmFja1Nlc3Npb25Nb2RlbAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjphZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCghbV9wbGF5YmFja0NsaWVu
dHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fcGxheWJhY2tDbGllbnRzLmFkZCgmY2xpZW50
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3Zl
Q2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9wbGF5YmFja0NsaWVudHMuY29u
dGFpbnMoJmNsaWVudCkpOwogICAgIG1fcGxheWJhY2tDbGllbnRzLnJlbW92ZSgmY2xpZW50KTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSgpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KCkKIHsKICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1
bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQog
ICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5wbGF5KCk7CiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBhdXNlKCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBhdXNlKCkKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVj
dGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAg
ICAgbV9wbGF5YmFja01vZGVsLT5wYXVzZSgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVh
ZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVs
KQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT50b2dnbGVQbGF5U3RhdGUoKTsKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xl
TXV0ZWQoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlTXV0
ZWQoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmICht
X3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnRvZ2dsZU11dGVk
KCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRNdXRlZChib29sIG11dGVkKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIodGhpcyksIHRo
aXMsIG11dGVkXSB7CkBAIC02MTUsMTUxICs2MTUsMTUxIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCiAgICAgfSk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2NydWJiaW5n
KCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2NydWJiaW5n
KCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwog
ICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9w
bGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjcnViYmlu
ZygpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjplbmRTY3J1YmJpbmcoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZW5kU2NydWJiaW5nKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewog
ICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVs
LT5lbmRTY3J1YmJpbmcoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIHRpbWVdIHsKICAgICAgICAgaWYgKG1fcGxheWJh
Y2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+c2Vla1RvVGltZSh0aW1lKTsK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZmFzdFNlZWsoZG91YmxlIHRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywg
dGhpcywgdGltZV0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAg
bV9wbGF5YmFja01vZGVsLT5mYXN0U2Vlayh0aW1lKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zvcndh
cmQoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmICht
X3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAg
ICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOwogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRT
Y2FubmluZygpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY2Fu
bmluZygpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYg
KG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZW5kU2Nhbm5p
bmcoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0
X3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGluZGV4XSB7CiAg
ICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwt
PnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24o
dWludDY0X3QgaW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3By
b3RlY3RlZFRoaXMsIHRoaXMsIGluZGV4XSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwp
CiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihp
bmRleCk7CiAgICAgfSk7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZHVyYXRpb24oKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpkdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+ZHVyYXRpb24o
KSA6IDA7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
Y3VycmVudFRpbWUoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpjdXJyZW50VGltZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAg
ICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+Y3VycmVudFRpbWUo
KSA6IDA7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YnVmZmVyZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6YnVmZmVyZWRUaW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
ICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5idWZmZXJlZFRp
bWUoKSA6IDA7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmlzUGxheWluZygpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
Ojppc1BsYXlpbmcoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJl
dHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmlzUGxheWluZygpIDogZmFs
c2U7CiB9CiAKLWZsb2F0IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5
YmFja1JhdGUoKSBjb25zdAorZmxvYXQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnBsYXliYWNrUmF0ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAg
cmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+cGxheWJhY2tSYXRlKCkg
OiAwOwogfQogCi1SZWY8VGltZVJhbmdlcz4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKK1JlZjxUaW1lUmFuZ2VzPiBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAogewogICAgIEFT
U0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXli
YWNrTW9kZWwtPnNlZWthYmxlUmFuZ2VzKCkgOiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAot
ZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVRpbWVS
YW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2Rl
bCA/IG1fcGxheWJhY2tNb2RlbC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgp
IDogMDsKIH0KIAotZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojps
aXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwt
PmxpdmVVcGRhdGVJbnRlcnZhbCgpIDogMDsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKK2Jvb2wgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/
IG1fcGxheWJhY2tNb2RlbC0+Y2FuUGxheUZhc3RSZXZlcnNlKCkgOiBmYWxzZTsKIH0KIAotVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwog
ICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCkBAIC03NjcsMTMgKzc2NywxMyBAQCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojph
dWRpb01lZGlhU2VsZQogICAgIHJldHVybiB7IH07CiB9CiAKLXVpbnQ2NF90IFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0
Cit1aW50NjRfdCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNl
bGVjdGVkSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJl
dHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3Rl
ZEluZGV4KCkgOiAtMTsKIH0KIAotVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cygpIGNvbnN0CitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBpZiAobV9wbGF5YmFja01vZGVsKQpAQCAt
NzgxLDMxICs3ODEsMzEgQEAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2UKICAgICByZXR1cm4geyB9
OwogfQogCi11aW50NjRfdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit1aW50NjRfdCBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1f
cGxheWJhY2tNb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIDogLTE7CiB9CiAKLWJv
b2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tF
bmFibGVkKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4
dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5leHRlcm5h
bFBsYXliYWNrRW5hYmxlZCgpIDogZmFsc2U7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAorUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxh
eWJhY2tNb2RlbC0+ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSA6IFRhcmdldFR5cGVOb25l
OwogfQogCi1TdHJpbmcgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVy
bmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QKK1N0cmluZyBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5h
bWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3Bs
YXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWRE
ZXZpY2VOYW1lKCkgOiBTdHJpbmcoKTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAorYm9v
bCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVy
biBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPndpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkKCkgOiB0cnVlOwpAQCAtODEzLDE2ICs4MTMsMTYgQEAgYm9vbCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQo
KSBjb25zdAogCiAjcHJhZ21hIG1hcmsgT3RoZXIKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVv
RWxlbWVudCwgVUlWaWV3ICp2aWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFVJVmlldyAqdmll
dywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBSZXRhaW5QdHI8VUlWaWV3PiB2aWV3UmVm
ID0gdmlldzsKICAgICBtX3ZpZGVvRWxlbWVudCA9ICZ2aWRlb0VsZW1lbnQ7Ci0gICAgbV9wbGF5
YmFja01vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgp
OworICAgIG1fcGxheWJhY2tNb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpjcmVhdGUoKTsKICAgICBtX3BsYXliYWNrTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7CiAgICAg
bV9wbGF5YmFja01vZGVsLT5zZXRNZWRpYUVsZW1lbnQobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwog
Ci0gICAgbV9mdWxsc2NyZWVuTW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6Y3JlYXRlKCk7CisgICAgbV9mdWxsc2NyZWVuTW9kZWwgPSBWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPmFkZENs
aWVudCgqdGhpcyk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRWxlbWVudChtX3Zp
ZGVvRWxlbWVudC5nZXQoKSk7CiAKQEAgLTgzMiwxNSArODMyLDE1IEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVt
ZW50JiB2aWRlCiAgICAgRmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSA9IEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHZpZGVvRWxlbWVudENsaWVudFJlY3Quc2l6ZSgpKTsKICAgICBtX2Z1bGxzY3Jl
ZW5Nb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKHZpZGVvTGF5ZXJGcmFtZSk7CiAKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwogICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB2aWRlb0VsZW1lbnRDbGllbnRSZWN0LCB2aWV3UmVm
LCBtb2RlLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlXSB7CiAgICAgICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwogCi0gICAgICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4g
c2Vzc2lvbkludGVyZmFjZSA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjcmVh
dGUoKnRoaXMpOwotICAgICAgICBtX2ludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpjcmVhdGUoc2Vzc2lvbkludGVyZmFjZS5nZXQoKSk7Ci0gICAgICAgIG1faW50
ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKLSAgICAg
ICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKHRoaXMpOwotICAgICAg
ICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7
CisgICAgICAgIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gc2Vzc2lvbkludGVy
ZmFjZSA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoKnRoaXMpOworICAg
ICAgICBtX2ludGVyZmFjZSA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUo
c2Vzc2lvbkludGVyZmFjZS5nZXQoKSk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZp
ZGVvRnVsbHNjcmVlbk1vZGVsKHRoaXMpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CiAKICAgICAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5WaWV3ID0gYWRvcHROUyhbYWxsb2NVSVZpZXdJbnN0YW5jZSgpIGluaXRdKTsKICAgICAgICAg
CkBAIC04NDgsMjUgKzg0OCwyNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZQogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleGl0RnVsbHNj
cmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleGl0RnVsbHNj
cmVlbigpCiB7CiAgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpIHx8IGlzTWFpblRocmVh
ZCgpKTsKICAgICBJbnRSZWN0IGNsaWVudFJlY3QgPSBlbGVtZW50UmVjdEluV2luZG93KG1fdmlk
ZW9FbGVtZW50LmdldCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjbGll
bnRSZWN0XSB7CiAgICAgICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgICAgICBtX2ludGVy
ZmFjZS0+ZXhpdEZ1bGxzY3JlZW4oY2xpZW50UmVjdCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxz
Y3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAg
bV9pbnRlcmZhY2UtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogQGltcGxl
bWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgewotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gX2NvbnRleHQ7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBfY29udGV4dDsKICAgICBSZWZQdHI8SFRN
TFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxlbWVudDsKIH0KIApAQCAtODkxLDcgKzg5MSw3IEBAIC0g
KEhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudAogLSAodm9pZCllbnRlckZ1bGxzY3JlZW46
KFVJVmlldyAqKXZpZXcgbW9kZTooSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlKW1vZGUKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIF9jb250ZXh0
ID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNyZWF0ZSgpOworICAgIF9j
b250ZXh0ID0gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNyZWF0ZSgpOwogICAg
IF9jb250ZXh0LT5zZXRDb250cm9sbGVyKHNlbGYpOwogICAgIF9jb250ZXh0LT5zZXRVcEZ1bGxz
Y3JlZW4oKl92aWRlb0VsZW1lbnQuZ2V0KCksIHZpZXcsIG1vZGUpOwogfQpAQCAtOTA5LDcgKzkw
OSw3IEBAIC0gKHZvaWQpcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbgogICAgICAgICBfY29u
dGV4dC0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwogfQogCi0tICh2b2lkKWRpZEZp
bmlzaEZ1bGxzY3JlZW46KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250
ZXh0CistICh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0Kiljb250ZXh0CiB7CiAgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsK
ICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQgPT0gX2NvbnRleHQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaAppbmRleCA5OGI0ZGJkY2M4YjBkZWJhOWM4MDI4MDIzNDQ1Yzg3
NGRhMTFmNzQ0Li4xMjc3MTAzYzM0MTFhOTMwOWM4ZmM1MjQ5MzY1YmYwNTg1MTQ2NWI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMjQsMTYgKzI0LDE1IEBACiAgKi8KIAogCi0j
aWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0X2gKLSNkZWZpbmUgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBQTEFURk9S
TShJT1MpCiAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudEVudW1zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5o
IgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCiAjaW5jbHVkZSA8b2JqYy9vYmpj
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KQEAgLTU4LDI3ICs1NywyNyBAQCBjbGFzcyBTdHJpbmc7CiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWw7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKK2NsYXNz
IFZpZGVvRnVsbHNjcmVlbk1vZGVsOworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXI7CiAgICAgCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdCBmaW5hbAotICAgIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
Ci0gICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
eworY2xhc3MgV0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgZmlu
YWwKKyAgICA6IHB1YmxpYyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgICwgcHVibGlj
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsKIAogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOwotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCopOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCog
d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQorICAgIHN0YXRpYyBSZWY8
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdCYpOworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKKyAg
ICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKTsg
fQogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAvLyBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFzVmlkZW9DaGFu
Z2VkKGJvb2wpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlkZW9EaW1lbnNpb25z
Q2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5h
bDsKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkRGV2aWNlTmFtZSkgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
c2V0dXBGdWxsc2NyZWVuKFVJVmlldyYsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZp
ZXcgKiwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOwpAQCAtOTYsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFBpY3R1cmVJblBpY3R1cmVTdGFydGVkCiAgICAgfTsKIAotICAgIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKiBtb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7
IH0KKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsOyB9CiAgICAgYm9vbCBzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhS
ZWFzb24oRXhpdEZ1bGxTY3JlZW5SZWFzb24pOwogICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAg
Ym9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2soKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsgfQpAQCAtMTE4LDE4ICsxMTcsMTggQEAgcHVi
bGljOgogICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQo
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dCYpOwogICAgIHZvaWQgYmVnaW5TZXNzaW9uKCk7CiAgICAgdm9pZCBlbnRlclBpY3R1cmVJblBp
Y3R1cmUoKTsKICAgICB2b2lkIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7CiAgICAgdm9pZCB3
YXRjaGRvZ1RpbWVyRmlyZWQoKTsKICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNv
bnRyb2xsZXIoKSBjb25zdDsKIAotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdD4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKICAgICBSZXRhaW5Q
dHI8V2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdDb250cm9s
bGVyRGVsZWdhdGU7CiAgICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxh
eWVyVmlld0NvbnRyb2xsZXI7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OworICAgIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0ciB9Owor
ICAgIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciB7IG51bGxwdHIgfTsKIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgd2hlbiBmdWxs
c2NyZWVuIGlzIHByZXNlbnRlZCBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KICAgICBSZXRhaW5QdHI8
VUlXaW5kb3c+IG1fd2luZG93OwpAQCAtMTM5LDcgKzEzOCw3IEBAIHByb3RlY3RlZDoKICAgICBS
ZXRhaW5QdHI8V2ViQVZQbGF5ZXJMYXllclZpZXc+IG1fcGxheWVyTGF5ZXJWaWV3OwogICAgIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CiAgICAgV1RGOjpGdW5j
dGlvbjx2b2lkKGJvb2wpPiBtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrOwotICAgIFJ1bkxvb3A6
OlRpbWVyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBtX3dhdGNoZG9nVGltZXI7
CisgICAgUnVuTG9vcDo6VGltZXI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1fd2F0
Y2hkb2dUaW1lcjsKICAgICBib29sIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrIHsg
ZmFsc2UgfTsKICAgICBib29sIG1fZXhpdFJlcXVlc3RlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X2V4aXRDb21wbGV0ZWQgeyBmYWxzZSB9OwpAQCAtMTU2LDQgKzE1NSwzIEBAIHByb3RlY3RlZDoK
IAogI2VuZGlmCiAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCmluZGV4IDc2
ZmZmYzIwMDQ4ZGJlNDNiZGI1NDgxNzg2OGIyY2EzNzI3N2M2M2UuLjI1ZWNlNjM2NjA4ZTE0YWI2
OWI2MzA2MTVmZmYwYjU2MDBiMGFmNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0K
QEAgLTIzLDI1ICsyMywyMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0KICNpbXBvcnQgImNv
bmZpZy5oIgogCiAjaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaCIKIAogI2lmIEhBVkUoQVZLSVQpCiAKICNpbXBvcnQgIkFWS2l0U1BJLmgiCiAjaW1wb3J0
ICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKICNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCiAj
aW1wb3J0ICJXZWJBVlBsYXllckNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmgi
Ci0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAi
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUu
aD4KICNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CiAjaW1wb3J0IDxvYmpjL21lc3NhZ2UuaD4KQEAg
LTkyLDE5ICs5MCwxOSBAQCBzdGF0aWMgY29uc3QgU2Vjb25kcyBkZWZhdWx0V2F0Y2hkb2dUaW1l
ckludGVydmFsIHsgMV9zIH07CiBAY2xhc3MgV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbjsKIAog
QGludGVyZmFjZSBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdCA8
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlX1dlYktpdE9ubHk+IHsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRl
cmZhY2U7CiB9Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7CitAcHJvcGVydHkgKGFzc2lnbikgVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7CiAtIChCT09MKXBsYXll
clZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRy
b2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9s
bGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVhc29uOwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24g
V2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlCi0tIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQorLSAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKIHsKICAgICByZXR1cm4gX2Z1bGxzY3Jl
ZW5JbnRlcmZhY2UuZ2V0KCk7CiB9CiAKLS0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZToo
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKKy0g
KHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKIHsKICAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1
bGxzY3JlZW5JbnRlcmZhY2U7CiB9CkBAIC0xNDAsMTkgKzEzOCwxOSBAQCAtICh2b2lkKXBsYXll
clZpZXdDb250cm9sbGVyRGlkU3RvcFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRy
b2xsZXIgKilwbAogICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3RvcFBpY3R1cmVJ
blBpY3R1cmUoKTsKIH0KIAotc3RhdGljIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpFeGl0RnVsbFNjcmVlblJlYXNvbiBjb252ZXJ0VG9FeGl0RnVsbFNjcmVlblJlYXNvbihBVlBs
YXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29uKQorc3RhdGljIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiBjb252ZXJ0
VG9FeGl0RnVsbFNjcmVlblJlYXNvbihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3Jl
ZW5SZWFzb24gcmVhc29uKQogewogICAgIHN3aXRjaCAocmVhc29uKSB7CiAgICAgY2FzZSBBVlBs
YXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25Eb25lQnV0dG9uVGFwcGVkOgot
ICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxs
U2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkOworICAgICAgICByZXR1cm4gVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFw
cGVkOwogICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29u
RnVsbFNjcmVlbkJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RnVsbFNjcmVlbkJ1dHRvblRh
cHBlZDsKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0
RnVsbFNjcmVlblJlYXNvbjo6RnVsbFNjcmVlbkJ1dHRvblRhcHBlZDsKICAgICBjYXNlIEFWUGxh
eWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpY3R1cmVJblBpY3R1cmVTdGFy
dGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4
aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDsKKyAgICAgICAgcmV0
dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6
UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ7CiAgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVy
RXhpdEZ1bGxTY3JlZW5SZWFzb25QaW5jaEdlc3R1cmVIYW5kbGVkOgotICAgICAgICByZXR1cm4g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQ
aW5jaEdlc3R1cmVIYW5kbGVkOworICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1cmVIYW5kbGVkOwogICAg
IGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUmVtb3RlQ29u
dHJvbFN0b3BFdmVudFJlY2VpdmVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2
ZW50UmVjZWl2ZWQ7CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZDsK
ICAgICB9CiB9CiAKQEAgLTE3Miw3ICsxNzAsNyBAQCBAZW5kCiBAaW50ZXJmYWNlIFdlYkFWUGxh
eWVyTGF5ZXIgOiBDQUxheWVyCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBOU1N0cmlu
ZyAqdmlkZW9HcmF2aXR5OwogQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1JlYWR5Rm9y
RGlzcGxheSkgQk9PTCByZWFkeUZvckRpc3BsYXk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVlbkludGVyZmFj
ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOwogQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
bikgQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyOwogQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbikgQ0FMYXllciAqdmlkZW9TdWJsYXllcjsKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5LCBudWxsYWJsZSkgTlNEaWN0aW9uYXJ5ICpwaXhlbEJ1ZmZlckF0dHJpYnV0ZXM7
CkBAIC0xODEsNyArMTc5LDcgQEAgQHByb3BlcnR5IENHUmVjdCBtb2RlbFZpZGVvTGF5ZXJGcmFt
ZTsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyTGF5ZXIgewotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbklu
dGVyZmFjZTsKICAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBfYXZQbGF5ZXJD
b250cm9sbGVyOwogICAgIFJldGFpblB0cjxDQUxheWVyPiBfdmlkZW9TdWJsYXllcjsKICAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IF92aWRlb0dyYXZpdHk7CkBAIC0yMDQsMTIgKzIwMiwxMiBAQCAt
ICh2b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKLS0gKFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCistIChWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQogewogICAgIHJldHVybiBf
ZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKTsKIH0KIAotLSAodm9pZClzZXRGdWxsc2NyZWVuSW50
ZXJmYWNlOihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVy
ZmFjZQorLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQogewogICAgIF9mdWxsc2NyZWVuSW50ZXJm
YWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKIH0KQEAgLTI3Miw3ICsyNzAsNyBAQCAtICh2b2lk
KWxheW91dFN1YmxheWVycwogICAgIFt2aWV3IHNldFRyYW5zZm9ybTp0cmFuc2Zvcm1dOwogICAg
IAogICAgIE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gW0NBVHJhbnNhY3Rpb24g
YW5pbWF0aW9uRHVyYXRpb25dOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIF57CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgXiB7CiAgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dp
dGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5p
bF07CiAKICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91
bmRzKSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OmFuaW1hdGlvbkR1cmF0aW9uICsgMC4xXTsK
QEAgLTMxMiwxMyArMzEwLDEzIEBAIC0gKHZvaWQpc2V0VmlkZW9HcmF2aXR5OihOU1N0cmluZyAq
KXZpZGVvR3Jhdml0eQogICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5IGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CiAgICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRB
VkxheWVyVmlkZW9HcmF2aXR5UmVzaXplKCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgICAgICBncmF2
aXR5ID0gV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZTsK
ICAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3QoKSkKLSAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwogICAgIGVsc2Ug
aWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0Rmls
bCgpKQotICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7CisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3Jl
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKICAg
ICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIApAQCAtMzY1LDcgKzM2
Myw3IEBAIHN0YXRpYyBDbGFzcyBnZXRXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXdDbGFzcygpCiB7CiAgICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0gbmlsOwogICAgIHN0YXRp
YyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tl
biwgXnsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF4gewogICAgICAgICB0aGVDbGFz
cyA9IG9iamNfYWxsb2NhdGVDbGFzc1BhaXIoZ2V0VUlWaWV3Q2xhc3MoKSwgIldlYkFWUGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlldyIsIDApOwogICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xh
c3NQYWlyKHRoZUNsYXNzKTsKICAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2JqY19nZXRNZXRh
Q2xhc3MoIldlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIpOwpAQCAtNDcxLDcg
KzQ2OSw3IEBAIHN0YXRpYyBDbGFzcyBnZXRXZWJBVlBsYXllckxheWVyVmlld0NsYXNzKCkKIHsK
ICAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7CiAgICAgc3RhdGljIGRpc3BhdGNoX29u
Y2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7CiAgICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxv
Y2F0ZUNsYXNzUGFpcihnZXRfX0FWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSwgIldlYkFWUGxheWVy
TGF5ZXJWaWV3IiwgMCk7CiAgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVj
dG9yKGRlYWxsb2MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MsICJ2QDoiKTsK
ICAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0UGxheWVyQ29u
dHJvbGxlcjopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIs
ICJ2QDpAIik7CkBAIC00OTEsMzUgKzQ4OSwzNSBAQCBzdGF0aWMgQ2xhc3MgZ2V0V2ViQVZQbGF5
ZXJMYXllclZpZXdDbGFzcygpCiAgICAgcmV0dXJuIHRoZUNsYXNzOwogfQogCi1SZWY8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZSkKK1JlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZShQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogewotICAgIFJlZjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdChwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKKyAgICBS
ZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVyZmFjZSA9IGFkb3B0UmVmKCpu
ZXcgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KSk7CiAgICAgW2ludGVyZmFjZS0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIHNldEZ1
bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJmYWNlLnB0cigpXTsKICAgICByZXR1cm4gaW50ZXJmYWNl
OwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZSkKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYg
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogICAgIDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogICAgICwgbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ckRlbGVnYXRlKGFkb3B0TlMoW1tXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgYWxs
b2NdIGluaXRdKSkKLSAgICAsIG1fd2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKQor
ICAgICwgbV93YXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQpCiB7CiB9CiAKLVdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQoKQorVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdCgpCiB7CiAgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9s
bGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxlcigpOwogICAgIGlmIChwbGF5ZXJDb250cm9sbGVy
ICYmIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSkKLSAgICAgICAgZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQoZmFsc2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJn
ZXRUeXBlTm9uZSwgIiIpOworICAgICAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChmYWxzZSwg
UGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lLCAiIik7CiAgICAgaWYgKG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92
ZUNsaWVudCgqdGhpcyk7CiB9CiAKLVdlYkFWUGxheWVyQ29udHJvbGxlciAqV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIoKSBjb25zdAorV2ViQVZQbGF5
ZXJDb250cm9sbGVyICpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cGxheWVyQ29udHJv
bGxlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5w
bGF5ZXJDb250cm9sbGVyKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KiBtb2RlbCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVs
bHNjcmVlbk1vZGVsKFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKIHsKICAgICBpZiAobV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVt
b3ZlQ2xpZW50KCp0aGlzKTsKQEAgLTUzMywxOCArNTMxLDE4IEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVv
RnVsbHNjCiAgICAgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
ID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUo
KSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKiBvYnNlcnZlcikKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KiBvYnNlcnZlcikKIHsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVy
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpoYXNWaWRlb0No
YW5nZWQoYm9vbCBoYXNWaWRlbykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewogICAgIFtwbGF5ZXJDb250cm9sbGVy
KCkgc2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsKICAgICBbcGxheWVyQ29udHJvbGxlcigp
IHNldEhhc1ZpZGVvOmhhc1ZpZGVvXTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVv
RGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAg
V2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3Bs
YXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CiAKQEAgLTU1OCwxNCArNTU2LDE0IEBAIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
Y29uc3QgRmxvYXRTaXplJiB2CiAgICAgW3BpcFZpZXcgc2V0TmVlZHNMYXlvdXRdOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tT
ZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQog
ewogICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRkZW46ZW5hYmxlZF07CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0
aXZlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlk
QmVjb21lQWN0aXZlKCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlzKTsK
KyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBs
aWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlzKTsKICAgICBpZiAobV9zaG91bGRSZXR1
cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCAmJiBtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmlzVmlzaWJsZSgpKSB7CiAgICAgICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNTc0LDcgKzU3Miw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKICAgICAvLyBJZiB3ZSBhcmUg
Ym90aCBpbiBQaVAgYW5kIGluIEZ1bGxzY3JlZW4gKGkuZS4sIHZpYSBhdXRvLVBpUCksIGFuZCB3
ZSBkaWQgbm90IHN0b3AgZnVsbHNjcmVlbiB1cG9uIHJldHVybmluZywgaXQgbXVzdCBiZQogICAg
IC8vIGJlY2F1c2UgdGhlIG9yaWdpbmF0aW5nIHZpZXcgaXMgbm90IHZpc2libGUsIHNvIGhpZGUg
dGhlIGZ1bGxzY3JlZW4gd2luZG93LgogICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgewotICAgICAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5B
bmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0ws
IE5TRXJyb3IqKSB7CiAgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CiAgICAg
ICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107CkBA
IC01OTAsMTAgKzU4OCwxMCBAQCBAaW50ZXJmYWNlIFVJVmlld0NvbnRyb2xsZXIgKCkKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHNldHRlcj1fc2V0SWdub3JlQXBwU3VwcG9ydGVkT3Jp
ZW50YXRpb25zOikgQk9PTCBfaWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOwogQGVuZAog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4o
VUlWaWV3JiB2aWRlb1ZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBV
SVZpZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmIHZpZGVv
VmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50
VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJv
b2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQogewogICAgIEFTU0VSVChtb2RlICE9
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVs
bHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAKICAgICBtX2Fs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayA9IGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5
YmFjazsKIApAQCAtNjU5LDE2ICs2NTcsMTYgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKFVJVmlldyYgdmlkZW9WaWV3LCBjb25zdAogCiAg
ICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNd
IHsKICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQogICAgICAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxz
Y3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuKCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgTE9HKEZ1bGxzY3JlZW4s
ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRo
aXMpOwogCiAgICAgbV9leGl0Q29tcGxldGVkID0gZmFsc2U7CiAgICAgbV9leGl0UmVxdWVzdGVk
ID0gZmFsc2U7CkBAIC02ODIsOSArNjgwLDkgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGlj
dHVyZUluUGljdHVyZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsK
KyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CiAgICAgCiAgICAgaWYgKFttX3BsYXllclZp
ZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZVBvc3NpYmxlXSkKICAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgc3RhcnRQaWN0dXJlSW5QaWN0dXJlXTsKQEAgLTY5MiwxMCArNjkw
LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVy
ZUluUGljdHVyZSgpCiAgICAgICAgIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVl
blN0YW5kYXJkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVs
bHNjcmVlblN0YW5kYXJkKCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCglcCkiLCB0aGlzKTsK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoJXApIiwgdGhpcyk7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogCiAgICAg
aWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZUFjdGl2ZV0pIHsK
ICAgICAgICAgLy8gTk9URTogVGhlIGZ1bGxzY3JlZW4gbW9kZSB3aWxsIGJlIHJlc3RvcmVkIGlu
IHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcigpLgpA
QCAtNzA2LDcgKzcwNCw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKIAogICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbdGhpcywgcHJv
dGVjdGVkVGhpc10gKEJPT0wgc3VjY2VlZGVkLCBOU0Vycm9yKikgewogICAgICAgICBVTlVTRURf
UEFSQU0oc3VjY2VlZGVkKTsKLSAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXAp
IC0gc3VjY2VlZGVkKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcoc3VjY2VlZGVkKSk7CisgICAgICAg
IExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVs
bHNjcmVlblN0YW5kYXJkIC0gbGFtYmRhKCVwKSAtIHN1Y2NlZWRlZCglcykiLCB0aGlzLCBib29s
U3RyaW5nKHN1Y2NlZWRlZCkpOwogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRT
aG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKIAogICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCkBAIC03MTQsNyArNzEyLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQogICAgIH1dOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJl
Y3QpCiB7CiAgICAgbV93YXRjaGRvZ1RpbWVyLnN0b3AoKTsKIApAQCAtNzI1LDcgKzcyMyw3IEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhp
dEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKICAgICAK
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcg
Y29udmVydFJlY3Q6ZmluYWxSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XS5zdXBlcnZpZXddOwpAQCAtNzQwLDE0ICs3MzgsMTQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZmkKICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CiAgICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKICAgICB9IGVsc2UgaWYgKGlzTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0
dXJlIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQp
KSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0
ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKICAgICAgICAgICAgIGNsZWFyTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CiAgICAg
ICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKICAgICAgICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKICAgICAgICAgfV07CiAgICAgfSBl
bHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxl
cjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CiAgICAgICAgICAgICBt
X2V4aXRDb21wbGV0ZWQgPSB0cnVlOwogCkBAIC03NzMsOSArNzcxLDkgQEAgQGludGVyZmFjZSBV
SVdpbmRvdyAoKQogLSAoVUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZhY2VPcmllbnRhdGlv
bjsKIEBlbmQKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51
cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51
cEZ1bGxzY3JlZW4oKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworICAgIExPRyhG
dWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2Ny
ZWVuKCVwKSIsIHRoaXMpOwogICAgIGlmIChtX3dpbmRvdykgewogICAgICAgICBbbV93aW5kb3cg
c2V0SGlkZGVuOllFU107CiAgICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6
bmlsXTsKQEAgLTgxMCw3ICs4MDgsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCiAgICAgbV9lbnRlclJlcXVlc3RlZCA9IGZhbHNl
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRl
KCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQogewog
ICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7CiAgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgPSBuaWw7CkBAIC04MTgsNyArODE2LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCiAgICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVB
bmRFeGl0RnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpy
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKIHsKICAgICBpZiAoIW1fZW50ZXJSZXF1ZXN0
ZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTgyNiwyMCArODI0LDIwIEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQog
ICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVBpY3R1cmVJblBpY3R1cmUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRF
eGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCVwKSIs
IHRoaXMpOwogCiAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKIAotICAgIGlmICh3ZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVl
c3RlZCkgewotICAgICAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOworICAg
IGlmIChwbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYg
IW1fZXhpdFJlcXVlc3RlZCkgeworICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVz
ZSgpOwogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiAgICAg
fQogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRv
UmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5s
aW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCkKIHsKLSAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRv
UmV0dXJuVG9JbmxpbmUoJXApIC0gdmlzaWJsZSglcykiLCB0aGlzLCBib29sU3RyaW5nKHZpc2li
bGUpKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApIC0gdmlzaWJsZSglcykiLCB0aGlzLCBib29s
U3RyaW5nKHZpc2libGUpKTsKICAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjaykgewog
ICAgICAgICAKICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBb
bV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmlubGluZVJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddLnN1cGVydmlld107CkBAIC04NDksMzMgKzg0NywzMyBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
Ym9vbCB2aXNpYmxlLCBjbwogICAgIH0KIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBj
b25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAogewogICAgIHJldHVybiBbcGxheWVy
Q29udHJvbGxlcigpIGlzUGxheWluZ10gJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkICYmIHN1cHBvcnRzUGljdHVyZUluUGljdHVy
ZSgpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNr
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChib29sKT4mJiBjYWxsYmFjaykKIHsKICAgICBt
X3ByZXBhcmVUb0lubGluZUNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CiAgICAgaWYgKG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQogICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVy
ZSgpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVs
bHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCVwKSIsIHRoaXMpOwogICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1
cmUoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVs
bHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJ
blBpY3R1cmUoJXApIiwgdGhpcyk7CiAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRl
ckVudGVyaW5nRm9yZWdyb3VuZCA9IFttX3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBp
Y3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF07CiAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CiAKICAgICBpZiAobV9t
b2RlICYgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQp
IHsKICAgICAgICAgaWYgKCFbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJl
V2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVs
bFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhp
c10gKEJPT0wsIE5TRXJyb3IqKSB7CiAgICAgICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRl
bjpZRVNdOwogICAgICAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBz
ZXRIaWRkZW46WUVTXTsKQEAgLTg5MCw5ICs4ODgsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKQogICAgICAgICBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3Rh
cnRQaWN0dXJlSW5QaWN0dXJlKCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSglcCki
LCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKIAogICAg
IGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0
YW5kYXJkKSkKQEAgLTkwNywxMiArOTA1LDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKICAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkK
IHsKICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNl
OwogICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQg
PSBmYWxzZTsKIAotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1
cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CiAgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNj
cmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKQogICAgICAgICByZXR1cm47CiAKQEAgLTkyMyw5
ICs5MjEsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3Rv
cFBpY3R1cmVJblBpY3R1cmUoKQogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1
ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlTm9uZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRp
ZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSgl
cCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKICAgICBpZiAoaGFz
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkg
fHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApIHsKICAgICAg
ICAgLy8gQVNTVU1QVElPTjogd2UgYXJlIGV4aXRpbmcgcGlwIGJlY2F1c2Ugd2UgYXJlIGVudGVy
aW5nIGZ1bGxzY3JlZW4KICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwpAQCAtOTQ0LDkgKzk0Miw5IEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5Q
aWN0dXJlKCkKICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxs
c2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBy
ZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkIChe
Y29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRp
b25IYW5kbGVyKHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCiB7Ci0g
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJl
cGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIsIHRo
aXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciglcCki
LCB0aGlzKTsKICAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQ
aVAgfHwgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCkg
ewogICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZh
bHNlOwogICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3Jl
Z3JvdW5kID0gZmFsc2U7CkBAIC05NjUsMTYgKzk2MywxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29t
cGxldAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBSZXRh
aW5QdHI8aWQ+IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhh
bmRsZXIgY29weV0pOwogICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShbcHJvdGVjdGVk
VGhpcywgc3Ryb25nQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgcmVzdG9yZWQpICB7Ci0gICAgICAg
IExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBh
cmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciBsYW1iZGEoJXAp
IC0gcmVzdG9yZWQoJXMpIiwgcHJvdGVjdGVkVGhpcy5nZXQoKSwgYm9vbFN0cmluZyhyZXN0b3Jl
ZCkpOworICAgICAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIg
bGFtYmRhKCVwKSAtIHJlc3RvcmVkKCVzKSIsIHByb3RlY3RlZFRoaXMuZ2V0KCksIGJvb2xTdHJp
bmcocmVzdG9yZWQpKTsKICAgICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJl
c3RvcmVkKSA9IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyLmdldCgpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihyZXN0b3JlZCk7CiAgICAgfSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29uKQor
Ym9vbCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2hvdWxkRXhpdEZ1bGxzY3JlZW5X
aXRoUmVhc29uKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJl
YXNvbiByZWFzb24pCiB7CiAgICAgaWYgKCFtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTk4OCw4ICs5ODYsOCBAQCBib29sIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oV2ViVmlkZW9G
dQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAod2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwoKSAmJiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9u
VGFwcGVkIHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0
b3BFdmVudFJlY2VpdmVkKSkKLSAgICAgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1
c2UoKTsKKyAgICBpZiAocGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiAocmVhc29uID09IEV4aXRG
dWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkIHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNj
cmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkKSkKKyAgICAgICAgcGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKICAgICAKICAgICBtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlTm9uZSwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25l
QnV0dG9uVGFwcGVkKTsKIApAQCAtOTk5LDE1ICs5OTcsMTUgQEAgYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFdlYlZp
ZGVvRnUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCgp
CitOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCglcCkgLSBubyBl
eGl0IGZ1bGxzY3JlZW4gcmVzcG9uc2UgaW4gJWdzOyBmb3JjaW5nIGZ1bGxzY3JlZW4gaGlkZGVu
LiIsIHRoaXMsIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwudmFsdWUoKSk7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1l
ckZpcmVkKCVwKSAtIG5vIGV4aXQgZnVsbHNjcmVlbiByZXNwb25zZSBpbiAlZ3M7IGZvcmNpbmcg
ZnVsbHNjcmVlbiBoaWRkZW4uIiwgdGhpcywgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbC52
YWx1ZSgpKTsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBbbV93aW5kb3cgc2V0SGlk
ZGVuOllFU107CiAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZ
RVNdOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7CiAgICAgaWYg
KG1fbW9kZSA9PSBuZXdNb2RlKQpAQCAtMTAxOCw3ICsxMDE2LDcgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHMKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKG1fbW9kZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFyTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAm
IH5tb2RlOwogICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgKaW5kZXgg
NzA1ZDYzYjQ4YTk5YWVlMWU4OTM5NjU2MjQwMTMyMjQzZTQ3MmM0ZC4uNzY3ZjAxMjg3MzAwMDFh
YjRkNzlmZTYwM2MxMjI3NzRhZjcxM2UyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgKQEAgLTMwLDcgKzMw
LDcgQEAKICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworY2xhc3MgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOwogc3RydWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9uOwogfQogCkBAIC01OCwx
MCArNTgsMTAgQEAgV0VCQ09SRV9FWFBPUlQKICAgICBmbG9hdCBfcmF0ZTsKICAgICBCT09MIF9j
YW5Ub2dnbGVQbGF5YmFjazsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM+IF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzsKIH0KIAotQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OldlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyogd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwor
QHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyog
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwogQHByb3BlcnR5IChyZWFkd3JpdGUpIE5TVGlt
ZUludGVydmFsIGNvbnRlbnREdXJhdGlvbjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4s
IHJlYWR3cml0ZSkgQVZWYWx1ZVRpbWluZyAqdGltaW5nOwogQHByb3BlcnR5IChub25hdG9taWMp
IE5TVGltZUludGVydmFsIHNlZWtUb1RpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KaW5kZXggN2I0NGEw
NzRkZjI5ODA2MmY4MDUzZTllYmM3ZDMxNDUxZTgyZTVlNS4uYWJiZGI1Mjc3MjA3MjRhZmU1NDcz
MTE3NDA4YjQzN2EwOTQ5MmFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQpAQCAtMjksOCArMjksOCBA
QAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAm
JiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAKICNpbXBvcnQgIk1lZGlh
U2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW1wb3J0ICJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVs
LmgiCiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCkBAIC01OSw4ICs1OSw4IEBAIEBzeW50aGVzaXplIGNhblRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmU7CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihudWxscHRyKTsKKyAgICBpZiAoX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CiAgICAgW3N1cGVyIGRlYWxs
b2NdOwogfQogCkBAIC05Myw3ICs5Myw3IEBAIC0gKHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50
ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6KE5TVGltZUludGVydmFsKXRvbGVyYW5jCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRvbGVyYW5jZUJlZm9yZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRvbGVy
YW5jZUFmdGVyKTsKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWVrVG9UaW1lKHRpbWUpOworICAgIF9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlZWtUb1RpbWUodGltZSk7
CiB9CiAKIC0gKHZvaWQpY2FuY2VsVGh1bWJuYWlsQW5kQXVkaW9BbXBsaXR1ZGVTYW1wbGVHZW5l
cmF0aW9uCkBAIC0xMjUsMTIgKzEyNSwxMiBAQCAtIChCT09MKWNhbkJlZ2luVG91Y2hCYXJTY3J1
YmJpbmcKIAogLSAodm9pZCliZWdpblRvdWNoQmFyU2NydWJiaW5nCiB7Ci0gICAgX3dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+YmVnaW5TY3J1YmJpbmcoKTsKKyAgICBfcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLT5iZWdpblNjcnViYmluZygpOwogfQogCiAtICh2b2lkKWVuZFRv
dWNoQmFyU2NydWJiaW5nCiB7Ci0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
ZW5kU2NydWJiaW5nKCk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+ZW5kU2Ny
dWJiaW5nKCk7CiB9CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAx
MzAwCkBAIC0xOTIsNyArMTkyLDcgQEAgLSAodm9pZClzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1l
ZGlhU2VsZWN0aW9uT3B0aW9uOihBVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHQKICAgICBpZiAo
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbiAmJiBfYXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9u
T3B0aW9ucykKICAgICAgICAgaW5kZXggPSBbX2F1ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9w
dGlvbnMgaW5kZXhPZk9iamVjdDphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uXTsKIAotICAgIF93
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkt
PnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4IDogVUlO
VDY0X01BWCk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNz
aW9uTW9kZWwoKS0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8g
aW5kZXggOiBVSU5UNjRfTUFYKTsKIH0KIAogLSAoTlNBcnJheTxBVlRvdWNoQmFyTWVkaWFTZWxl
Y3Rpb25PcHRpb24gKj4gKilsZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMKQEAg
LTIyMiw3ICsyMjIsNyBAQCAtICh2b2lkKXNldEN1cnJlbnRMZWdpYmxlVG91Y2hCYXJNZWRpYVNl
bGVjdGlvbk9wdGlvbjooQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uTwogICAgIGlmIChsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb24gJiYgX2xlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0
aW9ucykKICAgICAgICAgaW5kZXggPSBbX2xlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0
aW9ucyBpbmRleE9mT2JqZWN0OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbl07CiAKLSAgICBf
d2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgp
LT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4IDog
VUlOVDY0X01BWCk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91
bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOwogfQogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDEzMDAKQEAgLTI5Miw0NyArMjkyLDQ3IEBAIC0gKHZvaWQpc2V0TGVn
aWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6KE5TVUludGVnZXIpc2VsZWN0ZWRJbmRleAogICAgIFtz
ZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAiY3VycmVudExlZ2libGVUb3VjaEJhck1lZGlhU2Vs
ZWN0aW9uT3B0aW9uIl07CiB9CiAKLS0gKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyop
d2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjCistIChQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMqKXBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYwogewotICAgIHJldHVybiBfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmdldCgpOworICAgIHJldHVybiBfcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLmdldCgpOwogfQogCi0tICh2b2lkKXNldFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzooV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKil3ZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMKKy0gKHZvaWQpc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOihQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYwogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjID09IHdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYyA9PSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQotICAgICAgICBfd2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihu
dWxscHRyKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICAgICAg
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIo
bnVsbHB0cik7CiAKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjID0gd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMgPSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiAKLSAgICBpZiAoX3dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoc2VsZik7CisgICAgaWYgKF9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKHNlbGYpOwogfQogCiAtICh2b2lkKXRvZ2ds
ZVBsYXliYWNrCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYg
X3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KSkKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMgJiYgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tT
ZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGxheVN0YXRlKCk7CiB9CiAKIC0gKHZvaWQpc2V0
UGxheWluZzooQk9PTClwbGF5aW5nCiB7Ci0gICAgaWYgKCFfd2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjIHx8ICFfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpKQorICAgIGlmICghX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyB8
fCAhX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgQk9PTCBpc0N1cnJlbnRseVBsYXlpbmcgPSBzZWxmLnBs
YXlpbmc7CiAgICAgaWYgKCFpc0N1cnJlbnRseVBsYXlpbmcgJiYgcGxheWluZykKLSAgICAgICAg
X3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KS0+cGxheSgpOworICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7CiAgICAgZWxzZSBpZiAoaXNDdXJyZW50bHlQbGF5aW5n
ICYmICFwbGF5aW5nKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOworICAgICAgICBfcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwogfQogCiAt
IChCT09MKWlzUGxheWluZwogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjICYmIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCkpCi0gICAgICAgIHJldHVybiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5pc1BsYXlpbmcoKTsKKyAgICBpZiAoX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5w
bGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICByZXR1cm4gX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+aXNQbGF5aW5nKCk7CiAKICAgICBy
ZXR1cm4gTk87CiB9CkBAIC0zNDAsOCArMzQwLDggQEAgLSAoQk9PTClpc1BsYXlpbmcKICNpZiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMAogLSAodm9pZCl0b2dnbGVQ
aWN0dXJlSW5QaWN0dXJlCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMgJiYgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKSkKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOworICAgIGlmIChf
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUo
KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgKaW5kZXggYjgxMjRjMWUxYmZl
MDE1YmQyOWMwZWYwN2E3MGUzNzFjMTliNTFlNi4uMDhiOGQxMzViNTVhMjY3YzFiMmRhYWRiMTNl
YzhmNzQzMTBhYmJjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaApAQCAtMjgsOCArMjgsOCBA
QAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQog
CiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwu
aCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAt
MzgsMjEgKzM4LDIxIEBAIE9CSkNfQ0xBU1MgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXI7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsOwogCi1jbGFzcyBXRUJDT1JF
X0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgZmluYWwKLSAgICA6IHB1Ymxp
YyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjPiB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMgZmluYWwKKyAgICA6IHB1YmxpYyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UK
KyAgICAsIHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFJl
ZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IGNyZWF0ZShXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCYpOwotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYygpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KKyAgICBzdGF0
aWMgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gY3JlYXRlKFBsYXliYWNrU2Vzc2lv
bk1vZGVsJik7CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCk7Cisg
ICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlCisgICAgLy8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbCB7IH0KIAotICAgIC8vIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFs
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKmN1
cnJlbnRUaW1lKi8sIGRvdWJsZSAvKmFuY2hvclRpbWUqLykgZmluYWw7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIC8qaXNQbGF5aW5nKi8sIGZsb2F0IC8qcGxheWJh
Y2tSYXRlKi8pIGZpbmFsOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKm9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3Rl
ZEluZGV4Ki8pIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFi
bGVkICovLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJs
ZWQgKi8sIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwg
Y29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICovKSBmaW5hbDsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CkBAIC03Myw4ICs3Myw4IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpOwogCiBwcml2YXRlOgotICAgIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOwotICAg
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0
ciB9OworICAgICAgICBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9u
TW9kZWwmKTsKKyAgICAgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9u
TW9kZWwgeyBudWxscHRyIH07CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQogICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptX3BsYXliYWNrQ29udHJvbHNN
YW5hZ2VyICB7IG51bGxwdHIgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KaW5kZXggOGI0
NGE2MWM1MGUwMTYyYzNjMTBlNzE3NWQ4MWM2ZjJhMjQ4NGNlYS4uNTllZjIyMzA2OWE5Y2VlOWYx
MTI1MTNiYmZlZjBiMTJjNjdiMjRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oIgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCiAKQEAgLTMyLDkgKzMyLDkgQEAKICNpbXBvcnQgIkludFJlY3QuaCIKICNpbXBv
cnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCiAjaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRp
b24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0ICJUaW1lUmFu
Z2VzLmgiCiAjaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgotI2ltcG9ydCAi
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUu
aD4KIAogI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKQEAgLTQ2LDI0ICs0NiwyNCBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8V2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCitSZWY8UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjPiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZShQ
bGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCiB7Ci0gICAgYXV0byBpbnRlcmZhY2UgPSBhZG9w
dFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhtb2RlbCkpOworICAgIGF1
dG8gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMo
bW9kZWwpKTsKICAgICBtb2RlbC5hZGRDbGllbnQoaW50ZXJmYWNlKTsKICAgICByZXR1cm4gaW50
ZXJmYWNlOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OldlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCitQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5
YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCiAgICAgOiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZt
b2RlbCkKIHsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp+V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjKCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6flBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYygpCiB7CiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJs
ZSBkdXJhdGlvbikKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNo
YW5nZWQoZG91YmxlIGR1cmF0aW9uKQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKICAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5h
Z2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVy
YXRpb24pCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1l
KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChk
b3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQogewogI2lmIEVOQUJMRShXRUJf
UExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKQEAgLTg5LDcg
Kzg5LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1l
Q2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWIKICNlbmRpZgogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZs
b2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRl
Q2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewogI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBXZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKQEAg
LTEwMiwxNyArMTAyLDE3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpy
YXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSCiAjZW5kaWYKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpiZWdpblNjcnViYmluZygpCiB7CiAjaWYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIHVwZGF0ZVBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyVGltaW5nKG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPyBtX3BsYXliYWNr
U2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIDogMCwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJ
bmZvXSBzeXN0ZW1VcHRpbWVdLCAwLCBmYWxzZSk7CiAjZW5kaWYKLSAgICB3ZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCgpLT5iZWdpblNjcnViYmluZygpOworICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVs
KCktPmJlZ2luU2NydWJiaW5nKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjplbmRTY3J1YmJpbmcoKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OmVuZFNjcnViYmluZygpCiB7Ci0gICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+ZW5kU2Ny
dWJiaW5nKCk7CisgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7CiB9
CiAKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCkBAIC0xMzAsNyAr
MTMwLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gdGltZVJhbmdlc1RvQXJy
YXkoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykKIH0KICNlbmRpZgogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRp
bWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSwgZG91YmxlKQordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0
aW1lUmFuZ2VzLCBkb3VibGUsIGRvdWJsZSkKIHsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCiAgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0U2Vla2Fi
bGVUaW1lUmFuZ2VzOnRpbWVSYW5nZXNUb0FycmF5KHRpbWVSYW5nZXMpLmdldCgpXTsKQEAgLTEz
OSw3ICsxMzksNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2Fi
bGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbQogI2VuZGlmCiB9CiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjph
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICNpZiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAgICAgW3BsYXlCYWNrQ29udHJvbHNN
YW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0
ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07CkBAIC0xNDks
NyArMTQ5LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWMKICNlbmRpZgogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjps
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBbcGxheUJhY2tDb250cm9s
c01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOm9wdGlvbnMgd2l0aFNl
bGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldOwpAQCAt
MTU5LDcgKzE1OSw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWCiAjZW5kaWYKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQog
ICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRl
eDpzZWxlY3RlZEluZGV4XTsKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCBzZQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjps
ZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICNpZiBFTkFCTEUoV0VCX1BM
QVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkg
c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6c2VsZWN0ZWRJbmRleF07CkBAIC0xNzcsNyAr
MTc3LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdAogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVu
YWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJikKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKIHsKICNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKCkgc2V0Q2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZTohZW5hYmxlZF07CkBAIC0xODYsNyAr
MTg2LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGwKICNlbmRpZgogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCiB7CiAgICAgaWYgKCFtX3BsYXliYWNrU2Vz
c2lvbk1vZGVsKQogICAgICAgICByZXR1cm47CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQogICAgIG1fcGxheWJhY2tT
ZXNzaW9uTW9kZWwgPSBudWxscHRyOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQogewogI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwpA
QCAtMjA0LDEyICsyMDQsMTIgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCiAKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCiAKLVdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkKK1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyICpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnBsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKCkKIHsKICAgICByZXR1cm4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNldFBsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptYW5hZ2VyKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptYW5hZ2VyKQogewogICAgIG1fcGxheWJhY2tDb250
cm9sc01hbmFnZXIgPSBtYW5hZ2VyOwogCkBAIC0yMzAsMTMgKzIzMCwxMyBAQCB2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2Vi
UGxheWJhY2tDb250cgogICAgIFttYW5hZ2VyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnM6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygp
IHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNz
aW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSldOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6dXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJU
aW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXli
YWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6dXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcp
CiB7CiAgICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpOwogICAgIGlmICghbWFuYWdlcikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwgKm1vZGVsID0gd2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCAqbW9kZWwgPSBwbGF5YmFja1Nlc3Npb25N
b2RlbCgpOwogICAgIGlmICghbW9kZWwpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5oCmluZGV4IGE3ODNlYzk0NDA3NmNhNThkNjAzZjQwYWI4MThjZDU1YTEwYmU5MTEu
LjFjNzRiODQ4ZmFmOWIyOTBlZWY4NmE3MjkwMmI2MzBkZGRiZWMxOGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLmgKQEAgLTIzLDE1ICsyMywxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY19oCi0jZGVmaW5lIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hY19oCisjcHJhZ21hIG9uY2UKIAogI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogCiAjaW5jbHVkZSAiSFRNTE1l
ZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbmNsdWRlICJX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVkZSAi
VmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTQyLDMxICs0MSwzMSBAQCBPQkpDX0NMQVNTIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakM7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgRmxv
YXRTaXplOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwotY2xhc3MgV2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKIAotY2xhc3Mg
V0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCi0gICAgOiBwdWJs
aWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHByaXZhdGUgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYz4geworY2xhc3MgV0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjCisgICAgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQK
KyAgICAsIHByaXZhdGUgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBS
ZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gewogCiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IGNyZWF0ZShXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKKyAgICBz
dGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gY3JlYXRlKFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7CiAg
ICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpOwotICAg
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB3ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KLSAgICBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwqKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogd2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcjsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIq
KTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKTsKKyAgICBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCogdmlkZW9GdWxsc2NyZWVuTW9kZWwoKSBjb25zdCB7IHJldHVybiBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXli
YWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CisgICAgVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIHZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7IH0KKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKik7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudAorICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGJvb2wgIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgIGVu
YWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwg
Y29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKIAotICAgIC8vIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5h
bDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3Qg
RmxvYXRTaXplJikgZmluYWw7CiAKQEAgLTk0LDEwICs5MywxMCBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyAqdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQygpOwogCiBwcml2YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmKTsKLSAgICBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7
IG51bGxwdHIgfTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CisgICAgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYpOworICAgIFJlZjxQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworICAgIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0ciB9Owor
ICAgIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciB7IG51bGxwdHIgfTsKICAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlTm9uZSB9OwogICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNP
YmpDPiBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakM7CiB9OwpAQCAtMTA2LDQgKzEw
NSwzIEBAIHByaXZhdGU6CiAKICNlbmRpZgogCi0jZW5kaWYgLyogV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCmluZGV4IDkyZTY0MmM4
ZWMwY2JmOTQ3NWU4NDk2ZGY3Yzg3MDJjMjQ4NjU1M2IuLmI1MjNmMTI5OTNkNzgyYzg5MDc2OWQ1
NjAyM2IwYzZmZTUxNjFlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQpAQCAtMjQsNyAr
MjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKQogCkBAIC0zMywxMSArMzMsMTEgQEAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQg
Ik1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgogI2ltcG9ydCAiUElQU1BJLmgiCisjaW1wb3J0ICJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNp
bXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCisjaW1wb3J0ICJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oIgogI2ltcG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCIK
LSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgotI2ltcG9ydCAiV2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAKICNpbXBvcnQg
IkNvcmVNZWRpYVNvZnRMaW5rLmgiCkBAIC05NCw3ICs5NCw3IEBAIGVudW0gY2xhc3MgUElQU3Rh
dGUgewogfTsKIAogQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpD
IDogTlNPYmplY3QgPFBJUFZpZXdDb250cm9sbGVyRGVsZWdhdGUsIFdlYlZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlPiB7Ci0gICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjKiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOworICAgIFdlYkNvcmU6OlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYyogX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKICAg
ICBOU1NpemUgX3ZpZGVvRGltZW5zaW9uczsKICAgICBSZXRhaW5QdHI8UElQVmlld0NvbnRyb2xs
ZXI+IF9waXBWaWV3Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8TlNWaWV3Q29udHJvbGxlcj4g
X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXI7CkBAIC0xMDcsNyArMTA3LDcgQEAgQGludGVy
ZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIDogTlNPYmplY3QgPFBJUFZp
ZXdDb250cm9sbGVyRGVsZWcKICAgICBCT09MIF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47
CiB9CiAKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzooV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil3ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyop
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwogLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVl
blN0YXRlOwogLSAodm9pZClpbnZhbGlkYXRlOwogCkBAIC0xMzQsMTIgKzEzNCwxMiBAQCBAc3lu
dGhlc2l6ZSB2aWRlb0RpbWVuc2lvbnM9X3ZpZGVvRGltZW5zaW9uczsKIEBzeW50aGVzaXplIGRp
ZFJlcXVlc3RFeGl0aW5nUElQPV9kaWRSZXF1ZXN0RXhpdGluZ1BJUDsKIEBzeW50aGVzaXplIGV4
aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbj1fZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOwog
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyopd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyopdmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjCiB7CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjID0gd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOworICAgIF92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMgPSB2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7CiAgICAgX3BpcFN0
YXRlID0gUElQU3RhdGU6Ok5vdEluUElQOwogCiAgICAgcmV0dXJuIHNlbGY7CkBAIC0xNjMsNyAr
MTYzLDcgQEAgLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlCiAtICh2b2lkKWludmFs
aWRhdGUKIHsKICAgICBbc2VsZiBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKLSAgICBfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gbnVsbHB0cjsKKyAgICBfdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjID0gbnVsbHB0cjsKICAgICBfdmlkZW9EaW1lbnNpb25zID0gTlNaZXJv
U2l6ZTsKIH0KIApAQCAtMTkyLDggKzE5Miw4IEBAIC0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1Zp
ZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvCiAg
ICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRVc2VyQ2FuUmVzaXplOllFU107CiAgICAgW19waXBW
aWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKICAgICBbc2VsZiBzZXRWaWRlb0Rp
bWVuc2lvbnM6TlNFcXVhbFNpemVzKF92aWRlb0RpbWVuc2lvbnMsIE5TWmVyb1NpemUpID8gZnJh
bWUuc2l6ZSA6IF92aWRlb0RpbWVuc2lvbnNdOwotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKTsKKyAgICBp
ZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQorICAgICAgICBfdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0
eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCk7CiAK
ICAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gYWRvcHROUyhbW1dlYlZpZGVvVmlld0NvbnRhaW5l
ciBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOwogICAgIFtfdmlkZW9WaWV3Q29udGFpbmVy
IHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOnNlbGZdOwpAQCAtMjQ3LDggKzI0Nyw4IEBA
IC0gKHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1Zp
ZXdDb250YWluZXIgKil2aWRlb1ZpZXdDCiAKICAgICBBU1NFUlRfVU5VU0VEKHZpZGVvVmlld0Nv
bnRhaW5lciwgdmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250YWluZXIpOwogCi0g
ICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKLSAgICAgICAgX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+
c2V0VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOworICAgIGlm
IChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShb
X3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKIH0KIAogLSAodm9pZClzdXBlcnZpZXdEaWRD
aGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVv
Vmlld0NvbnRhaW5lcgpAQCAtMjcyLDExICsyNzIsMTEgQEAgLSAoQk9PTClwaXBTaG91bGRDbG9z
ZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKIHsKICAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlw
ID09IF9waXBWaWV3Q29udHJvbGxlcik7CiAKLSAgICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMgfHwgIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCisgICAgaWYgKCFfdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjIHx8ICFfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcigpKQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgX2RpZFJlcXVl
c3RFeGl0aW5nUElQID0gWUVTOwotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMt
PndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCktPmZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSgpOworICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKCktPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOwogCiAg
ICAgcmV0dXJuIE5POwogfQpAQCAtMjg1LDI4ICsyODUsMjggQEAgLSAodm9pZClwaXBEaWRDbG9z
ZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKIHsKICAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlw
ID09IF9waXBWaWV3Q29udHJvbGxlcik7CiAKLSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCgpICYmIF92aWRlb1ZpZXdDb250YWluZXIgJiYgX3JldHVybmluZ1dpbmRv
dyAmJiAhTlNFcXVhbFJlY3RzKF9yZXR1cm5pbmdSZWN0LCBOU1plcm9SZWN0KSkgeworICAgIGlm
IChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgJiYgX3ZpZGVvVmlld0NvbnRhaW5lciAmJiBf
cmV0dXJuaW5nV2luZG93ICYmICFOU0VxdWFsUmVjdHMoX3JldHVybmluZ1JlY3QsIE5TWmVyb1Jl
Y3QpKSB7CiAgICAgICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgcnVuQW5pbWF0aW9uR3JvdXA6XihO
U0FuaW1hdGlvbkNvbnRleHQgKmNvbnRleHQpIHsKICAgICAgICAgICAgIGNvbnRleHQuYWxsb3dz
SW1wbGljaXRBbmltYXRpb24gPSBOTzsKICAgICAgICAgICAgIFtfdmlkZW9WaWV3Q29udGFpbmVy
IHNldEZyYW1lOl9yZXR1cm5pbmdSZWN0XTsKLSAgICAgICAgICAgIF93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJG
cmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKLSAgICAgICAgICAgIF93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3QpOworICAgICAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlk
ZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFp
bmVyIGJvdW5kc10pOworICAgICAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+
dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2Ny
ZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7CiAKICAgICAgICAgICAgIFtbX3Jl
dHVybmluZ1dpbmRvdyBjb250ZW50Vmlld10gYWRkU3VidmlldzpfdmlkZW9WaWV3Q29udGFpbmVy
LmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxhdGl2ZVRvOm5pbF07CiAgICAgICAg
IH0gY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKICAgICB9CiAKLSAgICBpZiAoX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYykgeworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjKSB7CiAgICAgICAgIGlmICghc2VsZi5pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikg
ewotICAgICAgICAgICAgaWYgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKCkpIHsKKyAgICAgICAgICAgIGlmIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogdmlk
ZW9GdWxsc2NyZWVuTW9kZWwgPSBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1
bGxzY3JlZW5Nb2RlbCgpKSB7CiAgICAgICAgICAgICAgICAgdmlkZW9GdWxsc2NyZWVuTW9kZWwt
PnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVOb25lKTsKLSAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+c2V0
VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdCk7CisgICAgICAgICAgICAgICAgdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVB
c3BlY3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy0+Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgICAgICBfdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CiAKLSAgICAgICAgaWYgKFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKiBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cigpKQorICAgICAgICBpZiAoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIGZ1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCiAgICAgICAgICAgICBmdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiAgICAgfQogfQpAQCAtMzE1LDI2ICszMTUsMjcg
QEAgLSAodm9pZClwaXBBY3Rpb25QbGF5OihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAogewogICAg
IEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKIAotICAgIGlm
IChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXko
KTsKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICBfdmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7CiB9
CiAKIC0gKHZvaWQpcGlwQWN0aW9uUGF1c2U6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwogCi0gICAg
aWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1
c2UoKTsKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICBfdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgp
OwogfQogCiAtICh2b2lkKXBpcEFjdGlvblN0b3A6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwogCi0g
ICAgaWYgKCFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKQorICAgIGlmICghX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgUGxheWJh
Y2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsID0gX3ZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKKyAgICBpZiAocGxheWJhY2tTZXNz
aW9uTW9kZWwpCiAgICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsLT5wYXVzZSgpOwogCiAgICAg
Ly8gRklYTUUgMjUwOTYxNzA6IFNob3VsZCBhbmltYXRlIG9ubHkgaWYgdGhlIHBhZ2Ugd2l0aCB0
aGUgdmlkZW8gaXMgdW5vYnNjdXJlZC4gRm9yIG5vdywgYWx3YXlzIGNsb3NlIHdpdGhvdXQgYW5p
bWF0aW9uLgpAQCAtMzQ1LDI0ICszNDYsMjQgQEAgQGVuZAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKQorVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UpCiAgICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UpCiB7Ci0gICAgQVNTRVJUKG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKTsKLSAgICBhdXRvIG1vZGVsID0gbV9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgQVNTRVJUKG1f
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKTsKKyAgICBh
dXRvIG1vZGVsID0gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCk7CiAgICAgbW9kZWwtPmFkZENsaWVudCgqdGhpcyk7CiAgICAgW3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMoKSB1cGRhdGVJc1BsYXlpbmc6bW9kZWwtPmlzUGxheWluZygpIG5ld1Bs
YXliYWNrUmF0ZTptb2RlbC0+cGxheWJhY2tSYXRlKCldOwogfQogCi1XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKQorVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCkKIHsK
LSAgICBpZiAobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkpCi0gICAgICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCgpLT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIGlmIChtX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgbV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnJlbW92ZUNsaWVudCgq
dGhpcyk7CiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQog
ewogICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQogICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwpAQCAtMzcxLDEyICszNzIsMTIgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKFdlYlZpZGVvRnVsbHNjcmUKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRk
Q2xpZW50KCp0aGlzKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKiBvYnNlcnZlcikKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCiB7CiAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBv
YnNlcnZlcjsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldE1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7CiAgICAgaWYg
KG1fbW9kZSA9PSBuZXdNb2RlKQpAQCAtMzg3LDcgKzM4OCw3IEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hh
bmdlZChtX21vZGUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2Rl
OwogICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKQEAgLTM5OCwyNyArMzk5LDI3IEBAIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlz
UGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewogICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOmlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6cGxh
eWJhY2tSYXRlXTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVu
c3VyZUNvbnRyb2xzTWFuYWdlcigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKIHsKICAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS0+ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hY09iakMgKldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQygpCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDICpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMo
KQogewogICAgIGlmICghbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKQotICAgICAg
ICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBhZG9wdE5TKFtbV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBhbGxvY10gaW5pdFdpdGhXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6dGhpc10pOworICAgICAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgPSBhZG9wdE5TKFtbV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBh
bGxvY10gaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6dGhpc10pOwogCiAgICAg
cmV0dXJuIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQy5nZXQoKTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcm
IGxheWVySG9zdGVkVmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpw
YXJlbnRXaW5kb3csIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZp
ZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBhbGxv
d3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbiglcCksIGluaXRpYWxS
ZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCwgbW9kZTolZCIsIHRoaXMsIGlu
aXRpYWxSZWN0LngoKSwgaW5pdGlhbFJlY3QueSgpLCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0
aWFsUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93LCBtb2RlKTsKKyAgICBMT0coRnVsbHNjcmVl
biwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5p
dGlhbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhp
cywgaW5pdGlhbFJlY3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCks
IGluaXRpYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUpOwogCiAgICAgVU5VU0VE
X1BBUkFNKGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7CiAgICAgQVNTRVJUKG1vZGUg
PT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSk7CkBAIC00MjcsMTYgKzQyOCwxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKE5TVmlldyYgbGF5ZXJIb3N0ZWRWaWV3LCBjbwogCiAg
ICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSBzZXRVcFBJUEZvclZpZGVvVmlldzom
bGF5ZXJIb3N0ZWRWaWV3IHdpdGhGcmFtZTooTlNSZWN0KWluaXRpYWxSZWN0IGluV2luZG93OnBh
cmVudFdpbmRvd107CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oKQogewotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4o
JXApIiwgdGhpcyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAogICAgIGlmIChtb2RlKCkgPT0g
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSkgewogICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGVudGVyUElQ
XTsKQEAgLTQ1MCw5ICs0NTEsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6ZW50ZXJGdWxsc2NyZWVuKCkKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5T
V2luZG93ICpwYXJlbnRXaW5kb3cpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
ZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50
V2luZG93KQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjpleGl0RnVsbHNjcmVlbiglcCksIGZpbmFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBw
YXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBmaW5hbFJlY3QueCgpLCBmaW5hbFJlY3QueSgpLCBmaW5h
bFJlY3Qud2lkdGgoKSwgZmluYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOworICAgIExP
RyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVl
biglcCksIGZpbmFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlz
LCBmaW5hbFJlY3QueCgpLCBmaW5hbFJlY3QueSgpLCBmaW5hbFJlY3Qud2lkdGgoKSwgZmluYWxS
ZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOwogCiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQogICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJh
Y2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKQEAgLTQ2
Nyw5ICs0NjgsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1
bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOUwogICAgICAgICBbbV93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6ZmluYWxSZWN0
IGluV2luZG93OnBhcmVudFdpbmRvd107CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewotICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNj
cmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoJXApLCBtb2RlOiVkIiwgdGhpcywgbW9kZSk7Cisg
ICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxs
c2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSglcCksIG1vZGU6JWQiLCB0aGlzLCBtb2RlKTsK
IAogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBbbV9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVy
ZUluUGljdHVyZUFjdGl2ZTpOT107CkBAIC00NzksNyArNDgwLDcgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9k
ZShIVE1MTWUKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBpc0V4aXRpbmdUb1N0YW5kYXJk
RnVsbHNjcmVlbiA9IG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlU3RhbmRhcmQ7Ci0gICAgLy8gT24gTWFjLCBzdGFuZGFyZCBmdWxsc2NyZWVuIGlzIGhh
bmRsZWQgYnkgdGhlIEZ1bGxzY3JlZW4gQVBJIGFuZCBub3QgYnkgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci4KKyAgICAvLyBPbiBNYWMsIHN0YW5kYXJkIGZ1bGxzY3JlZW4gaXMgaGFuZGxlZCBi
eSB0aGUgRnVsbHNjcmVlbiBBUEkgYW5kIG5vdCBieSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLgog
ICAgIC8vIEp1c3QgdXBkYXRlIG1fbW9kZSBkaXJlY3RseSB0byBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCBpbiB0aGF0IGNhc2UgdG8ga2VlcAogICAg
IC8vIG1fbW9kZSBpbiBzeW5jIHdpdGggdGhlIGZ1bGxzY3JlZW4gbW9kZSBpbiBIVE1MTWVkaWFF
bGVtZW50LgogICAgIGlmIChpc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikKQEAgLTQ4OSw5
ICs0OTAsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxz
Y3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZQogICAgIFttX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0
aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAKICAgICBbbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwogICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07CkBAIC01MDAsOSArNTAxLDkgQEAg
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCkK
ICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVu
KCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRl
KCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKIHsKLSAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxp
ZGF0ZSglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSglcCkiLCB0aGlzKTsKIAogICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgPSBuaWw7CiAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7CkBA
IC01MjAsOSArNTIxLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwp
CiB9CiAjZW5kaWYKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnByZXBh
cmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJl
Y3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVj
dCYgaW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKIHsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKCVwKSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJl
bnRXaW5kb3c6JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpLCBpbmxpbmVSZWN0LngoKSwg
aW5saW5lUmVjdC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5saW5lUmVjdC5oZWlnaHQoKSwg
cGFyZW50V2luZG93KTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSwgdmlzaWJsZTolcywgaW5saW5l
UmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBib29sU3RyaW5n
KHZpc2libGUpLCBpbmxpbmVSZWN0LngoKSwgaW5saW5lUmVjdC55KCksIGlubGluZVJlY3Qud2lk
dGgoKSwgaW5saW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKIAogICAgIGlmICghdmlz
aWJsZSkgewogICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQ
SVBdOwpAQCAtNTMzLDMyICs1MzQsMzIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnMKICAgICBb
bV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6
KE5TUmVjdClpbmxpbmVSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
IGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoJXApLCBlbmFibGVkOiVzIiwgdGhpcywgYm9vbFN0cmluZyhlbmFibGVkKSk7
CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKCVwKSwgZW5hYmxlZDolcyIsIHRoaXMsIGJvb2xTdHJpbmcoZW5h
YmxlZCkpOwogCiAgICAgaWYgKGVuYWJsZWQgJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCiAgICAgICAgIGV4aXRG
dWxsc2NyZWVuKEludFJlY3QoKSwgbmlsKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewot
ICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNW
aWRlb0NoYW5nZWQoJXApOiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbykpOworICAgIExP
RyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5n
ZWQoJXApOiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbykpOwogCiAgICAgaWYgKCFoYXNW
aWRlbykKICAgICAgICAgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1l
bnNpb25zKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6JS4wZiwgaGVpZ2h0OiUu
MGYiLCB0aGlzLCB2aWRlb0RpbWVuc2lvbnMud2lkdGgoKSwgdmlkZW9EaW1lbnNpb25zLmhlaWdo
dCgpKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCglcCksIHdpZHRoOiUuMGYsIGhlaWdodDolLjBmIiwgdGhp
cywgdmlkZW9EaW1lbnNpb25zLndpZHRoKCksIHZpZGVvRGltZW5zaW9ucy5oZWlnaHQoKSk7CiAK
ICAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSB6ZXJvIHdoZW4gd2UgYXJlIHRyYW5zaXRp
b25pbmcgZnJvbSBvbmUgdmlkZW8gdG8gYW5vdGhlci4gSWdub3JlIHplcm8gdmFsdWVzLgogICAg
IGlmICghdmlkZW9EaW1lbnNpb25zLmlzWmVybygpKQogICAgICAgICBbbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDIHNldFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwog
fQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aXNQbGF5aW5nVmlkZW9J
bkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgJiYgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQyBpc1BsYXlpbmddOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmlu
ZGV4IDRhMTcwYTM2NzZhMTkwM2Q0NzRiOTA5MWNjYzkxMjE0NmM3ZjE4ODEuLjg4NjljMDE3Y2I3
ZGNmMzFmMzY0N2UzZGE0NjBmYTlhNzA0MjZjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KQEAgLTMxOSw4ICszMTksOCBAQAogCiAKICNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oPgogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKQEAg
LTkyNjIsMTEgKzkyNjIsMTEgQEAgLSAodm9pZClfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ckZvck1lZGlhRWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAg
IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lv
bk1vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOwogICAg
IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbC0+c2V0TWVkaWFFbGVtZW50KCZtZWRpYUVs
ZW1lbnQpOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQot
ICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoKl9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2Rl
bCk7CisgICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKTsKIAogICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlld0RhdGEuaAppbmRleCBhNzhiMDkwZTA3YmU0MzYxOTZhNjk1Y2ExMjg3ZTg3
OGQyNjY2MWNjLi5iZGVkZjc3M2RkZmRlMDY2ZmE1MmUxNzU2Y2I2ODIyMjc0NmNmNGNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCkBAIC01NCw4ICs1NCw4IEBAIGNs
YXNzIFBhZ2U7CiBjbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93OwogY2xhc3MgVmFsaWRhdGlvbkJ1
YmJsZTsKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKLWNsYXNzIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CiAjZW5kaWYK
IH0KIApAQCAtMzM4LDggKzMzOCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIFJlZlB0cjxXZWJD
b3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJhY2tTZXNzaW9u
TW9kZWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yz4gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJhY2tTZXNzaW9uTW9kZWw7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5kZXggNzc5NzM2YTE2YWZmNjBl
M2ZhNWEwYWM3ZWEzNjQwNmRjMzY0ZjJlNC4uZjkzMGZhOTZjODg1YmJmZjc0MDRmMDcyMzU5Njc1
OTU1ZmM0YjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
RGF0YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCkBA
IC01MSw4ICs1MSw4IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lmg+CiAjZW5kaWYKIAogQk9PTCBhcHBsaWNhdGlvbklzVGVybWluYXRpbmcgPSBOTzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDgzYWQwZThhNTc4ZTEyZDY4NzU1NjBiMDg3
ODFhNzc0NzE4NDQ2MTUuLmUyNGUzMDU4YjY3MmI3ODBlY2Q0OTc3ZTY3MjYyNGJjODRkMTMwY2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291
cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTU0LDggKzE1NCw4IEBAIE1FU1NB
R0VfUkVDRUlWRVJTID0gXAogICAgIFdlYlBhc3RlYm9hcmRQcm94eSBcCiAgICAgV2ViUGF5bWVu
dENvb3JkaW5hdG9yIFwKICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eSBcCi0gICAgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlciBcCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5IFwKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIFwKKyAgICBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkgXAogICAgIFdlYlByb2Nlc3MgXAogICAgIFdlYlByb2Nlc3NDb25uZWN0aW9u
IFwKICAgICBXZWJQcm9jZXNzUG9vbCBcCkBAIC0xNjgsOCArMTY4LDggQEAgTUVTU0FHRV9SRUNF
SVZFUlMgPSBcCiAgICAgV2ViU29ja2V0U3RyZWFtIFwKICAgICBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXIgXAogICAgIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5IFwKLSAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyIFwKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkg
XAorICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgXAorICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSBcCiAjCiAKIFNDUklQVFMgPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDY0MDcxY2JmMTAxZjAxN2RkZThjYWE1Mzgx
MjdmM2VhMzliYjc3YzQuLjliMmQ1OWE4YTU2YWE5NmFhNGRkYjI0NWZiMWQ1Njc3MWQ4MjRmNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
CkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1wb3J0ICJXS1BE
RlZpZXcuaCIKICNpbXBvcnQgIldLUGFzc3dvcmRWaWV3LmgiCiAjaW1wb3J0ICJXS1Njcm9sbFZp
ZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5LmgiCi0jaW1w
b3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIl9XS0RyYWdn
YWJsZUVsZW1lbnRJbmZvSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dlYlZpZXdQcmludEZvcm1h
dHRlci5oIgogI2ltcG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oCmluZGV4IDZjMzNiZTY1YTk4YzIxOWMwZGI5MWQwMzI4NDI5NWVjZTVmNTQ3
M2QuLjE1ODBmOTU3N2YwNDQzMGNjYzY0Y2YzM2NlZTdlN2E4OWI5NTNmNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5LmgKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2VsZWN0aW9uT3B0aW9u
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXliYWNrU2Vzc2lvbk1vZGVsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTQwLDM1ICs0MCwzNSBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KIAogI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5oPgogI2Vsc2UKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmg+CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKLXR5cGVkZWYgV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2U7Cit0eXBlZGVmIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0IFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogI2Vsc2UKLXR5cGVk
ZWYgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIFBsYXRmb3JtV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlOwordHlwZWRlZiBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0IGZpbmFsOiBwdWJsaWMg
UmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBwdWJsaWMgV2ViQ29y
ZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwgIHsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dCBmaW5hbDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0PiwgcHVibGljIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsICB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkK
KyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gY3JlYXRlKFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CiAgICAg
fQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCgpIHsgfQorICAg
IHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCgpIHsgfQogCiAgICAgdm9pZCBp
bnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CiAKLSAgICAvLyBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbAotICAgIHZvaWQgYWRkQ2xpZW50KFdlYkNvcmU6OldlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKWZpbmFsOworICAgIC8vIFBsYXliYWNrU2Vz
c2lvbk1vZGVsCisgICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudCYpZmluYWw7CiAKICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChk
b3VibGUpOwogICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSk7CkBAIC04MSwyMCAr
ODEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3QgaW5kZXgpOwogICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKICAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChib29sLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpOwogICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpOwog
CiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKIAotICAg
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQoUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRf
dCBjb250ZXh0SWQpCiAgICAgICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQogICAgICAgICAsIG1f
Y29udGV4dElkKGNvbnRleHRJZCkKICAgICB7CiAgICAgfQogCi0gICAgLy8gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbAogICAgIHZvaWQgcGxheSgp
IGZpbmFsOwogICAgIHZvaWQgcGF1c2UoKSBmaW5hbDsKICAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0
ZSgpIGZpbmFsOwpAQCAtMTI3LDE0ICsxMjcsMTQgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7IH0K
ICAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4OyB9CiAgICAgYm9vbCBleHRlcm5hbFBs
YXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0Vu
YWJsZWQ7IH0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlOyB9CisgICAgUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZTsgfQog
ICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWU7IH0KICAg
ICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsgfQogICAgIGJvb2wgaXNNdXRlZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbXV0ZWQ7IH0KIAotICAgIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSogbV9tYW5hZ2VyOwogICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwotICAgIEhhc2hTZXQ8V2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgSGFz
aFNldDxXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKICAg
ICBkb3VibGUgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lIHsgMCB9OwogICAgIGJvb2wgbV9wbGF5YmFj
a1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX2R1cmF0aW9u
IHsgMCB9OwpAQCAtMTUyLDM4ICsxNTIsMzggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViQ29y
ZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsK
ICAgICB1aW50NjRfdCBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07CiAgICAgYm9v
bCBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgbV9leHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSB7IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSB9Owor
ICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBtX2V4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5
cGVOb25lIH07CiAgICAgU3RyaW5nIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5h
bWU7CiAgICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsgZmFsc2UgfTsK
ICAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OwogfTsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdl
YlBhZ2VQcm94eSYpOwotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSgpOworICAgIHN0YXRpYyBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBjcmVh
dGUoV2ViUGFnZVByb3h5Jik7CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAotICAgIFBsYXRmb3JtV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKiBjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKTsKKyAgICBQbGF0
Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogY29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCk7
CiAgICAgdm9pZCByZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOwogCiBwcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7Ci0gICAgZnJpZW5k
IGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKKyAgICBmcmllbmQgY2xhc3Mg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk7CiAKLSAgICBleHBsaWNpdCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkoV2ViUGFnZVByb3h5Jik7CisgICAgZXhwbGljaXQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5KFdlYlBhZ2VQcm94eSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKLSAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8UmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0
Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7Cisg
ICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+
LCBSZWZQdHI8UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFj
ZVR1cGxlOwogICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKTsKICAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBQbGF0
Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBlbnN1cmVNb2Rl
bCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIGFkZENs
aWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHJlbW92ZUNsaWVu
dEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKIAotICAgIC8vIE1lc3NhZ2VzIGZyb20g
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgorICAgIC8vIE1lc3NhZ2VzIGZyb20gUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcgogICAgIHZvaWQgc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJ
RCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlcigpOwogICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CkBA
IC0yMDMsNyArMjAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVt
ZW50SURSZXNwb25zZSh1aW50NjRfdCwgU3RyaW5nKSBjb25zdDsKICAgICB2b2lkIG11dGVkQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOwogCi0gICAgLy8gTWVzc2FnZXMg
dG8gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgorICAgIC8vIE1lc3NhZ2VzIHRvIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIKICAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKICAgICB2
b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUo
dWludDY0X3QgY29udGV4dElkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluCmluZGV4IGY2MzZhODMyNzNlYjhlMTQ0YTZhMTAzNTA1NTc4OWMyM2UwOTEy
N2QuLjNhYzhmNzlkMWIyNDU1YTc4MGY4MjI3YTNlZmE0OTE2OWZkMDVlYTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjEsNyArMjEsNyBA
QAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5IHsKK21lc3NhZ2VzIC0+IFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSB7CiAgICAgUmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBD
dXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUs
IGRvdWJsZSBob3N0VGltZSkKICAgICBCdWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1t
CmluZGV4IGRmOWQzM2Y5ZmMwODkzYTgyMDk3YTVlZWM4Zjg2ZjVhYTg2NTNjZmYuLjQyYzM5OWU4
ZGI4NmE5MTUwNWEyYWRkNjY0NGRkODkwMzYyMjdlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5tbQpAQCAtMjQsMTMgKzI0LDEzIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKKyNpbXBvcnQgIlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCisjaW1wb3J0
ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNp
bXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nl
c3NQcm94eS5oIgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKQEAgLTM4LDM5
ICszOCwzOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dAorI3ByYWdt
YSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjphZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmIGNsaWVudCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphZGRDbGllbnQo
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fY2xp
ZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKIH0K
IAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xp
ZW50KQogewogICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1f
Y2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpwbGF5KCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5
KCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnBsYXkobV9jb250
ZXh0SWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGF1c2Uo
KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBhdXNlKCkKIHsKICAgICBpZiAo
bV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnBhdXNlKG1fY29udGV4dElkKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKIHsKICAg
ICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBsYXlTdGF0ZShtX2Nv
bnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdp
blNjcnViYmluZygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY3J1
YmJpbmcoKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+YmVnaW5T
Y3J1YmJpbmcobV9jb250ZXh0SWQpOwpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQogICAgIG1faXNTY3J1YmJpbmcg
PSB0cnVlOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2Ny
dWJiaW5nKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY3J1YmJpbmco
KQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZW5kU2NydWJiaW5n
KG1fY29udGV4dElkKTsKQEAgLTg3LDgwICs4Nyw4MCBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKICAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWVO
ZWVkc1VwZGF0ZSA9IGlzUGxheWluZygpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewogICAgIGlmIChtX21hbmFn
ZXIpCiAgICAgICAgIG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUg
dGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUg
dGltZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVr
KG1fY29udGV4dElkLCB0aW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAg
ICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nRm9yd2FyZChtX2NvbnRleHRJZCk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dh
cmQoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNr
d2FyZCgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNj
YW5uaW5nQmFja3dhcmQobV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmVuZFNjYW5uaW5nKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21h
bmFnZXItPmVuZFNjYW5uaW5nKG1fY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9u
SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBvcHRpb25JZCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBt
X21hbmFnZXItPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQpCiB7CiAg
ICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5zZWxlY3RMZWdpYmxlTWVkaWFP
cHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQogewogICAgIGlmICht
X21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGljdHVyZUluUGljdHVyZShtX2Nv
bnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dn
bGVNdXRlZCgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlTXV0ZWQo
KQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlTXV0ZWQo
bV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpz
ZXRNdXRlZChib29sIG11dGVkKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFu
YWdlci0+c2V0TXV0ZWQobV9jb250ZXh0SWQsIG11dGVkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBw
bGF5YmFja1N0YXJ0ZWRUaW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBs
YXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQogewog
ICAgIG1fcGxheWJhY2tTdGFydGVkVGltZSA9IHBsYXliYWNrU3RhcnRlZFRpbWU7CiAgICAgbV9w
bGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24p
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJs
ZSBkdXJhdGlvbikKIHsKICAgICBtX2R1cmF0aW9uID0gZHVyYXRpb247CiAgICAgZm9yIChhdXRv
KiBjbGllbnQgOiBtX2NsaWVudHMpCiAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1
cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJl
bnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSkKIHsKICAg
ICBtX2N1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7CiAgICAgYXV0byBhbmNob3JUaW1lID0gW1tO
U1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwpAQCAtMTcxLDE0ICsxNzEs
MTQgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hh
bmdlZChkb3VibGUgY3VycmVudFRpbWUpCiAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFu
Z2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRv
dWJsZSBidWZmZXJlZFRpbWUpCiB7CiAgICAgbV9idWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWU7
CiAgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCiAgICAgICAgIGNsaWVudC0+YnVm
ZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXli
YWNrUmF0ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChi
b29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewogICAgIG1faXNQbGF5aW5nID0g
aXNQbGF5aW5nOwogICAgIG1fcGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwpAQCAtMTg2LDcg
KzE4Niw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdl
ZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSCiAgICAgICAgIGNsaWVudC0+cmF0ZUNo
YW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKFdlYkNvcmU6OlRpbWVSYW5n
ZXMmIHNlZWthYmxlUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVV
cGRhdGVJbnRlcnZhbCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrYWJs
ZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYgc2Vla2FibGVSYW5nZXMsIGRvdWJs
ZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQogewogICAgIG1f
c2Vla2FibGVSYW5nZXMgPSBzZWVrYWJsZVJhbmdlczsKICAgICBtX3NlZWthYmxlVGltZVJhbmdl
c0xhc3RNb2RpZmllZFRpbWUgPSBsYXN0TW9kaWZpZWRUaW1lOwpAQCAtMTk1LDE0ICsxOTUsMTQg
QEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hh
bmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJgogICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChzZWVrYWJsZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVy
dmFsKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBs
YXlGYXN0UmV2ZXJzZSkKIHsKICAgICBtX2NhblBsYXlGYXN0UmV2ZXJzZSA9IGNhblBsYXlGYXN0
UmV2ZXJzZTsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKICAgICAgICAgY2xp
ZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgYXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMsIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KQor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBhdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpCiB7CiAg
ICAgbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zOwogICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleDsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlYwogICAgICAg
ICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9ucywgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucywgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQogewog
ICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnM7CiAgICAgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gbGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleDsKQEAgLTIxOSw3ICsyMTksNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VgogICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMsIGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0
X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gc2Vs
ZWN0ZWRJbmRleDsKIApAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNl
CiAgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3Rl
ZEluZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIG1fbGVnaWJsZU1lZGlhU2Vs
ZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXg7CiAKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90CiAgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3Qg
U3RyaW5nJiBsb2NhbGl6ZWROYW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkTmFtZSkKIHsKICAgICBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkID0gZW5hYmxlZDsKICAg
ICBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlID0gdHlwZTsKQEAgLTI0NSw0OCArMjQ1LDQ4
IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsCiAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkTmFtZSk7CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQoYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQoYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKIHsKICAgICBtX3dpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7CiAg
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCiAgICAgICAgIGNsaWVudC0+d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11dGVkQ2hh
bmdlZChib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11dGVk
Q2hhbmdlZChib29sIG11dGVkKQogewogICAgIG1fbXV0ZWQgPSBtdXRlZDsKICAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0
ZWQpOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkK
KyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQogCi1SZWZQdHI8V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCitSZWZQdHI8UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5PiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJv
eHkmIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkocGFnZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5KHBhZ2UpKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQor
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHko
V2ViUGFnZVByb3h5JiBwYWdlKQogICAgIDogbV9wYWdlKCZwYWdlKQogewotICAgIG1fcGFnZS0+
cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0
aGlzKTsKKyAgICBtX3BhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpLCAqdGhpcyk7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6fldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSgpCitQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKQogewogICAgIGlmICghbV9w
YWdlKQogICAgICAgICByZXR1cm47CiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCku
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CiAgICAgbV9wYWdlID0gbnVsbHB0cjsKIAogICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nv
bnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAgICAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICAgICAgUmVmUHRyPFBsYXRmb3JtUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlPiBpbnRlcmZhY2U7CiAgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZh
Y2UpID0gdHVwbGU7CiAKICAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CkBAIC0yOTYs
MTUgKzI5NiwxNSBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52YWxp
ZGF0ZSgpCiAgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKIH0KIAotV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQor
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKQogewotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVs
ID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJ
ZCk7Ci0gICAgUmVmPFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPiBpbnRlcmZh
Y2UgPSBQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTo6Y3JlYXRlKG1vZGVsKTsK
KyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbCA9IFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIFJlZjxQbGF0
Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2U6OmNyZWF0ZShtb2RlbCk7CiAKICAgICByZXR1cm4gc3RkOjptYWtl
X3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwogfQogCi1XZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKQorUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxl
JiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5h
ZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOwogICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKQEAgLTMxMiwyMiArMzEyLDIyIEBAIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
CiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLVdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1
cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCitQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQm
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4
dElkKQogewogICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKSk7CiB9CiAKLVBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpCitQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewog
ICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRDbGllbnRG
b3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBt
X2NsaWVudENvdW50cy5hZGQoY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElk
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRl
eHQodWludDY0X3QgY29udGV4dElkKQogewogICAgIGlmICghbV9jbGllbnRDb3VudHMucmVtb3Zl
KGNvbnRleHRJZCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMzNiw5ICszMzYsOSBAQCB2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpCiAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwogfQog
Ci0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisj
cHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkID09IGNvbnRleHRJZCkKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1
aW50NjRfdAogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKIHsKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKQEAgLTM2OSwyMiAr
MzY5LDIyIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKCkKICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29u
dGV4dElkKQogewogICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFTdGF0
ZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRp
bWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
aG9zdFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRpbWVD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9z
dFRpbWUpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jdXJyZW50VGltZUNoYW5nZWQo
Y3VycmVudFRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
YnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRp
bWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7CiAgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3Rv
ckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91
YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJ
bnRlcnZhbCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdl
c1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJs
ZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVV
cGRhdGVJbnRlcnZhbCkKIHsKICAgICBSZWY8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVS
YW5nZXM6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsK
QEAgLTM5Nyw2NiArMzk3LDY2IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4CiAgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5zZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1v
ZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIHZhbHVlKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQog
ewogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh2
YWx1ZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkuYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVk
SW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBz
ZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQogewogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYXVkaW9NZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxl
Y3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4
dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
ZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQbGF5YmFja1Byb3Bl
cnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0
YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKIHsKLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9IHN0YXRpY19j
YXN0PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4o
dGFyZ2V0VHlwZSk7Ci0gICAgQVNTRVJUKHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6
OlRhcmdldFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRh
cmdldFR5cGVUVk91dCB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRU
eXBlTm9uZSk7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGU+KHRhcmdldFR5cGUpOworICAgIEFTU0VSVCh0eXBlID09IFBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQgfHwgdHlwZSA9PSBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6VGFyZ2V0VHlwZU5vbmUpOwogCiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKIH0K
IAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKIHsKICAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZChkaXNhYmxlZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpt
dXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6Om11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgbXV0ZWQpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5tdXRlZENoYW5nZWQobXV0
ZWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZHVyYXRpb25D
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSBkdXJhdGlvbikKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmR1cmF0aW9u
Q2hhbmdlZChkdXJhdGlvbik7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBs
YXliYWNrU3RhcnRlZFRpbWUpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5YmFj
a1N0YXJ0ZWRUaW1lQ2hhbmdlZChwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcs
IGRvdWJsZSByYXRlKQogewogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmF0ZUNoYW5nZWQo
aXNQbGF5aW5nLCByYXRlKTsKIH0KIAogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgU3RyaW5nIGlkZW50aWZpZXIpIGNvbnN0Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgU3RyaW5nIGlkZW50aWZpZXIpIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlm
IChjb250ZXh0SWQgPT0gbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCkBAIC00NjgsOTAgKzQ2
OCw5MCBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aGFuZGxlQ29udHJv
bGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90CiB9CiAKIAotI3ByYWdtYSBtYXJrIE1lc3Nh
Z2VzIHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0
byBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBsYXkoY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpQbGF5KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGF1c2UodWludDY0X3QgY29udGV4dElk
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OlBhdXNlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGF1c2UoY29udGV4dElkKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Ojp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpU
b2dnbGVQbGF5U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUo
Y29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29u
dGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6QmVnaW5TY3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNj
cnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90
IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OkVuZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNj
cnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1l
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwg
dGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6U2Vla1RvVGltZShjb250ZXh0SWQsIHRpbWUpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmZh
c3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGlt
ZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OkZhc3RTZWVrKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RmFzdFNlZWsoY29u
dGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0
SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0Zvcndh
cmQodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoY29udGV4dElkKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2lu
U2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OkJlZ2luU2Nhbm5pbmdCYWNrd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2Nh
bm5pbmdCYWNrd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY2FubmluZyh1aW50
NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpFbmRTY2FubmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVu
ZFNjYW5uaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRf
dCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBpbmRleCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6U2VsZWN0QXVkaW9NZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRl
eCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVkaWFP
cHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKIHsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVy
ZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJl
SW5QaWN0dXJlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlUGljdHVyZUluUGljdHVy
ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0
SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpUb2dnbGVNdXRlZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZU11dGVkKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldE11dGVkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBtdXRlZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OlNldE11dGVkKGNvbnRleHRJZCwgbXV0ZWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OlNldE11dGVkKGNvbnRleHRJZCwgbXV0ZWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlcXVlc3RDb250cm9sbGVkRWxl
bWVudElEKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXF1ZXN0Q29udHJv
bGxlZEVsZW1lbnRJRCgpCiB7CiAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQot
ICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3Qo
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotUGxh
dGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkKK1BsYXRmb3JtUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNvbnRyb2xzTWFuYWdl
ckludGVyZmFjZSgpCiB7CiAgICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKaW5kZXgg
NzMxOTIyODgxNjcxODk4ODEyNjc5N2VkMWYzZTg4OTQ0ZjUzZGY5NS4uYzE3NzI1NmU0YWVlODFl
ZDQ2Y2NhZDZmZGUyNjA5YjNlYmM0OTZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
aApAQCAtMjMsNTAgKzIzLDQ5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlfaAotI2RlZmlu
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlfaAorI3ByYWdtYSBvbmNlCiAKICNpZiAo
UExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1WaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFBMQVRGT1JNKElPUykKLSNp
bmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oPgogI2Vsc2UKLSNp
bmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg+CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKElPUykKLXR5cGVkZWYgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQgUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Cit0eXBlZGVmIFdl
YkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IFBsYXRmb3JtVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlOwogI2Vsc2UKLXR5cGVkZWYgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjIFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwordHlwZWRl
ZiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgUGxhdGZvcm1WaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2U7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdl
YlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKK2NsYXNz
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGZpbmFsCi0g
ICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+Ci0g
ICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciAgeworY2xhc3MgVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGZpbmFsCisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6VmlkZW9G
dWxsc2NyZWVuTW9kZWwKKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlciAgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0PiBjcmVhdGUoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiBtYW5h
Z2VyLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIHBsYXliYWNrU2Vzc2lvbk1vZGVs
LCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ+IGNyZWF0ZShWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90
IGNvbnRleHRJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29u
dGV4dElkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dChtYW5hZ2VyLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKSk7CiAg
ICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpOworICAg
IHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpOwogCiAgICAgdm9pZCBpbnZh
bGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CiAKQEAgLTc0LDExICs3MywxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRMYXllckhvc3RWaWV3KFJldGFpblB0cjxQbGF0Zm9ybVZpZXc+
JiYgbGF5ZXJIb3N0VmlldykgeyBtX2xheWVySG9zdFZpZXcgPSBXVEZNb3ZlKGxheWVySG9zdFZp
ZXcpOyB9CiAKIHByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dCYsIHVpbnQ2NF90KTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5JiwgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiwgdWlu
dDY0X3QpOwogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICB2b2lkIGFkZENs
aWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xp
ZW50Jikgb3ZlcnJpZGU7CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2b2lkIGFk
ZENsaWVudChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0
aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdl
YkNvcmU6OkZsb2F0UmVjdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0
eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOwpAQCAtODcsMjYgKzg2LDI2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0K
ICAgICBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0KIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyCisgICAgLy8gVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKICAg
ICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRW50ZXJG
dWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lk
IGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOwogCi0gICAgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dD4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsKKyAgICBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0PiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOwogICAgIHVpbnQ2NF90IG1fY29udGV4
dElkOwogICAgIFJldGFpblB0cjxQbGF0Zm9ybVZpZXcgKj4gbV9sYXllckhvc3RWaWV3OwotICAg
IEhhc2hTZXQ8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVu
dHM7CisgICAgSGFzaFNldDxXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1f
Y2xpZW50czsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lvbnM7CiAgICAg
Ym9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKIH07CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQ
YWdlUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKLSAgICB2aXJ0dWFs
IH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKTsKKyAgICBzdGF0aWMgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYsIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eSYpOworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAKQEAgLTEyMSwyMCArMTIwLDIw
IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDsKIAotICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eShXZWJQYWdlUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKKyAg
ICBleHBsaWNpdCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiwgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKIAotICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiwgUmVmUHRy
PFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBs
ZTsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1vZGVsSW50
ZXJmYWNlVHVwbGU7CiAgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVy
ZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAg
IFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIGVuc3Vy
ZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQg
YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3Zl
Q2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogCi0gICAgLy8gTWVzc2FnZXMg
ZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisgICAgLy8gTWVzc2FnZXMgZnJvbSBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyCiAgICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0
X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJl
SW5QaWN0dXJlKTsKICAgICB2b2lkIHNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCk7CiAgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKQEAgLTE0NiwxOSArMTQ1LDE5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpOwogI2VuZGlmCiAKLSAgICAvLyBNZXNzYWdlcyB0byBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyCisgICAgLy8gTWVzc2FnZXMgdG8gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgogICAgIHZvaWQg
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1l
ZGlhID0gZmFsc2UpOwogICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCk7CiAgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwog
ICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9p
ZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgc2V0
VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0KTsK
LSAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSk7CisgICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OlZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOwogICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKICAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1
aW50NjRfdCBjb250ZXh0SWQpOwogCiAgICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7Ci0gICAgUmVm
PFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VU
dXBsZT4gbV9jb250ZXh0TWFwOwogICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkIHsgMCB9OwogICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7CkBA
IC0xNjgsNCArMTY3LDMgQEAgcHJpdmF0ZToKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKIAotI2Vu
ZGlmIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmMjgxNWQ2NzIzOGU5ZDNhZmZj
ZjAxZjRmNGRiZDQwNTI0MDg0NGNmLi5lZmMzYjUwNDdlZjQ3YWJhMTk1NzFlNzY0M2EwNzJlY2U4
MjIwYWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMu
aW4KQEAgLTIxLDcgKzIxLDcgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogI2lmIChQTEFURk9STShJT1Mp
ICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
IHsKK21lc3NhZ2VzIC0+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSB7CiAgICAgU2V0SGFz
VmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQogICAgIFNldFZpZGVvRGlt
ZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVu
c2lvbnMpCiAgICAgU2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDMyX3QgdmlkZW9MYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBmbG9hdCBo
b3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQppbmRleCA2MTI5YWQ5YTE0MWQ0
MTZiMWI5YmVkMmUzMzdhZTZhYWUxZGFlMWM1Li5lY2NiOWIyOTIxOTY4MjY4NjRmMDA5MTAwOGY5
MzA4OTg4OGExOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KQEAgLTI0LDE3
ICsyNCwxNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaCIKIAogI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKIAogI2ltcG9ydCAiQVBJ
VUlDbGllbnQuaCIKICNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdl
cy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgotI2ltcG9ydCAi
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3Jl
QW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTWVkaWFQbGF5ZXJFbnVtcy5oPgpAQCAtODQsMTQ5ICs4NCwxNDkgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKICNpZiBQTEFURk9STShJT1MpICYmICFIQVZFKEFWS0lUKQogCi1SZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmKQorUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVBy
b3h5JikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmludmFsaWRhdGUoKQogewogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5
QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAorYm9vbCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJl
SW5QaWN0dXJlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxs
c2NyZWVuKCkKIHsKIAogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKIHsKIAogfQogI2Vsc2UKIAotI3By
YWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0CisjcHJhZ21hIG1hcmsg
LSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQKIAotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5JiBtYW5hZ2VyLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIHBs
YXliYWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCitWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJh
Y2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICA6IG1fbWFuYWdlcigmbWFu
YWdlcikKICAgICAsIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwocGxheWJhY2tTZXNzaW9uTW9kZWwp
CiAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCiB7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpCitWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKQogewog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YWRkQ2xpZW50KFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6YWRkQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQp
CiB7CiAgICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fY2xp
ZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpyZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZW1vdmVDbGllbnQoVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRh
aW5zKCZjbGllbnQpKTsKICAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlz
aGVkV2l0aE1lZGlhKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlcXVlc3RG
dWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAg
ICAgICBtX21hbmFnZXItPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtX2NvbnRleHRJZCwgbW9kZSwg
ZmluaXNoZWRXaXRoTWVkaWEpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6
RmxvYXRSZWN0IGZyYW1lKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdl
ci0+c2V0VmlkZW9MYXllckZyYW1lKG1fY29udGV4dElkLCBmcmFtZSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViQ29yZTo6
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQogewogICAgIGlmICht
X21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckdyYXZpdHkobV9jb250
ZXh0SWQsIGdyYXZpdHkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAg
ICBtX21hbmFnZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRleHRJZCwgbW9kZSk7CiB9
CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojppc1Zpc2libGUoKSBjb25z
dAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fbWFuYWdlciA/IG1fbWFuYWdlci0+aXNWaXNpYmxlKCkgOiBmYWxzZTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNj
cmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2Ny
ZWVuKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmRpZFNldHVw
RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAg
ICAgICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKCkKIHsK
ICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmRpZEV4aXRGdWxsc2NyZWVu
KG1fY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAg
bV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZSgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5m
dWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUobV9jb250ZXh0SWQpOwogfQogCi0jcHJhZ21hIG1h
cmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKyNwcmFnbWEgbWFyayAtIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eQogCi1SZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJv
eHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5KQorUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlLCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShwYWdl
LCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShwYWdlLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkpKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkKK1ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94
eSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkpCiAgICAgOiBtX3BhZ2UoJnBhZ2UpCiAgICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eShwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCiB7Ci0gICAgbV9wYWdlLT5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRo
aXMpOworICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFn
ZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6flZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpCiB7CiAgICAgaWYgKCFtX3Bh
Z2UpCiAgICAgICAgIHJldHVybjsKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX3BhZ2UtPnByb2Nlc3MoKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKICAgICBtX3BhZ2UgPSBudWxscHRyOwogCiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29u
dGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKICAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFj
ZSkgPSB0dXBsZTsKIAogICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKQEAgLTIzOCwx
MyArMjM4LDEzIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlk
YXRlKCkKICAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVl
bigpCiB7CiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKICAg
ICAgICAgc3RkOjpnZXQ8MT4odHVwbGUpLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7
CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAorYm9vbCBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiB0dXBs
ZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewogICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVw
bGUpLT5oYXNNb2RlKG1vZGUpKQpAQCAtMjUzLDcgKzI1Myw3IEBAIGJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBj
b25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlT
aG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBs
ZSktPm1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkpCkBAIC0yNjMs
NyArMjYzLDcgQEAgYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9t
YXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkKIH0KIAogI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBj
b25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVvSW5F
bmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdAogewogICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nv
bnRleHRNYXAudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+aXNQ
bGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpKQpAQCAtMjc0LDI3ICsyNzQsMjcgQEAg
Ym9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVvSW5Fbmhh
bmNlZEZ1bGxzY3JlZW4oKSBjb25zdAogfQogI2VuZGlmCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCit2b2lkIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQogewog
ICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpCiAgICAgICAgIHN0
ZDo6Z2V0PDE+KHR1cGxlKS0+YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKIH0KIAotV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1
cGxlIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKQogewogICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lvbk1vZGVsID0g
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmVuc3VyZU1vZGVsKGNvbnRleHRJZCk7Ci0g
ICAgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgcGxheWJhY2tTZXNzaW9uTW9kZWws
IGNvbnRleHRJZCk7CisgICAgUmVmPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWwg
PSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgcGxheWJhY2tTZXNz
aW9uTW9kZWwsIGNvbnRleHRJZCk7CiAgICAgYXV0byYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
ID0gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmVuc3VyZUludGVyZmFjZShjb250ZXh0
SWQpOwotICAgIFJlZjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJm
YWNlID0gUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OmNyZWF0ZShwbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UpOworICAgIFJlZjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OmNyZWF0
ZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOwogICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LT5hZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CiAKLSAgICBpbnRlcmZhY2Ut
PnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCZtb2RlbC5nZXQoKSk7Ci0gICAgaW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigmbW9kZWwuZ2V0KCkpOworICAg
IGludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsKKyAgICBp
bnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7
CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGlu
dGVyZmFjZSkpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50
ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxB
bmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxl
KCkpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTMwMiwyNCArMzAyLDI0IEBA
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCYgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCitWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5z
dXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQogewogICAgIHJldHVybiAqc3RkOjpnZXQ8MD4o
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLVBsYXRmb3JtV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVu
c3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitQbGF0Zm9ybVZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKQogewogICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFk
ZChjb250ZXh0SWQsIDEpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElk
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRl
eHQodWludDY0X3QgY29udGV4dElkKQogewogICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250
YWlucyhjb250ZXh0SWQpKTsKIApAQCAtMzM3LDEzICszMzcsMTMgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKQogICAgIG1fY2xpZW50Q291bnRzLnNldChjb250ZXh0SWQsIGNsaWVudENvdW50KTsK
IH0KIAotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cgorI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0dXBGdWxsc2NyZWVuV2l0aElE
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yLCBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVu
TW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVp
bnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3Qs
IGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVy
ZUluUGljdHVyZSkKIHsKICAgICBBU1NFUlQodmlkZW9MYXllcklEKTsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICBSZWZQdHI8UGxhdGZvcm1X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKIAogICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKICAgICBhZGRDbGll
bnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CkBAIC0zNzQsMTcgKzM3NCwxNyBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90
IGNvbnRleHRJZCwgdQogICAgIG1fcGFnZS0+dWlDbGllbnQoKS5oYXNWaWRlb0luUGljdHVyZUlu
UGljdHVyZURpZENoYW5nZShtX3BhZ2UsIHZpZGVvRnVsbHNjcmVlbk1vZGUgJiBNZWRpYVBsYXll
ckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQogewogICAgIGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnMo
dWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnModWludDY0
X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBl
bnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHZpZGVvRGlt
ZW5zaW9ucyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRl
ckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgYXV0
byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CiAgICAgaW50ZXJmYWNl
LmVudGVyRnVsbHNjcmVlbigpOwpAQCAtNDAxLDcgKzQwMSw3IEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQog
ICAgIH0KIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKIHsKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxS
ZWN0KTsKQEAgLTQxMywxOCArNDEzLDE4IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6CiB9CiAK
ICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbldpdGhvdXRB
bmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKIHsKICAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKS5leGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodGFyZ2V0TW9kZSk7CiB9
CiAjZW5kaWYKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpjbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgZW5z
dXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuY2xlYW51cEZ1bGxzY3JlZW4oKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVS
ZWN0KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5U
b0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVj
dCBpbmxpbmVSZWN0KQogewogICAgIG1fcGFnZS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KCk7CiAKQEAgLTQzNyw0NyArNDM3LDQ3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkCiAjZW5k
aWYKIH0KIAotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlJlcXVlc3RGdWxsc2NyZWVuTW9kZShj
b250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoY29udGV4dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQog
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
RGlkU2V0dXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkU2V0dXBGdWxs
c2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CiAgICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNjcmVlbigpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogICAgIG1fcGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ+IG1vZGVsOworICAgIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZT4gaW50ZXJmYWNlOwogCiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1
cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogCiAgICAgW0NBVHJhbnNhY3Rpb24gZmx1
c2hdOwogICAgIFttb2RlbC0+bGF5ZXJIb3N0VmlldygpIHJlbW92ZUZyb21TdXBlcnZpZXddOwog
ICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOwotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkQ2xlYW51cEZ1bGxzY3JlZW4o
Y29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIAogICAgIGludGVyZmFjZS0+c2V0TW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICByZW1vdmVDbGllbnRG
b3JDb250ZXh0KGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpG
bG9hdFJlY3QgZnJhbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Vmlk
ZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1l
KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogI2lmIFBMQVRGT1JNKElPUykKQEAgLTQ4OSwz
MCArNDg5LDMwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRl
b0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDCiAgICAgICAgIG1hY2hfcG9ydF9u
YW1lX3QgZmVuY2VQb3J0ID0gZmVuY2VTZW5kUmlnaHQubGVha1NlbmRSaWdodCgpOwogI2VuZGlm
CiAKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRh
Y2htZW50KGZlbmNlUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6U2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKGNvbnRleHRJZCwgZnJhbWUsIElQQzo6QXR0
YWNobWVudChmZW5jZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSksIG1fcGFnZS0+cGFn
ZUlEKCkpOwogICAgIH0KIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQog
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
U2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKGNvbnRleHRJZCwgKHVuc2lnbmVkKWdyYXZpdHkpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQsICh1bnNpZ25l
ZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlk
ZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCBtb2RlICYgTWVkaWFQbGF5ZXJF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi1ib29sIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNWaXNpYmxlKCkgY29uc3QKK2Jvb2wgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUoKSBjb25zdAogewogICAgIHJldHVybiBt
X3BhZ2UtPmlzVmlld1Zpc2libGUoKSAmJiBtX3BhZ2UtPmlzSW5XaW5kb3coKTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lu
bGluZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAg
ICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKTsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlzVmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlzVmlld1Zpc2libGUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwubW0KaW5kZXggN2YxZTk4NTk4NmU1MzU4YzQ1NDhjYTU5OTNl
YWE2M2VjMWJhOWMwMy4uOWFlZGU3MGFlMTcxMzdmYWExMjNjYjUwZThlNjM4NDlhNWUyMmQ4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpAQCAt
NDEsNiArNDEsNyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiUGFnZUNsaWVu
dEltcGwuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVPYmplY3RSZWdpc3RyeS5oIgogI2ltcG9ydCAiUmVt
b3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oIgpAQCAtNjIsNyArNjMsNiBAQAogI2ltcG9ydCAi
V2ViRXZlbnRGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgogI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJv
eHkuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKQEAgLTEx
NzAsOCArMTE3MCw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZU1lZGlhVG91Y2hCYXIoKQog
ICAgICAgICBbbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDYW5Ub2dnbGVQaWN0dXJlSW5Q
aWN0dXJlOllFU107CiAgICAgfQogCi0gICAgaWYgKFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKiBpbnRlcmZhY2UgPSBtX3BhZ2UtPnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKS0+
Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkpCi0gICAgICAgIFttX3BsYXliYWNrQ29udHJvbHNN
YW5hZ2VyIHNldFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzppbnRlcmZhY2VdOworICAg
IGlmIChQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogaW50ZXJmYWNlID0gbV9wYWdl
LT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCktPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpKQor
ICAgICAgICBbbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6aW50ZXJmYWNlXTsKIAogICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQ
bGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgp
XTsKICAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHND
b250cm9sbGVyOm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCldOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA0MDc1ZWEyMzg0NTEzZGJiOWQwZjdl
Mzg2NTQ4ODFkZWE5NTkwYzliLi5lOGYxMjlhNzk5MDllZTMwYzk4Y2ZjOWUyNWE4MzBkYThkNDIx
MGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTUy
LDkgKzE1Miw5IEBACiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVNjcm9sbGlu
Z1BlcmZvcm1hbmNlRGF0YS5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiVmlld1NuYXBzaG90U3RvcmUuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTWFjaFNlbmRSaWdodC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUnVuTG9vcE9ic2VydmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5k
aWNhdG9yV2luZG93Lmg+CkBAIC0xODAsNyArMTgwLDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorI2luY2x1
ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQpAQCAtMzk0LDggKzM5NCw4IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVBy
b3h5KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgdWlu
CiAgICAgbV9mdWxsU2NyZWVuTWFuYWdlciA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmNy
ZWF0ZSgqdGhpcywgbV9wYWdlQ2xpZW50LmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSk7
CiAjZW5kaWYKICNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRo
aXMpOwotICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKKyAg
ICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmNyZWF0ZSgqdGhpcyk7CisgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpAQCAtNjM2LDggKzYzNiw4IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2VzcygpCiAgICAgbV9mdWxsU2Ny
ZWVuTWFuYWdlciA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgbV9w
YWdlQ2xpZW50LmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSk7CiAjZW5kaWYKICNpZiBQ
TEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0g
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpOwotICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTWFuYWdlciA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKKyAgICBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIgPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcyk7
CisgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpjcmVhdGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpAQCAtNDI5NSwxMiArNDI5NSwxMiBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0RnVsbHNjcmVlbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGdWxsc2Ny
ZWVuQ2xpZW50PiYmCiAjZW5kaWYKICAgICAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFW
S0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogV2ViUGFnZVByb3h5OjpwbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKCkKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogV2ViUGFnZVBy
b3h5OjpwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKIHsKICAgICByZXR1cm4gbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLmdldCgpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkq
IFdlYlBhZ2VQcm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CiAg
ICAgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlci5nZXQoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBhOTA4ODAzZmQ1ZTIyODE4Y2IwNGUxNjcz
YzU3ZThiZjg3MjAxN2YxLi5mZDBmZDdlZGZlNmVkYzI1N2U4OGI0M2Q0NzBjOGJmMmJlZmE2MjZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0yMDAsOSArMjAw
LDkgQEAgY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYkNvbnRleHRNZW51
UHJveHk7CiBjbGFzcyBXZWJFZGl0Q29tbWFuZFByb3h5OwogY2xhc3MgV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKK2NsYXNz
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYk5hdmlnYXRpb25TdGF0ZTsK
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKK2NsYXNzIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJVUkxT
Y2hlbWVIYW5kbGVyOwogY2xhc3MgV2ViTW91c2VFdmVudDsKQEAgLTM0Miw4ICszNDIsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkZ1bGxzY3JlZW5DbGllbnQ+JiYpOwogI2VuZGlmCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFW
RShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyKCk7CisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKQEAg
LTE2NzgsOCArMTY3OCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIChQTEFURk9STShJT1Mp
ICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5PiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBjMWJhNzY0ZjAxNTQyNzExZTI5YWQ1
ZjlhMDczNDI3NzY4MjhhYmJhLi5jOTJlYTlmNGMzYjMzZjNhOGZjYzlhMjBkZGYyNjI4MDVlNDlj
OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94
eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQpAQCAtNDEsMTEgKzQxLDExIEBACiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbi5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgIlVzZXJEYXRhLmgiCisjaW1w
b3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlZpZXdVcGRhdGVE
aXNwYXRjaGVyTWVzc2FnZXMuaCIKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ckludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlBy
b2Nlc3NQcm94eS5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmgi
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZmZTJh
MjQ1MWFlYThmYjgyMzRjYjNmMmY3YmFmYjY1ODZiMzdkNGUuLmI5ZTE3NzE4NjBiOGRlZjM1ZmM2
OWRiYjkzMjM1YzRlOGNiMzRiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg3MSw4ICs4NzEsOCBAQAogCQkzN0ZDMTk0NzE4
NTBGQkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0NjE4
NTBGQkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGQzE5
NEExODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMxOTQ4MTg1
MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gKi87IH07
CiAJCTM3RkMxOTRCMTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3
RkMxOTQ5MTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
aCAqLzsgfTsKLQkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkzRjQxOEVGQjE4ODdC
RDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
NDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkzRjQxOEVGOTE4ODdCRDk3MDAyNzk1RkQgLyog
VmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQg
LyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCTNG
NDE4RUZCMTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTNGODdCOUJEMTU4OTQwMTIwMDkwRkY2
MiAvKiBXZWJDb2xvckNob29zZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0Y4N0I5QkExNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nl
ci5jcHAgKi87IH07CiAJCTNGODdCOUJFMTU4OTQwMTkwMDkwRkY2MiAvKiBXZWJDb2xvckNob29z
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODdC
OUJCMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAqLzsgfTsKIAkJM0Y4N0I5
QzAxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlCRjE1ODk0MEQ4MDA5MEZGNjIgLyog
V2ViQ29sb3JQaWNrZXIuaCAqLzsgfTsKQEAgLTExMTQsOSArMTExNCw5IEBACiAJCTUyNzJENEM5
MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjcyRDRDNzFFNzM1RjA5MDBFQjQyOTAg
LyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyNzJENENBMUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rp
b25TcGFjZU5TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTI3MkQ0QzgxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMubW0gKi87
IH07CiAJCTUyOEMzN0MxMTk1Q0JCMUEwMEQ4QjlDQyAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUYy
ODEwMTk1OEY0NzgwMDhDQUM3MiAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFCMDFDNTc0
OTVBMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBE
RTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07Ci0JCTUyRDVB
MUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFD
NTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9
OwotCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVB
MUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9
OworCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1
QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87
IH07CisJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1t
ICovOyB9OworCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
RDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9
OwogCQk1MzAyNTgzQjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgy
RTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi87IH07CiAJ
CTUzMDI1ODNDMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRjFEQ0JC
RDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovOyB9OwogCQk1MzAyNTgz
RDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzMDFEQ0JCRDFEMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi87IH07CkBAIC0xOTI1LDE0ICsxOTI1LDE0
IEBACiAJCUNENzhFMTE3MURCN0RDMEEwMDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDc4RTExNjFE
QjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oICovOyB9OwogCQlDRDc4RTEx
OTFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDc4RTExODFEQjdFNUFEMDAxNEEy
REUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RBMDQxRjQxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tC
b2FyZFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREEwNDFGMzFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0JvYXJkU2VydmljZXNTUEku
aCAqLzsgfTsKLQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5t
bSAqLzsgfTsKLQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgg
Ki87IH07Ci0JCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaCAqLzsgfTsKLQkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW0gKi87IH07Ci0JCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
LQkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNz
YWdlcy5oICovOyB9OwotCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9Owot
CQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oICovOyB9OworCQlDREEyOUExQTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1tICovOyB9OworCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aCAqLzsgfTsKKwkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5oICovOyB9OworCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tbSAqLzsgfTsKKwkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREEyOUEyOTFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi87IH07CisJCUNEQTI5
QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCUNEQzM4MkZF
MTcyMTE3OTkwMDhBMkZDMyAvKiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0NjA5MDBBOTVGNDQg
LyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tICovOyB9OwogCQlDREMzODMwNzE3MjExN0REMDA4QTJG
QzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29r
aWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlDREMzODMwQzE3MjEyMjgyMDA4QTJG
QzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwQjE3MjEyMUNFMDA4QTJGQzMgLyogQ29va2ll
U3RvcmFnZVNoaW1MaWJyYXJ5LmggKi87IH07CkBAIC0zMDk0LDEwICszMDk0LDEwIEBACiAJCTM3
RkMxOTQ2MTg1MEZCRjIwMDhDRkE0NyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRl
eHRMb2FkRGVsZWdhdGVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3
RkMxOTQ4MTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS05TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkMx
OTQ5MTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGNDE4RUY1MTg4N0JEOTcw
MDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkz
RjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3Nh
Z2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVG
NzE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9G
dWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZE
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGODE4ODdCRDk3
MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5QkExNTg5M0Y2MzAw
OTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJDb2xvckNob29zZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzRjg3QjlCQjE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzRjg3QjlCRjE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQ
aWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzODEsMTIgKzMzODEsMTIgQEAKIAkJ
NTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpc3RpY3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyNzJENEM3MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFj
ZU5TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUHJvdGVjdGlvblNwYWNl
TlMuaDsgcGF0aCA9IG1hYy9XS1Byb3RlY3Rpb25TcGFjZU5TLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyNzJENEM4MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFj
ZU5TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQcm90ZWN0
aW9uU3BhY2VOUy5tbTsgcGF0aCA9IG1hYy9XS1Byb3RlY3Rpb25TcGFjZU5TLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFCMzFDNTc0OUYy
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUy
RDVBMUFCMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBQzFD
NTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFCMjFDNTc0OUYyMDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUI0
MUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNv
dXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJl
c291cmNlLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVz
b3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwMjU4MzAxRENCQkQxRDAw
REE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDI2NCwxNiArNDI2NCwxNiBAQAogCQlDRDc4RTExNjFEQjdEQzBBMDAxNEEy
REUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBUElGdWxsc2NyZWVuQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNENzhFMTE4MURCN0U1QUQwMDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTA0MUYzMUFDRTIxMDUwMDRBMTNFQyAvKiBC
YWNrQm9hcmRTZXJ2aWNlc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
YWNrQm9hcmRTZXJ2aWNlc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEy
OUExODFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE5MUNCREJGNDEw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlB
MUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjIx
Q0JFQjYxQTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTI0MUNC
RUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
REEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMUMxQ0JEQkY1QjAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlB
MjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI0MUNCRUI2
N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEy
OUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNjFDQkVCNjdB
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDREMzODJGNzE3MjExNTA2MDA4QTJGQzMgLyogQ0ZOZXR3b3JrLmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBuYW1lID0gQ0ZOZXR3b3JrLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0NGTmV0d29yay5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7
IH07CiAJCUNEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJh
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDMzgzMDYxNzIxMTc5OTAwOEEyRkMzIC8q
IFdlYlByb2Nlc3NTaGltLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgaW5jbHVkZUluSW5kZXggPSAw
OyBwYXRoID0gV2ViUHJvY2Vzc1NoaW0uZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CkBAIC01MjA3LDE3ICs1MjA3LDE3IEBACiAJCQkJMkQxQjVENUExODU4NjU5OTAw
NkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbiAqLywKIAkJCQkxQUMw
MjczRTE5NjYyMkQ2MDBDMTJCNzUgLyogV2ViUGFnZVByb3h5Q29jb2EubW0gKi8sCiAJCQkJN0M0
Njk0Q0IxQTRCNTEwQTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tICovLAot
CQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaCAqLywKLQkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCUNEQTI5QTFGMUNCRUI1RkIw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCisJCQkJQ0RB
MjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICov
LAorCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywKIAkJCQk3Q0U0RDIxNTFBNDkxNDg0MDBD
N0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSAqLywKIAkJCQkxQTA0RjYxNzFBNEEzQTdB
MDBBMjFCNkUgLyogV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0gKi8sCiAJCQkJN0FBRDE3NUUxRUE2
QUYzNzAwM0IwODk0IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tICov
LAogCQkJCTUxRDEyNDMxMUU2REU1MjEwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyQ29j
b2EuaCAqLywKIAkJCQk1MUQxMjQzMjFFNkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFu
ZGxlckNvY29hLm1tICovLAotCQkJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLywKLQkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJ
CTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkubW0gKi8sCisJCQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oICovLAorCQkJCTUyRDVBMUFCMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNTJENUExQUMxQzU3
NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLywKIAkJCQky
REZDN0RCOTFCQ0NDMTk1MDBDMTU0OEMgLyogV2ViVmlld0ltcGwuaCAqLywKIAkJCQkyREZDN0RC
QTFCQ0NDMTk1MDBDMTU0OEMgLyogV2ViVmlld0ltcGwubW0gKi8sCiAJCQkJMUFEMDFCQ0IxOTA1
RDU0OTAwQzlDNDVGIC8qIFdLUmVsb2FkRnJhbWVFcnJvclJlY292ZXJ5QXR0ZW1wdGVyLmggKi8s
CkBAIC02Mzk5LDE0ICs2Mzk5LDE0IEBACiAJCQkJQ0Q0OTFCMDUxRTcwRDA1RjAwMDA5MDY2IC8q
IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNwcCAqLywKIAkJCQlDRDQ5MUIwNjFFNzBEMDVGMDAw
MDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLywKIAkJCQlDRDQ5MUIwQTFFNzMy
RDEyMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0J
CQkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aCAqLywKLQkJCQlDREEyOUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLywKKwkJCQlDREEyOUExOTFDQkRCRjQxMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovLAorCQkJCUNEQTI5QTFDMUNCREJG
NUIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAorCQkJ
CUNEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICov
LAogCQkJCUVDQTY4MEQ3MUU2OTBERjgwMDczMUQyMCAvKiBXZWJQcm9jZXNzQ29jb2EuaCAqLywK
IAkJCQk3QzZFNzBGOTE4QjJENEEwMDBGMjRFMkUgLyogV2ViUHJvY2Vzc0NvY29hLm1tICovLAot
CQkJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
LmggKi8sCi0JCQkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8sCisJCQkJNTJENUExQjIxQzU3NDlGMjAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLywKKwkJCQk1MkQ1QTFCMzFDNTc0
OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKKwkJ
CQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAq
LywKIAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtNzg5MSwxMCArNzg5MSwxMCBAQAogCQkJCTFBQjFGNzkzMUQxQjM2MTMwMDdDOUJEMSAvKiBX
ZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oICovLAogCQkJCTFBQjFGNzk0MUQxQjM2MTMw
MDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCiAJCQkJMUFCMUY3OTUxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRv
clByb3h5TWVzc2FnZXMuaCAqLywKLQkJCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJQ0RBMjlB
MjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5o
ICovLAotCQkJCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCUNEQTI5QTI3MUNCRUI2N0Ew
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovLAor
CQkJCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8sCisJCQkJQ0RBMjlBMjYxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCisJCQkJQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJMUEwNDNGNjcxMjUxNEQ4QjAwRkZCRkI1IC8qIFdl
YlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkxQTA0M0Y2ODEy
NTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovLAogCQkJ
CUJDMzA2NkJDMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNw
cCAqLywKQEAgLTc5MTYsMTAgKzc5MTYsMTAgQEAKIAkJCQkxQUFGMDhCNjE5MjY5RTZEMDBCNjM5
MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZXMuaCAqLywKIAkJCQk3QzM2MUQ3
NjE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovLAogCQkJCTdDMzYxRDc3MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi8sCi0JCQkJM0Y0MThFRjUxODg3QkQ5
NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovLAotCQkJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyTWVzc2FnZXMuaCAqLywKLQkJCQkzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkz
RjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
TWVzc2FnZXMuaCAqLywKKwkJCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJM0Y0MThFRjYxODg3QkQ5
NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICovLAorCQkJCTNG
NDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSAi
RGVyaXZlZCBTb3VyY2VzIjsKIAkJCXBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyOwpAQCAt
ODc1OSwxMCArODc1OSwxMCBAQAogCQkJCTFBQjFGNzk5MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg1
MEZFNzFFRDdDMzlGMDBGQjc3QTcgLyogV2ViUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTNFNzM2MTExQ0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlB
MjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMkIxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUQ1
OTI5RjE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzU3NDRGMDEyNjM4RkIzMDA2RjBGMTIgLyogV2ViUG9wdXBJdGVtLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlEM0I5NDg0NzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggaW4g
SGVhZGVycyAqLywKQEAgLTg4MTUsNyArODgxNSw3IEBACiAJCQkJN0MzNjFENzkxOTI4MDNCRDAw
MzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRUU1NzVDMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJW
YWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUExQjAxQzU3
NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRGQzdEQkIxQkNDQzE5NTAwQzE1NDhD
IC8qIFdlYlZpZXdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUNENTVBQTEyOEUyOTRGMDAx
MzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI5MjMyREY0MThCMjlENjgwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdl
T2JqZWN0TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzY5LDEwICsxMDM2OSwxMCBAQAogCQkJ
CTFBM0U3MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEREQxMjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBsYXRmb3Jt
VG91Y2hQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDRBMjE4ODRFNEYwMDBFRDg2
REIgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNE
QTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RB
MjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5t
bSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
REEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMUQ1OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBMDhGRUU0MUQ1OTNFMkEwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZCMzAwNkYwRjEyIC8q
IFdlYlBvcHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDQ1LDEwICsxMDQ0NSwxMCBA
QAogCQkJCTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTczOUJCRTFC
NDIwNDY2MDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTgzRUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTNGNDE4RUY5MTg4
N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKLQkJCQkzRjQxOEVG
QjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRB
MyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0Y0MThF
RjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNGNDE4RUZC
MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGQzdEQkMxQkNDQzE5NTAwQzE1NDhDIC8q
IFdlYlZpZXdJbXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDExMjdBMjk4MDAwOEZG
NEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4MTYwRDAxODc2
NDU1NzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA0ZDIyYWZmMTI4OWY3MDJlOGU1ODRhNjcyM2I1
YzZhZTllZGQ5YjhmLi5mZWUwZDI4Njc3ZDAwMGE1YTc5NzBkYWQ0OWE1MTkwZjRkMjhhZGEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC03OCw4ICs3OCw4IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1ZGUgIldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgi
CisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAw
ODU5ZjY2NWY3MGVlNjFiZTUyMDdkNTJhNTgzOWJiZWRjYTEzNzQ2Li44ODNmNjFiYWUzZjFkN2My
ZDBhY2UzOGU4NTdiNzBjMmQ1NDMzZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAjaW5jbHVkZSAiUERGUGx1Z2luLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCisj
aW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIldLU3RyaW5nQ0Yu
aCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5V2ViQXJj
aGl2ZS5oPgogI2VuZGlmCiAKQEAgLTM0NzAsMTcgKzM0NzAsMTcgQEAgUmVtb3RlV2ViSW5zcGVj
dG9yVUkqIFdlYlBhZ2U6OnJlbW90ZUluc3BlY3RvclVJKCkKIH0KIAogI2lmIChQTEFURk9STShJ
T1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgV2ViUGFnZTo6cGxh
eWJhY2tTZXNzaW9uTWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBXZWJQYWdlOjpw
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTWFu
YWdlcikKLSAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsKICAgICByZXR1cm4g
Km1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ciYgV2ViUGFnZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyJiBXZWJQYWdlOjp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fdmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcikKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0g
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25N
YW5hZ2VyKCkpOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKSk7CiAg
ICAgcmV0dXJuICptX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiB9CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDE0MmY1N2Q1NzVhNmE2
ZjEzMTQ2YTliZjQyMjQyZTkyYzcxODRjNjEuLmI3ZWJiZTgxYWQ4YmJjNTFmMmVmMjhhNWY4YWZm
N2IwNTBmNGU0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaApAQCAtMTg2LDExICsxODYsMTEgQEAgY2xhc3MgV2ViTm90aWZpY2F0aW9uQ2xpZW50Owog
Y2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7CiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94
eTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CiBjbGFzcyBXZWJQb3B1cE1lbnU7CiBj
bGFzcyBXZWJVbmRvU3RlcDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjsKLWNsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OwogY2xhc3MgV2ViV2hlZWxFdmVudDsKIGVudW0gRmluZE9wdGlvbnMgOiB1aW50MTZfdDsKIHN0
cnVjdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjsKQEAgLTI2Niw4ICsyNjYsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0luc3BlY3RvclBhZ2UoKSB7IHJldHVybiAhIW1faW5zcGVjdG9yVUkgfHwg
ISFtX3JlbW90ZUluc3BlY3RvclVJOyB9CiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwotICAgIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXImIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAgICBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisgICAgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciYgdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogI2VuZGlmCiAjaWYgUExB
VEZPUk0oSU9TKQogICAgIHZvaWQgc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNr
KGJvb2wpOwpAQCAtMTQwMCw4ICsxNDAwLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UmVtb3Rl
V2ViSW5zcGVjdG9yVUk+IG1fcmVtb3RlSW5zcGVjdG9yVUk7CiAKICNpZiAoUExBVEZPUk0oSU9T
KSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9w
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyPiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcj4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogI2VuZGlmCiAjaWYgUExB
VEZPUk0oSU9TKQogICAgIGJvb2wgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sg
eyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9X
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaAppbmRleCA3NTNjYjE2OThiZGIxNTVmOTY2
OTgxMTFmMDUxNWYyMzg4N2Y1ZGEyLi4yMzZhMjgxN2I5MDJkZGEyOTZiYTM2YmIxY2U4YWNlNjI3
OTAxM2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlh
RWxlbWVudEVudW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENv
dW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CkBAIC01MiwyOCArNTIsMjggQEAgY2xhc3MgTm9kZTsKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBXZWJQYWdlOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsK
K2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CiAKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQgZmluYWwKLSAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQgeworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dCBmaW5hbAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UK
KyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBj
cmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4
dElkKQorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gY3Jl
YXRlKFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4
dElkKSk7CiAgICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQoKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KCk7
CiAKICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KIAogcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDsKIAot
ICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgIC8vIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZQogICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgZmluYWw7CiAKLSAgICAvLyBX
ZWJQbGF5YmFja01vZGVsQ2xpZW50CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQK
ICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOwogICAgIHZvaWQgY3VycmVu
dFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIGZpbmFs
OwogICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIGZpbmFsOwpAQCAtODUsMjAg
Kzg1LDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKICAgICB2b2lkIGF1ZGlvTWVkaWFT
ZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwogICAgIHZvaWQgbGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lkIGV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2Fs
aXplZERldmljZU5hbWUpIGZpbmFsOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
Ym9vbCBlbmFibGVkLCBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgZmluYWw7
CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgZmlu
YWw7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgZmluYWw7CiAKLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImLCB1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoUGxh
eWJhY2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CiAKLSAgICBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciogbV9tYW5hZ2VyOwogICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwogfTsKIAotY2xhc3MgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZp
cnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKyAgICBzdGF0aWMgUmVmPFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJik7CisgICAgdmlydHVhbCB+UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKIApAQCAtMTA3LDIxICsxMDcsMjEgQEAg
cHVibGljOgogICAgIHVpbnQ2NF90IGNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50Jik7CiAKIHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjsKKyAgICBmcmllbmQgY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKIAot
ICAgIGV4cGxpY2l0IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOworICAgIGV4
cGxpY2l0IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOwogCi0gICAgdHlwZWRlZiBz
dGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudD4sIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJ
bnRlcmZhY2VUdXBsZTsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiwgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1cGxlOwogICAgIE1vZGVsSW50ZXJmYWNl
VHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKICAgICBN
b2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50JiBlbnN1cmVNb2Rl
bCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3Zl
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1
aW50NjRfdCBjb250ZXh0SWQpOwogCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQKKyAgICAvLyBJbnRlcmZhY2UgdG8gUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dAogICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRl
eHRJZCk7CiAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUpOwogICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91
YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSk7CkBAIC0xMzQsMTEgKzEzNCwxMSBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlv
bk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwogICAgIHZvaWQgYXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpOwogICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9p
ZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxl
ZCwgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9pZCBleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcg
bG9jYWxpemVkRGV2aWNlTmFtZSk7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKICAgICB2b2lkIG11dGVkQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwogCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eQogICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQp
OwogICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHRvZ2dsZVBs
YXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1lc3NhZ2VzLmluCmluZGV4IDk1NjY2YTcxNTRjYzRhOTQ0ZDA0ZWNhODZjYjMwMzAwNmJkNzc4
YTEuLjJlNThkYzk4NDdjZWRjOTIyOWI3YTNkZTIzMjE3YzQ3ZmVjY2YzMTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDcgQEAKICMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMg
LT4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciB7CittZXNzYWdlcyAtPiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyIHsKICAgICBQbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBQYXVzZSh1aW50
NjRfdCBjb250ZXh0SWQpCiAgICAgVG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tbQppbmRleCAyODVhMjdlNDhiMmE0MjgyOWZiNDQyMjRjMTc0
ZDliMjM4MzU1YjVmLi45MTQxZTM4ZjU0NDUzZGIxNTJiMzFkMmFiZTFmNGNiYjA2MDM4YmFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCkBAIC0yNCwxNSArMjQsMTUgQEAKICAqLwogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKIAogI2lmIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKIAogI2lt
cG9ydCAiQXR0YWNobWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgog
I2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCi0j
aW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9j
ZXNzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50
Lmg+CkBAIC01MywxMjYgKzUzLDEyNiBAQCBzdGF0aWMgdWludDY0X3QgbmV4dENvbnRleHRJZCgp
CiAgICAgcmV0dXJuICsrY29udGV4dElkOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0CisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0CiAKLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6Oldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgOiBtX21hbmFnZXIoJm1h
bmFnZXIpCiAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCiB7CiB9CiAKLVdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0KCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0KCkKIHsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAg
ICAgIG1fbWFuYWdlci0+cmVzZXRNZWRpYVN0YXRlKG1fY29udGV4dElkKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91Ymxl
IGR1cmF0aW9uKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpkdXJhdGlv
bkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAg
IG1fbWFuYWdlci0+ZHVyYXRpb25DaGFuZ2VkKG1fY29udGV4dElkLCBkdXJhdGlvbik7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFu
Z2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAg
IG1fbWFuYWdlci0+Y3VycmVudFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwg
YW5jaG9yVGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZm
ZXJlZFRpbWUpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5idWZm
ZXJlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBidWZmZXJlZFRpbWUpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5
aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7
CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5yYXRlQ2hhbmdlZChtX2Nv
bnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwogfQogCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGlt
ZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnBsYXliYWNrU3Rh
cnRlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlm
aWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlRp
bWVSYW5nZXMmIHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBk
YXRlSW50ZXJ2YWwpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5z
ZWVrYWJsZVJhbmdlc0NoYW5nZWQobV9jb250ZXh0SWQsIHJhbmdlcywgbGFzdE1vZGlmaWVkVGlt
ZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgdmFsdWUpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5n
ZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXIt
PmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQobV9jb250ZXh0SWQsIHZhbHVlKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7
CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5sZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2Vs
ZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKG1fbWFu
YWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5sZWdpYmxlTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpOwogfQog
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFt
ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKQog
ewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQobV9jb250ZXh0SWQsIGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21h
bmFnZXItPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChtX2NvbnRleHRJZCwg
ZGlzYWJsZWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQog
ICAgICAgICBtX21hbmFnZXItPm11dGVkQ2hhbmdlZChtX2NvbnRleHRJZCwgbXV0ZWQpOwogfQog
Ci0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisjcHJhZ21hIG1hcmsg
LSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCiAKLVJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
PiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKK1JlZjxQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUoV2Vi
UGFnZSYgcGFnZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKHBhZ2UpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKHBhZ2UpKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQorUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQogICAgIDogbV9wYWdlKCZw
YWdlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlEKCksICp0aGlzKTsKIH0KIAotV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6fldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQorUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6flBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQogewogICAgIGZvciAoYXV0byYg
dHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICAgICAgUmVmUHRy
PFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKKyAgICAgICAgUmVmUHRy
PFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKICAgICAgICAgc3Rk
Ojp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKICAgICAgICAgbW9kZWwtPnJlbW92ZUNs
aWVudCgqaW50ZXJmYWNlKTsKICAgICAgICAgbW9kZWwtPnNldE1lZGlhRWxlbWVudChudWxscHRy
KTsKQEAgLTE4NCwxOSArMTg0LDE5IEBAIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6On5XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKICAgICBtX21lZGlhRWxlbWVudHMuY2xlYXIoKTsKICAg
ICBtX2NsaWVudENvdW50cy5jbGVhcigpOwogCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCkKIHsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ+IG1vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgp
OwotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZh
Y2UgPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNv
bnRleHRJZCk7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBt
b2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwogICAg
IG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFjZSk7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3R1
cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwogfQogCi1XZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRl
cmZhY2VUdXBsZSgpKTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCkBAIC0yMDQsMjAg
KzIwNCwyMCBAQCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxl
JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cgogICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogfQogCi1XZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0
X3QgY29udGV4dElkKQorV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQm
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkK
IHsKICAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCkpOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQor
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICByZXR1cm4gKnN0ZDo6
Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElk
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCkKIHsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
PiBpbnRlcmZhY2U7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlOwogICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKTsKIAogICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtZWRp
YUVsZW1lbnQgPSBtb2RlbC0+bWVkaWFFbGVtZW50KCk7CkBAIC0yMjgsMTkgKzIyOCwxOSBAQCB2
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKQogICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJ
ZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQogewogICAgIEFTU0VS
VChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKICAgICBpZiAobV9jbGllbnRD
b3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCiAgICAgICAgIHJlbW92ZUNvbnRleHQoY29udGV4dElk
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRVcFBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCiB7CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIGF1dG8gZm91bmRJdGVyYXRvciA9IG1fbWVkaWFFbGVtZW50cy5maW5kKCZtZWRp
YUVsZW1lbnQpOwpAQCAtMjYyLDExICsyNjIsMTEgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUUK
ICAgICB9CiAKICAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6U2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZXRVcFBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyV2l0aElEKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2xl
YXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlm
ICghbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCkBAIC0yNzQsMTEgKzI3NCwxMSBAQCB2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIo
KQogCiAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCk7CiAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOwotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDbGVhclBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDbGVhclBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogI2VuZGlmCiB9CiAKLXVpbnQ2NF90IFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCit1aW50NjRfdCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudCYgbWVkaWFFbGVtZW50KQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1l
bnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9
KTsKICAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwpA
QCAtMjg2LDM5ICsyODYsMzkgQEAgdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUUKICAgICByZXR1cm4g
Y29udGV4dElkOwogfQogCi0jcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQ6CisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmVz
ZXRNZWRpYVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSZXNldE1lZGlhU3Rh
dGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IGR1cmF0aW9uKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1cmF0aW9uQ2hhbmdl
ZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1cmF0aW9uQ2hhbmdl
ZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q3VycmVudFRpbWVD
aGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRp
bWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZl
cmVkVGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YnVmZmVyZWRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkJ1ZmZlcmVk
VGltZUNoYW5nZWQoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
QnVmZmVyZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXliYWNrU3Rh
cnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRl
ZFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXliYWNrU3RhcnRlZFRpbWVD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OlBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgcGxheWJhY2tTdGFydGVk
VGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpQbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChjb250
ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlp
bmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5nZWQoY29udGV4dElkLCBpc1Bs
YXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSYXRlQ2hhbmdlZChjb250
ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdlcywg
ZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBs
YXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQogewogICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewpAQCAtMzI2LDE0MyAr
MzI2LDE0MyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0CiAgICAgICAgIGRvdWJsZSBlbmQgPSB0
aW1lUmFuZ2VzLnJhbmdlcygpLmVuZChpKS50b0RvdWJsZSgpOwogICAgICAgICByYW5nZXNWZWN0
b3IuYXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsKICAgICB9Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNlZWthYmxlUmFuZ2VzVmVjdG9y
Q2hhbmdlZChjb250ZXh0SWQsIFdURk1vdmUocmFuZ2VzVmVjdG9yKSwgbGFzdE1vZGlmaWVkVGlt
ZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNlZWthYmxlUmFuZ2Vz
VmVjdG9yQ2hhbmdlZChjb250ZXh0SWQsIFdURk1vdmUocmFuZ2VzVmVjdG9yKSwgbGFzdE1vZGlm
aWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZh
bHVlKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNvbnRleHRJZCwgdmFsdWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjb250ZXh0SWQsIHZh
bHVlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywg
c2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5w
YWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJ
bmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIFN0cmluZyBs
b2NhbGl6ZWREZXZpY2VOYW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpleHRlcm5h
bFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIFN0
cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpFeHRlcm5hbFBsYXliYWNrUHJvcGVydGll
c0NoYW5nZWQoY29udGV4dElkLCBlbmFibGVkLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odGFyZ2V0
VHlwZSksIGxvY2FsaXplZERldmljZU5hbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJuYWxQ
bGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHRhcmdldFR5cGUpLCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQog
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJ
bmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVN
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJ
ZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
Q2hhbmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkQ2hhbmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRl
ZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBtdXRlZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFuZ2VkKGNvbnRleHRJZCwgbXV0ZWQp
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6TXV0ZWRDaGFuZ2VkKGNvbnRleHRJZCwgbXV0ZWQpKTsKIH0KIAotI3ByYWdtYSBtYXJrIE1l
c3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OgorI3ByYWdtYSBtYXJr
IE1lc3NhZ2VzIGZyb20gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OgogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXkodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXkoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLnBhdXNlKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBsYXlTdGF0ZSgpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcodWludDY0X3Qg
Y29udGV4dElkKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY3J1YmJp
bmcoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJpbmco
dWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1
YmJpbmcodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuZW5kU2NydWJiaW5nKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRp
bWUpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9UaW1lKHRpbWUpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIHRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RT
ZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCiB7CiAgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5mYXN0U2Vlayh0aW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNv
bnRleHRJZCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdG
b3J3YXJkKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2Fu
bmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3Qg
Y29udGV4dElkKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2Nhbm5pbmco
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElk
LCB1aW50NjRfdCBpbmRleCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2
NF90IGluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKIHsKICAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6aGFuZGxlQ29udHJvbGxlZEVsZW1l
bnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQp
CiB7CiAgICAgYXV0byBlbGVtZW50ID0gZW5zdXJlTW9kZWwoY29udGV4dElkKS5tZWRpYUVsZW1l
bnQoKTsKICAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURS
ZXNwb25zZShjb250ZXh0SWQsIGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCkpKTsKKyAgICAgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkhhbmRs
ZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQsIGVsZW1lbnQtPmdldElkQXR0
cmlidXRlKCkpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7
CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlTXV0ZWQodWludDY0X3Qg
Y29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVNdXRlZCh1aW50
NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVN
dXRlZCgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldE11dGVkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQogewogICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TXV0ZWQobXV0ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
aAppbmRleCA5YThlNDdjMGVkMWFhMmU2MzZiMjZmNjg2OWE4YjI1MWNlODFkOWM1Li5mOGQzYzI0
OTI1NTEyYmEzMzhkYjA5YzJjMTJmNzVjNzUyOTIzY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
aApAQCAtMjIsOCArMjIsOCBAQAogICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCi0jaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJf
aAotI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyX2gKKworI3ByYWdtYSBvbmNlCiAK
ICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKIApAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1l
ZGlhRWxlbWVudEVudW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01MiwxOSArNTIsMTkgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIExheWVySG9zdGluZ0NvbnRleHQ7CiBjbGFzcyBXZWJQYWdlOwotY2xhc3Mg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOworY2xhc3MgUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0Ci0gICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PgotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ+CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dD4gY3JlYXRlKFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90
IGNvbnRleHRJZCkKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ+IGNyZWF0ZShWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250
ZXh0SWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIs
IGNvbnRleHRJZCkpOwogICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0KCk7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dCgpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9
CiAKQEAgLTg0LDEzICs4NCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4o
Ym9vbCBmbGFnKSB7IG1faXNGdWxsc2NyZWVuID0gZmxhZzsgfQogCiBwcml2YXRlOgotICAgIC8v
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQKICAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2
b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3Zl
cnJpZGU7CiAKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQoVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNv
bnRleHRJZCk7CiAKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7Cisg
ICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciogbV9tYW5hZ2VyOwogICAgIHVpbnQ2NF90IG1fY29u
dGV4dElkOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVy
SG9zdGluZ0NvbnRleHQ7CiAgICAgYm9vbCBtX2lzQW5pbWF0aW5nIHsgZmFsc2UgfTsKQEAgLTk5
LDEwICs5OSwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4geyBmYWxzZSB9
OwogfTsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2Vp
dmVyIHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBjcmVhdGUo
V2ViUGFnZSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKLSAgICB2aXJ0dWFsIH5XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKKyAgICB2
aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAgICAgCiAgICAgdm9pZCBpbnZhbGlk
YXRlKCk7CiAgICAgCkBAIC0xMTUsMjQgKzExNSwyNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGl0
VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9F
bGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKTsKIAogcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0OwogCi0gICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQ
YWdlJiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOworICAgIGV4cGxpY2l0IFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKIAotICAg
IHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4sIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKICAgICBNb2Rl
bEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CiAgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYg
ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKICAgICB2
b2lkIHJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIGFkZENsaWVu
dEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudEZv
ckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKIAotICAgIC8vIEludGVyZmFjZSB0byBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisgICAgLy8gSW50ZXJmYWNlIHRvIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKICAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pOwogICAgIHZvaWQgdmlkZW9EaW1lbnNpb25z
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwog
Ci0gICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKyAg
ICAvLyBNZXNzYWdlcyBmcm9tIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQogICAgIHZvaWQg
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1l
ZGlhKTsKICAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwog
ICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKQEAgLTE0NCw3
ICsxNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpOwogICAgIAogICAgIFdl
YlBhZ2UqIG1fcGFnZTsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXI7CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50KiwgdWludDY0X3Q+IG1fdmlkZW9FbGVtZW50czsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBN
b2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7CiAgICAgdWludDY0X3QgbV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQgeyAwIH07CkBAIC0xNTUsNCArMTU1LDMgQEAgcHJvdGVjdGVkOgog
CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQogCi0jZW5kaWYgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KaW5kZXggMTM1
OWMyNWFhZTdiMDE1ZTMwMTNkOWExYjE1MDdiNjEwYTJmYmNhNS4uNWM0YjU2ODk1NTllZTc1ZDk5
NDE2ZTgwNGM3ZmNmNjk3YmIwMjUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
ZXNzYWdlcy5pbgpAQCAtMjEsNyArMjEsNyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAjaWYgKFBMQVRG
T1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyIHsKK21lc3NhZ2VzIC0+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgewogICAgIFJlcXVlc3RG
dWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZp
bmlzaGVkV2l0aE1lZGlhKQogICAgIERpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCiAgICAgRGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLm1tCmluZGV4IGRmNDYxNzRlZjNhZDgzZTA4ZjQzYWQ4ZTM3YWJmYjUxMjg5YTgw
NjguLmVmNjgwYjlkYWI0NmIyZmM2NTVmNzMyMGU3YTU1ZDA5MjExODIxNDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubW0KQEAgLTIzLDE3ICsyMywxNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIK
IAogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCiAjaW1wb3J0ICJBdHRhY2htZW50
LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW1wb3J0ICJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNp
bXBvcnQgIldlYlBhZ2UuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIK
ICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Db2xvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgpAQCAtNjQsNTQgKzY0
LDU0IEBAIHN0YXRpYyBJbnRSZWN0IGlubGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxlbWVudCYg
ZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNU
b1Jvb3RWaWV3KHJlY3QpOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0CisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdl
ciwgdWludDY0X3QgY29udGV4dElkKQorVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBt
YW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCiAg
ICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCiB7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCkKK1Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0KCkKIHsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
OjpzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250
ZXh0PiYmIGNvbnRleHQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNl
dExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+
JiYgY29udGV4dCkKIHsKICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEZNb3ZlKGNvbnRl
eHQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhhc1Zp
ZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKIHsKICAgICBpZiAobV9tYW5h
Z2VyKQogICAgICAgICBtX21hbmFnZXItPmhhc1ZpZGVvQ2hhbmdlZChtX2NvbnRleHRJZCwgaGFz
VmlkZW8pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5n
ZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAgaWYgKG1fbWFuYWdl
cikKICAgICAgICAgbV9tYW5hZ2VyLT52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fY29udGV4dElk
LCB2aWRlb0RpbWVuc2lvbnMpOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCiAKLVJlZjxX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVh
dGUoV2ViUGFnZSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNz
aW9uTWFuYWdlcikKK1JlZjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxh
eWJhY2tTZXNzaW9uTWFuYWdlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKHBhZ2UsIHBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIpKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQogICAgIDogbV9wYWdlKCZwYWdlKQogICAgICwgbV9w
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlEKCks
ICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
cGFnZS5wYWdlSUQoKSwgKnRoaXMpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4
dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwogICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50
ZXJmYWNlKSA9IHR1cGxlOwogCiAgICAgICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0
cik7CkBAIC0xMjUsMjAgKzEyNSwyMCBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiAgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKICAg
ICAKICAgICBpZiAobV9wYWdlKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSgpCiB7CiAgICAgQVNTRVJUKG1fcGFn
ZSk7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAgICBtX3BhZ2UgPSBudWxscHRyOwog
fQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29u
dGV4dElkKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7CiAgICAg
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5hZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7
CiAKICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5nQ29u
dGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKQEAgLTE0Nyw3ICsxNDcs
NyBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZQogICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUo
V1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7CiB9CiAKLVdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFj
ZVR1cGxlKCkpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTE1NSwyMCArMTU1
LDIwIEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiB9CiAKLVdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRfdCBj
b250ZXh0SWQpCitXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQogewog
ICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KSk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1
cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIHJldHVybiAqc3RkOjpnZXQ8
MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4
dElkKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
bW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGlu
dGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZh
Y2U7CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOwogCiAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5yZW1vdmVD
bGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CkBAIC0xODEsMTQgKzE4MSwxNCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElk
KQogICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50cy5h
ZGQoY29udGV4dElkLCAxKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKQogewogICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250
ZXh0SWQpKTsKIApAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCiAKICNwcmFn
bWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50OgogCi1ib29sIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAorYm9vbCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwpAQCAtMjE3LDcgKzIxNyw3IEBA
IGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4o
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVuCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlk
ZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZpZGVv
RnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQs
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAg
IEFTU0VSVChtX3BhZ2UpOwogICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwpAQCAtMjI3LDggKzIyNyw4IEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1l
bnQoSFRNTFZpZGVvRWxlCiAgICAgVU5VU0VEX1BBUkFNKGFkZFJlc3VsdCk7CiAgICAgQVNTRVJU
KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPT0gY29udGV4dElkKTsKIAotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CiAgICAgc3RkOjp0aWUobW9k
ZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogICAg
IGFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKICAgICBpZiAoIWludGVyZmFjZS0+bGF5
ZXJIb3N0aW5nQ29udGV4dCgpKQpAQCAtMjUwLDEwICsyNTAsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1M
VmlkZW9FbGUKIAogICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSA9IHZpZGVvRWxlbWVu
dC53ZWJraXRTdXBwb3J0c1ByZXNlbnRhdGlvbk1vZGUoSFRNTFZpZGVvRWxlbWVudDo6VmlkZW9Q
cmVzZW50YXRpb25Nb2RlOjpQaWN0dXJlSW5QaWN0dXJlKTsKICAgICAKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2Ny
ZWVuV2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPmNv
bnRleHRJRCgpLCB2aWRlb1JlY3QsIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgaW50ZXJm
YWNlLT5mdWxsc2NyZWVuTW9kZSgpLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChjb250ZXh0SWQsIGludGVyZmFjZS0+bGF5
ZXJIb3N0aW5nQ29udGV4dCgpLT5jb250ZXh0SUQoKSwgdmlkZW9SZWN0LCBtX3BhZ2UtPmRldmlj
ZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKSwgYWxsb3dzUGljdHVy
ZUluUGljdHVyZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQmIHZpZGVvRWxlbWVudCkKIHsKICAgICBBU1NFUlQobV9wYWdlKTsKICAgICBBU1NF
UlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKQEAgLTI2NywxMCAr
MjY3LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNj
cmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MCiAgICAgICAgIHJldHVybjsKIAogICAg
IGludGVyZmFjZS5zZXRJc0FuaW1hdGluZyh0cnVlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY29udGV4
dElkLCBpbmxpbmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
RXhpdEZ1bGxzY3JlZW4oY29udGV4dElkLCBpbmxpbmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCkp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1M
VmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQogewogI2lmIFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogICAgIEFTU0VSVChtX3Bh
Z2UpOwpAQCAtMjgxLDQwICsyODEsNDAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3IKIAogICAg
IGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwogCi0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2Ny
ZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShjb250ZXh0SWQsIHRhcmdldE1vZGUpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKGNvbnRleHRJ
ZCwgdGFyZ2V0TW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0odmlkZW9FbGVtZW50KTsKICAgICBVTlVTRURfUEFSQU0odGFyZ2V0TW9kZSk7CiAjZW5kaWYK
IH0KIAotI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0OgorI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0OgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVv
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
aGFzVmlkZW8pCiB7CiAgICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNvbnRleHRJ
ZCwgaGFzVmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNvbnRleHRJ
ZCwgaGFzVmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Y29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBG
bG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBpZiAobV9wYWdlKQotICAgICAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0
VmlkZW9EaW1lbnNpb25zKGNvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoY29udGV4dElkLCB2aWRlb0RpbWVuc2lvbnMp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OgorI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20g
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZp
bmlzaGVkV2l0aE1lZGlhKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RnVs
bHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkK
IHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtb2Rl
LCBmaW5pc2hlZFdpdGhNZWRpYSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1v
ZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQogewogICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAgICAg
UGxhdGZvcm1MYXllciogdmlkZW9MYXllciA9IFtDQUxheWVyIGxheWVyXTsKQEAgLTMzMywyOCAr
MzMzLDI4IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IgPSBt
X3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgW3ZpZGVvTGF5ZXIgc2V0VHJhbnNmb3Jt
OkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaG9zdGluZ1NjYWxlRmFjdG9yLCBob3N0aW5nU2NhbGVG
YWN0b3IsIDEpXTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ+IGludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpOwogCiAgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250
ZXh0KCktPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyPiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIAotICAgIG1vZGVsLT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyLCBbc3Ryb25nVGhpcywgdGhpcywgY29udGV4
dElkXSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKLSAgICAgICAgICAgIGlmIChzdHJvbmdU
aGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBz
dHJvbmdUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIodmlkZW9MYXllciwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNvbnRleHRJZF0gewor
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhp
cy0+bV9wYWdlKQorICAgICAgICAgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVj
dGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwogICAgIAog
ICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4g
aW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
bW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7CiAKICAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNl
KTsKQEAgLTM2OCw0MCArMzY4LDQwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0
ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdmlkZW9FbGVtZW50XSB7Ci0gICAgICAgIGlmIChz
dHJvbmdUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBzdHJvbmdUaGlzLT5leGl0VmlkZW9GdWxs
c2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQpOworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnRd
IHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVu
dCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhp
dEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKICAgICBzdGQ6OnRpZSht
b2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgCi0gICAgbW9kZWwtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oW3N0cm9uZ1RoaXMs
IGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0gewotICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgY29udGV4dElkLCBpbnRlcmZh
Y2UsIG1vZGVsXSB7Ci0gICAgICAgICAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
bmlsLCBbc3Ryb25nVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKLSAgICAgICAgICAgICAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywg
Y29udGV4dElkLCBpbnRlcmZhY2VdIHsKKyAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVkRm9ySW5s
aW5lVGhlbihbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7Cisg
ICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0
ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKKyAgICAgICAgICAgIG1vZGVs
LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQs
IGludGVyZmFjZV0geworICAgICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0gewog
ICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4
dCgpLT5zZXRSb290TGF5ZXIobnVsbHB0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnRl
cmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0cik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fcGFnZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQp
LCBzdHJvbmdUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBh
Z2VJRCgpKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9
KTsKICAgICB9KTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlk
Q2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKICAgICBz
dGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCk7CiAKICAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKQEAgLTQxOCwx
OSArNDE4LDE5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogICAgIGlmICghdmlkZW9FbGVtZW50IHx8ICF0
YXJnZXRJc0Z1bGxzY3JlZW4pCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyPiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB2aWRlb0VsZW1lbnQsIG1v
ZGVdIHsKLSAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fcGFnZSkKLSAgICAgICAgICAgIHN0cm9u
Z1RoaXMtPmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQs
IG1vZGUpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtw
cm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnQsIG1vZGVdIHsKKyAgICAgICAgaWYgKHByb3RlY3Rl
ZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmVudGVyVmlkZW9GdWxs
c2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQsIG1vZGUpOwogICAgIH0pOwogfQog
ICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0
eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4
dElkLCB1bnNpZ25lZCBncmF2aXR5KQogewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0
VmlkZW9MYXllckdyYXZpdHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkp
Z3Jhdml0eSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRWaWRlb0xheWVyR3Jhdml0
eSgoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKIH0KICAgICAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29u
dGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAg
IHJldHVybjsKQEAgLTQzOSwxMyArNDM5LDEzIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwKIAog
ICAgIGlmICghaXNQYWdlVmlzaWJsZSkKICAgICAgICAgbW9kZWwudmlkZW9FbGVtZW50KCktPnNj
cm9sbEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UHJlcGFyZWRUb1JldHVyblRvSW5s
aW5lKGNvbnRleHRJZCwgdHJ1ZSwgaW5saW5lVmlkZW9GcmFtZSgqbW9kZWwudmlkZW9FbGVtZW50
KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShjb250ZXh0
SWQsIHRydWUsIGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLnZpZGVvRWxlbWVudCgpKSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpz
ZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9h
dFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQog
ewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CiAg
ICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShj
b250ZXh0SWQpOwogCiAgICAgaWYgKHN0ZDo6aXNuYW4oYm91bmRzLngoKSkgfHwgc3RkOjppc25h
bihib3VuZHMueSgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy53aWR0aCgpKSB8fCBzdGQ6OmlzbmFu
KGJvdW5kcy5oZWlnaHQoKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315359</attachid>
            <date>2017-07-13 11:17:17 -0700</date>
            <delta_ts>2017-07-13 12:20:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174437-20170713111717.patch</filename>
            <type>text/plain</type>
            <size>729717</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzODQ3ZWU5NmI5OTI2
ODM4MGIzYWNmZGI2MGU3ZjBkOGI1MDMyOC4uNTA5ZTU2ZThhYjNiZmUwMzQ5YzBhMWZlNmJhMzJj
MDZhNTA3NDhhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1MCBAQAorMjAxNy0wNy0xMiAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVm
aXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50
ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFj
a1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVu
ZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFt
ZXNwYWNlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmguCisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6flBsYXliYWNrU2Vzc2lvbk1v
ZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojp+UGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlh
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpi
ZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0
b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5Q
bGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI6On5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgu
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6flZpZGVvRnVsbHNjcmVl
bk1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
LgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbS4KKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcyk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENs
aWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3Zl
Q2xpZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zp
c2libGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhh
c1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmguCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
LgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJh
bmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICgtW1dlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSBmdWxsc2NyZWVuSW50ZXJmYWNlXSk6CisgICAgICAgICgtW1dl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0p
OgorICAgICAgICAoY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckxheWVyIGZ1bGxzY3JlZW5JbnRlcmZhY2VdKToKKyAgICAgICAgKC1bV2ViQVZQ
bGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0pOgorICAgICAgICAoLVtXZWJBVlBs
YXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpdKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpjcmVhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIp
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNj
cmVlbk1vZGVsKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVs
bHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRU
b1N0YXJ0UGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVT
dG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dl
YkFWUGxheWVyQ29udHJvbGxlci5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZCk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnBhdXNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKToK
KyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmR1cmF0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpjdXJyZW50VGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRl
cnZhbCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxh
eUZhc3RSZXZlcnNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxz
Y3JlZW46bW9kZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRGaW5pc2hGdWxsc2NyZWVuOl0pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENs
ZWFudXBGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hh
bmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdl
c0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
Om11dGVkQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVu
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnBsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnBhdXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YmVnaW5TY3J1YmJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2Fi
bGVSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJ
bnRlcnZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxs
c2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJiaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjph
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0uCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6XSk6Cisg
ICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgaW52YWxpZGF0ZV0p
OgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIHNldFVwUElQ
Rm9yVmlkZW9WaWV3OndpdGhGcmFtZTppbldpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250
YWluZXI6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
cGlwU2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakMgcGlwRGlkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgcGlwQWN0aW9uUGxheTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25QYXVzZTpdKToKKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25TdG9wOl0pOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhck1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlk
ZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZWVrVG9UaW1lOnRvbGVyYW5jZUJlZm9yZTp0b2xl
cmFuY2VBZnRlcjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgYmVn
aW5Ub3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlciBlbmRUb3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOl0p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDdXJyZW50TGVnaWJs
ZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hY10pOgorICAgICAgICAo
LVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHRvZ2dsZVBsYXli
YWNrXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6
XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGlzUGxheWluZ10pOgor
ICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciB0b2dnbGVQaWN0dXJlSW5QaWN0
dXJlXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hY10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6XSk6IERlbGV0
ZWQuCisKIDIwMTctMDctMTEgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBOQVZJR0FUT1JfSFdDT05DVVJSRU5DWQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDE4
NGEyMTA3YTUyM2M5Zjg4ZTM0MTAzNmFhN2E3Mzg2MzEzMzI0MGMuLmJkYTNkMjkyMjRmMWI2ODEy
MDM1YWIzNzUzNGY5M2MzMzY3MWJmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNy0wNy0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXli
YWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
cmVtb3ZlcyB0aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxz
Y3JlZW4qIGFuZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAg
IFRoaXMgcHJlZml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUg
V2ViS2l0IG9yIFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZv
ck1lZGlhRWxlbWVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAg
ICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKwogMjAxNy0wNy0xMSAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIE5BVklHQVRPUl9IV0NPTkNVUlJF
TkNZCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggMDNkZTVjZGIwYjc3Yjg3ZjQwZTY0MzhiNjBkYjM4MjEzZmI4NzQy
YS4uN2UzZGQ3MzBjYThkMTM5ZTYyM2RjN2Q3MzU0MGUwOWEzMGQ2N2E3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI2MyBAQAorMjAxNy0wNy0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3Jl
ZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNs
YXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUg
YWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW06CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGlj
dHVyZUluUGljdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6dG9nZ2xlTXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnNldE11dGVkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVk
VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6flBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRD
bGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElE
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla2FibGVSYW5n
ZXNWZWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVD
b250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmZhc3RTZWVrKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5T
Y2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Ojp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbS4KKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4pOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxs
c2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpk
aWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5k
SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2V0dXBGdWxsc2NyZWVuV2l0aElEKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9EaW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXll
ckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNoQmFyKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV93
ZWFrUHRyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhdHRhY2hU
b1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKiBXZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxheWJhY2tTZXNzaW9u
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVz
c2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vz
cy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6bmV4dENvbnRleHRJZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZl
cmVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1
cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tD
b250cm9sc01hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Ojpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyYXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnNldE11dGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oLgorICAgICAgICAoV2ViS2l0OjpWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0uCisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVySG9zdGluZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpoYXNWaWRlb0NoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAgICAg
KFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Up
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCk6
CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRG
b3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVt
b3ZlQ2xpZW50Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpoYXNWaWRlb0NoYW5nZWQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0
OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAg
IChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51
bSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBSZW1vdmVkLgorCiAyMDE3LTA3LTExICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgTkFWSUdBVE9S
X0hXQ09OQ1VSUkVOQ1kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA5M2VjODYxOTRmNGY4NGU1NGQ3NmMwZjQ5ZDJlNzZlODc2MjNj
YTJmLi42MjIzMGZhNWRlMzJiY2FiMDNiYTkwZTFiZGJlNTUxZWMyZjI5OTc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjg1
LDggKzE2ODUsOCBAQAogCQkzRjgwMjAzNjFFOUU0N0MzMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzRjgwMjAzMTFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5j
cHAgKi87IH07CiAJCTNGODAyMDM3MUU5RTQ3QzUwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJl
RGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0Y4MDIwMzQxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyLmggKi87IH07CiAJCTNGODAyMDM4MUU5RTQ3QzkwMERFQzYxRCAvKiBDb3JlQXVkaW9D
YXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwICovOyB9OwotCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi87IH07Ci0JCTNGQkM0QUY0MTg5ODgx
NTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjIxODk4ODE1NjAw
NDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0ZCQzRBRjMxODk4ODE1NjAw
NDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OworCQkzRkJDNEFGNDE4
OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRjFGQTY2MUU3MzUwRkQwMEMx
MDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlLmNwcCAqLzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAx
IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNGQzQzNEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2Nr
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5
QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CkBA
IC0yNDc1LDExICsyNDc1LDExIEBACiAJCTUxRkI1NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Ns
b3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgKi87IH07CiAJ
CTUxRkI2N0RCMUFFNkI4MkIwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNjdE
OTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovOyB9
OwogCQk1MUZCNjdEQzFBRTZCODJGMDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI2
N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyMTMxRTVCMUM0
RjE1NzYwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMUU1QTFDNEYxNTYx
MDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovOyB9OworCQk1
MjEzMUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzFFNUEx
QzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLzsgfTsK
IAkJNTI2NzI0RjMxQ0IyRkVBRDAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3
MjRGMTFDQjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSAq
LzsgfTsKIAkJNTJCMEQ0QkUxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkQxQzU3RkQx
RTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QzEx
QzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQjZDOUMyMTVFM0Y0
REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJEMTVFM0Y0REYwMDY5MEIwNSAv
KiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJNTJCNkM5QzMxNUUzRjRERjAw
NjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJFMTVFM0Y0REYwMDY5MEIwNSAvKiBET01O
YW1lZEZsb3dDb2xsZWN0aW9uLmggKi87IH07CiAJCTUyQjZDOUM1MTVFM0Y0REYwMDY5MEIwNSAv
KiBOYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjZDOUMwMTVFM0Y0REYwMDY5MEIwNSAvKiBOYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCAqLzsgfTsKQEAgLTI0ODcsOSArMjQ4Nyw5IEBACiAJCTUyQ0NBOUUyMTVFM0Y2
MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5RTAxNUUzRjYyQzAwNTNDNzdG
IC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTUyQ0NBOUUzMTVFM0Y2
MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0NBOUUxMTVFM0Y2MkMwMDUzQzc3RiAv
KiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJNTJENUExOEYxQzU0NTkyMzAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gKi87IH07Ci0JCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi87IH07CisJCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQubW0gKi87IH07CiAJCTUyRTJDQUZDMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRp
YVByb2R1Y2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkUyQ0FGQjE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRjEwODY1MTYyQjZEQTQw
MDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhl
ZENvbnRlbnRDaGVja2VyLmNwcCAqLzsgfTsKIAkJNTJGMTA4NjYxNjJCNkRBODAwOUFDODFFIC8q
IE1peGVkQ29udGVudENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVj
a2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTYyMDAsMTUgKzYyMDAsMTUgQEAKIAkJQ0RBMDdGQkUxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3Rl
bVNsZWVwTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTA3RkJDMThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RBMDdG
QzExOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwN0ZCRjE4RTBBMjJCMDA0
Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSAqLzsgfTsKIAkJQ0RBMDdGQzIxOEUw
QTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA3RkMwMThFMEEyMkIwMDQ2OTlGQSAv
KiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmggKi87IH07Ci0JCUNEQTI5QTA5MUNCRDk5RjQwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUNEQTI5QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSAqLzsgfTsKLQkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLzsgfTsKLQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKKwkJQ0RBMjlBMDkxQ0JEOTlGNDAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMEUx
Q0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEMxQ0JE
OUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9
OworCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
NDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovOyB9
OworCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMzAx
Q0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkYxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OwogCQlD
REEyOUEzMTFDQkY3NERBMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkQxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAqLzsgfTsKLQkJQ0RBMjlBMzIx
Q0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRTFDQkY3
M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEzMjFDQzAx
QTk1MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJFMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTc5ODI0MTcwQTI1ODMwMEQ0NUM1
NSAvKiBBdWRpb1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBNzk4MjMxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAg
Ki87IH07CiAJCUNEQTc5ODI3MTcwQTI3OTEwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyNTE3
MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICovOyB9OwogCQlDREE3OTgyQTE3
MEEzRDAwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTkzMjYsOCArOTMyNiw4IEBACiAJCTNGODAyMDMyMUU5RTM4MUQwMERFQzYxRCAvKiBDb3Jl
QXVkaW9DYXB0dXJlRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
cmVBdWRpb0NhcHR1cmVEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4
MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4MDIwMzQx
RTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVF
MzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU1ZpZXdw
b3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE3MTU5RDlB
NTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTNGRkZGOUFCMTU5RDlCMDYwMDIwQkJENSAvKiBWaWV3cG9ydFN0eWxlUmVz
b2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRT
dHlsZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjI5LDEy
ICsxMDIyOSwxMiBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1
QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50
RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMTFD
QjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYyMUNCMkZERjYw
MDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QkQxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRm
b3JtVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRDE1RTNGNERGMDA2
OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkUxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRjE1
RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDI0NCw5ICsxMDI0NCw5IEBACiAJCTUyQ0NBOUUxMTVFM0Y2MkMwMDUz
Qzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyRDVBMThFMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE0MUM1NzQ4
ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBNTFD
NTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQTYxQzU3NDg4OTAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRTJDQUZCMTlGRjAyMDcw
MDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhUHJvZHVjZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGMTA4
NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWl4ZWRDb250ZW50Q2hlY2tlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhl
ZENvbnRlbnRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1peGVk
Q29udGVudENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzM4LDE2
ICsxNDczOCwxNiBAQAogCQlDREEwN0ZCQzE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBM
aXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1TbGVlcExp
c3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTA3RkJGMThFMEEyMkIw
MDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQzAxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNs
ZWVwTGlzdGVuZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVt
U2xlZXBMaXN0ZW5lck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEw
ODFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEy
OUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RB
MjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
QTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExNDFD
QkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExNTFDQkRBNTZDMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyQzFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5
ZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFWUGxh
eWVyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyRDFD
QkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdWRpb1Nlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBNzk4MjMx
NzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBdWRpb1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uSU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkxMzgsMTQgKzE5MTM4LDE0IEBACiAJ
CQkJRTFBMzE2MkMxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5tbSAqLywKIAkJCQlDRDU4OTZFMDFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIuaCAqLywKIAkJCQlDRDU4OTZERjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIubW0gKi8sCi0JCQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovLAotCQkJCUNEQTI5QTE0MUNC
REE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8sCisJ
CQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oICovLAorCQkJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRDgyMDMwNzEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLywKIAkJCQlDRDgyMDMwODEz
OTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5o
ICovLAogCQkJCUNEODIwMzA5MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLm1tICovLAotCQkJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLywKLQkJCQk1MjEzMUU1QTFDNEYx
NTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovLAorCQkJ
CTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
aCAqLywKKwkJCQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLm1tICovLAogCQkJCUNEODIwMzBFMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5k
b3dBbmltYXRpb24uaCAqLywKIAkJCQlDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLm1tICovLAogCQkJCTkzODBGNDc3MDlBMTFBQ0MwMDFGREIzNCAvKiBXaWRn
ZXRNYWMubW0gKi8sCkBAIC0yMTE1MCwxNCArMjExNTAsMTQgQEAKIAkJCQlGRTBEODRFQTEwNDg0
MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gKi8sCiAJCQkJRjQ4MjIzMEYxRTM4NjlCODAwNjZG
Qzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaCAqLywKIAkJCQlGNDgyMjMwRTFFMzg2
OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbSAqLywKLQkJCQlDREEy
OUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCAqLywKLQkJCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0gKi8sCisJCQkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8sCisJCQkJQ0RBMjlBMkYxQ0JGNzNGQzAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovLAogCQkJCTFGODc1
NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAq
LywKIAkJCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFj
a2VyQ2xpZW50Lm1tICovLAogCQkJCTNGNDJCMzFCMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLywKIAkJCQkzRjQyQjMxQzE4ODExOTFCMDAy
NzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovLAotCQkJCTNG
QkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oICovLAotCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLywKKwkJCQkzRkJDNEFGMTE4OTg4MTU2
MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJRTQ1
MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gaW9zOwpAQCAtMjEyMDQsMTQgKzIxMjA0LDE0IEBACiAJCQkJQ0RDOTc5RjMxQzQ5OEMwOTAw
REI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLmggKi8sCiAJCQkJQ0RDOTc5RjIxQzQ5OEMw
OTAwREI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLm1tICovLAogCQkJCTVERkVCQUI2MTg1
OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKLQkJCQlDREEyOUEwODFD
QkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8sCi0JCQkJ
Q0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8s
Ci0JCQkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50LmggKi8sCi0JCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovLAotCQkJCTUyQjBENEJGMUM1N0ZE
NjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAotCQkJ
CTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICov
LAotCQkJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oICovLAotCQkJCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLywKKwkJCQlDREEyOUEwODFDQkQ5
OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8sCisJCQkJQ0RBMjlB
MEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8sCisJCQkJQ0RB
MjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
LmggKi8sCisJCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lm1tICovLAorCQkJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAorCQkJCTUyRDVBMUE0MUM1NzQ4ODkw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovLAorCQkJCTUyRDVBMUE1MUM1NzQ4
ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovLAorCQkJ
CTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzAxMTgsMTEgKzMwMTE4LDExIEBACiAJCQkJMDcwOUQ3OTMxQUU1NTU3RTAw
NEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxQTMxNjJEMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNENTg5NkUyMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMDkxQ0JEOTlG
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQlD
REEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMDkxQ0JE
OTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEw
QjFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZF
IC8qIFdlYlNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1
MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNTY5RDFCMEQ3RTJCODIwMDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDEzOSwxNCArMzAxMzksMTQgQEAKIAkJCQkxRjg3NTZCMjFFMjJD
MzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BM
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkIwRDRDMDFDNTdGRDY2
MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q4MjAzMEExMzk1QUI2QTAwRjk1NkM2
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTNG
NDJCMzFEMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBDMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkz
RkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyRDVBMUE3
MUM1NzQ4OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzRkJDNEFGNDE4OTg4MTU2MDA0
NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRDVBMUE3MUM1NzQ4OUQwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQTgxQzU3NDhBMzAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGMTIxNzFGNjE2QThDRjBCMDAwMDUzQ0EgLyogV2ViVlRURWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjEwQjY5ODAxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRv
a2VuLmggaW4gSGVhZGVycyAqLywKQEAgLTMzODM1LDkgKzMzODM1LDkgQEAKIAkJCQkwNzA5RDc5
MjFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMUEzMTYyRTEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q1ODk2RTExQ0QyQjE1MTAwQjNC
Q0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5
QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTE2
MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291
cmNlcyAqLywKKwkJCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0FGMzQ4MjBBNkM0MDUy
MDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdBQUJE
MUExNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
N0FBQkQxRDE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMzODUzLDkgKzMzODUzLDkgQEAKIAkJCQlDRDgyMDMwQjEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTNGNDJCMzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
QVZLaXQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDgyMDMwRDEzOTVBQjZBMDBGOTU2QzYgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk1
MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MjEz
MUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjEyMTcxRjUxNkE4
Q0VEMjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQy
MUE4MDIxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMTBCNjk4MTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXgg
MjY2MDI2OTI4ZjM2NWIzY2Y2ODg1M2MzNTQ4YzA4NDA0YjFiZmIwNS4uMGQ0NjExYzUwOTYyZWI4
ODEwYTIxYzI0ZjlkY2U5MWYyMzM2YWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKICNp
bmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCkBAIC0xNTYsNyArMTU2LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1
ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCIKICNlbmRpZgogCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAu
Li4pIFJFTEVBU0VfTE9HX0lGKGRvY3VtZW50KCkucGFnZSgpICYmIGRvY3VtZW50KCkucGFnZSgp
LT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTWVkaWEsICIlcCAtIEhUTUxNZWRpYUVsZW1l
bnQ6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAKaW5kZXggMzZjZjQ5N2I5OWI4OTdhOGFhZGRlYWY2MjZiOWFhYjM4ZmZj
MmJhMS4uNjU4OTVmOTM4OTdmMDY4NDE0N2I5ZDBjY2YxNTcwY2I3OTY4N2NjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC00OCw3ICs0OCw3IEBACiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRl
ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDAzNzJhZmM3NTU5NjFlMWYxMjBlZWJiNmQyOTRi
ODQwYWZmMjNiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgVGltZVJhbmdlczsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Uo
KSB7IH07CisgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpID0gMDsKK307CisKK30K
KworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODc0NDE1NzQ2
OWEyYTdiMmU3NjM5ZTFmOWEzYWU3MTRkZjI4NjQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaApAQCAtMCwwICsx
LDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGltZVJh
bmdlczsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Oworc3RydWN0IE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lk
IGFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGJlZ2luU2NydWJiaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJpbmco
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90
IGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZU11dGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRNdXRlZChib29sKSA9IDA7CisKKyAgICBlbnVtIEV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHsgVGFyZ2V0VHlwZU5vbmUsIFRhcmdldFR5cGVBaXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQg
fTsKKworICAgIHZpcnR1YWwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBk
b3VibGUgY3VycmVudFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgYnVmZmVy
ZWRUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmPFRpbWVS
YW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIHNl
ZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1aW50NjRfdCBsZWdp
YmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBleHRl
cm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNdXRlZCgpIGNvbnN0ID0gMDsKK307
CisKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5QbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1l
Q2hhbmdlZChkb3VibGUgLyogY3VycmVudFRpbWUgKi8sIGRvdWJsZSAvKiBhbmNob3JUaW1lICov
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgLyogcGxh
eWJhY2tTdGFydGVkVGltZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHJhdGVDaGFuZ2VkKGJv
b2wgLyogaXNQbGF5aW5nICovLCBmbG9hdCAvKiBwbGF5YmFja1JhdGUgKi8pIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJs
ZSAvKiBsYXN0TW9kaWZpZWQgKi8sIGRvdWJsZSAvKiBsaXZlSW50ZXJ2YWwgKi8pIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0
ZWRJbmRleCAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlv
bnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVk
ICovLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNv
bnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCB2
b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIHsgfQorfTsKKworfQorCisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E3
MzE0M2I0YmY5YmRlZTM3MzgyNjlkMTgyMDFiODlkMzBkMmIxZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1v
ZGVsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEF1ZGlvVHJhY2s7CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgVGV4dFRyYWNrOwor
Y2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2RlbCwgcHVi
bGljIEV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpKTsKKyAgICB9Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFF
bGVtZW50Kik7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2
ZW50KikgZmluYWw7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9t
aWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhz
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExp
c3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRD
bGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcGxheSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGF1
c2UoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBlbmRTY2FubmluZygpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOworCisgICAgZG91YmxlIGR1cmF0aW9u
KCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWw7Cisg
ICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQbGF5aW5n
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWw7CisgICAg
UmVmPFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWw7CisgICAgZG91Ymxl
IHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBjYW5QbGF5
RmFzdFJldmVyc2UoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWw7CisgICAgdWludDY0
X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBm
aW5hbDsKKyAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAg
IEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkg
Y29uc3QgZmluYWw7CisgICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VO
YW1lKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsOworCitwcm90
ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7Cisg
ICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnRO
YW1lcygpOworICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKKwor
ICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBib29sIG1f
aXNMaXN0ZW5pbmcgeyBmYWxzZSB9OworICAgIEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQqPiBtX2NsaWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2li
bGVUcmFja3NGb3JNZW51OworICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9U
cmFja3NGb3JNZW51OworCisgICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdDsK
KyAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOworICAgIHZvaWQgdXBkYXRl
TWVkaWFTZWxlY3Rpb25JbmRpY2VzKCk7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzRkZmY3MDEwMjRiM2JkOGIyYTA5MWY2
ZjY1NjdjYWU4NGUzMWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTAsMCArMSw1
MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2lt
cG9ydCAiQXVkaW9UcmFja0xpc3QuaCIKKyNpbXBvcnQgIkV2ZW50LmgiCisjaW1wb3J0ICJFdmVu
dExpc3RlbmVyLmgiCisjaW1wb3J0ICJFdmVudE5hbWVzLmgiCisjaW1wb3J0ICJIVE1MRWxlbWVu
dC5oIgorI2ltcG9ydCAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgor
I2ltcG9ydCAiTWVkaWFDb250cm9sc0hvc3QuaCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0
aW9uLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQYWdlR3JvdXAuaCIKKyNpbXBvcnQg
IlRleHRUcmFja0xpc3QuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgPFF1YXJ0
ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQoKQorICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3Rl
bmVyVHlwZSkKK3sKK30KKworUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5QbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1faXNMaXN0ZW5p
bmcpIHsKKyAgICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMo
KSkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZSwgKnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tz
KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBm
YWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkucmVtb3ZlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7CisgICAgfQor
ICAgIG1faXNMaXN0ZW5pbmcgPSBmYWxzZTsKKworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlc2V0UGxheWJhY2tTZXNzaW9uU3RhdGUoKTsKKworICAg
IG1fbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50
KSB7CisgICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkp
CisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUs
ICp0aGlzLCBmYWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLmFk
ZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOwor
ICAgICAgICBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX2lzTGlzdGVu
aW5nID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxs
KCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVF
dmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2
ZW50KQoreworICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC0+dHlwZSgpKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNv
bnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit7CisgICAgaWYgKG1fY2xpZW50cy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgYWxsID0gZXZlbnROYW1lID09
IGV2ZW50TmFtZUFsbCgpOworCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0g
ZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpIHsKKyAgICAgICAgZG91YmxlIGR1cmF0
aW9uID0gdGhpcy0+ZHVyYXRpb24oKTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xp
ZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKKyAg
ICAgICAgLy8gVGhlc2UgaXMgbm8gc3RhbmRhcmQgZXZlbnQgZm9yIG1pbkZhc3RSZXZlcnNlUmF0
ZUNoYW5nZTsgZHVyYXRpb24gY2hhbmdlIGlzIGEgcmVhc29uYWJsZSBwcm94eSBmb3IgaXQuCisg
ICAgICAgIC8vIEl0IGhhcHBlbnMgZXZlcnkgdGltZSBhIG5ldyBpdGVtIGJlY29tZXMgcmVhZHkg
dG8gcGxheS4KKyAgICAgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UgPSB0aGlzLT5jYW5QbGF5
RmFzdFJldmVyc2UoKTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAg
ICAgICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJl
dmVyc2UpOworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2
ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5wbGF5aW5nRXZlbnQpIHsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykK
KyAgICAgICAgICAgIGNsaWVudC0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tT
dGFydGVkVGltZSgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFt
ZSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZl
bnROYW1lcygpLnBsYXlFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygp
LnJhdGVjaGFuZ2VFdmVudCkgeworICAgICAgICBib29sIGlzUGxheWluZyA9IHRoaXMtPmlzUGxh
eWluZygpOworICAgICAgICBmbG9hdCBwbGF5YmFja1JhdGUgPSB0aGlzLT5wbGF5YmFja1JhdGUo
KTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNs
aWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOworICAgIH0KKworICAg
IGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRl
RXZlbnQpIHsKKyAgICAgICAgYXV0byBjdXJyZW50VGltZSA9IHRoaXMtPmN1cnJlbnRUaW1lKCk7
CisgICAgICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAg
ICAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JU
aW1lKTsKKyAgICB9CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkucHJvZ3Jlc3NFdmVudCkgeworICAgICAgICBhdXRvIGJ1ZmZlcmVkVGltZSA9IHRo
aXMtPmJ1ZmZlcmVkVGltZSgpOworICAgICAgICBhdXRvIHNlZWthYmxlUmFuZ2VzID0gdGhpcy0+
c2Vla2FibGVSYW5nZXMoKTsKKyAgICAgICAgYXV0byBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9k
aWZpZWRUaW1lID0gdGhpcy0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpOwor
ICAgICAgICBhdXRvIGxpdmVVcGRhdGVJbnRlcnZhbCA9IHRoaXMtPmxpdmVVcGRhdGVJbnRlcnZh
bCgpOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgICAg
ICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKKyAgICAgICAgICAg
IGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBzZWVrYWJsZVRp
bWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLmFkZHRyYWNrRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5y
ZW1vdmV0cmFja0V2ZW50KQorICAgICAgICB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsK
KworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS53ZWJr
aXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KSB7CisgICAgICAg
IGJvb2wgZW5hYmxlZCA9IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCk7CisgICAgICAgIEV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSgpOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGV4dGVybmFsUGxh
eWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCk7CisKKyAgICAgICAgYm9vbCB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZCA9IHRoaXMtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCk7
CisKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgeworICAgICAgICAgICAg
Y2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2Nh
bGl6ZWREZXZpY2VOYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFdlIGRvbid0IGNhbGwgdXBkYXRlTWVkaWFTZWxlY3Rpb25J
bmRpY2VzKCkgaW4gdGhlIGFsbCBjYXNlLCBzaW5jZQorICAgIC8vIHVwZGF0ZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucygpIHdpbGwgYWxzbyB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpbmRpY2VzLgorICAg
IGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50KQorICAgICAgICB1cGRh
dGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKTsKKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZl
bnROYW1lID09IGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCkgeworICAgICAgICBmb3Ig
KGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5n
ZWQoaXNNdXRlZCgpKTsKKyAgICB9Cit9Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sK
KyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRz
LmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7Cisg
ICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJl
bW92ZSgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6cGxheSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxl
bWVudC0+cGxheSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxl
bWVudC0+cGF1c2UoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAg
IG1fbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQoreworICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygp
Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5k
U2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAg
ICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQorewor
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVr
KHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdp
blNjYW5uaW5nRm9yd2FyZCgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBt
X21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkZv
cndhcmQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdp
blNjYW5uaW5nQmFja3dhcmQoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpC
YWNrd2FyZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVu
ZFNjYW5uaW5nKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5lbmRTY2FubmluZygpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVjdGVkQXVkaW9J
bmRleCkKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsg
aSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJs
ZWQoaSA9PSBzZWxlY3RlZEF1ZGlvSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4
dFRyYWNrKiB0ZXh0VHJhY2s7CisgICAgaWYgKGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVu
dS5zaXplKCkpCisgICAgICAgIHRleHRUcmFjayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnVbc3Rh
dGljX2Nhc3Q8c2l6ZV90PihpbmRleCldLmdldCgpOworICAgIGVsc2UKKyAgICAgICAgdGV4dFRy
YWNrID0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKKworICAgIG1fbWVkaWFFbGVt
ZW50LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2spOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAg
ICBpZiAobV9tZWRpYUVsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgPT0gTWVkaWFQbGF5ZXJFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgIGVsc2UKKyAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmVudGVyRnVsbHNjcmVlbihNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnRvZ2dsZU11dGVkKCkKK3sKKyAgICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRl
ZCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRNdXRlZChtdXRlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpCit7CisgICAgaWYgKCFtX21lZGlhRWxl
bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGNhcHRpb25QcmVmZXJl
bmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9u
UHJlZmVyZW5jZXMoKTsKKyAgICBhdXRvJiB0ZXh0VHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPnRl
eHRUcmFja3MoKTsKKyAgICBpZiAodGV4dFRyYWNrcy5sZW5ndGgoKSkKKyAgICAgICAgbV9sZWdp
YmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JN
ZW51KCZ0ZXh0VHJhY2tzKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUuY2xlYXIoKTsKKworICAgIGF1dG8mIGF1ZGlvVHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPmF1
ZGlvVHJhY2tzKCk7CisgICAgaWYgKGF1ZGlvVHJhY2tzLmxlbmd0aCgpID4gMSkKKyAgICAgICAg
bV9hdWRpb1RyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0
Rm9yTWVudSgmYXVkaW9UcmFja3MpOworICAgIGVsc2UKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zv
ck1lbnUuY2xlYXIoKTsKKworICAgIGF1dG8gYXVkaW9PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKTsKKyAgICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCgpOworICAgIGF1dG8gbGVnaWJsZU9wdGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zKCk7CisgICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4KCk7CisKKyAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgIGNs
aWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvT3B0aW9ucywgYXVk
aW9JbmRleCk7CisgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQobGVnaWJsZU9wdGlvbnMsIGxlZ2libGVJbmRleCk7CisgICAgfQorfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGlj
ZXMoKQoreworICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7
CisgICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CisK
KyAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgIGNsaWVudC0+YXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChhdWRpb0luZGV4KTsKKyAgICAgICAgY2xpZW50
LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobGVnaWJsZUluZGV4KTsKKyAgICB9
Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tT
dGFydGVkVGltZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrU3RhcnRlZFRp
bWUoKTsKK30KKworY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQoreworICAgIC8vIEZJWE1FKDE1
NzQ1Mik6IFJlbW92ZSB0aGUgcmlnaHQtaGFuZCBjb25zdHJ1Y3RvciBub3RhdGlvbiBvbmNlIE5l
dmVyRGVzdHJveWVkIHN1cHBvcnRzIGluaXRpYWxpemVyX2xpc3RzLgorICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gbmFtZXMgPSBWZWN0b3I8QXRvbWljU3Ry
aW5nPih7CisgICAgICAgIGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50LAorICAgICAg
ICBldmVudE5hbWVzKCkucGF1c2VFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnBsYXlFdmVu
dCwKKyAgICAgICAgZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCwKKyAgICAgICAgZXZlbnRO
YW1lcygpLnRpbWV1cGRhdGVFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnByb2dyZXNzRXZl
bnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50LAorICAgICAgICBldmVudE5h
bWVzKCkucmVtb3ZldHJhY2tFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnZvbHVtZWNoYW5n
ZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0
aXN3aXJlbGVzc2NoYW5nZWRFdmVudCwKKyAgICB9KTsKKyAgICByZXR1cm4gbmFtZXMuZ2V0KCk7
Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpldmVudE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGV2ZW50TmFtZUFsbCgiYWxsRXZlbnRzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIGV2ZW50TmFtZUFsbDsKK30KKworZG91YmxlIFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYg
KCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpIDog
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKK30KKworZG91YmxlIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjdXJyZW50VGltZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkg
OiAwOworfQorCitkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZl
cmVkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVs
ZW1lbnQtPm1heEJ1ZmZlcmVkVGltZSgpIDogMDsKK30KKworYm9vbCBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6aXNQbGF5aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQgPyAhbV9tZWRpYUVsZW1lbnQtPnBhdXNlZCgpIDogZmFsc2U7Cit9CisKK2Zsb2F0
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAor
eworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1Jh
dGUoKSA6IDA7Cit9CisKK1JlZjxUaW1lUmFuZ2VzPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7
Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVU
aW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRp
bWUoKSA6IDA7Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQg
PyBtX21lZGlhRWxlbWVudC0+bGl2ZVVwZGF0ZUludGVydmFsKCkgOiAwOworfQorICAgIAorYm9v
bCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWlu
RmFzdFJldmVyc2VSYXRlKCkgPCAwLjAgOiBmYWxzZTsKK30KKworVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4gYXVkaW9PcHRpb25zOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm4gYXVkaW9PcHRpb25zOwor
CisgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50
KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOworCisgICAgYXVkaW9PcHRp
b25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBtX2F1ZGlvVHJhY2tzRm9yTWVudSkKKyAgICAg
ICAgYXVkaW9PcHRpb25zLnVuY2hlY2tlZEFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFT
ZWxlY3Rpb25PcHRpb25Gb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSk7CisKKyAgICByZXR1cm4g
YXVkaW9PcHRpb25zOworfQorCit1aW50NjRfdCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgaWYgKG1fYXVkaW9UcmFja3NGb3JNZW51W2luZGV4XS0+ZW5hYmxlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpOworfQorCitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxl
Z2libGVPcHRpb25zOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1l
bnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7CisK
KyAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CisKKyAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9yTWVudSkKKyAgICAgICAgbGVnaWJsZU9wdGlvbnMu
YXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRy
YWNrLmdldCgpKSk7CisKKyAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Cit9CisKK3VpbnQ2NF90
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QKK3sKKyAgICB1aW50NjRfdCBzZWxlY3RlZEluZGV4ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgIHVpbnQ2NF90IG9mZkluZGV4ID0gMDsKKyAg
ICBib29sIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IGZhbHNlOworCisgICAgYXV0byBob3N0ID0g
bV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSA6IG51
bGxwdHI7CisKKyAgICBpZiAoIWhvc3QpCisgICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4Owor
CisgICAgQXRvbWljU3RyaW5nIGRpc3BsYXlNb2RlID0gaG9zdC0+Y2FwdGlvbkRpc3BsYXlNb2Rl
KCk7CisgICAgVGV4dFRyYWNrKiBvZmZJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7
CisgICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVBdXRvbWF0
aWNJdGVtKCk7CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9sZWdpYmxl
VHJhY2tzRm9yTWVudS5zaXplKCk7IGluZGV4KyspIHsKKyAgICAgICAgYXV0byYgdHJhY2sgPSBt
X2xlZ2libGVUcmFja3NGb3JNZW51W2luZGV4XTsKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0
ZW0pCisgICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OworCisgICAgICAgIGlmICh0cmFjayA9
PSBhdXRvbWF0aWNJdGVtICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0OjphdXRv
bWF0aWNLZXl3b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAg
ICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZGlzcGxheU1vZGUgIT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdv
cmQoKSAmJiB0cmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgeworICAg
ICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAgICAgICAgICAgdHJhY2tNZW51SXRl
bVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvZmZJdGVtICYm
ICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hv
c3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpCisgICAgICAgIHNlbGVjdGVkSW5kZXggPSBvZmZJbmRl
eDsKKworICAgIHJldHVybiBzZWxlY3RlZEluZGV4OworfQorCitib29sIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT53ZWJraXRDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1vZGVsOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRp
YUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQorICAgICAg
ICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7CisKKyAgICBzd2l0Y2ggKG1fbWVkaWFFbGVtZW50LT5t
ZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZVR5cGUoKSkgeworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVGFyZ2V0VHlw
ZU5vbmU7CisgICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6Tm9uZToKKyAg
ICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOworICAgIGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6
OkRldmljZVR5cGU6OkFpcnBsYXk6CisgICAgICAgIHJldHVybiBUYXJnZXRUeXBlQWlyUGxheTsK
KyAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpUdm91dDoKKyAgICAgICAg
cmV0dXJuIFRhcmdldFR5cGVUVk91dDsKKyAgICB9Cit9CisKK1N0cmluZyBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUo
KSBjb25zdAoreworICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVk
aWFDb250cm9sc0hvc3QoKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNv
bnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CisgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7Cit9CisKK2Jvb2wgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tdXRlZCgpIDogZmFsc2U7Cit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDdkYzgxNWRi
MTMwNjA2NDlmNDllOTQyNWU5MDE4ZjUzNzNiNjZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgeyB9OworICAgIHZpcnR1
YWwgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4o
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSA9IDA7Cit9OworCit9
CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9W
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzg0OWZjMjBkYTBjYjQyYmQ5Mjc2MTdm
MTQxOGY5Yjc3MzBjMjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaApAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjcHJhZ21hIG9uY2UKKwor
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQ7
CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5W
aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKT0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCkgPSAwOworICAgIGVudW0gVmlk
ZW9HcmF2aXR5IHsgVmlkZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Qs
IFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6
ZSYpID0gMDsKK307CisKK1dFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNQaWN0dXJlSW5QaWN0
dXJlKCk7CisgICAgCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jYzdkYjU2NzkyMTQ1N2U1OGZhYzMzNjQ4YTFhNTM2MDZkNmU0NGIxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFU
Rk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1MYXllci5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXVkaW9UcmFjazsKK2NsYXNzIEhU
TUxWaWRlb0VsZW1lbnQ7CitjbGFzcyBUZXh0VHJhY2s7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKSk7CisgICAgfQorICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopOworICAgIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9FbGVt
ZW50LmdldCgpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihQbGF0Zm9ybUxheWVyKiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIgPSBbXSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2FpdEZvclByZXBhcmVk
Rm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9
IFtdIHsgfSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVFdmVudChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqKSBvdmVycmlkZTsK
KyAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqPih0
aGlzKSA9PSAmcmhzOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0g
ZmFsc2UpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckZy
YW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRl
b0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Zpc2li
bGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgdmlkZW9E
aW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0K
KyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9oYXNWaWRlbzsgfQorCisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0
SGFzVmlkZW8oYm9vbCk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoY29uc3QgRmxvYXRT
aXplJik7CisKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2Jz
ZXJ2ZWRFdmVudE5hbWVzKCk7CisgICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFt
ZUFsbCgpOworCisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVtZW50Owor
ICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyOworICAg
IGJvb2wgbV9pc0xpc3RlbmluZyB7IGZhbHNlIH07CisgICAgSGFzaFNldDxWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKKyAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9
OworICAgIEZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsKKyAgICBGbG9hdFJlY3QgbV92aWRl
b0ZyYW1lOworICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9y
TWVudTsKKyAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVu
dTsKK307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDgxNmVhOWNiZjE3NTY1MTg1YjBlYzY5ZWIxYzVhYzZlZDgzMmE4OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
IgorCisjaW1wb3J0ICJET01XaW5kb3cuaCIKKyNpbXBvcnQgIkhpc3RvcnkuaCIKKyNpbXBvcnQg
IkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCisjaW1wb3J0ICJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3Jl
QW5pbWF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0V2ZW50TGlzdGVuZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVt
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dFRy
YWNrTGlzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZl
bnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCit7Cit9CisKK1ZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQor
eworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Vs
ZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQoreworICAgIGlmIChtX3ZpZGVv
RWxlbWVudCA9PSB2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKKyAg
ICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOwor
CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAgIG1f
dmlkZW9FbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNl
KTsKKyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisgICAgbV92aWRlb0VsZW1l
bnQgPSB2aWRlb0VsZW1lbnQ7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAg
IG1fdmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNl
KTsKKyAgICAgICAgbV9pc0xpc3RlbmluZyA9IHRydWU7CisgICAgfQorCisgICAgdXBkYXRlRm9y
RXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKK3sKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZl
bnQtPnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQor
eworICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxs
CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpIHsKKyAg
ICAgICAgc2V0SGFzVmlkZW8obV92aWRlb0VsZW1lbnQpOworICAgICAgICBzZXRWaWRlb0RpbWVu
c2lvbnMobV92aWRlb0VsZW1lbnQgPyBGbG9hdFNpemUobV92aWRlb0VsZW1lbnQtPnZpZGVvV2lk
dGgoKSwgbV92aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpIDogRmxvYXRTaXplKCkpOworICAg
IH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9G
dWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciogdmlkZW9MYXllciwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgPT0gdmlkZW9MYXllcikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2
aWRlb0xheWVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXll
ciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLCAwKV07CisjZWxzZQorICAgIFttX3ZpZGVv
RnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAuNSwgMC41KV07Cisj
ZW5kaWYKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3VuZHM6bV92aWRlb0ZyYW1l
XTsKKyAgICAKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50KSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3ZpZGVvRWxlbWVudC0+
c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghbV92aWRlb0VsZW1lbnQp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fdmlkZW9FbGVtZW50LT53YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQoreworICAg
IGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSAh
PSBtb2RlKQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7
CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgZmluaXNoZWRXaXRoTWVkaWEgJiYgbW9kZSA9
PSBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSkgeworICAgICAgICBp
ZiAobV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgIGlmIChET01XaW5kb3cqIHdpbmRvdyA9IG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgp
LmRvbVdpbmRvdygpKSB7CisgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnkqIGhpc3RvcnkgPSB3
aW5kb3ctPmhpc3RvcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS0+YmFjaygpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7
CisgICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBz
ZXRCb3VuZHM6Q0dSZWN0KHJlY3QpXTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAg
IG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHko
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQoreworICAgIE1lZGlh
UGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jhdml0eSA9PSBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXll
cjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gVmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKKyAgICAgICAgdmlkZW9HcmF2
aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlm
IChncmF2aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3RGaWxsKQorICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5
UmVzaXplQXNwZWN0RmlsbDsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIAorICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZp
ZGVvR3Jhdml0eSk7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOworCisg
ICAgaWYgKCFzRXZlbnROYW1lcy5nZXQoKS5zaXplKCkpCisgICAgICAgIHNFdmVudE5hbWVzLmdl
dCgpLmFwcGVuZChldmVudE5hbWVzKCkucmVzaXplRXZlbnQpOworICAgIHJldHVybiBzRXZlbnRO
YW1lcy5nZXQoKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7CisgICAgcmV0dXJu
IHNFdmVudE5hbWVBbGw7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKK3sKKyAgICBpZiAobV92aWRlb0VsZW1l
bnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9G
dWxsc2NyZWVuTW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OmFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAg
IEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRk
KCZjbGllbnQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpy
ZW1vdmVDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBB
U1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVtb3Zl
KCZjbGllbnQpOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpp
c1Zpc2libGUoKSBjb25zdAoreworICAgIGlmICghbV92aWRlb0VsZW1lbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChQYWdlKiBwYWdlID0gbV92aWRlb0VsZW1lbnQtPmRvY3Vt
ZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm4gcGFnZS0+aXNWaXNpYmxlKCk7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldEhhc1ZpZGVvKGJvb2wgaGFzVmlkZW8pCit7CisgICAgaWYgKGhhc1ZpZGVvID09IG1faGFz
VmlkZW8pCisgICAgICAgIHJldHVybjsKKworICAgIG1faGFzVmlkZW8gPSBoYXNWaWRlbzsKKwor
ICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmhhc1Zp
ZGVvQ2hhbmdlZChtX2hhc1ZpZGVvKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6c2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1l
bnNpb25zKQoreworICAgIGlmIChtX3ZpZGVvRGltZW5zaW9ucyA9PSB2aWRlb0RpbWVuc2lvbnMp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1lbnNp
b25zOworCisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVu
dC0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX3ZpZGVvRGltZW5zaW9ucyk7Cit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5
YjhjODY0NmJiOGVkNDFlZTcyMDM3NzNjZGQ5OTA4Y2FmZjllMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZV9o
Ci0jZGVmaW5lIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZV9oCi0KLSNpZiBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
Ci0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgU3Ry
aW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRpbWVSYW5nZXM7Ci0KLWNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCByZXNl
dE1lZGlhU3RhdGUoKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZDUzZjBm
Nzc2OTM3NzVhZDQ4NjFjMjIzMDRhYzkzODAwOWM4MjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBUaW1lUmFuZ2VzOwotY2xh
c3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ7Ci1zdHJ1Y3QgTWVkaWFTZWxlY3Rpb25P
cHRpb247Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2Uo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFNjcnVi
YmluZygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5TY2FubmluZ0JhY2t3YXJkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRTY2FubmluZygp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBp
bmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWlu
dDY0X3QgaW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVy
ZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlTXV0ZWQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNldE11dGVkKGJvb2wpID0gMDsKLQotICAgIGVudW0gRXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgeyBUYXJnZXRUeXBlTm9uZSwgVGFyZ2V0VHlwZUFpclBsYXksIFRhcmdldFR5cGVU
Vk91dCB9OwotCi0gICAgdmlydHVhbCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBi
dWZmZXJlZFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUGxheWluZygpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBmbG9hdCBwbGF5YmFja1JhdGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWY8
VGltZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3Vi
bGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHVpbnQ2NF90
IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5h
bWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc011dGVkKCkgY29uc3QgPSAw
OwotfTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgewotcHVibGljOgot
ICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50KCkgeyB9OwotICAgIHZp
cnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKiBjdXJyZW50VGltZSAqLywgZG91YmxlIC8qIGFu
Y2hvclRpbWUgKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRv
dWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRv
dWJsZSAvKiBwbGF5YmFja1N0YXJ0ZWRUaW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmF0
ZUNoYW5nZWQoYm9vbCAvKiBpc1BsYXlpbmcgKi8sIGZsb2F0IC8qIHBsYXliYWNrUmF0ZSAqLykg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFu
Z2VzJiwgZG91YmxlIC8qIGxhc3RNb2RpZmllZCAqLywgZG91YmxlIC8qIGxpdmVJbnRlcnZhbCAq
LykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1aW50NjRf
dCAvKiBzZWxlY3RlZEluZGV4ICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3QpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
IC8qIGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICovKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJv
b2wpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgeyB9Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4OTUxMzc1ODg0ZDZjODFhN2Yy
Mzg5NmQ4YzRmNjUzMzkwMzhjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVk
ZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgot
I2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvVHJhY2s7Ci1jbGFzcyBIVE1MTWVk
aWFFbGVtZW50OwotY2xhc3MgVGV4dFRyYWNrOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlOwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCBmaW5h
bCA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpKTsKLSAgICB9Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7
Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQuZ2V0KCk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZl
bnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KikgZmlu
YWw7Ci0gICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcm
KTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBm
aW5hbCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4o
dGhpcykgPT0gJnJoczsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
bW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcGxheSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGF1c2Uo
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBlbmRTY2FubmluZygpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwotCi0gICAgZG91YmxlIGR1cmF0aW9uKCkg
Y29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWw7Ci0gICAg
ZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNQbGF5aW5nKCkg
Y29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWw7Ci0gICAgUmVm
PFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIHNl
ZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbDsKLSAgICBkb3Vi
bGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBjYW5QbGF5RmFz
dFJldmVyc2UoKSBjb25zdCBmaW5hbDsKLSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWw7Ci0gICAgdWludDY0X3Qg
YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbDsKLSAgICBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5h
bDsKLSAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7
Ci0gICAgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsOwotICAgIEV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29u
c3QgZmluYWw7Ci0gICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1l
KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgp
IGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7Ci0g
ICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnRO
YW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKLQot
ICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKLSAgICBib29sIG1f
aXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xl
Z2libGVUcmFja3NGb3JNZW51OwotICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVk
aW9UcmFja3NGb3JNZW51OwotCi0gICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25z
dDsKLSAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOwotICAgIHZvaWQgdXBk
YXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCk7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2ZjZGU0MzNmMDM3MDIxZTUxYTBiNDY4NmUyZmI1MTdkN2U5N2Y3NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDUzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCi0KLSNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIkF1ZGlvVHJhY2tMaXN0LmgiCi0jaW1wb3J0ICJFdmVu
dC5oIgotI2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgotI2ltcG9ydCAiRXZlbnROYW1lcy5oIgot
I2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKLSNpbXBvcnQgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCi0jaW1wb3J0
ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUGFn
ZUdyb3VwLmgiCi0jaW1wb3J0ICJUZXh0VHJhY2tMaXN0LmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2Vz
LmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZl
bnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi17Ci19Ci0KLVdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQoKQotewotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpz
ZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotewotICAgIGlm
IChtX21lZGlhRWxlbWVudCA9PSBtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX21lZGlhRWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX21lZGlh
RWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Ci0g
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX21lZGlh
RWxlbWVudC0+dGV4dFRyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNo
YW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOwotICAgIH0KLSAgICBtX2lzTGlzdGVuaW5nID0gZmFs
c2U7Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5y
ZXNldFBsYXliYWNrU2Vzc2lvblN0YXRlKCk7Ci0KLSAgICBtX21lZGlhRWxlbWVudCA9IG1lZGlh
RWxlbWVudDsKLQotICAgIGlmIChtX21lZGlhRWxlbWVudCkgewotICAgICAgICBmb3IgKGF1dG8m
IGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgICAg
ICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnRleHRUcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwg
KnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9pc0xpc3RlbmluZyA9IHRydWU7Ci0gICAgfQotCi0g
ICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKLXsKLSAgICB1cGRhdGVG
b3JFdmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgZXZlbnROYW1lKQotewotICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVBbGwoKTsK
LQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5kdXJh
dGlvbmNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IHRoaXMtPmR1cmF0
aW9uKCk7Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAg
ICBjbGllbnQtPmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7Ci0gICAgICAgIC8vIFRoZXNlIGlz
IG5vIHN0YW5kYXJkIGV2ZW50IGZvciBtaW5GYXN0UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9u
IGNoYW5nZSBpcyBhIHJlYXNvbmFibGUgcHJveHkgZm9yIGl0LgotICAgICAgICAvLyBJdCBoYXBw
ZW5zIGV2ZXJ5IHRpbWUgYSBuZXcgaXRlbSBiZWNvbWVzIHJlYWR5IHRvIHBsYXkuCi0gICAgICAg
IGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlID0gdGhpcy0+Y2FuUGxheUZhc3RSZXZlcnNlKCk7Ci0g
ICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQt
PmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKLSAgICB9Ci0K
LSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheUV2
ZW50Ci0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheWluZ0V2ZW50KSB7
Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGll
bnQtPnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUoKSk7Ci0g
ICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygp
LnBhdXNlRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5RXZl
bnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQp
IHsKLSAgICAgICAgYm9vbCBpc1BsYXlpbmcgPSB0aGlzLT5pc1BsYXlpbmcoKTsKLSAgICAgICAg
ZmxvYXQgcGxheWJhY2tSYXRlID0gdGhpcy0+cGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIGZvciAo
YXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2Vk
KGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAg
IHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7Ci0gICAgICAg
IGF1dG8gY3VycmVudFRpbWUgPSB0aGlzLT5jdXJyZW50VGltZSgpOwotICAgICAgICBhdXRvIGFu
Y2hvclRpbWUgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07Ci0g
ICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQt
PmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnByb2dyZXNz
RXZlbnQpIHsKLSAgICAgICAgYXV0byBidWZmZXJlZFRpbWUgPSB0aGlzLT5idWZmZXJlZFRpbWUo
KTsKLSAgICAgICAgYXV0byBzZWVrYWJsZVJhbmdlcyA9IHRoaXMtPnNlZWthYmxlUmFuZ2VzKCk7
Ci0gICAgICAgIGF1dG8gc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IHRoaXMt
PnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKTsKLSAgICAgICAgYXV0byBsaXZl
VXBkYXRlSW50ZXJ2YWwgPSB0aGlzLT5saXZlVXBkYXRlSW50ZXJ2YWwoKTsKLSAgICAgICAgZm9y
IChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICAgICAgY2xpZW50LT5idWZmZXJl
ZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Ci0gICAgICAgICAgICBjbGllbnQtPnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdlcywgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlm
aWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50
Ci0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCkK
LSAgICAgICAgdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0g
ICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNr
dGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCkgewotICAgICAgICBib29sIGVuYWJsZWQgPSBl
eHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpOwotICAgICAgICBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSB0YXJnZXRUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKTsKLSAgICAgICAg
U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUgPSBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2
aWNlTmFtZSgpOwotCi0gICAgICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQg
PSB0aGlzLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpOwotCi0gICAgICAgIGZvciAo
YXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdGFyZ2V0VHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7
Ci0gICAgICAgICAgICBjbGllbnQtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZCh3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBXZSBkb24ndCBjYWxsIHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpIGluIHRoZSBh
bGwgY2FzZSwgc2luY2UKLSAgICAvLyB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSB3aWxs
IGFsc28gdXBkYXRlIHRoZSBzZWxlY3Rpb24gaW5kaWNlcy4KLSAgICBpZiAoZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCkKLSAgICAgICAgdXBkYXRlTWVkaWFTZWxlY3Rpb25J
bmRpY2VzKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVzKCkudm9sdW1lY2hhbmdlRXZlbnQpIHsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1f
Y2xpZW50cykKLSAgICAgICAgICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKGlzTXV0ZWQoKSk7Ci0g
ICAgfQotfQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xp
ZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJU
KCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5hZGQoJmNsaWVu
dCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnJlbW92
ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFT
U0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUo
JmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnBsYXkoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPnBsYXkoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6cGF1c2UoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPnBhdXNlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAg
ICAgICBtX21lZGlhRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKLXsKLSAgICBp
ZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjcnViYmlu
ZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y3J1YmJpbmcoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmVuZFNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhk
b3VibGUgdGltZSkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFF
bGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQotewotICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250
cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKLXsKLSAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlh
Q29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCi17Ci0gICAgaWYgKG1fbWVkaWFF
bGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBzZWxlY3RlZEF1ZGlvSW5kZXgpCi17Ci0gICAgaWYgKCFtX21lZGlhRWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBt
X2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fYXVk
aW9UcmFja3NGb3JNZW51W2ldLT5zZXRFbmFibGVkKGkgPT0gc2VsZWN0ZWRBdWRpb0luZGV4KTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQotewotICAgIGlmICghbV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRleHRUcmFjayogdGV4dFRyYWNrOwotICAgIGlm
IChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQotICAgICAgICB0ZXh0VHJh
Y2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5n
ZXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRUcmFjayA9IFRleHRUcmFjazo6Y2FwdGlvbk1l
bnVPZmZJdGVtKCk7Ci0KLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2so
dGV4dFRyYWNrKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50LT5m
dWxsc2NyZWVuTW9kZSgpID09IE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQ
aWN0dXJlSW5QaWN0dXJlKQotICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4o
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbnRlckZ1bGxzY3JlZW4oTWVk
aWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVNdXRlZCgp
Ci17Ci0gICAgc2V0TXV0ZWQoIWlzTXV0ZWQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1f
bWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0TXV0ZWQobXV0ZWQpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlh
RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7
Ci0gICAgYXV0byYgdGV4dFRyYWNrcyA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0g
ICAgaWYgKHRleHRUcmFja3MubGVuZ3RoKCkpCi0gICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSgmdGV4dFRyYWNr
cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2xlZ2libGVUcmFja3NGb3JNZW51LmNsZWFyKCk7Ci0K
LSAgICBhdXRvJiBhdWRpb1RyYWNrcyA9IG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpOwot
ICAgIGlmIChhdWRpb1RyYWNrcy5sZW5ndGgoKSA+IDEpCi0gICAgICAgIG1fYXVkaW9UcmFja3NG
b3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoJmF1ZGlv
VHJhY2tzKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51LmNsZWFyKCk7
Ci0KLSAgICBhdXRvIGF1ZGlvT3B0aW9ucyA9IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7
Ci0gICAgYXV0byBhdWRpb0luZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKLSAgICBh
dXRvIGxlZ2libGVPcHRpb25zID0gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOwotICAg
IGF1dG8gbGVnaWJsZUluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpOwotCi0gICAg
Zm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICBjbGllbnQtPmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb09wdGlvbnMsIGF1ZGlvSW5kZXgpOwotICAg
ICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVP
cHRpb25zLCBsZWdpYmxlSW5kZXgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkKLXsKLSAg
ICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpOwotICAgIGF1dG8g
bGVnaWJsZUluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpOwotCi0gICAgZm9yIChh
dXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQoYXVkaW9JbmRleCk7Ci0gICAgICAgIGNsaWVudC0+bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGxlZ2libGVJbmRleCk7Ci0gICAgfQotfQotCi1kb3Vi
bGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrU3RhcnRlZFRp
bWUoKSBjb25zdAotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCk7Ci19
Ci0KLWNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICAvLyBGSVhNRSgxNTc0NTIp
OiBSZW1vdmUgdGhlIHJpZ2h0LWhhbmQgY29uc3RydWN0b3Igbm90YXRpb24gb25jZSBOZXZlckRl
c3Ryb3llZCBzdXBwb3J0cyBpbml0aWFsaXplcl9saXN0cy4KLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IG5hbWVzID0gVmVjdG9yPEF0b21pY1N0cmluZz4o
ewotICAgICAgICBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwKLSAgICAgICAgZXZl
bnROYW1lcygpLnBhdXNlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQsCi0g
ICAgICAgIGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMo
KS50aW1ldXBkYXRlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LAot
ICAgICAgICBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygp
LnJlbW92ZXRyYWNrRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVu
dCwKLSAgICAgICAgZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2ly
ZWxlc3NjaGFuZ2VkRXZlbnQsCi0gICAgfSk7Ci0gICAgcmV0dXJuIG5hbWVzLmdldCgpOwotfQot
Ci1jb25zdCBBdG9taWNTdHJpbmcmICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6ZXZlbnROYW1lQWxsKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBldmVudE5hbWVBbGwoImFsbEV2ZW50cyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgIHJldHVybiBldmVudE5hbWVBbGw7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlm
ICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX21lZGlh
RWxlbWVudC0+c3VwcG9ydHNTZWVraW5nKCkgPyBtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSA6
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci19Ci0KLWRvdWJsZSBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3VycmVudFRpbWUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGlt
ZSgpIDogMDsKLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpidWZmZXJlZFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1f
bWVkaWFFbGVtZW50LT5tYXhCdWZmZXJlZFRpbWUoKSA6IDA7Ci19Ci0KLWJvb2wgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50ID8gIW1fbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA6IGZhbHNlOwot
fQotCi1mbG9hdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tS
YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVu
dC0+cGxheWJhY2tSYXRlKCkgOiAwOwotfQotCi1SZWY8VGltZVJhbmdlcz4gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGUoKSA6IFRpbWVS
YW5nZXM6OmNyZWF0ZSgpOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZVRpbWVS
YW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgOiAwOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPmxpdmVVcGRhdGVJbnRlcnZh
bCgpIDogMDsKLX0KLSAgICAKLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVt
ZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0ZSgpIDwgMC4wIDogZmFsc2U7
Ci19Ci0KLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKLXsKLSAg
ICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvT3B0aW9uczsKLQotICAgIGlmICgh
bV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAg
ICAgICAgcmV0dXJuIGF1ZGlvT3B0aW9uczsKLQotICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNl
cyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJl
ZmVyZW5jZXMoKTsKLQotICAgIGF1ZGlvT3B0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
YXVkaW9UcmFja3NGb3JNZW51LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDog
bV9hdWRpb1RyYWNrc0Zvck1lbnUpCi0gICAgICAgIGF1ZGlvT3B0aW9ucy51bmNoZWNrZWRBcHBl
bmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soYXVkaW9U
cmFjay5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGF1ZGlvT3B0aW9uczsKLX0KLQotdWludDY0X3Qg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9hdWRp
b1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChtX2F1ZGlvVHJh
Y2tzRm9yTWVudVtpbmRleF0tPmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsK
LSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsK
LX0KLQotVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlT3B0aW9uczsKLQotICAgIGlm
ICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkK
LSAgICAgICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOwotCi0gICAgYXV0byYgY2FwdGlvblByZWZl
cmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRp
b25QcmVmZXJlbmNlcygpOwotCi0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJsZVRyYWNr
c0Zvck1lbnUpCi0gICAgICAgIGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5j
ZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOwotCi0gICAgcmV0
dXJuIGxlZ2libGVPcHRpb25zOwotfQotCi11aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Ci17Ci0gICAg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojpt
YXgoKTsKLSAgICB1aW50NjRfdCBvZmZJbmRleCA9IDA7Ci0gICAgYm9vbCB0cmFja01lbnVJdGVt
U2VsZWN0ZWQgPSBmYWxzZTsKLQotICAgIGF1dG8gaG9zdCA9IG1fbWVkaWFFbGVtZW50ID8gbV9t
ZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkgOiBudWxscHRyOwotCi0gICAgaWYgKCFo
b3N0KQotICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleDsKLQotICAgIEF0b21pY1N0cmluZyBk
aXNwbGF5TW9kZSA9IGhvc3QtPmNhcHRpb25EaXNwbGF5TW9kZSgpOwotICAgIFRleHRUcmFjayog
b2ZmSXRlbSA9IGhvc3QtPmNhcHRpb25NZW51T2ZmSXRlbSgpOwotICAgIFRleHRUcmFjayogYXV0
b21hdGljSXRlbSA9IGhvc3QtPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOwotCi0gICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgp
OyBpbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVu
dVtpbmRleF07Ci0gICAgICAgIGlmICh0cmFjayA9PSBvZmZJdGVtKQotICAgICAgICAgICAgb2Zm
SW5kZXggPSBpbmRleDsKLQotICAgICAgICBpZiAodHJhY2sgPT0gYXV0b21hdGljSXRlbSAmJiBk
aXNwbGF5TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpKSB7Ci0g
ICAgICAgICAgICBzZWxlY3RlZEluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICB0cmFja01lbnVJ
dGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXlNb2Rl
ICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUo
KSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkSW5k
ZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAob2ZmSXRlbSAmJiAhdHJhY2tNZW51SXRlbVNlbGVj
dGVkICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0Ojpmb3JjZWRPbmx5S2V5d29y
ZCgpKQotICAgICAgICBzZWxlY3RlZEluZGV4ID0gb2ZmSW5kZXg7Ci0KLSAgICByZXR1cm4gc2Vs
ZWN0ZWRJbmRleDsKLX0KLQotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlh
RWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+d2Via2l0Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNX
aXJlbGVzcygpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8
ICFtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKLSAgICAgICAgcmV0dXJuIFRh
cmdldFR5cGVOb25lOwotCi0gICAgc3dpdGNoIChtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9s
c0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCkpIHsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwotICAg
IGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6Ok5vbmU6Ci0gICAgICAgIHJldHVy
biBUYXJnZXRUeXBlTm9uZTsKLSAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBl
OjpBaXJwbGF5OgotICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZUFpclBsYXk7Ci0gICAgY2FzZSBN
ZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6VHZvdXQ6Ci0gICAgICAgIHJldHVybiBUYXJn
ZXRUeXBlVFZPdXQ7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QK
LXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJv
bHNIb3N0KCkpCi0gICAgICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hv
c3QoKS0+ZXh0ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZSgpOwotICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotfQotCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYVNlc3Npb24oKS53aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZCgqbV9tZWRpYUVsZW1lbnQpOwotfQotCi1ib29sIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojppc011dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bXV0ZWQoKSA6IGZhbHNlOwotfQotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM5MDc1Yzc4MTBkYTliNDI3YTYxODU0Yzk5N2Q1M2IzNWViMGIxZjkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXJfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcl9oCi0KLSNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1bGxz
Y3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTY4N2Y4MTUzMDVj
Y2MxYzMxYjU0YzAzOWNiM2RkYjM4NTIyOWIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsX2gKLSNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxfaAotCi0j
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSFRNTE1l
ZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudDsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwgewotcHVibGljOgotICAgIHZp
cnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBh
ZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxz
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSA9
IDA7Ci0gICAgZW51bSBWaWRlb0dyYXZpdHkgeyBWaWRlb0dyYXZpdHlSZXNpemUsIFZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdCwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCB9OwotICAgIHZp
cnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzVmlzaWJsZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3QgPSAwOwotfTsKLQotY2xh
c3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwg
fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGhh
c1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZpZGVvRGltZW5zaW9u
c0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAwOwotfTsKLQotV0VCQ09SRV9FWFBPUlQgYm9v
bCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKLSAgICAKLX0KLQotI2VuZGlmCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGZlZTFiOWRlMjc1Y2U5ODI4NzgwM2ExZDk4NGZhMjMxY2QyMTJhM2UuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50X2gKLSNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnRf
aAotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bC5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEF1ZGlv
VHJhY2s7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotY2xhc3MgVGV4dFRyYWNrOwotY2xhc3Mg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7Ci0KLWNsYXNzIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
LCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
KCkpOwotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9F
bGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKLSAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0Vs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRWxlbWVudC5nZXQoKTsgfQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciosIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyID0gW10geyB9KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHdhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIgPSBbXSB7IH0pOwotICAgIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYkNvcmU6OkV2ZW50Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVGb3JFdmVu
dE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQmKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92
ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlk
ZW9HcmF2aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92
ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0K
LQotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNldEhhc1ZpZGVvKGJvb2wp
OwotICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYpOwotCi0gICAg
c3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1l
cygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKLQotICAg
IFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKLSAgICBSZXRhaW5QdHI8
UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKLSAgICBib29sIG1faXNMaXN0
ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQqPiBtX2NsaWVudHM7Ci0gICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKLSAgICBGbG9h
dFNpemUgbV92aWRlb0RpbWVuc2lvbnM7Ci0gICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKLSAg
ICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7Ci0gICAg
VmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7Ci19OwotCi19
Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNGZiZTAxNzAyY2M1MGU0YTQzOWY4
Njg1ZDY0MmI3OWNkOWE0MDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQuaCIKLQotI2ltcG9ydCAiRE9NV2luZG93LmgiCi0jaW1wb3J0ICJIaXN0b3J5
LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgot
I2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKLSNpbXBvcnQg
PFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50
TmFtZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvSFRNTFZpZGVvRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1RleHRUcmFja0xpc3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5o
PgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtp
bmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCi0g
ICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQot
ewotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6fldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvRWxlbWVudCkKLXsKLSAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1l
bnQtPnZpZGVvRnVsbHNjcmVlbkxheWVyKCkpCi0gICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihudWxscHRyKTsKLQotICAgIGlmIChtX3ZpZGVvRWxlbWVudCAm
JiBtX2lzTGlzdGVuaW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2
ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+cmVtb3ZlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Ci0gICAgfQotICAgIG1faXNMaXN0ZW5p
bmcgPSBmYWxzZTsKLQotICAgIG1fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OwotCi0gICAg
aWYgKG1fdmlkZW9FbGVtZW50KSB7Ci0gICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2Jz
ZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YWRkRXZlbnRM
aXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1faXNMaXN0ZW5pbmcg
PSB0cnVlOwotICAgIH0KLQotICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudE5hbWVBbGwoKSk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2
ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZl
bnQpCi17Ci0gICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LT50eXBlKCkpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUo
Y29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKLXsKLSAgICBpZiAobV9jbGllbnRz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgYWxsID0gZXZlbnRO
YW1lID09IGV2ZW50TmFtZUFsbCgpOwotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KSB7Ci0gICAgICAgIHNldEhhc1ZpZGVvKG1f
dmlkZW9FbGVtZW50KTsKLSAgICAgICAgc2V0VmlkZW9EaW1lbnNpb25zKG1fdmlkZW9FbGVtZW50
ID8gRmxvYXRTaXplKG1fdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIG1fdmlkZW9FbGVtZW50
LT52aWRlb0hlaWdodCgpKSA6IEZsb2F0U2l6ZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBs
YXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZpZGVvTGF5
ZXIpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gdmlkZW9MYXllcjsKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6
Q0dQb2ludE1ha2UoMCwgMCldOwotI2Vsc2UKLSAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBz
ZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLjUsIDAuNSldOwotI2VuZGlmCi0gICAgW21fdmlk
ZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOm1fdmlkZW9GcmFtZV07Ci0gICAgCi0gICAgaWYg
KCFtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fdmlkZW9FbGVtZW50KSB7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3ZpZGVv
RWxlbWVudC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKLXsKLSAgICBpZiAobV92aWRl
b0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgIT0gbW9kZSkKLSAg
ICAgICAgbV92aWRlb0VsZW1lbnQtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOwotCi0gICAgaWYg
KG1fdmlkZW9FbGVtZW50ICYmIGZpbmlzaGVkV2l0aE1lZGlhICYmIG1vZGUgPT0gTWVkaWFQbGF5
ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpIHsKLSAgICAgICAgaWYgKG1fdmlkZW9F
bGVtZW50LT5kb2N1bWVudCgpLmlzTWVkaWFEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAo
RE9NV2luZG93KiB3aW5kb3cgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5kb21XaW5kb3co
KSkgewotICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5KiBoaXN0b3J5ID0gd2luZG93LT5oaXN0
b3J5KCkpCi0gICAgICAgICAgICAgICAgICAgIGhpc3RvcnktPmJhY2soKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0KQotewotICAgIG1f
dmlkZW9GcmFtZSA9IHJlY3Q7Ci0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRz
OkNHUmVjdChyZWN0KV07Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICBtX3ZpZGVv
RWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKLXsKLSAgICBNZWRpYVBs
YXllcjo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZp
dHlSZXNpemVBc3BlY3Q7Ci0gICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZSkKLSAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5
ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpCi0gICAgICAgIHZpZGVv
R3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7Ci0gICAgZWxz
ZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0RmlsbCkKLSAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAKLSAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuR3Jh
dml0eSh2aWRlb0dyYXZpdHkpOwotfQotCi1jb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcygpCi17
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxBdG9taWNTdHJpbmc+PiBzRXZlbnRO
YW1lczsKLQotICAgIGlmICghc0V2ZW50TmFtZXMuZ2V0KCkuc2l6ZSgpKQotICAgICAgICBzRXZl
bnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KTsKLSAgICByZXR1
cm4gc0V2ZW50TmFtZXMuZ2V0KCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc0V2ZW50TmFtZUFsbCA9ICJhbGxFdmVudHMi
OwotICAgIHJldHVybiBzRXZlbnROYW1lQWxsOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCi17Ci0gICAg
aWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7Ci0gICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xp
ZW50KSk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLX0KLQotYm9vbCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fdmlkZW9FbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoUGFn
ZSogcGFnZSA9IG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0
dXJuIHBhZ2UtPmlzVmlzaWJsZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRIYXNWaWRlbyhib29sIGhhc1Zp
ZGVvKQotewotICAgIGlmIChoYXNWaWRlbyA9PSBtX2hhc1ZpZGVvKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2hhc1ZpZGVvID0gaGFzVmlkZW87Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6
IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQobV9oYXNWaWRlbyk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVv
RGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBpZiAo
bV92aWRlb0RpbWVuc2lvbnMgPT0gdmlkZW9EaW1lbnNpb25zKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uczsKLQotICAgIGZvciAoYXV0
byYgY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnZpZGVvRGltZW5zaW9uc0No
YW5nZWQobV92aWRlb0RpbWVuc2lvbnMpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDUwZDIyOWVhZDE5ZmYyMDU0ZmYyZTIyNmUwZTU3MTdlOWUxNGI3MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JN
KElPUykKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKKyNp
bmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9sbGVyOworT0JKQ19DTEFT
UyBBVlBsYXllclZpZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBVSVZpZXdDb250cm9sbGVyOwor
T0JKQ19DTEFTUyBVSVdpbmRvdzsKK09CSkNfQ0xBU1MgVUlWaWV3OworCituYW1lc3BhY2UgV1RG
IHsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UmVj
dDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsOworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9u
Q2hhbmdlT2JzZXJ2ZXI7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0CisgICAgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAg
LCBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBSZWZDb3Vu
dGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiB7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoUGxheWJhY2tTZXNz
aW9uTW9kZWwmIG1vZGVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQobW9kZWwpKTsKKyAgICB9CisgICAgdmlydHVhbCB+
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2Rl
bCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lv
bk1vZGVsOyB9CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIG92ZXJyaWRlOworCisgICAgLy8gUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hh
bmdlZChkb3VibGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3VycmVudFRp
bWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRl
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIG92
ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlp
bmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9k
aWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKSBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwg
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRl
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwor
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIFdl
YkFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1f
cGxheWVyQ29udHJvbGxlci5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBP
UlQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsK
KworICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29udHJvbGxl
cjsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51
bGxwdHIgfTsKK307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45NWJhOTA1YTcwMTk0OTY1NzczMTdiMTBkNTMwMDI3ZmMxYzUxNTEyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0Lm1tCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisKKyNpZiBQTEFURk9STShJT1Mp
CisjaWYgSEFWRShBVktJVCkKKworI2ltcG9ydCAiQVZLaXRTUEkuaCIKKyNpbXBvcnQgIkxvZ2dp
bmcuaCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisjaW1wb3J0ICJQbGF5YmFj
a1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiV2ViQVZQ
bGF5ZXJDb250cm9sbGVyLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CisjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW1w
b3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsu
aCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQoUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQorICAgIDogbV9wbGF5ZXJDb250cm9s
bGVyKGFkb3B0TlMoW1tXZWJBVlBsYXllckNvbnRyb2xsZXIgYWxsb2NdIGluaXRdKSkKKyAgICAs
IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQoreworICAgIG1vZGVsLmFkZENsaWVudCgq
dGhpcyk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2U6dGhpc107CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXREZWxlZ2F0ZTombW9kZWxdOwor
CisgICAgZHVyYXRpb25DaGFuZ2VkKG1vZGVsLmR1cmF0aW9uKCkpOworICAgIGN1cnJlbnRUaW1l
Q2hhbmdlZChtb2RlbC5jdXJyZW50VGltZSgpLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9d
IHN5c3RlbVVwdGltZV0pOworICAgIGJ1ZmZlcmVkVGltZUNoYW5nZWQobW9kZWwuYnVmZmVyZWRU
aW1lKCkpOworICAgIHJhdGVDaGFuZ2VkKG1vZGVsLmlzUGxheWluZygpLCBtb2RlbC5wbGF5YmFj
a1JhdGUoKSk7CisgICAgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKG1vZGVsLnNlZWthYmxlUmFuZ2Vz
KCksIG1vZGVsLnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSwgbW9kZWwubGl2
ZVVwZGF0ZUludGVydmFsKCkpOworICAgIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQobW9kZWwu
Y2FuUGxheUZhc3RSZXZlcnNlKCkpOworICAgIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChtb2RlbC5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpLCBtb2RlbC5hdWRpb01lZGlh
U2VsZWN0ZWRJbmRleCgpKTsKKyAgICBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChtb2RlbC5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCksIG1vZGVsLmxlZ2libGVNZWRp
YVNlbGVjdGVkSW5kZXgoKSk7CisgICAgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQobW9kZWwuZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSwgbW9kZWwuZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUo
KSwgbW9kZWwuZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSk7CisgICAgd2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKG1vZGVsLndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKCkpOworfQorCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6flBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTpudWxscHRyXTsKKyAgICBbbV9wbGF5ZXJDb250
cm9sbGVyIHNldEV4dGVybmFsUGxheWJhY2tBY3RpdmU6ZmFsc2VdOworCisgICAgaW52YWxpZGF0
ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpyZXNldE1lZGlh
U3RhdGUoKQoreworICAgIFttX3BsYXllckNvbnRyb2xsZXIgcmVzZXRNZWRpYVN0YXRlXTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6ZHVyYXRpb25DaGFuZ2VkKGRv
dWJsZSBkdXJhdGlvbikKK3sKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRy
b2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CisKKyAgICBwbGF5ZXJDb250cm9sbGVy
LmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVu
dER1cmF0aW9uV2l0aGluRW5kVGltZXMgPSBkdXJhdGlvbjsKKworICAgIC8vIEZJWE1FOiB3ZSB0
YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LgorICAgIHBs
YXllckNvbnRyb2xsZXIuY2FuUGxheSA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblBh
dXNlID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7
CisgICAgcGxheWVyQ29udHJvbGxlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7CisgICAgcGxheWVy
Q29udHJvbGxlci5jYW5TZWVrID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuc3RhdHVzID0g
QVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzUmVhZHlUb1BsYXk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRp
bWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVT
dGFtcCA9ICFbbV9wbGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFOIDogYW5jaG9yVGltZTsKKyAg
ICBBVlZhbHVlVGltaW5nICp0aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFsdWVU
aW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUKKyAgICAgICAgYW5jaG9yVGltZVN0YW1w
OmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOworCisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRU
aW1pbmc6dGltaW5nXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIFdlYkFWUGxh
eWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQo
KTsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlv
bjsKKyAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZTsKKyAgICBpZiAoIWR1cmF0aW9u
KQorICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gMDsKKyAgICBlbHNlCisgICAgICAg
IG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWUgLyBkdXJhdGlvbjsKKyAgICBw
bGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBAKG5vcm1hbGl6ZWRCdWZm
ZXJlZFRpbWUpXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmF0
ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDogMC5dOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRp
bWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiBzZWVrYWJsZVJhbmdlcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3Ro
KCk7IGkrKykgeworICAgICAgICBkb3VibGUgc3RhcnQgPSB0aW1lUmFuZ2VzLnN0YXJ0KGkpLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpOworICAgICAgICBkb3VibGUgZW5kID0gdGltZVJhbmdlcy5lbmQo
aSkucmVsZWFzZVJldHVyblZhbHVlKCk7CisKKyAgICAgICAgQ01UaW1lUmFuZ2UgcmFuZ2UgPSBD
TVRpbWVSYW5nZU1ha2UoQ01UaW1lTWFrZVdpdGhTZWNvbmRzKHN0YXJ0LCAxMDAwKSwgQ01UaW1l
TWFrZVdpdGhTZWNvbmRzKGVuZC1zdGFydCwgMTAwMCkpOworICAgICAgICBbc2Vla2FibGVSYW5n
ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07CisgICAg
fQorCisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6c2Vla2Fi
bGVSYW5nZXMuZ2V0KCldOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1l
UmFuZ2VzTGFzdE1vZGlmaWVkVGltZTogbGFzdE1vZGlmaWVkVGltZV07CisgICAgW21fcGxheWVy
Q29udHJvbGxlciBzZXRMaXZlVXBkYXRlSW50ZXJ2YWw6bGl2ZVVwZGF0ZUludGVydmFsXTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldENhblNjYW5CYWNrd2FyZDpjYW5QbGF5RmFzdFJldmVyc2VdOworfQorCitzdGF0aWMg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucykKK3sKKyAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6b3B0aW9ucy5zaXplKCldKTsKKyAgICBmb3IgKGF1dG8mIG9wdGlv
biA6IG9wdGlvbnMpIHsKKyAgICAgICAgUmV0YWluUHRyPFdlYkFWTWVkaWFTZWxlY3Rpb25PcHRp
b24+IHdlYk9wdGlvbiA9IGFkb3B0TlMoW1tXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uIGFsbG9j
XSBpbml0XSk7CisgICAgICAgIFt3ZWJPcHRpb24gc2V0TG9jYWxpemVkRGlzcGxheU5hbWU6b3B0
aW9uLmRpc3BsYXlOYW1lXTsKKyAgICAgICAgW3dlYk9wdGlvbnMgYWRkT2JqZWN0OndlYk9wdGlv
bi5nZXQoKV07CisgICAgfQorICAgIHJldHVybiB3ZWJPcHRpb25zOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlv
bnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CisgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRpb25zLmdldCgpXTsKKyAg
ICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKKyAgICAgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRDdXJyZW50QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0
aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgp
XV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMp
OworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
czp3ZWJPcHRpb25zLmdldCgpXTsKKyAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25z
IGNvdW50XSkKKyAgICAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8
TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwg
Y29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKQoreworICAgIEFWUGxheWVyQ29udHJv
bGxlckV4dGVybmFsUGxheWJhY2tUeXBlIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJD
b250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVOb25lOworICAgIGlmICh0YXJnZXRUeXBlID09
IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSkKKyAgICAgICAgZXh0ZXJu
YWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZUFp
clBsYXk7CisgICAgZWxzZSBpZiAodGFyZ2V0VHlwZSA9PSBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
VGFyZ2V0VHlwZVRWT3V0KQorICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVy
Q29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlVFZPdXQ7CisKKyAgICBXZWJBVlBsYXllckNv
bnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Cisg
ICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWlyUGxheURldmljZUxvY2FsaXpl
ZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lOworICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJu
YWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXliYWNrVHlwZTsKKyAgICBwbGF5ZXJDb250cm9s
bGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQoYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEFsbG93c0V4
dGVybmFsUGxheWJhY2s6IWRpc2FibGVkXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit7CisgICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXRNdXRlZDptdXRlZF07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ6OmludmFsaWRhdGUoKQoreworICAgIGlmICghbV9wbGF5YmFja1Nlc3Npb25Nb2Rl
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXREZWxlZ2F0
ZTpudWxscHRyXTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRo
aXMpOworICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRyOworfQorCit9CisKKyNl
bmRpZiAvLyBIQVZFKEFWS0lUKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI3NzEwM2MzNDExYTkzMDljOGZjNTI0OTM2NWJmMDU4NTE0
NjViOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjcHJhZ21hIG9uY2UKKworI2lm
IFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5j
bHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKKyNpbmNsdWRlICJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgPG9iamMvb2JqYy5oPgorI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgorCitPQkpDX0NMQVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFVJ
Vmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFVJV2luZG93OworT0JKQ19DTEFTUyBVSVZpZXc7
CitPQkpDX0NMQVNTIENBTGF5ZXI7CitPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsK
K09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJMYXllclZpZXc7CitPQkpDX0NMQVNTIFdlYkFWUGxheWVy
TGF5ZXI7CitPQkpDX0NMQVNTIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKKwor
bmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIEludFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5N
b2RlbDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOworICAgIAorY2xhc3Mg
V0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgZmluYWwKKyAgICA6
IHB1YmxpYyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgICwgcHVibGljIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsKKworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdCYpOworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKKyAg
ICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKTsg
fQorCisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisKKyAg
ICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2
aWNlTmFtZSkgZmluYWw7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0dXBG
dWxsc2NyZWVuKFVJVmlldyYsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcgKiwg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1Bp
Y3R1cmVJblBpY3R1cmVQbGF5YmFjayk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGVudGVyRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBleGl0
RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50
UmVjdCYgaW5saW5lUmVjdCk7CisKKyAgICBlbnVtIGNsYXNzIEV4aXRGdWxsU2NyZWVuUmVhc29u
IHsKKyAgICAgICAgRG9uZUJ1dHRvblRhcHBlZCwKKyAgICAgICAgRnVsbFNjcmVlbkJ1dHRvblRh
cHBlZCwKKyAgICAgICAgUGluY2hHZXN0dXJlSGFuZGxlZCwKKyAgICAgICAgUmVtb3RlQ29udHJv
bFN0b3BFdmVudFJlY2VpdmVkLAorICAgICAgICBQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZAorICAg
IH07CisKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwoKSBjb25zdCB7IHJldHVybiBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9CisgICAgYm9vbCBzaG91bGRFeGl0RnVsbHNjcmVlbldp
dGhSZWFzb24oRXhpdEZ1bGxTY3JlZW5SZWFzb24pOworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Cisg
ICAgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2soKSBjb25zdCB7IHJldHVybiBt
X2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdDsKKyAg
ICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6OkZ1bmN0aW9uPHZvaWQoYm9v
bCk+JiYgY2FsbGJhY2spOworICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQo
KSBjb25zdDsKKyAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7CisKKyAgICB2
b2lkIHdpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGRpZFN0YXJ0UGljdHVy
ZUluUGljdHVyZSgpOworICAgIHZvaWQgZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsK
KyAgICB2b2lkIHdpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpOworICAgIHZvaWQgZGlkU3RvcFBp
Y3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3Rv
cFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7CisKKyAgICB2b2lkIHNldE1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lk
IGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwor
ICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7
IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBP
UlQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQmKTsKKyAgICB2b2lkIGJlZ2luU2Vzc2lvbigpOworICAgIHZvaWQgZW50ZXJQaWN0dXJl
SW5QaWN0dXJlKCk7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOworICAgIHZv
aWQgd2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5
ZXJDb250cm9sbGVyKCkgY29uc3Q7CisKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworICAgIFJldGFpblB0cjxXZWJBVlBs
YXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IG1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZTsKKyAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlcjsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCB7IG51bGxwdHIgfTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CisKKyAgICAvLyBUaGVzZSBhcmUgb25s
eSB1c2VkIHdoZW4gZnVsbHNjcmVlbiBpcyBwcmVzZW50ZWQgaW4gYSBzZXBhcmF0ZSB3aW5kb3cu
CisgICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3dpbmRvdzsKKyAgICBSZXRhaW5QdHI8VUlWaWV3
Q29udHJvbGxlcj4gbV92aWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBtX3Bh
cmVudFZpZXc7CisgICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3BhcmVudFdpbmRvdzsKKyAgICBS
ZXRhaW5QdHI8V2ViQVZQbGF5ZXJMYXllclZpZXc+IG1fcGxheWVyTGF5ZXJWaWV3OworICAgIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAgV1RGOjpGdW5j
dGlvbjx2b2lkKGJvb2wpPiBtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrOworICAgIFJ1bkxvb3A6
OlRpbWVyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBtX3dhdGNoZG9nVGltZXI7Cisg
ICAgYm9vbCBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2V4aXRSZXF1ZXN0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9leGl0Q29tcGxldGVk
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZW50ZXJSZXF1ZXN0ZWQgeyBmYWxzZSB9OworICAgIGJv
b2wgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCB7IHRydWUgfTsKKyAgICBib29sIG1f
c2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVy
ZVN0b3AgeyBmYWxzZSB9OworCisgICAgdm9pZCBkb0VudGVyRnVsbHNjcmVlbigpOworfTsKKwor
fQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1ZWNlNjM2
NjA4ZTE0YWI2OWI2MzA2MTVmZmYwYjU2MDBiMGFmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0K
QEAgLTAsMCArMSwxMDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisj
aW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgorCisjaWYgSEFWRShBVktJ
VCkKKworI2ltcG9ydCAiQVZLaXRTUEkuaCIKKyNpbXBvcnQgIkdlb21ldHJ5VXRpbGl0aWVzLmgi
CisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oIgorI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCisjaW1wb3J0ICJU
aW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgor
I2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbXBvcnQgIldlYkFWUGxheWVyQ29u
dHJvbGxlci5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KKyNpbXBvcnQg
PG9iamMvbWVzc2FnZS5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFNvZnQt
bGlua2luZyBoZWFkZXJzIG11c3QgYmUgaW5jbHVkZWQgbGFzdCBzaW5jZSB0aGV5ICNkZWZpbmUg
ZnVuY3Rpb25zLCBjb25zdGFudHMsIGV0Yy4KKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgi
CisKK1NPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFW
Rm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRp
b24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfQ09O
U1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBOU1N0
cmluZyAqKQorU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdEZpbGwsIE5TU3RyaW5nICopCisKK1NPRlRfTElOS19GUkFNRVdPUktf
T1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGljdHVy
ZUluUGljdHVyZUNvbnRyb2xsZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFW
UGxheWVyVmlld0NvbnRyb2xsZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIF9f
QVZQbGF5ZXJMYXllclZpZXcpCisKK1NPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCitTT0ZUX0xJ
TktfQ0xBU1MoVUlLaXQsIFVJQXBwbGljYXRpb24pCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJ
U2NyZWVuKQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVdpbmRvdykKK1NPRlRfTElOS19DTEFT
UyhVSUtpdCwgVUlWaWV3KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVZpZXdDb250cm9sbGVy
KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUNvbG9yKQorU09GVF9MSU5LX0NPTlNUQU5UKFVJ
S2l0LCBVSVRleHRFZmZlY3RzQmVuZWF0aFN0YXR1c0JhcldpbmRvd0xldmVsLCBVSVdpbmRvd0xl
dmVsKQorCitzdGF0aWMgVUlDb2xvciAqY2xlYXJVSUNvbG9yKCkKK3sKKyAgICByZXR1cm4gKFVJ
Q29sb3IgKilbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl07Cit9CisKKyNpZiAhTE9HX0RJ
U0FCTEVECitzdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKK3sKKyAgICBy
ZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qg
U2Vjb25kcyBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsIHsgMV9zIH07CisKK0BjbGFzcyBX
ZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uOworCitAaW50ZXJmYWNlIFdlYkFWUGxheWVyVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdh
dGVfV2ViS2l0T25seT4geworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7Cit9CitAcHJvcGVydHkgKGFzc2lnbikgVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7CistIChCT09MKXBsYXll
clZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRy
b2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9s
bGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVhc29uOworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlCistIChWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQoreworICAgIHJldHVybiBfZnVsbHNjcmVl
bkludGVyZmFjZS5nZXQoKTsKK30KKworLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQoreworICAg
IF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKK30KKworLSAodm9p
ZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVy
Vmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVOVVNFRF9QQVJB
TShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT53
aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRy
b2xsZXJEaWRTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilw
bGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJv
bGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdGFydFBpY3R1cmVJblBp
Y3R1cmUoKTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckZhaWxlZFRvU3RhcnRQ
aWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRy
b2xsZXIgd2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxh
eWVyVmlld0NvbnRyb2xsZXIpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgc2VsZi5m
dWxsc2NyZWVuSW50ZXJmYWNlLT5mYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOworfQor
CistICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlOihB
VlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVT
RURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVy
ZmFjZS0+d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmll
d0NvbnRyb2xsZXJEaWRTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxl
ciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdD
b250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0b3BQaWN0dXJl
SW5QaWN0dXJlKCk7Cit9CisKK3N0YXRpYyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
RXhpdEZ1bGxTY3JlZW5SZWFzb24gY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24oQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKK3sKKyAgICBzd2l0
Y2ggKHJlYXNvbikgeworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2Ny
ZWVuUmVhc29uRG9uZUJ1dHRvblRhcHBlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZDsK
KyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkZ1bGxT
Y3JlZW5CdXR0b25UYXBwZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ7Cisg
ICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaWN0dXJl
SW5QaWN0dXJlU3RhcnRlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ7Cisg
ICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaW5jaEdl
c3R1cmVIYW5kbGVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1cmVIYW5kbGVkOworICAgIGNhc2Ug
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUmVtb3RlQ29udHJvbFN0
b3BFdmVudFJlY2VpdmVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2
ZWQ7CisgICAgfQorfQorCistIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZp
ZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5X
aXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVh
c29uCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICByZXR1
cm4gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5zaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFz
b24oY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24ocmVhc29uKSk7Cit9CisKKy0gKHZvaWQp
cGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3
Q29udHJvbGxlciByZXN0b3JlVXNlckludGVyZmFjZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0
aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIHJlc3RvcmVkKSljb21wbGV0aW9uSGFu
ZGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgc2Vs
Zi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5wcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRo
Q29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXIpOworfQorQGVuZAorCitAaW50ZXJm
YWNlIFdlYkFWUGxheWVyTGF5ZXIgOiBDQUxheWVyCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluKSBOU1N0cmluZyAqdmlkZW9HcmF2aXR5OworQHByb3BlcnR5IChub25hdG9taWMsIGdldHRl
cj1pc1JlYWR5Rm9yRGlzcGxheSkgQk9PTCByZWFkeUZvckRpc3BsYXk7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVl
bkludGVyZmFjZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIEFWUGxheWVyQ29udHJv
bGxlciAqcGxheWVyQ29udHJvbGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIENB
TGF5ZXIgKnZpZGVvU3VibGF5ZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgbnVsbGFi
bGUpIE5TRGljdGlvbmFyeSAqcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOworQHByb3BlcnR5IENHU2l6
ZSB2aWRlb0RpbWVuc2lvbnM7CitAcHJvcGVydHkgQ0dSZWN0IG1vZGVsVmlkZW9MYXllckZyYW1l
OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJMYXllciB7CisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsKKyAg
ICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBfYXZQbGF5ZXJDb250cm9sbGVyOwor
ICAgIFJldGFpblB0cjxDQUxheWVyPiBfdmlkZW9TdWJsYXllcjsKKyAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IF92aWRlb0dyYXZpdHk7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoc2VsZikgeworICAgICAgICBbc2VsZiBzZXRN
YXNrc1RvQm91bmRzOllFU107CisgICAgICAgIF92aWRlb0dyYXZpdHkgPSBnZXRBVkxheWVyVmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0KCk7CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVx
dWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9i
amVjdDpuaWxdOworICAgIFtfcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzIHJlbGVhc2VdOworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1
bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAgICByZXR1cm4gX2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0
KCk7Cit9CisKKy0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAgICBfZnVsbHNjcmVlbklu
dGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Cit9CisKKy0gKEFWUGxheWVyQ29udHJvbGxl
ciAqKXBsYXllckNvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gKEFWUGxheWVyQ29udHJvbGxlciAq
KV9hdlBsYXllckNvbnRyb2xsZXIuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0UGxheWVyQ29udHJv
bGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcgoreworICAgIEFTU0VS
VCghcGxheWVyQ29udHJvbGxlciB8fCBbcGxheWVyQ29udHJvbGxlciBpc0tpbmRPZkNsYXNzOltX
ZWJBVlBsYXllckNvbnRyb2xsZXIgY2xhc3NdXSk7CisgICAgX2F2UGxheWVyQ29udHJvbGxlciA9
IChXZWJBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyOworfQorCistICh2b2lk
KXNldFZpZGVvU3VibGF5ZXI6KENBTGF5ZXIgKil2aWRlb1N1YmxheWVyCit7CisgICAgX3ZpZGVv
U3VibGF5ZXIgPSB2aWRlb1N1YmxheWVyOworfQorCistIChDQUxheWVyKil2aWRlb1N1YmxheWVy
Cit7CisgICAgcmV0dXJuIF92aWRlb1N1YmxheWVyLmdldCgpOworfQorCistICh2b2lkKWxheW91
dFN1YmxheWVycworeworICAgIGlmIChbX3ZpZGVvU3VibGF5ZXIgc3VwZXJsYXllcl0gIT0gc2Vs
ZikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxl
Z2F0ZV0pCisgICAgICAgIHJldHVybjsKKworICAgIFtfdmlkZW9TdWJsYXllciBzZXRQb3NpdGlv
bjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKHNlbGYuYm91bmRzKSwgQ0dSZWN0R2V0TWlkWShz
ZWxmLmJvdW5kcykpXTsKKworICAgIGlmIChzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQgPD0g
MCB8fCBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8PSAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBGbG9hdFJlY3Qgc291cmNlVmlkZW9GcmFtZTsKKyAgICBGbG9hdFJlY3QgdGFyZ2V0Vmlk
ZW9GcmFtZTsKKyAgICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gc2VsZi52aWRlb0RpbWVuc2lv
bnMud2lkdGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7CisgICAgCisgICAgaWYgKFtn
ZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9H
cmF2aXR5XSkgeworICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc2VsZi5tb2RlbFZpZGVvTGF5
ZXJGcmFtZTsKKyAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNlbGYuYm91bmRzOworICAgIH0g
ZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSBpc0VxdWFsVG9T
dHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7CisgICAgICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBs
YXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2Vs
Zi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBsYXJn
ZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5i
b3VuZHMpOworICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3RGaWxsKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgeworICAgICAgICBz
b3VyY2VWaWRlb0ZyYW1lID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2
aWRlb0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKKyAgICAgICAgc2Vs
Zi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IENHUmVjdE1ha2UoMCwgMCwgc291cmNlVmlkZW9GcmFt
ZS53aWR0aCgpLCBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKF9m
dWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKKyAgICAgICAgX2Z1bGxzY3JlZW5JbnRlcmZh
Y2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1l
KTsKKyAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRp
b0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOworICAgIH0gZWxzZQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIFVJVmlldyAqdmlldyA9IChVSVZp
ZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdOworICAgIENHQWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHRhcmdldFZpZGVvRnJhbWUud2lk
dGgoKSAvIHNvdXJjZVZpZGVvRnJhbWUud2lkdGgoKSwgdGFyZ2V0VmlkZW9GcmFtZS5oZWlnaHQo
KSAvIHNvdXJjZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOworICAgIFt2aWV3IHNldFRyYW5zZm9ybTp0
cmFuc2Zvcm1dOworICAgIAorICAgIE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0g
W0NBVHJhbnNhY3Rpb24gYW5pbWF0aW9uRHVyYXRpb25dOworICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4geworICAgICAgICBbTlNPYmplY3QgY2FuY2VsUHJl
dmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJl
c29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOworCisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
cjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTphbmlt
YXRpb25EdXJhdGlvbiArIDAuMV07CisgICAgfSk7Cit9CisKKy0gKHZvaWQpcmVzb2x2ZUJvdW5k
cworeworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJn
ZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07Cisg
ICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5ZXJdICE9IHNlbGYpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZp
ZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkgJiYgQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50
aXR5KFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXSB0cmFuc2Zvcm1dKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FU
cmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBz
ZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIAorICAgIGlmICghQ0dSZWN0RXF1YWxUb1JlY3Qo
c2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkpIHsKKyAgICAgICAgc2Vs
Zi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IFtzZWxmIGJvdW5kc107CisgICAgICAgIEFTU0VSVChf
ZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7CisgICAgICAgIF9mdWxsc2NyZWVuSW50ZXJm
YWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFt
ZSk7CisgICAgfQorICAgIFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXSBzZXRU
cmFuc2Zvcm06Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eV07CisgICAgCisgICAgW0NBVHJhbnNh
Y3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZClzZXRWaWRlb0dyYXZpdHk6KE5TU3RyaW5nICop
dmlkZW9HcmF2aXR5Cit7CisgICAgX3ZpZGVvR3Jhdml0eSA9IHZpZGVvR3Jhdml0eTsKKyAgICAK
KyAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2
aXR5ID0gV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFz
cGVjdDsKKyAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNp
emUoKSkKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHlSZXNpemU7CisgICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OworICAgIGVsc2UgaWYg
KHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgp
KQorICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAKKyAgICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkp
OworICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0
eShncmF2aXR5KTsKK30KKworLSAoTlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKK3sKKyAgICByZXR1
cm4gX3ZpZGVvR3Jhdml0eS5nZXQoKTsKK30KKworLSAoQ0dSZWN0KXZpZGVvUmVjdAoreworICAg
IGlmIChzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8PSAwIHx8IHNlbGYudmlkZW9EaW1lbnNp
b25zLmhlaWdodCA8PSAwKQorICAgICAgICByZXR1cm4gc2VsZi5ib3VuZHM7CisgICAgCisgICAg
ZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIC8gc2Vs
Zi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0OworCisgICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2
aXR5UmVzaXplQXNwZWN0KCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKKyAg
ICAgICAgcmV0dXJuIGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0Fz
cGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisgICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5
UmVzaXplQXNwZWN0RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pCisg
ICAgICAgIHJldHVybiBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVv
QXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKKworICAgIHJldHVybiBzZWxmLmJvdW5kczsKK30K
KworKyAoTlNTZXQgKilrZXlQYXRoc0ZvclZhbHVlc0FmZmVjdGluZ1ZpZGVvUmVjdAoreworICAg
IHJldHVybiBbTlNTZXQgc2V0V2l0aE9iamVjdHM6QCJ2aWRlb0RpbWVuc2lvbnMiLCBAInZpZGVv
R3Jhdml0eSIsIG5pbF07Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXZWJBVlBpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcgOiBVSVZpZXcKK0BlbmQKKworc3RhdGljIENsYXNzIFdlYkFW
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld19sYXllckNsYXNzKGlkLCBTRUwpCit7Cisg
ICAgcmV0dXJuIFtXZWJBVlBsYXllckxheWVyIGNsYXNzXTsKK30KKworc3RhdGljIENsYXNzIGdl
dFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld0NsYXNzKCkKK3sKKyAgICBzdGF0
aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNl
VG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKKyAgICAgICAgdGhlQ2xh
c3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdldFVJVmlld0NsYXNzKCksICJXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciLCAwKTsKKyAgICAgICAgb2JqY19yZWdpc3RlckNs
YXNzUGFpcih0aGVDbGFzcyk7CisgICAgICAgIENsYXNzIG1ldGFDbGFzcyA9IG9iamNfZ2V0TWV0
YUNsYXNzKCJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciKTsKKyAgICAgICAg
Y2xhc3NfYWRkTWV0aG9kKG1ldGFDbGFzcywgQHNlbGVjdG9yKGxheWVyQ2xhc3MpLCAoSU1QKVdl
YkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld19sYXllckNsYXNzLCAiQEA6Iik7Cisg
ICAgfSk7CisgICAgCisgICAgcmV0dXJuIHRoZUNsYXNzOworfQorCitAaW50ZXJmYWNlIFdlYkFW
UGxheWVyTGF5ZXJWaWV3IDogX19BVlBsYXllckxheWVyVmlldworQHByb3BlcnR5IChyZXRhaW4p
IFVJVmlldyogdmlkZW9WaWV3OworQGVuZAorCitzdGF0aWMgQ2xhc3MgV2ViQVZQbGF5ZXJMYXll
clZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQoreworICAgIHJldHVybiBbV2ViQVZQbGF5ZXJMYXll
ciBjbGFzc107Cit9CisKK3N0YXRpYyBBVlBsYXllckNvbnRyb2xsZXIgKldlYkFWUGxheWVyTGF5
ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBfX0FWUGxheWVy
TGF5ZXJWaWV3ICpwbGF5ZXJMYXllciA9IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKndl
YkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllciBwbGF5ZXJM
YXllcl07CisgICAgcmV0dXJuIFt3ZWJBVlBsYXllckxheWVyIHBsYXllckNvbnRyb2xsZXJdOwor
fQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zZXRQbGF5ZXJDb250cm9sbGVy
KGlkIGFTZWxmLCBTRUwsIEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcikKK3sK
KyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBX
ZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilb
cGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBbd2ViQVZQbGF5ZXJMYXllciBzZXRQ
bGF5ZXJDb250cm9sbGVyOiBwbGF5ZXJDb250cm9sbGVyXTsKK30KKworc3RhdGljIFVJVmlldyAq
V2ViQVZQbGF5ZXJMYXllclZpZXdfdmlkZW9WaWV3KGlkIGFTZWxmLCBTRUwpCit7CisgICAgX19B
VlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsKKyAgICBXZWJBVlBsYXllckxh
eWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXIg
cGxheWVyTGF5ZXJdOworICAgIENBTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbd2ViQVZQbGF5ZXJMYXll
ciB2aWRlb1N1YmxheWVyXTsKKyAgICBpZiAoIXZpZGVvTGF5ZXIgfHwgIXZpZGVvTGF5ZXIuZGVs
ZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKFtbdmlkZW9MYXllciBkZWxl
Z2F0ZV0gaXNLaW5kT2ZDbGFzczpnZXRVSVZpZXdDbGFzcygpXSk7CisgICAgcmV0dXJuIChVSVZp
ZXcgKilbdmlkZW9MYXllciBkZWxlZ2F0ZV07Cit9CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxheWVy
TGF5ZXJWaWV3X3NldFZpZGVvVmlldyhpZCBhU2VsZiwgU0VMLCBVSVZpZXcgKnZpZGVvVmlldykK
K3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAg
ICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIg
KilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBbd2ViQVZQbGF5ZXJMYXllciBz
ZXRWaWRlb1N1YmxheWVyOlt2aWRlb1ZpZXcgbGF5ZXJdXTsKK30KKworc3RhdGljIHZvaWQgV2Vi
QVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBsYXllckxheWVyVmlldyAq
cGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqKVtwbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld107CisK
KyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICop
W3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGlw
UGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKKyAgICBb
cGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVB
c3BlY3QoKV07CisgICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvU3VibGF5ZXI6cGxheWVyTGF5
ZXIudmlkZW9TdWJsYXllcl07CisgICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9u
czpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRW
aWRlb0dyYXZpdHk6cGxheWVyTGF5ZXIudmlkZW9HcmF2aXR5XTsKKyAgICBbcGlwUGxheWVyTGF5
ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6cGxheWVyTGF5ZXIubW9kZWxWaWRlb0xheWVyRnJh
bWVdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRQbGF5ZXJDb250cm9sbGVyOnBsYXllckxheWVy
LnBsYXllckNvbnRyb2xsZXJdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50
ZXJmYWNlOnBsYXllckxheWVyLmZ1bGxzY3JlZW5JbnRlcmZhY2VdOworICAgIFtwaXBWaWV3IGFk
ZFN1YnZpZXc6cGxheWVyTGF5ZXJWaWV3LnZpZGVvVmlld107Cit9CisKK3N0YXRpYyB2b2lkIFdl
YkFWUGxheWVyTGF5ZXJWaWV3X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBsYXllckxheWVyVmlldyAq
cGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgaWYgKFVJVmlldyAqdmlkZW9WaWV3ID0gcGxh
eWVyTGF5ZXJWaWV3LnZpZGVvVmlldykKKyAgICAgICAgW3BsYXllckxheWVyVmlldyBhZGRTdWJ2
aWV3OnZpZGVvVmlld107CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVtwbGF5
ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld107CisgICAgV2ViQVZQ
bGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXll
clZpZXcgcGxheWVyTGF5ZXJdOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVy
ID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07CisgICAgW3BsYXllckxheWVy
IHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBpcFBsYXllckxheWVyLm1vZGVsVmlkZW9MYXllckZy
YW1lXTsKK30KKworc3RhdGljIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAq
V2ViQVZQbGF5ZXJMYXllclZpZXdfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBh
U2VsZiwgU0VMKQoreworICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcg
PSBhU2VsZjsKKyAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZp
ZXcgPSBbcGxheWVyTGF5ZXJWaWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXciXTsKKyAgICBpZiAoIXBpcFZpZXcpIHsKKyAgICAgICAgcGlwVmlldyA9IFtb
Z2V0V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RaZXJvXTsKKyAgICAgICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1
ZTpwaXBWaWV3IGZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Cisg
ICAgfQorICAgIHJldHVybiBwaXBWaWV3OworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxh
eWVyVmlld19kZWFsbG9jKGlkIGFTZWxmLCBTRUwpCit7CisgICAgV2ViQVZQbGF5ZXJMYXllclZp
ZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFJldGFpblB0cjxXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXc+IHBpcFZpZXcgPSBhZG9wdE5TKFtwbGF5ZXJMYXllclZp
ZXcgdmFsdWVGb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdKTsKKyAg
ICBbcGxheWVyTGF5ZXJWaWV3IHNldFZhbHVlOm5pbCBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldyJdOworICAgIG9iamNfc3VwZXIgc3VwZXJDbGFzcyB7IHBsYXllckxh
eWVyVmlldywgZ2V0X19BVlBsYXllckxheWVyVmlld0NsYXNzKCkgfTsKKyAgICBhdXRvIHN1cGVy
X2RlYWxsb2MgPSByZWludGVycHJldF9jYXN0PHZvaWQoKikob2JqY19zdXBlciosIFNFTCk+KG9i
amNfbXNnU2VuZFN1cGVyKTsKKyAgICBzdXBlcl9kZWFsbG9jKCZzdXBlckNsYXNzLCBAc2VsZWN0
b3IoZGVhbGxvYykpOworfQorCisjcHJhZ21hIG1hcmsgLSBNZXRob2RzCisKK3N0YXRpYyBDbGFz
cyBnZXRXZWJBVlBsYXllckxheWVyVmlld0NsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgdGhl
Q2xhc3MgPSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAg
ZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKKyAgICAgICAgdGhlQ2xhc3MgPSBvYmpjX2Fs
bG9jYXRlQ2xhc3NQYWlyKGdldF9fQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpLCAiV2ViQVZQbGF5
ZXJMYXllclZpZXciLCAwKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2Vs
ZWN0b3IoZGVhbGxvYyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYywgInZAOiIp
OworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRQbGF5ZXJD
b250cm9sbGVyOiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxl
ciwgInZAOkAiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Io
cGxheWVyQ29udHJvbGxlciksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfcGxheWVyQ29udHJv
bGxlciwgIkBAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rv
cihzZXRWaWRlb1ZpZXc6KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zZXRWaWRlb1ZpZXcs
ICJ2QDpAIik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHZp
ZGVvVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfdmlkZW9WaWV3LCAiQEA6Iik7Cisg
ICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHN0YXJ0Um91dGluZ1Zp
ZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxh
eWVyVmlld19zdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dywgInZAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcihz
dG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClX
ZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3LCAidkA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywg
QHNlbGVjdG9yKHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxh
eWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcsICJAQDoiKTsKKyAg
ICAgICAgCisgICAgICAgIGNsYXNzX2FkZEl2YXIodGhlQ2xhc3MsICJfcGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldyIsIHNpemVvZihXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXcgKiksIGxvZzIoc2l6ZW9mKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqKSksICJAIik7CisgICAgICAgIAorICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xhc3NQYWlyKHRo
ZUNsYXNzKTsKKyAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2JqY19nZXRNZXRhQ2xhc3MoIldl
YkFWUGxheWVyTGF5ZXJWaWV3Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3Ms
IEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19sYXllckNs
YXNzLCAiQEA6Iik7CisgICAgfSk7CisgICAgcmV0dXJuIHRoZUNsYXNzOworfQorCitSZWY8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpjcmVhdGUoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSkKK3sKKyAgICBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVy
ZmFjZSA9IGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQocGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKSk7CisgICAgW2ludGVyZmFjZS0+bV9wbGF5ZXJWaWV3Q29udHJv
bGxlckRlbGVnYXRlIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJmYWNlLnB0cigpXTsKKyAg
ICByZXR1cm4gaW50ZXJmYWNlOworfQorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKKyAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKKyAgICAsIG1fcGxheWVyVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZShhZG9wdE5TKFtbV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRl
IGFsbG9jXSBpbml0XSkpCisgICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCkK
K3sKK30KKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6On5WaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdCgpCit7CisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250
cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxlcigpOworICAgIGlmIChwbGF5ZXJDb250cm9s
bGVyICYmIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSkKKyAgICAgICAg
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZmFsc2UsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJn
ZXRUeXBlTm9uZSwgIiIpOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOworfQorCitXZWJB
VlBsYXllckNvbnRyb2xsZXIgKlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwbGF5ZXJD
b250cm9sbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UtPnBsYXllckNvbnRyb2xsZXIoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1v
ZGVsKQoreworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOworCisgICAgbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCA9IG1vZGVsOworCisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisg
ICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7CisKKyAgICBo
YXNWaWRlb0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZSk7CisgICAgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZCht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+dmlkZW9EaW1l
bnNpb25zKCkgOiBGbG9hdFNpemUoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciA9IG9ic2VydmVyOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKK3sKKyAgICBbcGxheWVyQ29udHJvbGxl
cigpIHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRlb107CisgICAgW3BsYXllckNvbnRyb2xsZXIo
KSBzZXRIYXNWaWRlbzpoYXNWaWRlb107Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0Rp
bWVuc2lvbnMpCit7CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQ
bGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisKKyAgICBbcGxh
eWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107CisgICAgW3BsYXll
ckNvbnRyb2xsZXIoKSBzZXRDb250ZW50RGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOworICAg
IFttX3BsYXllckxheWVyVmlldyBzZXROZWVkc0xheW91dF07CisKKyAgICBXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3ICopW21fcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXddOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdl
YkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07CisgICAgW3BpcFBsYXllckxheWVyIHNl
dFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOworICAgIFtwaXBW
aWV3IHNldE5lZWRzTGF5b3V0XTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCit7Cisg
ICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEhpZGRlbjplbmFibGVkXTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQor
eworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFw
cGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCVwKSIsIHRoaXMpOworICAgIGlmIChtX3Nob3VsZFJl
dHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kICYmIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aXNWaXNpYmxlKCkpIHsKKyAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgYXJlIGJvdGggaW4gUGlQIGFuZCBpbiBG
dWxsc2NyZWVuIChpLmUuLCB2aWEgYXV0by1QaVApLCBhbmQgd2UgZGlkIG5vdCBzdG9wIGZ1bGxz
Y3JlZW4gdXBvbiByZXR1cm5pbmcsIGl0IG11c3QgYmUKKyAgICAvLyBiZWNhdXNlIHRoZSBvcmln
aW5hdGluZyB2aWV3IGlzIG5vdCB2aXNpYmxlLCBzbyBoaWRlIHRoZSBmdWxsc2NyZWVuIHdpbmRv
dy4KKyAgICBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVN0YW5kYXJkIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90
ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgIFttX3dpbmRv
dyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgfV07CisgICAgfQorfQorCitAaW50ZXJmYWNl
IFVJV2luZG93ICgpCistIChCT09MKV9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3M7CitAZW5kCisK
K0BpbnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAoKQorQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbiwgc2V0dGVyPV9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6KSBCT09MIF9p
Z25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM7CitAZW5kCisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmlldywgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dz
UGljdHVyZUluUGljdHVyZVBsYXliYWNrKQoreworICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgIExPRyhGdWxsc2Ny
ZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbiglcCki
LCB0aGlzKTsKKworICAgIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrID0gYWxsb3dz
UGljdHVyZUluUGljdHVyZVBsYXliYWNrOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwor
ICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgYm9vbCBpc0lu
UGljdHVyZUluUGljdHVyZU1vZGUgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgIG1fbW9kZSA9IG1vZGU7Cisg
ICAgbV9wYXJlbnRWaWV3ID0gcGFyZW50VmlldzsKKyAgICBtX3BhcmVudFdpbmRvdyA9IHBhcmVu
dFZpZXcud2luZG93OworCisgICAgaWYgKCFbW3BhcmVudFZpZXcgd2luZG93XSBfaXNIb3N0ZWRJ
bkFub3RoZXJQcm9jZXNzXSkgeworICAgICAgICBpZiAoIW1fd2luZG93KQorICAgICAgICAgICAg
bV93aW5kb3cgPSBhZG9wdE5TKFthbGxvY1VJV2luZG93SW5zdGFuY2UoKSBpbml0V2l0aEZyYW1l
OltbZ2V0VUlTY3JlZW5DbGFzcygpIG1haW5TY3JlZW5dIGJvdW5kc11dKTsKKyAgICAgICAgW21f
d2luZG93IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAgICAgIGlmICgh
bV92aWV3Q29udHJvbGxlcikKKyAgICAgICAgICAgIG1fdmlld0NvbnRyb2xsZXIgPSBhZG9wdE5T
KFthbGxvY1VJVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICAgICAgW1ttX3Zp
ZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOlttX3dpbmRvdyBib3VuZHNdXTsKKyAgICAgICAg
W21fdmlld0NvbnRyb2xsZXIgX3NldElnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczpZRVNd
OworICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm1fdmlld0NvbnRyb2xs
ZXIuZ2V0KCldOworICAgICAgICBbbV93aW5kb3cgc2V0V2luZG93TGV2ZWw6Z2V0VUlUZXh0RWZm
ZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCgpICsgMV07CisgICAgICAgIFttX3dpbmRv
dyBtYWtlS2V5QW5kVmlzaWJsZV07CisgICAgfQorCisgICAgaWYgKCFtX3BsYXllckxheWVyVmll
dykKKyAgICAgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBhZG9wdE5TKFtbZ2V0V2ViQVZQbGF5ZXJM
YXllclZpZXdDbGFzcygpIGFsbG9jXSBpbml0XSk7CisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNl
dEhpZGRlbjpbcGxheWVyQ29udHJvbGxlcigpIGlzRXh0ZXJuYWxQbGF5YmFja0FjdGl2ZV1dOwor
ICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCld
OworCisgICAgaWYgKCFpc0luUGljdHVyZUluUGljdHVyZU1vZGUpIHsKKyAgICAgICAgW21fcGxh
eWVyTGF5ZXJWaWV3IHNldFZpZGVvVmlldzomdmlkZW9WaWV3XTsKKyAgICAgICAgW21fcGxheWVy
TGF5ZXJWaWV3IGFkZFN1YnZpZXc6JnZpZGVvVmlld107CisgICAgfQorCisgICAgV2ViQVZQbGF5
ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVy
VmlldyBwbGF5ZXJMYXllcl07CisKKyAgICBbcGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVy
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0aWFsUmVjdC5o
ZWlnaHQoKSldOworICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6W3BsYXllckNv
bnRyb2xsZXIoKSBjb250ZW50RGltZW5zaW9uc11dOworICAgIHBsYXllckxheWVyLmZ1bGxzY3Jl
ZW5JbnRlcmZhY2UgPSB0aGlzOworCisgICAgaWYgKCFtX3BsYXllclZpZXdDb250cm9sbGVyKQor
ICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NBVlBsYXllclZp
ZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0aFBsYXllckxheWVyVmlldzptX3BsYXllckxh
eWVyVmlldy5nZXQoKV0pOworCisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQ
bGF5YmFja0NvbnRyb2xzOk5PXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5
ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyKCldOwor
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm1fcGxheWVyVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0QWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXli
YWNrXTsKKworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0UGljdHVyZUluUGljdHVyZVBvc3Np
YmxlOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrXTsKKworICAgIGlmIChtX3ZpZXdD
b250cm9sbGVyKSB7CisgICAgICAgIFttX3ZpZXdDb250cm9sbGVyIGFkZENoaWxkVmlld0NvbnRy
b2xsZXI6bV9wbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07CisgICAgICAgIFtbbV92aWV3Q29u
dHJvbGxlciB2aWV3XSBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsK
KyAgICB9IGVsc2UKKyAgICAgICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XV07CisKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5m
cmFtZSA9IFtwYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmluaXRpYWxSZWN0IHRvVmlldzpbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOworCisgICAgW1ttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAg
W1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmll
d0F1dG9yZXNpemluZ0ZsZXhpYmxlQm90dG9tTWFyZ2luIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxl
eGlibGVSaWdodE1hcmdpbildOworCisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IHNldE5lZWRzTGF5b3V0XTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5
b3V0SWZOZWVkZWRdOworCisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhp
cywgdGhpc10geworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAg
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVy
RnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworCisgICAgbV9leGl0Q29t
cGxldGVkID0gZmFsc2U7CisgICAgbV9leGl0UmVxdWVzdGVkID0gZmFsc2U7CisgICAgbV9lbnRl
clJlcXVlc3RlZCA9IHRydWU7CisKKyAgICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCisgICAgICAgIGVudGVy
UGljdHVyZUluUGljdHVyZSgpOworICAgIGVsc2UgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkKKyAgICAgICAgZW50ZXJGdWxs
c2NyZWVuU3RhbmRhcmQoKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJ
blBpY3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICAKKyAgICBp
ZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlUG9zc2libGVdKQor
ICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdGFydFBpY3R1cmVJblBpY3R1cmVdOwor
ICAgIGVsc2UKKyAgICAgICAgZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRh
cmQoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCVwKSIsIHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKworICAgIGlm
IChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVBY3RpdmVdKSB7Cisg
ICAgICAgIC8vIE5PVEU6IFRoZSBmdWxsc2NyZWVuIG1vZGUgd2lsbCBiZSByZXN0b3JlZCBpbiBw
cmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoKS4KKyAg
ICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSB0cnVlOwor
ICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRl
ckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3RoaXMsIHByb3RlY3Rl
ZFRoaXNdIChCT09MIHN1Y2NlZWRlZCwgTlNFcnJvciopIHsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHN1Y2NlZWRlZCk7CisgICAgICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkIC0gbGFtYmRhKCVwKSAtIHN1Y2Nl
ZWRlZCglcykiLCB0aGlzLCBib29sU3RyaW5nKHN1Y2NlZWRlZCkpOworICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKworICAgICAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisgICAgfV07Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGZpbmFsUmVjdCkKK3sKKyAgICBtX3dhdGNoZG9nVGltZXIuc3RvcCgp
OworCisgICAgbV9leGl0UmVxdWVzdGVkID0gdHJ1ZTsKKyAgICBpZiAobV9leGl0Q29tcGxldGVk
KSB7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107CisgICAgCisg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNv
bnZlcnRSZWN0OmZpbmFsUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10u
c3VwZXJ2aWV3XTsKKworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFW
UGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworICAgIGlmIChb
cGxheWVyTGF5ZXIgdmlkZW9HcmF2aXR5XSAhPSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0KCkpCisgICAgICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6Z2V0QVZMYXll
clZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gbGF5b3V0SWZOZWVkZWRdOworCisgICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgeworICAgICAg
ICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOworICAg
ICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOworICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgfCBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFu
aW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwg
TlNFcnJvciopIHsKKyAgICAgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgICAgICBbbV93aW5kb3cgc2V0
SGlkZGVuOk5PXTsKKyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0
dXJlSW5QaWN0dXJlXTsKKyAgICAgICAgfV07CisgICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7CisgICAgICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRl
ZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vy
cm9yKikgeworICAgICAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKworICAgICAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0
RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAgICAgICAgIFttX3BsYXllckxheWVyVmlldyBzZXRC
YWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgICAgICAgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Cisg
ICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10o
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAg
ICAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxz
Y3JlZW4oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9XTsKKyAgICB9OworfQorCitAaW50
ZXJmYWNlIFVJQXBwbGljYXRpb24gKCkKKy0gKHZvaWQpX3NldFN0YXR1c0Jhck9yaWVudGF0aW9u
OihVSUludGVyZmFjZU9yaWVudGF0aW9uKW87CitAZW5kCisKK0BpbnRlcmZhY2UgVUlXaW5kb3cg
KCkKKy0gKFVJSW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJmYWNlT3JpZW50YXRpb247CitAZW5k
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVu
KCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBpZiAobV93aW5kb3cpIHsKKyAg
ICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgICAgICBbbV93aW5kb3cgc2V0Um9v
dFZpZXdDb250cm9sbGVyOm5pbF07CisgICAgICAgIGlmIChtX3BhcmVudFdpbmRvdykKKyAgICAg
ICAgICAgIFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9zZXRT
dGF0dXNCYXJPcmllbnRhdGlvbjpbbV9wYXJlbnRXaW5kb3cgaW50ZXJmYWNlT3JpZW50YXRpb25d
XTsKKyAgICB9CisgICAgCisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6
bmlsXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOm5p
bF07CisgICAgCisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCisgICAgICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCisgICAgICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhh
bmRsZXI6W10gKEJPT0wsIE5TRXJyb3IgKikgeyB9XTsKKyAgICAKKyAgICBbW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgaWYgKG1fdmlld0Nv
bnRyb2xsZXIpCisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHJlbW92ZUZyb21QYXJl
bnRWaWV3Q29udHJvbGxlcl07CisgICAgCisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHJlbW92ZUZy
b21TdXBlcnZpZXddOworICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3Vw
ZXJ2aWV3XTsKKworICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gbmlsOworICAgIG1fcGxheWVyVmll
d0NvbnRyb2xsZXIgPSBuaWw7CisgICAgbV93aW5kb3cgPSBuaWw7CisgICAgbV9wYXJlbnRWaWV3
ID0gbmlsOworICAgIG1fcGFyZW50V2luZG93ID0gbmlsOworICAgIAorICAgIGlmIChtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIt
PmRpZENsZWFudXBGdWxsc2NyZWVuKCk7CisKKyAgICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7
Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQor
eworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7CisgICAgbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIgPSBuaWw7CisgICAgCisgICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVs
bHNjcmVlbigpCit7CisgICAgaWYgKCFtX2VudGVyUmVxdWVzdGVkKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBM
T0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworCisgICAgW21fd2luZG93IHNldEhpZGRl
bjpZRVNdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVT
XTsKKworICAgIGlmIChwbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgeworICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpLT5wYXVzZSgpOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVs
bHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9u
ZSk7CisgICAgfQorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVw
YXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVS
ZWN0KQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCkgLSB2aXNpYmxlKCVzKSIsIHRoaXMsIGJv
b2xTdHJpbmcodmlzaWJsZSkpOworICAgIGlmIChtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7
CisgICAgICAgIAorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9
IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6W21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKKworICAgICAgICBXVEY6OkZ1bmN0aW9uPHZv
aWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGTW92ZShtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKTsK
KyAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7CisgICAgfQorfQorCitib29sIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGlj
dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFtwbGF5ZXJDb250cm9sbGVyKCkgaXNQbGF5aW5n
XSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6
OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCit7CisgICAgbV9wcmVwYXJlVG9Jbmxp
bmVDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmZ1bGxzY3Jl
ZW5NYXlSZXR1cm5Ub0lubGluZSgpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVl
biwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0
dXJlKCVwKSIsIHRoaXMpOworICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0
dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVu
QWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJl
SW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdOworICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworCisgICAgaWYg
KG1fbW9kZSAmIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5k
YXJkKSB7CisgICAgICAgIGlmICghW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGlj
dHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXSkgeworICAgICAgICAgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRl
ZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vy
cm9yKikgeworICAgICAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAg
ICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107
CisgICAgICAgICAgICB9XTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFttX3dp
bmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddIHNldEhpZGRlbjpZRVNdOworICAgIH0KKworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVs
bHNjcmVlbigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWls
ZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUo
JXApIiwgdGhpcyk7CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFj
a0NvbnRyb2xzOllFU107CisKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
ZXhpdENvbXBsZXRlZCA9IHRydWU7CisKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3Jl
ZW4oKTsKKworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgbV9zaG91
bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKKyAgICBtX3Nob3Vs
ZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gZmFsc2U7CisKKyAg
ICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3Rv
cFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5n
RnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKQorICAgICAgICByZXR1cm47CisKKyAg
ICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
dmlld10gc2V0SGlkZGVuOk5PXTsKKworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkK
K3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpk
aWRTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBpZiAoaGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0
b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApIHsKKyAgICAgICAgLy8gQVNT
VU1QVElPTjogd2UgYXJlIGV4aXRpbmcgcGlwIGJlY2F1c2Ugd2UgYXJlIGVudGVyaW5nIGZ1bGxz
Y3JlZW4KKyAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7CisKKyAgICBbbV9wbGF5ZXJMYXllclZp
ZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKyAgICBbW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKwor
ICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQ
aWN0dXJlSW5QaWN0dXJlKTsKKyAgICAKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVl
bigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9y
UGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBsZXRp
b25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BX
aXRoQ29tcGxldGlvbkhhbmRsZXIoJXApIiwgdGhpcyk7CisgICAgaWYgKG1fc2hvdWxkUmV0dXJu
VG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQIHx8IG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVu
QWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQpIHsKKyAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxz
Y3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKKyAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1
bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOworICAgICAgICBtX3Jlc3Rv
cmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IHRydWU7CisKKyAgICAgICAg
W21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XSBzZXRIaWRkZW46Tk9dOworCisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wgc3Vj
Y2VzcywgTlNFcnJvciopIHsKKyAgICAgICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBp
Y3R1cmVJblBpY3R1cmVTdG9wID0gZmFsc2U7CisgICAgICAgICAgICBzZXRNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOworICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgfV07CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgUmV0YWluUHRyPGlkPiBzdHJvbmdDb21wbGV0aW9uSGFuZGxl
ciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKKyAgICBmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUoW3Byb3RlY3RlZFRoaXMsIHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyXShi
b29sIHJlc3RvcmVkKSAgeworICAgICAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxl
dGlvbkhhbmRsZXIgbGFtYmRhKCVwKSAtIHJlc3RvcmVkKCVzKSIsIHByb3RlY3RlZFRoaXMuZ2V0
KCksIGJvb2xTdHJpbmcocmVzdG9yZWQpKTsKKyAgICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5k
bGVyKShCT09MIHJlc3RvcmVkKSA9IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyLmdldCgpOworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN0b3JlZCk7CisgICAgfSk7Cit9CisKK2Jvb2wgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNv
bihWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVh
c29uKQoreworICAgIGlmICghbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJl
SW5QaWN0dXJlU3RhcnRlZCkgeworICAgICAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
cGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bldoZW5TdG9wcGluZ1BpUCA9IGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAocGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiAocmVhc29uID09
IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkIHx8IHJlYXNvbiA9PSBFeGl0
RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkKSkKKyAgICAg
ICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKKyAgICAKKyAgICBtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29u
OjpEb25lQnV0dG9uVGFwcGVkKTsKKworICAgIGlmICghbV93YXRjaGRvZ1RpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIG1fd2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3QoZGVmYXVsdFdhdGNoZG9n
VGltZXJJbnRlcnZhbCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05PX1JFVFVSTl9EVUVf
VE9fQVNTRVJUIHZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGlt
ZXJGaXJlZCgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCVwKSAtIG5vIGV4aXQgZnVsbHNjcmVlbiByZXNw
b25zZSBpbiAlZ3M7IGZvcmNpbmcgZnVsbHNjcmVlbiBoaWRkZW4uIiwgdGhpcywgZGVmYXVsdFdh
dGNoZG9nVGltZXJJbnRlcnZhbC52YWx1ZSgpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKKyAgICBpZiAobV9tb2RlID09IG5ld01vZGUp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9kZSA9IG5ld01vZGU7CisgICAgaWYgKG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgJiB+bW9kZTsKKyAgICBpZiAobV9tb2RlID09IG5ld01v
ZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9kZSA9IG5ld01vZGU7CisgICAgaWYgKG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOworfQorCisjZW5kaWYgLy8gSEFWRShBVktJVCkK
KworYm9vbCBXZWJDb3JlOjpzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKQoreworI2lmIFBMQVRG
T1JNKElPUykgJiYgSEFWRShBVktJVCkKKyAgICByZXR1cm4gW2dldEFWUGljdHVyZUluUGljdHVy
ZUNvbnRyb2xsZXJDbGFzcygpIGlzUGljdHVyZUluUGljdHVyZVN1cHBvcnRlZF07CisjZWxzZQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxl
ci5oCmluZGV4IGU1Y2ZmMTJiYmFmYWU2OTExODMxMjdiZjI4MGZhOTNjZTkwZjI1MTIuLjFiMTBm
YmEwZDQyMTlmMDkxZjczYjhjNzk3MDYwNGJiNWQyMGMwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgKQEAgLTI4LDggKzI4
LDggQEAKICNpbXBvcnQgIkFWS2l0U1BJLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKK2NsYXNzIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OwogfQogCiBAaW50ZXJmYWNlIFdlYkFWTWVkaWFTZWxlY3Rpb25P
cHRpb24gOiBOU09iamVjdApAQCAtNDQsOCArNDQsOCBAQCBjbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDsKIH0KIAogQHByb3BlcnR5IChyZXRhaW4pIEFWUGxheWVyQ29udHJv
bGxlciogcGxheWVyQ29udHJvbGxlclByb3h5OwotQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6
OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBkZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAoYXNzaWduKSBX
ZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCogcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlOworQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiBkZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdCogcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogCiBAcHJvcGVydHkg
KHJlYWRvbmx5KSBCT09MIGNhblNjYW5Gb3J3YXJkOwogQHByb3BlcnR5IEJPT0wgY2FuU2NhbkJh
Y2t3YXJkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxh
eWVyQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXll
ckNvbnRyb2xsZXIubW0KaW5kZXggNmJmYzVjYTFhYTI2YjIzZTVlOGE0N2EyZjY4YzIyODdmMzE4
YWEwMS4uODUwMzA2YWMxNWVkMGExOGJjOGYxN2I0ZjJiN2E2NGMxMGRlZDMyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1t
CkBAIC0zMSw5ICszMSw5IEBACiAKICNpbXBvcnQgIkFWS2l0U1BJLmgiCiAjaW1wb3J0ICJMb2dn
aW5nLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorI2ltcG9y
dCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2lt
cG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyMzMwMmZiZDFiZTY4NjdlOGZmZjVkOWE5NzQwNTYwNzhlOWNkZTY1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0KLSNpZm5kZWYgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXRfaAotI2RlZmlu
ZSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdF9oCi0KLSNpZiBQTEFURk9STShJT1Mp
Ci0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dEVudW1zLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8b2JqYy9vYmpjLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotCi1PQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKLU9CSkNfQ0xB
U1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsK
LU9CSkNfQ0xBU1MgVUlXaW5kb3c7Ci1PQkpDX0NMQVNTIFVJVmlldzsKLQotbmFtZXNwYWNlIFdU
RiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJl
Y3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vz
c2lvbkNoYW5nZU9ic2VydmVyOwotCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdAotICAgIDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBw
dWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gewotCi1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4g
Y3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1vZGVs
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
KCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQotCi0gICAgLy8gV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldE1l
ZGlhU3RhdGUoKSBvdmVycmlkZTsKLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBvdmVy
cmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUg
Y3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFj
a1JhdGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5nZXND
aGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91Ymxl
IGxpdmVVcGRhdGVJbnRlcnZhbCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
YW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92
ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICBXZWJBVlBsYXllckNvbnRy
b2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllckNvbnRyb2xs
ZXIuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0KLSAgICBS
ZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7Ci0gICAg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxscHRy
IH07Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkMTZkYjFlZjRkZGZhM2VmYjA1
M2VlMGY4NTBiOTU5YmZlMmIzNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotI2lmIEhBVkUoQVZLSVQpCi0KLSNpbXBvcnQgIkFWS2l0U1BJ
LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5o
IgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVy
LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2ltcG9ydCA8QVZGb3Vu
ZGF0aW9uL0FWVGltZS5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbXBv
cnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwo
QVZLaXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
JiBtb2RlbCkKLSAgICA6IG1fcGxheWVyQ29udHJvbGxlcihhZG9wdE5TKFtbV2ViQVZQbGF5ZXJD
b250cm9sbGVyIGFsbG9jXSBpbml0XSkpCi0gICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZt
b2RlbCkKLXsKLSAgICBtb2RlbC5hZGRDbGllbnQoKnRoaXMpOwotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOnRoaXNdOwotICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0RGVsZWdhdGU6Jm1vZGVsXTsKLQotICAgIGR1cmF0aW9uQ2hhbmdlZChtb2Rl
bC5kdXJhdGlvbigpKTsKLSAgICBjdXJyZW50VGltZUNoYW5nZWQobW9kZWwuY3VycmVudFRpbWUo
KSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICBidWZm
ZXJlZFRpbWVDaGFuZ2VkKG1vZGVsLmJ1ZmZlcmVkVGltZSgpKTsKLSAgICByYXRlQ2hhbmdlZCht
b2RlbC5pc1BsYXlpbmcoKSwgbW9kZWwucGxheWJhY2tSYXRlKCkpOwotICAgIHNlZWthYmxlUmFu
Z2VzQ2hhbmdlZChtb2RlbC5zZWVrYWJsZVJhbmdlcygpLCBtb2RlbC5zZWVrYWJsZVRpbWVSYW5n
ZXNMYXN0TW9kaWZpZWRUaW1lKCksIG1vZGVsLmxpdmVVcGRhdGVJbnRlcnZhbCgpKTsKLSAgICBj
YW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKG1vZGVsLmNhblBsYXlGYXN0UmV2ZXJzZSgpKTsKLSAg
ICBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobW9kZWwuYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSwgbW9kZWwuYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgbGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucygpLCBtb2RlbC5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpOwotICAgIGV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKG1vZGVsLmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCksIG1v
ZGVsLmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tM
b2NhbGl6ZWREZXZpY2VOYW1lKCkpOwotICAgIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
Q2hhbmdlZChtb2RlbC53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpKTsKLX0KLQotV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdCgpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2U6bnVsbHB0cl07Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRFeHRlcm5hbFBs
YXliYWNrQWN0aXZlOmZhbHNlXTsKLQotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmVzZXRNZWRpYVN0YXRlKCkKLXsKLSAgICBb
bV9wbGF5ZXJDb250cm9sbGVyIHJlc2V0TWVkaWFTdGF0ZV07Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24p
Ci17Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5
ZXJDb250cm9sbGVyLmdldCgpOwotCi0gICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRp
b24gPSBkdXJhdGlvbjsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbldpdGhp
bkVuZFRpbWVzID0gZHVyYXRpb247Ci0KLSAgICAvLyBGSVhNRTogd2UgdGFrZSB0aGlzIGFzIGFu
IGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KLSAgICBwbGF5ZXJDb250cm9sbGVy
LmNhblBsYXkgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5jYW5QYXVzZSA9IFlFUzsKLSAg
ICBwbGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwotICAgIHBsYXllckNv
bnRyb2xsZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIuY2Fu
U2VlayA9IFlFUzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJv
bGxlclN0YXR1c1JlYWR5VG9QbGF5OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSkKLXsKLSAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW21f
cGxheWVyQ29udHJvbGxlciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7Ci0gICAgQVZWYWx1ZVRp
bWluZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFu
Y2hvclZhbHVlOmN1cnJlbnRUaW1lCi0gICAgICAgIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1l
U3RhbXAgcmF0ZTowXTsKLQotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0VGltaW5nOnRpbWlu
Z107Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVk
VGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBXZWJBVlBsYXllckNvbnRy
b2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAg
ZG91YmxlIGR1cmF0aW9uID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb247Ci0gICAg
ZG91YmxlIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWU7Ci0gICAgaWYgKCFkdXJhdGlvbikKLSAgICAg
ICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IDA7Ci0gICAgZWxzZQotICAgICAgICBub3JtYWxp
emVkQnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247Ci0gICAgcGxheWVyQ29u
dHJvbGxlci5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVkQnVmZmVyZWRUaW1l
KV07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFu
Z2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17Ci0gICAgW21fcGxheWVy
Q29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5nZXNDaGFu
Z2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1l
LCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewotICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gc2Vla2FibGVSYW5nZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgp
OyBpKyspIHsKLSAgICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJhbmdlcy5zdGFydChpKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKLSAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMuZW5kKGkp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotCi0gICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01U
aW1lUmFuZ2VNYWtlKENNVGltZU1ha2VXaXRoU2Vjb25kcyhzdGFydCwgMTAwMCksIENNVGltZU1h
a2VXaXRoU2Vjb25kcyhlbmQtc3RhcnQsIDEwMDApKTsKLSAgICAgICAgW3NlZWthYmxlUmFuZ2Vz
IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOwotICAgIH0K
LQotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnNlZWthYmxl
UmFuZ2VzLmdldCgpXTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJh
bmdlc0xhc3RNb2RpZmllZFRpbWU6IGxhc3RNb2RpZmllZFRpbWVdOwotICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0TGl2ZVVwZGF0ZUludGVydmFsOmxpdmVVcGRhdGVJbnRlcnZhbF07Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCi17Ci0gICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKLX0KLQotc3RhdGlj
IFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBvcHRp
b24gOiBvcHRpb25zKSB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlhU2VsZWN0aW9uT3B0
aW9uPiB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxv
Y10gaW5pdF0pOwotICAgICAgICBbd2ViT3B0aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9w
dGlvbi5kaXNwbGF5TmFtZV07Ci0gICAgICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRp
b24uZ2V0KCldOwotICAgIH0KLSAgICByZXR1cm4gd2ViT3B0aW9uczsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJP
cHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwotICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07
Ci0gICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCi0gICAgICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dl
Yk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZElu
ZGV4KV1dOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhv
cHRpb25zKTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07Ci0gICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2Vi
T3B0aW9ucyBjb3VudF0pCi0gICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRp
Y19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5h
YmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
IHRhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBB
VlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZSBleHRlcm5hbFBsYXliYWNrVHlw
ZSA9IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlTm9uZTsKLSAgICBpZiAo
dGFyZ2V0VHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkp
Ci0gICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJu
YWxQbGF5YmFja1R5cGVBaXJQbGF5OwotICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCkKLSAgICAgICAgZXh0ZXJuYWxQbGF5
YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0Owot
Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJD
b250cm9sbGVyLmdldCgpOwotICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0Fp
clBsYXlEZXZpY2VMb2NhbGl6ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKLSAgICBwbGF5
ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7
Ci0gICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgW21fcGxheWVy
Q29udHJvbGxlciBzZXRBbGxvd3NFeHRlcm5hbFBsYXliYWNrOiFkaXNhYmxlZF07Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11
dGVkKQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0TXV0ZWQ6bXV0ZWRdOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKLXsKLSAg
ICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bnVsbHB0cl07Ci0gICAgbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsID0gbnVsbHB0cjsKLX0KLQotfQotCi0jZW5kaWYgLy8gSEFWRShBVktJVCkKLSNlbmRpZiAv
LyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQppbmRleCBiMDYw
MTE4OTc2Y2IwYjQwYTI5MTM2ZTNlZmMwNDc2ODUwODA2Zjc0Li5lNDU1NjYwMWFhNTY2NzY0NjIz
ZGU2YjRlOTFhZjFkMmU4YzI2MzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0K
QEAgLTMxLDEzICszMSwxMyBAQAogCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRp
YVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCiAjaW1w
b3J0ICJRdWFydHpDb3JlU1BJLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKKyNp
bXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCisjaW1wb3J0ICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2lt
cG9ydCA8VUlLaXQvVUlWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgpAQCAt
OTIsMjQgKzkyLDI0IEBAIHN0YXRpYyBJbnRSZWN0IGVsZW1lbnRSZWN0SW5XaW5kb3coSFRNTFZp
ZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQogICAgIHJldHVybiB2aWV3LT5jb252ZXJ0VG9Db250
YWluaW5nV2luZG93KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKIH0KIAot
Y2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ7CitjbGFzcyBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDsKIAogQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyIChkZWxlZ2F0ZSkKLS0odm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dDsKKy0odm9pZClkaWRGaW5p
c2hGdWxsc2NyZWVuOihWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dDsK
IEBlbmQKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQgZmluYWwK
LSAgICA6IHByaXZhdGUgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICAsIHByaXZhdGUgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHByaXZhdGUgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIKLSAgICAsIHByaXZhdGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwK
LSAgICAsIHByaXZhdGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4geworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQgZmluYWwKKyAgICA6
IHByaXZhdGUgVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICAsIHByaXZhdGUgVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDbGllbnQKKyAgICAsIHByaXZhdGUgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIKKyAgICAsIHByaXZhdGUgUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICAsIHByaXZhdGUgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gewogCiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gY3JlYXRlKCkKKyAg
ICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBjcmVhdGUoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRDb250cm9sbGVy
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpIHsgbV9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsgfQpAQCAtMTE5LDIyICsxMTksMjIgQEAgcHVibGljOgogICAgIHZvaWQg
aW52YWxpZGF0ZSgpOwogCiBwcml2YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0KCkgeyB9CisgICAgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQoKSB7
IH0KIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisgICAgLy8gVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKICAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigp
IG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyB9CiAg
ICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ2xlYW51
cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lu
bGluZSgpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQK
KyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAogICAgIHZvaWQgaGFzVmlkZW9DaGFu
Z2VkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Ci0gICAgdm9pZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYpIG92ZXJyaWRlOworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisgICAgdm9pZCBhZGRD
bGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJl
bW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgcGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKICAgICB2b2lk
IHRvZ2dsZVBsYXlTdGF0ZSgpIG92ZXJyaWRlOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCB0b2dnbGVNdXRlZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TXV0ZWQoYm9v
bCkgZmluYWw7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIC8v
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91
YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGJ1ZmZlcmVkVGlt
ZUNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKQEAgLTE3OSwzOSArMTc5LDM5IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwogICAg
IHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJy
aWRlOwogICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVu
YWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICB2b2lk
IGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERl
dmljZU5hbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIG92
ZXJyaWRlOwogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICB2b2lkIGFkZENs
aWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Cisg
ICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXF1ZXN0RnVsbHNj
cmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29s
IGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VmlkZW9M
YXllckZyYW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jh
dml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dy
YXZpdHkpIG92ZXJyaWRlOwogICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSGFzaFNldDxXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fcGxheWJhY2tDbGllbnRzOwotICAgIEhhc2hTZXQ8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2Z1bGxzY3JlZW5DbGllbnRzOwotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtX2Z1bGxzY3Jl
ZW5Nb2RlbDsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+
IG1fcGxheWJhY2tNb2RlbDsKKyAgICBIYXNoU2V0PFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
Kj4gbV9wbGF5YmFja0NsaWVudHM7CisgICAgSGFzaFNldDxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCo+IG1fZnVsbHNjcmVlbkNsaWVudHM7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IG1fZnVsbHNjcmVlbk1vZGVsOworICAgIFJlZlB0cjxQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbV9wbGF5YmFja01vZGVsOwogICAgIFJlZlB0cjxIVE1M
VmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRhaW5QdHI8VUlWaWV3PiBtX3Zp
ZGVvRnVsbHNjcmVlblZpZXc7CiAgICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXI+IG1fY29udHJvbGxlcjsKIH07CiAKLSNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcgorI3ByYWdtYSBtYXJrIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNldHVw
RnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRT
ZXR1cEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIFJldGFp
blB0cjxDQUxheWVyPiB2aWRlb0Z1bGxzY3JlZW5MYXllciA9IFttX3ZpZGVvRnVsbHNjcmVlblZp
ZXcgbGF5ZXJdOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90
ZWN0ZWRUaGlzLCB0aGlzLCB2aWRlb0Z1bGxzY3JlZW5MYXllcl0gewogICAgICAgICBbdmlkZW9G
dWxsc2NyZWVuTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6
Q29sb3I6OnRyYW5zcGFyZW50KV07CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcih2aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgW3Byb3RlY3RlZFRo
aXMsIHRoaXNdIHsKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCiAgICAgfSk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVu
KCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2Ny
ZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBtX2Z1
bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsLCBbcHJvdGVjdGVkVGhp
cywgdGhpc10gewogICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKQEAgLTIzNSwxNSArMjM1LDE1IEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVu
KCkKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFk
KCkpOwotICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxscHRy
KTsKLSAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIo
bnVsbHB0cik7CisgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxw
dHIpOworICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihu
dWxscHRyKTsKICAgICBtX2ludGVyZmFjZSA9IG51bGxwdHI7CiAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5WaWV3ID0gbmlsOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4o
W3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRW
aWRlb0VsZW1lbnQobnVsbHB0cik7CkBAIC0yNTYsMTAgKzI1NiwxMCBAQCB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCiAgICAg
fSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90
ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIEludFJlY3QgY2xpZW50UmVjdCA9IGVsZW1lbnRS
ZWN0SW5XaW5kb3cobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY2xpZW50
UmVjdF0gewpAQCAtMjY4LDEyICsyNjgsMTIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKICAgICB9KTsKIH0K
IAotI3ByYWdtYSBtYXJrIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisjcHJhZ21hIG1h
cmsgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUg
ZHVyYXRpb24pCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgZHVyYXRpb25dIHsKICAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7CiAgICAgICAgIH0pOwpAQCAt
Mjg0LDEwICsyODQsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKICAgICAgICAgY2xpZW50LT5kdXJh
dGlvbkNoYW5nZWQoZHVyYXRpb24pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3Vi
bGUgYW5jaG9yVGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1
cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQog
ewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3Byb3RlY3RlZFRoaXMsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lXSB7CiAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hvclRp
bWUpOwogICAgICAgICB9KTsKQEAgLTI5OCwxMCArMjk4LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVu
dFRpbWUsCiAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBh
bmNob3JUaW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVm
ZmVyZWRUaW1lKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGJ1ZmZlcmVkVGltZV0gewogICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwogICAg
ICAgICB9KTsKQEAgLTMxMiwxMCArMzEyLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltCiAg
ICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZChib29s
IGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNr
UmF0ZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZV0gewogICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1Jh
dGUpOwogICAgICAgICB9KTsKQEAgLTMyNiwxMCArMzI2LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9h
dCBwbGF5CiAgICAgICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1Jh
dGUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNW
aWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewogICAgIGlmIChXZWJU
aHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRo
aXMsIGhhc1ZpZGVvXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5oYXNWaWRlb0NoYW5n
ZWQoaGFzVmlkZW8pOwogICAgICAgICB9KTsKQEAgLTM0MCwxMCArMzQwLDEwIEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhh
c1ZpZGVvKQogICAgICAgICBjbGllbnQtPmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9u
c0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZs
b2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQo
KSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRGltZW5z
aW9ucyA9IHZpZGVvRGltZW5zaW9uc10gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+dmlk
ZW9EaW1lbnNpb25zQ2hhbmdlZCh2aWRlb0RpbWVuc2lvbnMpOwogICAgICAgICB9KTsKQEAgLTM1
NCwxMCArMzU0LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplCiAgICAgICAgIGNsaWVudC0+
dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh2aWRlb0RpbWVuc2lvbnMpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29u
c3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJs
ZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywg
ZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCiB7CiAg
ICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
cHJvdGVjdGVkVGhpcywgcGxhdGZvcm1UaW1lUmFuZ2VzID0gdGltZVJhbmdlcy5yYW5nZXMoKSwg
bGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsXSB7CiAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQoVGltZVJhbmdlczo6Y3JlYXRlKHBsYXRm
b3JtVGltZVJhbmdlcyksIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7CiAg
ICAgICAgIH0pOwpAQCAtMzY4LDEwICszNjgsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMK
ICAgICAgICAgY2xpZW50LT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1v
ZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNh
blBsYXlGYXN0UmV2ZXJzZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCiB7CiAg
ICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
cHJvdGVjdGVkVGhpcywgY2FuUGxheUZhc3RSZXZlcnNlXSB7CiAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7CiAg
ICAgICAgIH0pOwpAQCAtMzkxLDEwICszOTEsMTAgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gaXNvbGF0ZWRDb3B5KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGkK
ICAgICByZXR1cm4gb3B0aW9uc0NvcHk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKFdlYlRocmVhZElz
Q3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgb3B0
aW9ucyA9IGlzb2xhdGVkQ29weShvcHRpb25zKSwgc2VsZWN0ZWRJbmRleF0gewogICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlv
bnMsIHNlbGVjdGVkSW5kZXgpOwogICAgICAgICB9KTsKQEAgLTQwNSwxMCArNDA1LDEwIEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zCiAgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsK
ICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtwcm90ZWN0ZWRUaGlzLCBvcHRpb25zID0gaXNvbGF0ZWRDb3B5KG9wdGlvbnMpLCBzZWxlY3Rl
ZEluZGV4XSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5sZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKICAgICAgICAgfSk7CkBA
IC00MTksNyArNDE5LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY28KICAgICAgICAgY2xpZW50
LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXZpY2VOYW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewogICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHRoaXMsIGVu
YWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lLmlz
b2xhdGVkQ29weSgpXSB7CkBAIC00MzMsMTAgKzQzMywxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJs
ZWQsCiAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlw
ZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29s
IGRpc2FibGVkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCiB7CiAgICAgaWYg
KFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwog
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgZGlzYWJsZWRdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7CiAgICAgICAgIH0pOwpAQCAt
NDQ3LDEwICs0NDcsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGIKICAgICAgICAgY2xpZW50
LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5nZWQoYm9v
bCBtdXRlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hh
bmdlZChib29sIG11dGVkKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAg
ICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIG11dGVkXSB7CiAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5tdXRlZENoYW5nZWQobXV0ZWQpOwogICAgICAgICB9KTsKQEAgLTQ2
MSwzNCArNDYxLDM0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQogICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZCht
dXRlZCk7CiB9CiAKLSNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorI3ByYWdt
YSBtYXJrIFZpZGVvRnVsbHNjcmVlbk1vZGVsCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYg
Y2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50
KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKCFtX2Z1
bGxzY3JlZW5DbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2Z1bGxzY3JlZW5DbGll
bnRzLmFkZCgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGll
bnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQo
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9mdWxs
c2NyZWVuQ2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9mdWxsc2NyZWVuQ2xpZW50
cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hl
ZFdpdGhNZWRpYSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgbW9kZSwgZmlu
aXNoZWRXaXRoTWVkaWFdIHsKICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbk1vZGVsKQogICAgICAg
ICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtb2RlLCBmaW5p
c2hlZFdpdGhNZWRpYSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgZnJhbWUpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxv
YXRSZWN0IGZyYW1lKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHZpZGVvRnVsbHNjcmVlbkxheWVyID0g
W21fdmlkZW9GdWxsc2NyZWVuVmlldyBsYXllcl07CiAgICAgCiAgICAgW3ZpZGVvRnVsbHNjcmVl
bkxheWVyIHNldFN1YmxheWVyVHJhbnNmb3JtOlt2aWRlb0Z1bGxzY3JlZW5MYXllciB0cmFuc2Zv
cm1dXTsKQEAgLTUwOCwxMDUgKzUwOCwxMDUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Vmlk
ZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSB2aWRl
b0dyYXZpdHkpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRl
b0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jh
dml0eSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgdmlkZW9HcmF2aXR5XSB7
CiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVsbHNjcmVl
bk1vZGVsLT5zZXRWaWRlb0xheWVyR3Jhdml0eSh2aWRlb0dyYXZpdHkpOwogICAgIH0pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIG1vZGVdIHsKICAgICAgICAgaWYgKG1f
ZnVsbHNjcmVlbk1vZGVsKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChtb2RlKTsKICAgICB9KTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6aXNWaXNpYmxlKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9mdWxsc2NyZWVu
TW9kZWwtPmlzVmlzaWJsZSgpIDogZmFsc2U7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1bGxzY3JlZW5Nb2Rl
bC0+aGFzVmlkZW8oKSA6IGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc011dGVkKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmlzTXV0ZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmlzTXV0ZWQo
KSA6IGZhbHNlOwogfQogCi1GbG9hdFNpemUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnZpZGVvRGltZW5zaW9ucygpIGNvbnN0CitGbG9hdFNpemUgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9ucygpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9mdWxsc2Ny
ZWVuTW9kZWwtPnZpZGVvRGltZW5zaW9ucygpIDogRmxvYXRTaXplKCk7CiB9CiAKLSNwcmFnbWEg
bWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nl
c3Npb25Nb2RlbAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojph
ZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCghbV9wbGF5YmFja0NsaWVudHMuY29u
dGFpbnMoJmNsaWVudCkpOwogICAgIG1fcGxheWJhY2tDbGllbnRzLmFkZCgmY2xpZW50KTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50
KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9wbGF5YmFja0NsaWVudHMuY29udGFpbnMo
JmNsaWVudCkpOwogICAgIG1fcGxheWJhY2tDbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSgpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KCkKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJv
dGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAg
ICAgICAgbV9wbGF5YmFja01vZGVsLT5wbGF5KCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBhdXNlKCkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnBhdXNlKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhp
cywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9w
bGF5YmFja01vZGVsLT5wYXVzZSgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKIHsKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihb
cHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAg
ICAgICAgICAgbV9wbGF5YmFja01vZGVsLT50b2dnbGVQbGF5U3RhdGUoKTsKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlTXV0ZWQo
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQog
ewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
V2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXli
YWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnRvZ2dsZU11dGVkKCk7CiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dE11dGVkKGJvb2wgbXV0ZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZXRNdXRlZChib29sIG11dGVkKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAg
IFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIodGhpcyksIHRoaXMsIG11
dGVkXSB7CkBAIC02MTUsMTUxICs2MTUsMTUxIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKIHsK
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdl
YlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFj
a01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjcnViYmluZygpOwog
ICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpl
bmRTY3J1YmJpbmcoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5k
U2NydWJiaW5nKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAg
ICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5lbmRT
Y3J1YmJpbmcoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCiB7CiAgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4o
W3Byb3RlY3RlZFRoaXMsIHRoaXMsIHRpbWVdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2Rl
bCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+c2Vla1RvVGltZSh0aW1lKTsKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNl
ZWsoZG91YmxlIHRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpm
YXN0U2Vlayhkb3VibGUgdGltZSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywg
dGltZV0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5
YmFja01vZGVsLT5mYXN0U2Vlayh0aW1lKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQog
ewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
V2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXli
YWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2Nhbm5pbmdGb3J3
YXJkKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90
ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAg
ICAgICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY2Fubmlu
ZygpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY2FubmluZygp
CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxh
eWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZW5kU2Nhbm5pbmcoKTsK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGluZGV4XSB7CiAgICAgICAg
IGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0
X3QgaW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3Rl
ZFRoaXMsIHRoaXMsIGluZGV4XSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAg
ICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7
CiAgICAgfSk7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZHVyYXRpb24oKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpkdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAg
cmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+ZHVyYXRpb24oKSA6IDA7
CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVu
dFRpbWUoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0
dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+Y3VycmVudFRpbWUoKSA6IDA7
CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YnVmZmVy
ZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YnVmZmVyZWRUaW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBy
ZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5idWZmZXJlZFRpbWUoKSA6
IDA7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzUGxh
eWluZygpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Bs
YXlpbmcoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBt
X3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmlzUGxheWluZygpIDogZmFsc2U7CiB9
CiAKLWZsb2F0IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5YmFja1Jh
dGUoKSBjb25zdAorZmxvYXQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXli
YWNrUmF0ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJu
IG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+cGxheWJhY2tSYXRlKCkgOiAwOwog
fQogCi1SZWY8VGltZVJhbmdlcz4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKK1JlZjxUaW1lUmFuZ2VzPiBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAogewogICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9k
ZWwtPnNlZWthYmxlUmFuZ2VzKCkgOiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAotZG91Ymxl
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVRpbWVSYW5nZXNM
YXN0TW9kaWZpZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1f
cGxheWJhY2tNb2RlbC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDogMDsK
IH0KIAotZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsaXZlVXBk
YXRlSW50ZXJ2YWwoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFk
KCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmxpdmVV
cGRhdGVJbnRlcnZhbCgpIDogMDsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxh
eWJhY2tNb2RlbC0+Y2FuUGxheUZhc3RSZXZlcnNlKCkgOiBmYWxzZTsKIH0KIAotVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIGlm
IChtX3BsYXliYWNrTW9kZWwpCkBAIC03NjcsMTMgKzc2NywxMyBAQCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01l
ZGlhU2VsZQogICAgIHJldHVybiB7IH07CiB9CiAKLXVpbnQ2NF90IFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit1aW50
NjRfdCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVk
SW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBt
X3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4
KCkgOiAtMTsKIH0KIAotVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNv
bnN0CitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBpZiAobV9wbGF5YmFja01vZGVsKQpAQCAtNzgxLDMx
ICs3ODEsMzEgQEAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2UKICAgICByZXR1cm4geyB9OwogfQog
Ci11aW50NjRfdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1l
ZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit1aW50NjRfdCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJh
Y2tNb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIDogLTE7CiB9CiAKLWJvb2wgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVk
KCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFs
UGxheWJhY2tFbmFibGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAg
ICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5leHRlcm5hbFBsYXli
YWNrRW5hYmxlZCgpIDogZmFsc2U7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAorUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tN
b2RlbC0+ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSA6IFRhcmdldFR5cGVOb25lOwogfQog
Ci1TdHJpbmcgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxh
eWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QKK1N0cmluZyBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBj
b25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNr
TW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VO
YW1lKCkgOiBTdHJpbmcoKTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAorYm9vbCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3Bs
YXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkKCkgOiB0cnVlOwpAQCAtODEzLDE2ICs4MTMsMTYgQEAgYm9vbCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25z
dAogCiAjcHJhZ21hIG1hcmsgT3RoZXIKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVu
dCwgVUlWaWV3ICp2aWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVs
bHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFVJVmlldyAqdmlldywgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBSZXRhaW5QdHI8VUlWaWV3PiB2aWV3UmVmID0gdmll
dzsKICAgICBtX3ZpZGVvRWxlbWVudCA9ICZ2aWRlb0VsZW1lbnQ7Ci0gICAgbV9wbGF5YmFja01v
ZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOworICAg
IG1fcGxheWJhY2tNb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVh
dGUoKTsKICAgICBtX3BsYXliYWNrTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7CiAgICAgbV9wbGF5
YmFja01vZGVsLT5zZXRNZWRpYUVsZW1lbnQobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwogCi0gICAg
bV9mdWxsc2NyZWVuTW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
Y3JlYXRlKCk7CisgICAgbV9mdWxsc2NyZWVuTW9kZWwgPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6Y3JlYXRlKCk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgq
dGhpcyk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRWxlbWVudChtX3ZpZGVvRWxl
bWVudC5nZXQoKSk7CiAKQEAgLTgzMiwxNSArODMyLDE1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2
aWRlCiAgICAgRmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSA9IEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHZpZGVvRWxlbWVudENsaWVudFJlY3Quc2l6ZSgpKTsKICAgICBtX2Z1bGxzY3JlZW5Nb2Rl
bC0+c2V0VmlkZW9MYXllckZyYW1lKHZpZGVvTGF5ZXJGcmFtZSk7CiAKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtw
cm90ZWN0ZWRUaGlzLCB0aGlzLCB2aWRlb0VsZW1lbnRDbGllbnRSZWN0LCB2aWV3UmVmLCBtb2Rl
LCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlXSB7CiAgICAgICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogCi0gICAgICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gc2Vzc2lv
bkludGVyZmFjZSA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoKnRo
aXMpOwotICAgICAgICBtX2ludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpjcmVhdGUoc2Vzc2lvbkludGVyZmFjZS5nZXQoKSk7Ci0gICAgICAgIG1faW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKLSAgICAgICAgbV9p
bnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKHRoaXMpOwotICAgICAgICBtX2lu
dGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CisgICAg
ICAgIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gc2Vzc2lvbkludGVyZmFjZSA9
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoKnRoaXMpOworICAgICAgICBt
X2ludGVyZmFjZSA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoc2Vzc2lv
bkludGVyZmFjZS5nZXQoKSk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVs
bHNjcmVlbk1vZGVsKHRoaXMpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CiAKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5WaWV3
ID0gYWRvcHROUyhbYWxsb2NVSVZpZXdJbnN0YW5jZSgpIGluaXRdKTsKICAgICAgICAgCkBAIC04
NDgsMjUgKzg0OCwyNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZQogICAgIH0pOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleGl0RnVsbHNjcmVlbigp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleGl0RnVsbHNjcmVlbigp
CiB7CiAgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpIHx8IGlzTWFpblRocmVhZCgpKTsK
ICAgICBJbnRSZWN0IGNsaWVudFJlY3QgPSBlbGVtZW50UmVjdEluV2luZG93KG1fdmlkZW9FbGVt
ZW50LmdldCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjbGllbnRSZWN0
XSB7CiAgICAgICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgICAgICBtX2ludGVyZmFjZS0+
ZXhpdEZ1bGxzY3JlZW4oY2xpZW50UmVjdCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4o
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEhpZGVBbmRF
eGl0RnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgbV9pbnRl
cmZhY2UtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogQGltcGxlbWVudGF0
aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gX2NvbnRleHQ7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBfY29udGV4dDsKICAgICBSZWZQdHI8SFRNTFZpZGVv
RWxlbWVudD4gX3ZpZGVvRWxlbWVudDsKIH0KIApAQCAtODkxLDcgKzg5MSw3IEBAIC0gKEhUTUxW
aWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudAogLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KFVJVmll
dyAqKXZpZXcgbW9kZTooSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KW1vZGUKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIF9jb250ZXh0ID0gV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNyZWF0ZSgpOworICAgIF9jb250ZXh0
ID0gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNyZWF0ZSgpOwogICAgIF9jb250
ZXh0LT5zZXRDb250cm9sbGVyKHNlbGYpOwogICAgIF9jb250ZXh0LT5zZXRVcEZ1bGxzY3JlZW4o
Kl92aWRlb0VsZW1lbnQuZ2V0KCksIHZpZXcsIG1vZGUpOwogfQpAQCAtOTA5LDcgKzkwOSw3IEBA
IC0gKHZvaWQpcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbgogICAgICAgICBfY29udGV4dC0+
cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwogfQogCi0tICh2b2lkKWRpZEZpbmlzaEZ1
bGxzY3JlZW46KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0Cist
ICh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0Kiljb250ZXh0CiB7CiAgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKICAgICBB
U1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQgPT0gX2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiNGRiZGNjOGIw
ZGViYTljODAyODAyMzQ0NWM4NzRkYTExZjc0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVm
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0X2gKLSNkZWZpbmUgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXRfaAotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdC5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0jaW5j
bHVkZSA8b2JqYy9vYmpjLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLU9CSkNfQ0xBU1MgQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKLU9CSkNf
Q0xBU1MgVUlXaW5kb3c7Ci1PQkpDX0NMQVNTIFVJVmlldzsKLU9CSkNfQ0xBU1MgQ0FMYXllcjsK
LU9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9sbGVyOwotT0JKQ19DTEFTUyBXZWJBVlBsYXll
ckxheWVyVmlldzsKLU9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJMYXllcjsKLU9CSkNfQ0xBU1MgV2Vi
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlOwotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNz
IFN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNsYXNz
IEZsb2F0U2l6ZTsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOwotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7Ci0gICAgCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBmaW5hbAotICAgIDogcHVibGljIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gewotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0Jik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlciopOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9Ci0KLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChj
b25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChi
b29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiwgY29u
c3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyAqLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNr
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKGNvbnN0IEludFJl
Y3QmIGZpbmFsUmVjdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBG
dWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUo
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVs
bHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwcmVwYXJlZFRvUmV0
dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KTsKLQot
ICAgIGVudW0gY2xhc3MgRXhpdEZ1bGxTY3JlZW5SZWFzb24gewotICAgICAgICBEb25lQnV0dG9u
VGFwcGVkLAotICAgICAgICBGdWxsU2NyZWVuQnV0dG9uVGFwcGVkLAotICAgICAgICBQaW5jaEdl
c3R1cmVIYW5kbGVkLAotICAgICAgICBSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQsCi0g
ICAgICAgIFBpY3R1cmVJblBpY3R1cmVTdGFydGVkCi0gICAgfTsKLQotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKiBtb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWw7IH0KLSAgICBib29sIHNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihFeGl0RnVsbFNj
cmVlblJlYXNvbik7Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICBib29sIGFsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzUGljdHVyZUluUGlj
dHVyZVBsYXliYWNrOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBtYXlBdXRvbWF0aWNhbGx5
U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0OwotICAgIHZvaWQgZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChib29sKT4mJiBjYWxsYmFjayk7Ci0g
ICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0OwotICAgIHZvaWQg
YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKLQotICAgIHZvaWQgd2lsbFN0YXJ0UGljdHVy
ZUluUGljdHVyZSgpOwotICAgIHZvaWQgZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAg
dm9pZCBmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgd2lsbFN0b3BQ
aWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBkaWRTdG9wUGljdHVyZUluUGljdHVyZSgpOwot
ICAgIHZvaWQgcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5k
bGVyKHZvaWQgKF4pKEJPT0wpKTsKLQotICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgYm9vbCBoYXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJl
dHVybiBtX21vZGUgJiBtb2RlOyB9Ci0gICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBt
b2RlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOwotICAg
IHZvaWQgYmVnaW5TZXNzaW9uKCk7Ci0gICAgdm9pZCBlbnRlclBpY3R1cmVJblBpY3R1cmUoKTsK
LSAgICB2b2lkIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7Ci0gICAgdm9pZCB3YXRjaGRvZ1Rp
bWVyRmlyZWQoKTsKLSAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIo
KSBjb25zdDsKLQotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gbV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0gICAgUmV0YWluUHRyPFdlYkFWUGxheWVyVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZT4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlOwotICAgIFJl
dGFpblB0cjxBVlBsYXllclZpZXdDb250cm9sbGVyPiBtX3BsYXllclZpZXdDb250cm9sbGVyOwot
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVs
bHB0ciB9OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIgfTsKLQotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVz
ZWQgd2hlbiBmdWxsc2NyZWVuIGlzIHByZXNlbnRlZCBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KLSAg
ICBSZXRhaW5QdHI8VUlXaW5kb3c+IG1fd2luZG93OwotICAgIFJldGFpblB0cjxVSVZpZXdDb250
cm9sbGVyPiBtX3ZpZXdDb250cm9sbGVyOwotICAgIFJldGFpblB0cjxVSVZpZXc+IG1fcGFyZW50
VmlldzsKLSAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IG1fcGFyZW50V2luZG93OwotICAgIFJldGFp
blB0cjxXZWJBVlBsYXllckxheWVyVmlldz4gbV9wbGF5ZXJMYXllclZpZXc7Ci0gICAgSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKLSAgICBXVEY6OkZ1bmN0aW9u
PHZvaWQoYm9vbCk+IG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2s7Ci0gICAgUnVuTG9vcDo6VGlt
ZXI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1fd2F0Y2hkb2dUaW1lcjsKLSAg
ICBib29sIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fZXhpdFJlcXVlc3RlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2V4aXRDb21wbGV0ZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9lbnRlclJlcXVlc3RlZCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9z
aG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJl
U3RvcCB7IGZhbHNlIH07Ci0KLSAgICB2b2lkIGRvRW50ZXJGdWxsc2NyZWVuKCk7Ci19OwotCi19
Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZmZmZjMjAwNDhkYmU0M2JkYjU0ODE3ODY4YjJjYTM3
Mjc3YzYzZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oIgotCi0jaWYgSEFWRShBVktJVCkKLQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNp
bXBvcnQgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0
ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNp
bXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIK
LSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5o
PgotI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KLSNpbXBvcnQgPG9iamMvbWVzc2FnZS5oPgotI2lt
cG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFNvZnQtbGlua2luZyBoZWFkZXJzIG11c3Qg
YmUgaW5jbHVkZWQgbGFzdCBzaW5jZSB0aGV5ICNkZWZpbmUgZnVuY3Rpb25zLCBjb25zdGFudHMs
IGV0Yy4KLSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdP
UksoQVZGb3VuZGF0aW9uKQotU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJM
YXllcikKLVNPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZp
dHlSZXNpemUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBB
VkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBOU1N0cmluZyAqKQotU09GVF9MSU5LX0NP
TlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGws
IE5TU3RyaW5nICopCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCi1TT0ZU
X0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXIp
Ci1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGxheWVyVmlld0NvbnRyb2xsZXIp
Ci1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIF9fQVZQbGF5ZXJMYXllclZpZXcpCi0K
LVNPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJQXBw
bGljYXRpb24pCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJU2NyZWVuKQotU09GVF9MSU5LX0NM
QVNTKFVJS2l0LCBVSVdpbmRvdykKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3KQotU09G
VF9MSU5LX0NMQVNTKFVJS2l0LCBVSVZpZXdDb250cm9sbGVyKQotU09GVF9MSU5LX0NMQVNTKFVJ
S2l0LCBVSUNvbG9yKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJS2l0LCBVSVRleHRFZmZlY3RzQmVu
ZWF0aFN0YXR1c0JhcldpbmRvd0xldmVsLCBVSVdpbmRvd0xldmVsKQotCi1zdGF0aWMgVUlDb2xv
ciAqY2xlYXJVSUNvbG9yKCkKLXsKLSAgICByZXR1cm4gKFVJQ29sb3IgKilbZ2V0VUlDb2xvckNs
YXNzKCkgY2xlYXJDb2xvcl07Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgY29uc3Qg
Y2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAgICByZXR1cm4gdmFsID8gInRydWUiIDog
ImZhbHNlIjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBkZWZhdWx0V2F0Y2hk
b2dUaW1lckludGVydmFsIHsgMV9zIH07Ci0KLUBjbGFzcyBXZWJBVk1lZGlhU2VsZWN0aW9uT3B0
aW9uOwotCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5T
T2JqZWN0IDxBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGVfV2ViS2l0T25seT4gewotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRl
cmZhY2U7Ci19Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci0tIChCT09MKXBsYXllclZpZXdDb250cm9sbGVy
OihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRXhp
dEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3Jl
ZW5SZWFzb24pcmVhc29uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJWaWV3
Q29udHJvbGxlckRlbGVnYXRlCi0tIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCop
ZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIHJldHVybiBfZnVsbHNjcmVlbkludGVyZmFjZS5n
ZXQoKTsKLX0KLQotLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIF9mdWxsc2Ny
ZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKLX0KLQotLSAodm9pZClwbGF5ZXJW
aWV3Q29udHJvbGxlcldpbGxTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRy
b2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJW
aWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT53aWxsU3RhcnRQ
aWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJEaWRT
dGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3
Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0g
ICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsK
LX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckZhaWxlZFRvU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgd2l0
aEVycm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0Nv
bnRyb2xsZXIpOwotICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVu
SW50ZXJmYWNlLT5mYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lk
KXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZp
ZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0o
cGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+d2ls
bFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xs
ZXJEaWRTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXll
clZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVy
KTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJl
KCk7Ci19Ci0KLXN0YXRpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1
bGxTY3JlZW5SZWFzb24gY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24oQVZQbGF5ZXJWaWV3
Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKLXsKLSAgICBzd2l0Y2ggKHJl
YXNvbikgewotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVh
c29uRG9uZUJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZDsKLSAg
ICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkZ1bGxTY3Jl
ZW5CdXR0b25UYXBwZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ7Ci0g
ICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaWN0dXJl
SW5QaWN0dXJlU3RhcnRlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ7
Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaW5j
aEdlc3R1cmVIYW5kbGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1cmVIYW5kbGVkOwotICAg
IGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUmVtb3RlQ29u
dHJvbFN0b3BFdmVudFJlY2VpdmVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2
ZW50UmVjZWl2ZWQ7Ci0gICAgfQotfQotCi0tIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyOihB
VlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1
bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5S
ZWFzb24pcmVhc29uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsK
LSAgICByZXR1cm4gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5zaG91bGRFeGl0RnVsbHNjcmVl
bldpdGhSZWFzb24oY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24ocmVhc29uKSk7Ci19Ci0K
LS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilw
bGF5ZXJWaWV3Q29udHJvbGxlciByZXN0b3JlVXNlckludGVyZmFjZUZvclBpY3R1cmVJblBpY3R1
cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIHJlc3RvcmVkKSljb21w
bGV0aW9uSGFuZGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7
Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5wcmVwYXJlRm9yUGljdHVyZUluUGljdHVy
ZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXIpOwotfQotQGVuZAot
Ci1AaW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXIgOiBDQUxheWVyCi1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluKSBOU1N0cmluZyAqdmlkZW9HcmF2aXR5OwotQHByb3BlcnR5IChub25hdG9t
aWMsIGdldHRlcj1pc1JlYWR5Rm9yRGlzcGxheSkgQk9PTCByZWFkeUZvckRpc3BsYXk7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dCogZnVsbHNjcmVlbkludGVyZmFjZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIEFW
UGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIENBTGF5ZXIgKnZpZGVvU3VibGF5ZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSwgbnVsbGFibGUpIE5TRGljdGlvbmFyeSAqcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOwotQHBy
b3BlcnR5IENHU2l6ZSB2aWRlb0RpbWVuc2lvbnM7Ci1AcHJvcGVydHkgQ0dSZWN0IG1vZGVsVmlk
ZW9MYXllckZyYW1lOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJMYXllciB7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVl
bkludGVyZmFjZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBfYXZQbGF5
ZXJDb250cm9sbGVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBfdmlkZW9TdWJsYXllcjsKLSAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IF92aWRlb0dyYXZpdHk7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoc2VsZikgewotICAg
ICAgICBbc2VsZiBzZXRNYXNrc1RvQm91bmRzOllFU107Ci0gICAgICAgIF92aWRlb0dyYXZpdHkg
PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCk7Ci0gICAgfQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJl
dmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJl
c29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwotICAgIFtfcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzIHJl
bGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAgICByZXR1cm4gX2Z1bGxz
Y3JlZW5JbnRlcmZhY2UuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFj
ZTooV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UK
LXsKLSAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci19Ci0K
LS0gKEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKLXsKLSAgICByZXR1cm4g
KEFWUGxheWVyQ29udHJvbGxlciAqKV9hdlBsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci19Ci0KLS0g
KHZvaWQpc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29u
dHJvbGxlcgotewotICAgIEFTU0VSVCghcGxheWVyQ29udHJvbGxlciB8fCBbcGxheWVyQ29udHJv
bGxlciBpc0tpbmRPZkNsYXNzOltXZWJBVlBsYXllckNvbnRyb2xsZXIgY2xhc3NdXSk7Ci0gICAg
X2F2UGxheWVyQ29udHJvbGxlciA9IChXZWJBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250
cm9sbGVyOwotfQotCi0tICh2b2lkKXNldFZpZGVvU3VibGF5ZXI6KENBTGF5ZXIgKil2aWRlb1N1
YmxheWVyCi17Ci0gICAgX3ZpZGVvU3VibGF5ZXIgPSB2aWRlb1N1YmxheWVyOwotfQotCi0tIChD
QUxheWVyKil2aWRlb1N1YmxheWVyCi17Ci0gICAgcmV0dXJuIF92aWRlb1N1YmxheWVyLmdldCgp
OwotfQotCi0tICh2b2lkKWxheW91dFN1YmxheWVycwotewotICAgIGlmIChbX3ZpZGVvU3VibGF5
ZXIgc3VwZXJsYXllcl0gIT0gc2VsZikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFbX2F2
UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfdmlk
ZW9TdWJsYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKHNlbGYuYm91
bmRzKSwgQ0dSZWN0R2V0TWlkWShzZWxmLmJvdW5kcykpXTsKLQotICAgIGlmIChzZWxmLnZpZGVv
RGltZW5zaW9ucy5oZWlnaHQgPD0gMCB8fCBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlVmlkZW9GcmFtZTsKLSAg
ICBGbG9hdFJlY3QgdGFyZ2V0VmlkZW9GcmFtZTsKLSAgICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlv
ID0gc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWln
aHQ7Ci0gICAgCi0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplKCkgaXNFcXVh
bFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgewotICAgICAgICBzb3VyY2VWaWRlb0ZyYW1l
ID0gc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZTsKLSAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9
IHNlbGYuYm91bmRzOwotICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7Ci0gICAgICAg
IHNvdXJjZVZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3Qo
dmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgICAgIHRh
cmdldFZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3Qodmlk
ZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOwotICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9H
cmF2aXR5XSkgewotICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc21hbGxlc3RSZWN0V2l0aEFz
cGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVsVmlkZW9MYXll
ckZyYW1lKTsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IENHUmVjdE1ha2Uo
MCwgMCwgc291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgp
KTsKLSAgICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKLSAgICAg
ICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShzZWxm
Lm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNtYWxs
ZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5i
b3VuZHMpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAg
IFVJVmlldyAqdmlldyA9IChVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdOwotICAg
IENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxl
KHRhcmdldFZpZGVvRnJhbWUud2lkdGgoKSAvIHNvdXJjZVZpZGVvRnJhbWUud2lkdGgoKSwgdGFy
Z2V0VmlkZW9GcmFtZS5oZWlnaHQoKSAvIHNvdXJjZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOwotICAg
IFt2aWV3IHNldFRyYW5zZm9ybTp0cmFuc2Zvcm1dOwotICAgIAotICAgIE5TVGltZUludGVydmFs
IGFuaW1hdGlvbkR1cmF0aW9uID0gW0NBVHJhbnNhY3Rpb24gYW5pbWF0aW9uRHVyYXRpb25dOwot
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAg
IFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07Ci0KLSAgICAgICAg
W3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSB3aXRoT2JqZWN0
Om5pbCBhZnRlckRlbGF5OmFuaW1hdGlvbkR1cmF0aW9uICsgMC4xXTsKLSAgICB9KTsKLX0KLQot
LSAodm9pZClyZXNvbHZlQm91bmRzCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVy
Zm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91
bmRzKSBvYmplY3Q6bmlsXTsKLSAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRl
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChbX3ZpZGVvU3VibGF5ZXIgc3VwZXJs
YXllcl0gIT0gc2VsZikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChDR1JlY3RFcXVh
bFRvUmVjdChzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lLCBbc2VsZiBib3VuZHNdKSAmJiBDR0Fm
ZmluZVRyYW5zZm9ybUlzSWRlbnRpdHkoWyhVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdh
dGVdIHRyYW5zZm9ybV0pKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rp
b24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwot
ICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgCi0gICAgaWYg
KCFDR1JlY3RFcXVhbFRvUmVjdChzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lLCBbc2VsZiBib3Vu
ZHNdKSkgewotICAgICAgICBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lID0gW3NlbGYgYm91bmRz
XTsKLSAgICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKLSAgICAg
ICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShzZWxm
Lm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICB9Ci0gICAgWyhVSVZpZXcgKilbX3ZpZGVvU3Vi
bGF5ZXIgZGVsZWdhdGVdIHNldFRyYW5zZm9ybTpDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5XTsK
LSAgICAKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotfQotCi0tICh2b2lkKXNldFZpZGVv
R3Jhdml0eTooTlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKLXsKLSAgICBfdmlkZW9HcmF2aXR5ID0g
dmlkZW9HcmF2aXR5OwotICAgIAotICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdh
dGVdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGlmICh2aWRlb0dyYXZpdHkgPT0g
Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpKQotICAgICAgICBncmF2aXR5ID0gV2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKLSAgICBpZiAo
dmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSkKLSAg
ICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3Q7Ci0gICAgZWxzZSBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5
ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0Rmls
bDsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIEFT
U0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7Ci0gICAgX2Z1bGxzY3JlZW5JbnRl
cmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KGdyYXZpdHkpOwotfQotCi0tIChO
U1N0cmluZyAqKXZpZGVvR3Jhdml0eQotewotICAgIHJldHVybiBfdmlkZW9HcmF2aXR5LmdldCgp
OwotfQotCi0tIChDR1JlY3QpdmlkZW9SZWN0Ci17Ci0gICAgaWYgKHNlbGYudmlkZW9EaW1lbnNp
b25zLndpZHRoIDw9IDAgfHwgc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0IDw9IDApCi0gICAg
ICAgIHJldHVybiBzZWxmLmJvdW5kczsKLSAgICAKLSAgICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlv
ID0gc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWln
aHQ7Ci0KLSAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSBpc0Vx
dWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKQotICAgICAgICByZXR1cm4gbGFyZ2VzdFJl
Y3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRz
KTsKLSAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNF
cXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKLSAgICAgICAgcmV0dXJuIHNtYWxsZXN0
UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3Vu
ZHMpOwotCi0gICAgcmV0dXJuIHNlbGYuYm91bmRzOwotfQotCi0rIChOU1NldCAqKWtleVBhdGhz
Rm9yVmFsdWVzQWZmZWN0aW5nVmlkZW9SZWN0Ci17Ci0gICAgcmV0dXJuIFtOU1NldCBzZXRXaXRo
T2JqZWN0czpAInZpZGVvRGltZW5zaW9ucyIsIEAidmlkZW9HcmF2aXR5IiwgbmlsXTsKLX0KLQot
QGVuZAotCi1AaW50ZXJmYWNlIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyA6
IFVJVmlldwotQGVuZAotCi1zdGF0aWMgQ2xhc3MgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKLXsKLSAgICByZXR1cm4gW1dlYkFWUGxheWVy
TGF5ZXIgY2xhc3NdOwotfQotCi1zdGF0aWMgQ2xhc3MgZ2V0V2ViQVZQaWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3Q2xhc3MoKQotewotICAgIHN0YXRpYyBDbGFzcyB0aGVDbGFzcyA9IG5p
bDsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9v
bmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNsYXNz
UGFpcihnZXRVSVZpZXdDbGFzcygpLCAiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3IiwgMCk7Ci0gICAgICAgIG9iamNfcmVnaXN0ZXJDbGFzc1BhaXIodGhlQ2xhc3MpOwotICAg
ICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFDbGFzcygiV2ViQVZQaWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xh
c3MsIEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOwotICAgIH0pOwotICAgIAotICAgIHJldHVy
biB0aGVDbGFzczsKLX0KLQotQGludGVyZmFjZSBXZWJBVlBsYXllckxheWVyVmlldyA6IF9fQVZQ
bGF5ZXJMYXllclZpZXcKLUBwcm9wZXJ0eSAocmV0YWluKSBVSVZpZXcqIHZpZGVvVmlldzsKLUBl
bmQKLQotc3RhdGljIENsYXNzIFdlYkFWUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNF
TCkKLXsKLSAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5ZXIgY2xhc3NdOwotfQotCi1zdGF0aWMg
QVZQbGF5ZXJDb250cm9sbGVyICpXZWJBVlBsYXllckxheWVyVmlld19wbGF5ZXJDb250cm9sbGVy
KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXIg
PSBhU2VsZjsKLSAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFW
UGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXIgcGxheWVyTGF5ZXJdOwotICAgIHJldHVybiBbd2Vi
QVZQbGF5ZXJMYXllciBwbGF5ZXJDb250cm9sbGVyXTsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQ
bGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxlcihpZCBhU2VsZiwgU0VMLCBBVlBsYXll
ckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmll
dyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQ
bGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJM
YXllcl07Ci0gICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0UGxheWVyQ29udHJvbGxlcjogcGxheWVy
Q29udHJvbGxlcl07Ci19Ci0KLXN0YXRpYyBVSVZpZXcgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3Zp
ZGVvVmlldyhpZCBhU2VsZiwgU0VMKQotewotICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXll
ckxheWVyID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9
IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyIHBsYXllckxheWVyXTsKLSAgICBDQUxh
eWVyKiB2aWRlb0xheWVyID0gW3dlYkFWUGxheWVyTGF5ZXIgdmlkZW9TdWJsYXllcl07Ci0gICAg
aWYgKCF2aWRlb0xheWVyIHx8ICF2aWRlb0xheWVyLmRlbGVnYXRlKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIEFTU0VSVChbW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdIGlzS2luZE9mQ2xhc3M6Z2V0
VUlWaWV3Q2xhc3MoKV0pOwotICAgIHJldHVybiAoVUlWaWV3ICopW3ZpZGVvTGF5ZXIgZGVsZWdh
dGVdOwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zZXRWaWRlb1ZpZXco
aWQgYVNlbGYsIFNFTCwgVUlWaWV3ICp2aWRlb1ZpZXcpCi17Ci0gICAgX19BVlBsYXllckxheWVy
VmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2Vi
QVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5
ZXJMYXllcl07Ci0gICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0VmlkZW9TdWJsYXllcjpbdmlkZW9W
aWV3IGxheWVyXV07Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0YXJ0
Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBT
RUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxm
OwotICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChX
ZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBp
Y3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwotCi0gICAgV2ViQVZQbGF5ZXJMYXllciAq
cGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVy
TGF5ZXJdOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxh
eWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAgW3BsYXllckxheWVyIHNldFZpZGVvR3Jh
dml0eTpnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCldOwotICAgIFtwaXBQbGF5
ZXJMYXllciBzZXRWaWRlb1N1YmxheWVyOnBsYXllckxheWVyLnZpZGVvU3VibGF5ZXJdOwotICAg
IFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5ZXIudmlkZW9EaW1l
bnNpb25zXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OnBsYXllckxheWVy
LnZpZGVvR3Jhdml0eV07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXllckZy
YW1lOnBsYXllckxheWVyLm1vZGVsVmlkZW9MYXllckZyYW1lXTsKLSAgICBbcGlwUGxheWVyTGF5
ZXIgc2V0UGxheWVyQ29udHJvbGxlcjpwbGF5ZXJMYXllci5wbGF5ZXJDb250cm9sbGVyXTsKLSAg
ICBbcGlwUGxheWVyTGF5ZXIgc2V0RnVsbHNjcmVlbkludGVyZmFjZTpwbGF5ZXJMYXllci5mdWxs
c2NyZWVuSW50ZXJmYWNlXTsKLSAgICBbcGlwVmlldyBhZGRTdWJ2aWV3OnBsYXllckxheWVyVmll
dy52aWRlb1ZpZXddOwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zdG9w
Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBT
RUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxm
OwotICAgIGlmIChVSVZpZXcgKnZpZGVvVmlldyA9IHBsYXllckxheWVyVmlldy52aWRlb1ZpZXcp
Ci0gICAgICAgIFtwbGF5ZXJMYXllclZpZXcgYWRkU3Vidmlldzp2aWRlb1ZpZXddOwotICAgIFdl
YkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXddOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVy
ID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLSAg
ICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICop
W3BpcFZpZXcgbGF5ZXJdOwotICAgIFtwbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFt
ZTpwaXBQbGF5ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJGcmFtZV07Ci19Ci0KLXN0YXRpYyBXZWJB
VlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3Bp
Y3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBXZWJB
VlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gW3BsYXllckxheWVyVmlldyB2
YWx1ZUZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Ci0gICAgaWYg
KCFwaXBWaWV3KSB7Ci0gICAgICAgIHBpcFZpZXcgPSBbW2dldFdlYkFWUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlld0NsYXNzKCkgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVyb107
Ci0gICAgICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0VmFsdWU6cGlwVmlldyBmb3JLZXk6QCJfcGlj
dHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOwotICAgIH0KLSAgICByZXR1cm4gcGlwVmll
dzsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYyhpZCBhU2Vs
ZiwgU0VMKQotewotICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBh
U2VsZjsKLSAgICBSZXRhaW5QdHI8V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
PiBwaXBWaWV3ID0gYWRvcHROUyhbcGxheWVyTGF5ZXJWaWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXSk7Ci0gICAgW3BsYXllckxheWVyVmlldyBzZXRW
YWx1ZTpuaWwgZm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKLSAg
ICBvYmpjX3N1cGVyIHN1cGVyQ2xhc3MgeyBwbGF5ZXJMYXllclZpZXcsIGdldF9fQVZQbGF5ZXJM
YXllclZpZXdDbGFzcygpIH07Ci0gICAgYXV0byBzdXBlcl9kZWFsbG9jID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKCopKG9iamNfc3VwZXIqLCBTRUwpPihvYmpjX21zZ1NlbmRTdXBlcik7Ci0gICAg
c3VwZXJfZGVhbGxvYygmc3VwZXJDbGFzcywgQHNlbGVjdG9yKGRlYWxsb2MpKTsKLX0KLQotI3By
YWdtYSBtYXJrIC0gTWV0aG9kcwotCi1zdGF0aWMgQ2xhc3MgZ2V0V2ViQVZQbGF5ZXJMYXllclZp
ZXdDbGFzcygpCi17Ci0gICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0gbmlsOwotICAgIHN0YXRp
YyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tl
biwgXnsKLSAgICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdldF9fQVZQ
bGF5ZXJMYXllclZpZXdDbGFzcygpLCAiV2ViQVZQbGF5ZXJMYXllclZpZXciLCAwKTsKLSAgICAg
ICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYyksIChJTVApV2Vi
QVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYywgInZAOiIpOwotICAgICAgICBjbGFzc19hZGRNZXRo
b2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRQbGF5ZXJDb250cm9sbGVyOiksIChJTVApV2ViQVZQ
bGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxlciwgInZAOkAiKTsKLSAgICAgICAgY2xh
c3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IocGxheWVyQ29udHJvbGxlciksIChJTVAp
V2ViQVZQbGF5ZXJMYXllclZpZXdfcGxheWVyQ29udHJvbGxlciwgIkBAOiIpOwotICAgICAgICBj
bGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRWaWRlb1ZpZXc6KSwgKElNUClX
ZWJBVlBsYXllckxheWVyVmlld19zZXRWaWRlb1ZpZXcsICJ2QDpAIik7Ci0gICAgICAgIGNsYXNz
X2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHZpZGVvVmlldyksIChJTVApV2ViQVZQbGF5
ZXJMYXllclZpZXdfdmlkZW9WaWV3LCAiQEA6Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0
aGVDbGFzcywgQHNlbGVjdG9yKHN0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zdGFydFJvdXRpbmdWaWRl
b1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgInZAOiIpOwotICAgICAgICBjbGFz
c19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zdG9w
Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAidkA6Iik7Ci0g
ICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcsICJAQDoiKTsKLSAgICAgICAgCi0gICAgICAgIGNsYXNzX2Fk
ZEl2YXIodGhlQ2xhc3MsICJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIsIHNpemVv
ZihXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKiksIGxvZzIoc2l6ZW9mKFdl
YkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKSksICJAIik7Ci0gICAgICAgIAot
ICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsKLSAgICAgICAgQ2xhc3Mg
bWV0YUNsYXNzID0gb2JqY19nZXRNZXRhQ2xhc3MoIldlYkFWUGxheWVyTGF5ZXJWaWV3Iik7Ci0g
ICAgICAgIGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNsYXNzKSwg
KElNUClXZWJBVlBsYXllckxheWVyVmlld19sYXllckNsYXNzLCAiQEA6Iik7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIHRoZUNsYXNzOwotfQotCi1SZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLXsKLSAg
ICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVyZmFjZSA9IGFkb3B0
UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQocGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKSk7Ci0gICAgW2ludGVyZmFjZS0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVn
YXRlIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJmYWNlLnB0cigpXTsKLSAgICByZXR1cm4g
aW50ZXJmYWNlOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICAsIG1fcGxheWVyVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZShhZG9wdE5TKFtbV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRl
IGFsbG9jXSBpbml0XSkpCi0gICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJl
ZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6On5XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCi17Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBw
bGF5ZXJDb250cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxlcigpOwotICAgIGlmIChwbGF5
ZXJDb250cm9sbGVyICYmIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSkK
LSAgICAgICAgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZmFsc2UsIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpUYXJnZXRUeXBlTm9uZSwgIiIpOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMp
OwotfQotCi1XZWJBVlBsYXllckNvbnRyb2xsZXIgKldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UtPnBsYXllckNvbnRyb2xsZXIoKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRo
aXMpOwotCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG1vZGVsOwotCi0gICAgaWYgKG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmFk
ZENsaWVudCgqdGhpcyk7Ci0KLSAgICBoYXNWaWRlb0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCA/IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZSk7Ci0gICAg
dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKSk7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZl
cikKLXsKLSAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpoYXNWaWRlb0NoYW5nZWQoYm9v
bCBoYXNWaWRlbykKLXsKLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEhhc0VuYWJsZWRWaWRl
bzpoYXNWaWRlb107Ci0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNWaWRlbzpoYXNWaWRl
b107Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAg
V2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3Bs
YXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0KLSAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9E
aW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107Ci0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRD
b250ZW50RGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwotICAgIFttX3BsYXllckxheWVyVmll
dyBzZXROZWVkc0xheW91dF07Ci0KLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICop
W21fcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwotICAg
IFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilb
cGlwVmlldyBsYXllcl07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczpw
bGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOwotICAgIFtwaXBWaWV3IHNldE5lZWRzTGF5b3V0
XTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgW21fcGxheWVy
TGF5ZXJWaWV3IHNldEhpZGRlbjplbmFibGVkXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQotewotICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0
aW9uRGlkQmVjb21lQWN0aXZlKCVwKSIsIHRoaXMpOwotICAgIGlmIChtX3Nob3VsZFJldHVyblRv
RnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aXNWaXNpYmxlKCkpIHsKLSAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIGJvdGggaW4gUGlQIGFuZCBpbiBGdWxsc2Ny
ZWVuIChpLmUuLCB2aWEgYXV0by1QaVApLCBhbmQgd2UgZGlkIG5vdCBzdG9wIGZ1bGxzY3JlZW4g
dXBvbiByZXR1cm5pbmcsIGl0IG11c3QgYmUKLSAgICAvLyBiZWNhdXNlIHRoZSBvcmlnaW5hdGlu
ZyB2aWV3IGlzIG5vdCB2aXNpYmxlLCBzbyBoaWRlIHRoZSBmdWxsc2NyZWVuIHdpbmRvdy4KLSAg
ICBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0
YW5kYXJkIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0
ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIFttX3dpbmRvdyBz
ZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgfV07Ci0gICAgfQotfQotCi1AaW50ZXJmYWNlIFVJ
V2luZG93ICgpCi0tIChCT09MKV9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3M7Ci1AZW5kCi0KLUBp
bnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
biwgc2V0dGVyPV9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6KSBCT09MIF9pZ25v
cmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM7Ci1AZW5kCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmlldywgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dz
UGljdHVyZUluUGljdHVyZVBsYXliYWNrKQotewotICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbigl
cCkiLCB0aGlzKTsKLQotICAgIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrID0gYWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5d
OwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgYm9vbCBp
c0luUGljdHVyZUluUGljdHVyZU1vZGUgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIG1fbW9kZSA9IG1vZGU7
Ci0gICAgbV9wYXJlbnRWaWV3ID0gcGFyZW50VmlldzsKLSAgICBtX3BhcmVudFdpbmRvdyA9IHBh
cmVudFZpZXcud2luZG93OwotCi0gICAgaWYgKCFbW3BhcmVudFZpZXcgd2luZG93XSBfaXNIb3N0
ZWRJbkFub3RoZXJQcm9jZXNzXSkgewotICAgICAgICBpZiAoIW1fd2luZG93KQotICAgICAgICAg
ICAgbV93aW5kb3cgPSBhZG9wdE5TKFthbGxvY1VJV2luZG93SW5zdGFuY2UoKSBpbml0V2l0aEZy
YW1lOltbZ2V0VUlTY3JlZW5DbGFzcygpIG1haW5TY3JlZW5dIGJvdW5kc11dKTsKLSAgICAgICAg
W21fd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAgIGlm
ICghbV92aWV3Q29udHJvbGxlcikKLSAgICAgICAgICAgIG1fdmlld0NvbnRyb2xsZXIgPSBhZG9w
dE5TKFthbGxvY1VJVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICAgICAgW1tt
X3ZpZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOlttX3dpbmRvdyBib3VuZHNdXTsKLSAgICAg
ICAgW21fdmlld0NvbnRyb2xsZXIgX3NldElnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczpZ
RVNdOwotICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm1fdmlld0NvbnRy
b2xsZXIuZ2V0KCldOwotICAgICAgICBbbV93aW5kb3cgc2V0V2luZG93TGV2ZWw6Z2V0VUlUZXh0
RWZmZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCgpICsgMV07Ci0gICAgICAgIFttX3dp
bmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07Ci0gICAgfQotCi0gICAgaWYgKCFtX3BsYXllckxheWVy
VmlldykKLSAgICAgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBhZG9wdE5TKFtbZ2V0V2ViQVZQbGF5
ZXJMYXllclZpZXdDbGFzcygpIGFsbG9jXSBpbml0XSk7Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3
IHNldEhpZGRlbjpbcGxheWVyQ29udHJvbGxlcigpIGlzRXh0ZXJuYWxQbGF5YmFja0FjdGl2ZV1d
OwotICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9y
KCldOwotCi0gICAgaWYgKCFpc0luUGljdHVyZUluUGljdHVyZU1vZGUpIHsKLSAgICAgICAgW21f
cGxheWVyTGF5ZXJWaWV3IHNldFZpZGVvVmlldzomdmlkZW9WaWV3XTsKLSAgICAgICAgW21fcGxh
eWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6JnZpZGVvVmlld107Ci0gICAgfQotCi0gICAgV2ViQVZQ
bGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxh
eWVyVmlldyBwbGF5ZXJMYXllcl07Ci0KLSAgICBbcGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xh
eWVyRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0aWFsUmVj
dC5oZWlnaHQoKSldOwotICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6W3BsYXll
ckNvbnRyb2xsZXIoKSBjb250ZW50RGltZW5zaW9uc11dOwotICAgIHBsYXllckxheWVyLmZ1bGxz
Y3JlZW5JbnRlcmZhY2UgPSB0aGlzOwotCi0gICAgaWYgKCFtX3BsYXllclZpZXdDb250cm9sbGVy
KQotICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NBVlBsYXll
clZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0aFBsYXllckxheWVyVmlldzptX3BsYXll
ckxheWVyVmlldy5nZXQoKV0pOwotCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hv
d3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQ
bGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyKCld
OwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm1fcGxheWVyVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0
QWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBs
YXliYWNrXTsKLQotICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0UGljdHVyZUluUGljdHVyZVBv
c3NpYmxlOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrXTsKLQotICAgIGlmIChtX3Zp
ZXdDb250cm9sbGVyKSB7Ci0gICAgICAgIFttX3ZpZXdDb250cm9sbGVyIGFkZENoaWxkVmlld0Nv
bnRyb2xsZXI6bV9wbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgICAgIFtbbV92aWV3
Q29udHJvbGxlciB2aWV3XSBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
XTsKLSAgICB9IGVsc2UKLSAgICAgICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XV07Ci0KLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XS5mcmFtZSA9IFtwYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmluaXRpYWxSZWN0IHRvVmlldzpbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOwotCi0gICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0g
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6KFVJ
Vmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlQm90dG9tTWFyZ2luIHwgVUlWaWV3QXV0b3Jlc2l6aW5n
RmxleGlibGVSaWdodE1hcmdpbildOwotCi0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddIHNldE5lZWRzTGF5b3V0XTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10g
bGF5b3V0SWZOZWVkZWRdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgdGhpc10gewotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIp
Ci0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxsc2Ny
ZWVuKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0g
ICAgbV9leGl0Q29tcGxldGVkID0gZmFsc2U7Ci0gICAgbV9leGl0UmVxdWVzdGVkID0gZmFsc2U7
Ci0gICAgbV9lbnRlclJlcXVlc3RlZCA9IHRydWU7Ci0KLSAgICBpZiAobW9kZSgpID09IEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0g
ICAgICAgIGVudGVyUGljdHVyZUluUGljdHVyZSgpOwotICAgIGVsc2UgaWYgKG1vZGUoKSA9PSBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkKLSAgICAg
ICAgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjplbnRlclBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSglcCkiLCB0
aGlzKTsKLSAgICAKLSAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5Q
aWN0dXJlUG9zc2libGVdKQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdGFydFBp
Y3R1cmVJblBpY3R1cmVdOwotICAgIGVsc2UKLSAgICAgICAgZmFpbGVkVG9TdGFydFBpY3R1cmVJ
blBpY3R1cmUoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCVwKSIs
IHRoaXMpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBpc1Bp
Y3R1cmVJblBpY3R1cmVBY3RpdmVdKSB7Ci0gICAgICAgIC8vIE5PVEU6IFRoZSBmdWxsc2NyZWVu
IG1vZGUgd2lsbCBiZSByZXN0b3JlZCBpbiBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BX
aXRoQ29tcGxldGlvbkhhbmRsZXIoKS4KLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3Jl
ZW5XaGVuU3RvcHBpbmdQaVAgPSB0cnVlOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxl
dGlvbkhhbmRsZXI6W3RoaXMsIHByb3RlY3RlZFRoaXNdIChCT09MIHN1Y2NlZWRlZCwgTlNFcnJv
ciopIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN1Y2NlZWRlZCk7Ci0gICAgICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVl
blN0YW5kYXJkIC0gbGFtYmRhKCVwKSAtIHN1Y2NlZWRlZCglcykiLCB0aGlzLCBib29sU3RyaW5n
KHN1Y2NlZWRlZCkpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1Bs
YXliYWNrQ29udHJvbHM6WUVTXTsKLQotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJG
dWxsc2NyZWVuKCk7Ci0gICAgfV07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsUmVj
dCkKLXsKLSAgICBtX3dhdGNoZG9nVGltZXIuc3RvcCgpOwotCi0gICAgbV9leGl0UmVxdWVzdGVk
ID0gdHJ1ZTsKLSAgICBpZiAobV9leGl0Q29tcGxldGVkKSB7Ci0gICAgICAgIGlmIChtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4
aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNl
dFNob3dzUGxheWJhY2tDb250cm9sczpOT107Ci0gICAgCi0gICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmZpbmFsUmVjdCB0
b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKLQotICAgIFdl
YkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5
ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAgIGlmIChbcGxheWVyTGF5ZXIgdmlkZW9HcmF2
aXR5XSAhPSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCi0gICAgICAgIFtw
bGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFz
cGVjdCgpXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVk
ZWRdOwotCi0gICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgewotICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVs
bHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOwotICAgICAgICBbbV93aW5kb3cgc2V0SGlk
ZGVuOk5PXTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBp
Y3R1cmVdOwotICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRp
b25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAg
ICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVTdGFuZGFyZCk7Ci0gICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAg
ICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAg
ICAgICAgfV07Ci0gICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlv
bkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAg
ICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgW0NBVHJhbnNhY3Rp
b24gYmVnaW5dOwotICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6
WUVTXTsKLSAgICAgICAgICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6
Y2xlYXJVSUNvbG9yKCldOwotICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAgICAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOwotCi0gICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10oKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgICAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9XTsKLSAgICB9OwotfQotCi1AaW50ZXJmYWNlIFVJQXBwbGlj
YXRpb24gKCkKLS0gKHZvaWQpX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOihVSUludGVyZmFjZU9y
aWVudGF0aW9uKW87Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlXaW5kb3cgKCkKLS0gKFVJSW50ZXJm
YWNlT3JpZW50YXRpb24paW50ZXJmYWNlT3JpZW50YXRpb247Ci1AZW5kCi0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCkKLXsKLSAgICBM
T0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVw
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLSAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgW21f
d2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250
cm9sbGVyOm5pbF07Ci0gICAgICAgIGlmIChtX3BhcmVudFdpbmRvdykKLSAgICAgICAgICAgIFtb
Z2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9zZXRTdGF0dXNCYXJP
cmllbnRhdGlvbjpbbV9wYXJlbnRXaW5kb3cgaW50ZXJmYWNlT3JpZW50YXRpb25dXTsKLSAgICB9
Ci0gICAgCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOm5pbF07Ci0gICAg
Ci0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlUGljdHVyZUluUGljdHVyZSkpCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0
b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCi0gICAgICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W10g
KEJPT0wsIE5TRXJyb3IgKikgeyB9XTsKLSAgICAKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgaWYgKG1fdmlld0NvbnRyb2xsZXIp
Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHJlbW92ZUZyb21QYXJlbnRWaWV3Q29u
dHJvbGxlcl07Ci0gICAgCi0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHJlbW92ZUZyb21TdXBlcnZp
ZXddOwotICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
LQotICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gbmlsOwotICAgIG1fcGxheWVyVmlld0NvbnRyb2xs
ZXIgPSBuaWw7Ci0gICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgbV9wYXJlbnRWaWV3ID0gbmlsOwot
ICAgIG1fcGFyZW50V2luZG93ID0gbmlsOwotICAgIAotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFu
dXBGdWxsc2NyZWVuKCk7Ci0KLSAgICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQotewotICAg
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIgPSBuaWw7Ci0gICAgCi0gICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNj
cmVlbigpCi17Ci0gICAgaWYgKCFtX2VudGVyUmVxdWVzdGVkKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgW21fd2luZG93IHNldEhpZGRl
bjpZRVNdOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVT
XTsKLQotICAgIGlmICh3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgewotICAgICAgICB3ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5wYXVzZSgpOwotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1
ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlTm9uZSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0
JiBpbmxpbmVSZWN0KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCkgLSB2aXNpYmxlKCVz
KSIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSkpOwotICAgIGlmIChtX3ByZXBhcmVUb0lubGlu
ZUNhbGxiYWNrKSB7Ci0gICAgICAgIAotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKLQotICAgICAgICBXVEY6
OkZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGTW92ZShtX3ByZXBhcmVUb0lubGlu
ZUNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7Ci0gICAgfQotfQotCi1ib29s
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1Zp
ZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFtwbGF5ZXJDb250cm9s
bGVyKCkgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZShXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCi17Ci0g
ICAgbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIGlm
IChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkK
LXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIHNldE1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGlj
dHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwot
ICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRl
cmluZ0JhY2tncm91bmRdOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxh
eWJhY2tDb250cm9sczpZRVNdOwotCi0gICAgaWYgKG1fbW9kZSAmIEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB7Ci0gICAgICAgIGlmICghW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdC
YWNrZ3JvdW5kXSkgewotICAgICAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6
W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAgICAgICAg
IFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgICAgICBbW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAgICB9XTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAg
ICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotICAg
IH0KLQotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGlj
dHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0gICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0K
LSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVTdGFuZGFyZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZXhpdENvbXBsZXRlZCA9IHRy
dWU7Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLQotICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5y
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxz
Y3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKLSAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNj
cmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gZmFsc2U7Ci0KLSAgICBMT0coRnVsbHNjcmVl
biwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBp
Y3R1cmUoJXApIiwgdGhpcyk7Ci0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZv
clBpY3R1cmVJblBpY3R1cmVTdG9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV93aW5kb3cg
c2V0SGlkZGVuOk5PXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlk
ZGVuOk5PXTsKLQotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBM
T0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9w
UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0b3JpbmdG
dWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApIHsKLSAgICAgICAgLy8gQVNTVU1QVElP
Tjogd2UgYXJlIGV4aXRpbmcgcGlwIGJlY2F1c2Ugd2UgYXJlIGVudGVyaW5nIGZ1bGxzY3JlZW4K
LSAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
ZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0
QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLQotICAgIGNs
ZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJl
SW5QaWN0dXJlKTsKLSAgICAKLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0g
ICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGlj
dHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBsZXRpb25I
YW5kbGVyKShCT09MIHJlc3RvcmVkKSkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BX
aXRoQ29tcGxldGlvbkhhbmRsZXIoJXApIiwgdGhpcyk7Ci0gICAgaWYgKG1fc2hvdWxkUmV0dXJu
VG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQIHx8IG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVu
QWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQpIHsKLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxz
Y3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1
bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOwotICAgICAgICBtX3Jlc3Rv
cmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IHRydWU7Ci0KLSAgICAgICAg
W21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XSBzZXRIaWRkZW46Tk9dOwotCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wgc3Vj
Y2VzcywgTlNFcnJvciopIHsKLSAgICAgICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBp
Y3R1cmVJblBpY3R1cmVTdG9wID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOwotICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7Ci0gICAgUmV0YWluUHRyPGlkPiBzdHJvbmdDb21wbGV0aW9uSGFu
ZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLSAgICBmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoW3Byb3RlY3RlZFRoaXMsIHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVy
XShib29sIHJlc3RvcmVkKSAgewotICAgICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRo
Q29tcGxldGlvbkhhbmRsZXIgbGFtYmRhKCVwKSAtIHJlc3RvcmVkKCVzKSIsIHByb3RlY3RlZFRo
aXMuZ2V0KCksIGJvb2xTdHJpbmcocmVzdG9yZWQpKTsKLSAgICAgICAgdm9pZCAoXmNvbXBsZXRp
b25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSA9IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyLmdldCgp
OwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN0b3JlZCk7Ci0gICAgfSk7Ci19Ci0KLWJv
b2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxsc2NyZWVu
V2l0aFJlYXNvbihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3Jl
ZW5SZWFzb24gcmVhc29uKQotewotICAgIGlmICghbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVh
c29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZCkgewotICAgICAgICBpZiAoW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3Jv
dW5kXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX3Nob3VsZFJldHVy
blRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAgICBjbGVhck1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAod2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KSAmJiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkIHx8
IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJl
Y2VpdmVkKSkKLSAgICAgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKLSAg
ICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSwgcmVhc29uID09IEV4
aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkKTsKLQotICAgIGlmICghbV93YXRj
aGRvZ1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fd2F0Y2hkb2dUaW1lci5zdGFydE9uZVNo
b3QoZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLU5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCVwKSAt
IG5vIGV4aXQgZnVsbHNjcmVlbiByZXNwb25zZSBpbiAlZ3M7IGZvcmNpbmcgZnVsbHNjcmVlbiBo
aWRkZW4uIiwgdGhpcywgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbC52YWx1ZSgpKTsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0g
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsK
LSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbW9k
ZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhck1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgJiB+
bW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAg
ICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUp
OwotfQotCi0jZW5kaWYgLy8gSEFWRShBVktJVCkKLQotYm9vbCBXZWJDb3JlOjpzdXBwb3J0c1Bp
Y3R1cmVJblBpY3R1cmUoKQotewotI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkKLSAg
ICByZXR1cm4gW2dldEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJDbGFzcygpIGlzUGljdHVy
ZUluUGljdHVyZVN1cHBvcnRlZF07Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
fQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjA4YjhkMTM1YjU1YTI2N2MxYjJkYWFkYjEzZWM4Zjc0MzEwYWJiYzUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKwor
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK09CSkNfQ0xBU1MgV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFz
cyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjIGZpbmFsCisgICAgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlCisgICAgLCBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1
YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBjcmVhdGUoUGxheWJh
Y2tTZXNzaW9uTW9kZWwmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBj
b25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9CisKKyAgICAvLyBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFTdGF0
ZSgpIGZpbmFsIHsgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKmN1cnJlbnRUaW1l
Ki8sIGRvdWJsZSAvKmFuY2hvclRpbWUqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByYXRlQ2hhbmdlZChib29sIC8qaXNQbGF5aW5nKi8sIGZsb2F0IC8qcGxheWJhY2tSYXRlKi8p
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNv
bnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgLypsYXN0TW9kaWZpZWRUaW1lKi8sIGRvdWJsZSAvKmxp
dmVVcGRhdGVJbnRlcnZhbCovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiAvKm9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4Ki8pIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2
NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGJvb2wgLyogZW5hYmxlZCAqLywgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIGZp
bmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKKyNpZiBFTkFCTEUoV0VCX1BM
QVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbGF5
QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqcGxheUJhY2tDb250cm9s
c01hbmFnZXIoKTsKKyNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJp
bmcoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpOworCitwcml2YXRl
OgorICAgICAgICBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uTW9k
ZWwmKTsKKyAgICAgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9k
ZWwgeyBudWxscHRyIH07CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VS
KQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptX3BsYXliYWNrQ29udHJvbHNNYW5h
Z2VyICB7IG51bGxwdHIgfTsKKworICAgIHZvaWQgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFn
ZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBs
YXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpOworI2VuZGlmCisKK307CisKK30KKworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTllZjIyMzA2OWE5Y2VlOWYxMTI1MTNiYmZlZjBi
MTJjNjdiMjRlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KQEAgLTAsMCArMSwyNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkKKworI2ltcG9ydCAiQVZLaXRTUEkuaCIKKyNpbXBvcnQgIkludFJlY3Qu
aCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisjaW1wb3J0ICJNZWRpYVRpbWVB
VkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW1wb3J0
ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgor
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0
TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5L
X0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjPiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZShQbGF5YmFja1Nl
c3Npb25Nb2RlbCYgbW9kZWwpCit7CisgICAgYXV0byBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhtb2RlbCkpOworICAgIG1vZGVsLmFkZENsaWVu
dChpbnRlcmZhY2UpOworICAgIHJldHVybiBpbnRlcmZhY2U7Cit9CisKK1BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lv
bk1vZGVsJiBtb2RlbCkKKyAgICA6IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQorewor
fQorCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMoKQoreworICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit7CisjaWYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwor
CisgICAgY29udHJvbHNNYW5hZ2VyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOworCisgICAg
Ly8gRklYTUU6IFdlIHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMg
cmVhZHksIGJ1dCB0aGF0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLgorICAgIGNvbnRyb2xzTWFu
YWdlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7CisgICAgY29udHJvbHNNYW5hZ2VyLmhhc0VuYWJs
ZWRWaWRlbyA9IFlFUzsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGR1cmF0aW9uKTsKKyNlbmRp
ZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVDaGFu
Z2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisjaWYgRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworICAg
IHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGN1cnJlbnRUaW1lLCBhbmNob3JU
aW1lLCBjb250cm9sc01hbmFnZXIucmF0ZSwgY29udHJvbHNNYW5hZ2VyLnBsYXlpbmcpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudFRpbWUpOworICAgIFVOVVNFRF9QQVJBTShhbmNo
b3JUaW1lKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyNpZiBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7
CisgICAgW2NvbnRyb2xzTWFuYWdlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6
IDAuXTsKKyAgICBbY29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6aXNQbGF5aW5nXTsKKyAgICB1
cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
ID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6IDAsIFtbTlNQcm9jZXNz
SW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgcGxheWJhY2tSYXRlLCBpc1BsYXlpbmcp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaXNQbGF5aW5nKTsKKyAgICBVTlVTRURfUEFSQU0o
cGxheWJhY2tSYXRlKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6YmVnaW5TY3J1YmJpbmcoKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKKyAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3Bs
YXliYWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUo
KSA6IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgMCwgZmFs
c2UpOworI2VuZGlmCisgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+YmVnaW5TY3J1YmJpbmco
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuZFNjcnViYmluZygp
Cit7CisgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7Cit9CisKKyNp
ZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCitzdGF0aWMgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiB0aW1lUmFuZ2VzVG9BcnJheShjb25zdCBUaW1lUmFuZ2VzJiB0aW1l
UmFuZ2VzKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmFuZ2VBcnJheSA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBjb25zdCBQ
bGF0Zm9ybVRpbWVSYW5nZXMmIHJhbmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCk7CisgICAgICAg
IENNVGltZVJhbmdlIHJhbmdlID0gQ01UaW1lUmFuZ2VNYWtlKHRvQ01UaW1lKHJhbmdlcy5zdGFy
dChpKSksIHRvQ01UaW1lKHJhbmdlcy5lbmQoaSkpKTsKKyAgICAgICAgW3JhbmdlQXJyYXkgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07CisgICAgfQorCisg
ICAgcmV0dXJuIHJhbmdlQXJyYXk7Cit9CisjZW5kaWYKKwordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1l
UmFuZ2VzLCBkb3VibGUsIGRvdWJsZSkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0U2Vla2FibGVU
aW1lUmFuZ2VzOnRpbWVSYW5nZXNUb0FycmF5KHRpbWVSYW5nZXMpLmdldCgpXTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHRpbWVSYW5nZXMpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisg
ICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxl
Y3RlZEluZGV4KV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKKyAgICBVTlVT
RURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAg
IFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxl
Y3RlZEluZGV4KV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKKyAgICBVTlVT
RURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlv
bkluZGV4OnNlbGVjdGVkSW5kZXhdOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJ
bmRleCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
eworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBbcGxheUJh
Y2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleDpzZWxlY3Rl
ZEluZGV4XTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlm
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0Q2Fu
VG9nZ2xlUGljdHVyZUluUGljdHVyZTohZW5hYmxlZF07CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShlbmFibGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6aW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5yZW1vdmVDbGllbnQo
KnRoaXMpOworICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRyOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKK3sK
KyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgcGxheUJhY2tD
b250cm9sc01hbmFnZXIoKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorCitXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpCit7CisgICAgcmV0
dXJuIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXI7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciAqbWFuYWdlcikKK3sKKyAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyID0g
bWFuYWdlcjsKKworICAgIGlmICghbWFuYWdlciB8fCAhbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0g
IVttYW5hZ2VyIHJhdGVdID8gTkFOIDogW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0
ZW1VcHRpbWVdOworICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygp
IHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJl
bnRUaW1lKCkgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOworICAgIGRv
dWJsZSBkdXJhdGlvbiA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmR1cmF0aW9uKCk7CisgICAg
bWFuYWdlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBtYW5hZ2VyLmhhc0VuYWJs
ZWRBdWRpbyA9IGR1cmF0aW9uID4gMDsKKyAgICBtYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IGR1
cmF0aW9uID4gMDsKKyAgICBtYW5hZ2VyLnJhdGUgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5p
c1BsYXlpbmcoKSA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBsYXliYWNrUmF0ZSgpIDogMC47
CisgICAgbWFuYWdlci5zZWVrYWJsZVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2VzVG9BcnJheShtX3Bs
YXliYWNrU2Vzc2lvbk1vZGVsLT5zZWVrYWJsZVJhbmdlcygpKS5nZXQoKTsKKyAgICBtYW5hZ2Vy
LmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOworICAgIG1hbmFnZXIucGxheWluZyA9IG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpOworICAgIFttYW5hZ2VyIHNldEF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4obV9w
bGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSldOworICAgIFtt
YW5hZ2VyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Npb25N
b2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0
YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRp
YVNlbGVjdGVkSW5kZXgoKSldOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6dXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcp
Cit7CisgICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpOworICAgIGlmICghbWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUGxheWJhY2tTZXNzaW9uTW9kZWwgKm1vZGVsID0gcGxheWJhY2tTZXNzaW9uTW9kZWwoKTsK
KyAgICBpZiAoIW1vZGVsKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUgZWZmZWN0aXZl
QW5jaG9yVGltZSA9IHBsYXliYWNrUmF0ZSA/IGFuY2hvclRpbWUgOiBOQU47CisgICAgZG91Ymxl
IGVmZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKKyAgICBpZiAoIWlzUGxheWlu
ZworICAgICAgICB8fCBtb2RlbC0+aXNTY3J1YmJpbmcoKQorICAgICAgICB8fCAobWFuYWdlci5y
YXRlID4gMCAmJiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGltZSgpID49IGN1cnJlbnRUaW1lKQor
ICAgICAgICB8fCAobWFuYWdlci5yYXRlIDwgMCAmJiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGlt
ZSgpIDw9IGN1cnJlbnRUaW1lKSkKKyAgICAgICAgZWZmZWN0aXZlUGxheWJhY2tSYXRlID0gMDsK
KworICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGlt
aW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lIGFuY2hvclRpbWVTdGFtcDplZmZlY3RpdmVB
bmNob3JUaW1lIHJhdGU6ZWZmZWN0aXZlUGxheWJhY2tSYXRlXTsKK30KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKworfQorCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWM3NGI4NDhmYWY5YjI5MGVlZjg2YTcyOTAyYjYzMGRkZGJlYzE4
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisKKyNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2luY2x1ZGUgIlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hY09iakM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFz
cyBGbG9hdFNpemU7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitjbGFzcyBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCisgICAgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQKKyAgICAsIHByaXZhdGUgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAs
IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4geworCitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IGNyZWF0ZShQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYyhwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKKyAgICB9CisgICAgdmlydHVhbCB+Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIHZp
ZGVvRnVsbHNjcmVlbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bDsgfQorICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25N
b2RlbCgpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bChWaWRlb0Z1bGxzY3JlZW5Nb2RlbCopOworICAgIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKiB2aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciop
OworCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92
ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
Ym9vbCAgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworCisg
ICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywg
Y29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJl
SW5QaWN0dXJlUGxheWJhY2spOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW50ZXJGdWxsc2Ny
ZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleGl0RnVsbHNjcmVlbihjb25zdCBJbnRS
ZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGVhbnVwRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0
ZSgpOworICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpIHsgfQorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwg
Y29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdyk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKKworICAgIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlOyB9CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgJiBtb2RlOyB9Cisg
ICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9CisgICAgdm9pZCBzZXRNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKwor
ICAgIGJvb2wgaXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0OworCisg
ICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgp
IHsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
T2JqQyAqdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpOworCitwcml2YXRlOgorICAgIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmKTsK
KyAgICBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBtX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCB7IG51bGxwdHIgfTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CisgICAgSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKKyAgICBSZXRhaW5QdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjT2JqQz4gbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDOwor
fTsKKworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjUyM2Yx
Mjk5M2Q3ODJjODkwNzY5ZDU2MDIzYjBjNmZlNTE2MWU5MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0K
QEAgLTAsMCArMSw1NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJJbnRSZWN0LmgiCisj
aW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNp
bXBvcnQgIlBJUFNQSS5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgi
CisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbXBvcnQgIldl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1l
Lmg+CisKKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCisKK1NPRlRfTElOS19GUkFNRVdP
UktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFs
dWVUaW1pbmcpCisKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChQSVApCitT
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUElQLCBQSVBWaWV3Q29udHJvbGxlcikKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK0BjbGFzcyBXZWJWaWRlb1ZpZXdDb250YWluZXI7CisKK0Bw
cm90b2NvbCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CisKKy0gKHZv
aWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250
YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXI7CistICh2b2lkKXN1cGVydmlld0RpZENoYW5nZUZv
clZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29u
dGFpbmVyOworCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9WaWV3Q29udGFpbmVyIDogTlNW
aWV3IHsKKyAgICBpZCA8V2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IF92aWRlb1ZpZXdD
b250YWluZXJEZWxlZ2F0ZTsKK30KKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaWQg
PFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB2aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0
ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9WaWV3Q29udGFpbmVyCisKK0Bz
eW50aGVzaXplIHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPV92aWRlb1ZpZXdDb250YWluZXJE
ZWxlZ2F0ZTsKKworLSAodm9pZClyZXNpemVXaXRoT2xkU3VwZXJ2aWV3U2l6ZTooTlNTaXplKW9s
ZEJvdW5kc1NpemUKK3sKKyAgICBbc3VwZXIgcmVzaXplV2l0aE9sZFN1cGVydmlld1NpemU6b2xk
Qm91bmRzU2l6ZV07CisKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIGJvdW5kc0Rp
ZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjpzZWxmXTsKK30KKworLSAodm9pZCl2aWV3RGlk
TW92ZVRvU3VwZXJ2aWV3Cit7CisgICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9TdXBlcnZpZXddOwor
CisgICAgW192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBzdXBlcnZpZXdEaWRDaGFuZ2VGb3JW
aWRlb1ZpZXdDb250YWluZXI6c2VsZl07Cit9CisKK0BlbmQKKworZW51bSBjbGFzcyBQSVBTdGF0
ZSB7CisgICAgTm90SW5QSVAsCisgICAgSW5QSVAsCisgICAgRXhpdGluZ1BJUAorfTsKKworQGlu
dGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIDogTlNPYmplY3QgPFBJ
UFZpZXdDb250cm9sbGVyRGVsZWdhdGUsIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB7
CisgICAgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKiBfdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOworICAgIE5TU2l6ZSBfdmlkZW9EaW1lbnNpb25zOworICAgIFJldGFp
blB0cjxQSVBWaWV3Q29udHJvbGxlcj4gX3BpcFZpZXdDb250cm9sbGVyOworICAgIFJldGFpblB0
cjxOU1ZpZXdDb250cm9sbGVyPiBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcjsKKyAgICBS
ZXRhaW5QdHI8V2ViVmlkZW9WaWV3Q29udGFpbmVyPiBfdmlkZW9WaWV3Q29udGFpbmVyOworICAg
IFBJUFN0YXRlIF9waXBTdGF0ZTsKKyAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IF9yZXR1cm5pbmdX
aW5kb3c7CisgICAgTlNSZWN0IF9yZXR1cm5pbmdSZWN0OworICAgIEJPT0wgX3BsYXlpbmc7Cisg
ICAgQk9PTCBfZGlkUmVxdWVzdEV4aXRpbmdQSVA7CisgICAgQk9PTCBfZXhpdGluZ1RvU3RhbmRh
cmRGdWxsc2NyZWVuOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyopdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOworLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0
YXRlOworLSAodm9pZClpbnZhbGlkYXRlOworCisvLyBUcmFja2luZyB2aWRlbyBwbGF5YmFjayBz
dGF0ZQorQHByb3BlcnR5IChub25hdG9taWMpIE5TU2l6ZSB2aWRlb0RpbWVuc2lvbnM7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5nOworLSAodm9p
ZCl1cGRhdGVJc1BsYXlpbmc6KEJPT0wpaXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTooZmxvYXQp
cGxheWJhY2tSYXRlOworCisvLyBIYW5kbGluZyBQSVAgdHJhbnNpdGlvbnMKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBkaWRSZXF1ZXN0RXhpdGluZ1BJUDsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4pIEJPT0wg
ZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOworCistICh2b2lkKXNldFVwUElQRm9yVmlkZW9W
aWV3OihOU1ZpZXcgKil2aWRlb1ZpZXcgd2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgaW5XaW5kb3c6
KE5TV2luZG93ICopd2luZG93OworLSAodm9pZCllbnRlclBJUDsKKy0gKHZvaWQpZXhpdFBJUDsK
Ky0gKHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJlY3QgaW5XaW5kb3c6KE5T
V2luZG93ICopd2luZG93OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWNPYmpDCisKK0BzeW50aGVzaXplIHBsYXlpbmc9X3BsYXlpbmc7CitA
c3ludGhlc2l6ZSB2aWRlb0RpbWVuc2lvbnM9X3ZpZGVvRGltZW5zaW9uczsKK0BzeW50aGVzaXpl
IGRpZFJlcXVlc3RFeGl0aW5nUElQPV9kaWRSZXF1ZXN0RXhpdGluZ1BJUDsKK0BzeW50aGVzaXpl
IGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbj1fZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVu
OworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyopdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOworICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpOb3RJblBJUDsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3Rh
dGUKK3sKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgX3Bp
cFZpZXdDb250cm9sbGVyID0gbmlsOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHJlbW92ZUZy
b21TdXBlcnZpZXddOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlOm5pbF07CisgICAgX3ZpZGVvVmlld0NvbnRhaW5lciA9IG5pbDsKKyAgICBf
dmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciA9IG5pbDsKKyAgICBfcGlwU3RhdGUgPSBQSVBT
dGF0ZTo6Tm90SW5QSVA7CisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gTk87CisgICAgX2V4
aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbiA9IE5POworICAgIF9yZXR1cm5pbmdXaW5kb3cgPSBu
aWw7CisgICAgX3JldHVybmluZ1JlY3QgPSBOU1plcm9SZWN0OworfQorCistICh2b2lkKWludmFs
aWRhdGUKK3sKKyAgICBbc2VsZiBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKKyAgICBfdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gbnVsbHB0cjsKKyAgICBfdmlkZW9EaW1lbnNpb25z
ID0gTlNaZXJvU2l6ZTsKK30KKworLSAodm9pZCl1cGRhdGVJc1BsYXlpbmc6KEJPT0wpaXNQbGF5
aW5nIG5ld1BsYXliYWNrUmF0ZTooZmxvYXQpcGxheWJhY2tSYXRlCit7CisgICAgX3BsYXlpbmcg
PSBpc1BsYXlpbmcgJiYgcGxheWJhY2tSYXRlOworCisgICAgW19waXBWaWV3Q29udHJvbGxlciBz
ZXRQbGF5aW5nOl9wbGF5aW5nXTsKK30KKworLSAodm9pZClzZXRWaWRlb0RpbWVuc2lvbnM6KE5T
U2l6ZSl2aWRlb0RpbWVuc2lvbnMKK3sKKyAgICBfdmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1l
bnNpb25zOworCisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRBc3BlY3RSYXRpbzpfdmlkZW9E
aW1lbnNpb25zXTsKK30KKworLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNWaWV3ICop
dmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG93OihOU1dpbmRvdyAqKXdp
bmRvdworeworICAgIEFTU0VSVCghX3BpcFZpZXdDb250cm9sbGVyKTsKKyAgICBBU1NFUlQoIV92
aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyKTsKKyAgICBBU1NFUlQoIV92aWRlb1ZpZXdDb250
YWluZXIpOworCisgICAgX3BpcFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NQSVBWaWV3
Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdF0pOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0
RGVsZWdhdGU6c2VsZl07CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRVc2VyQ2FuUmVzaXpl
OllFU107CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKKyAg
ICBbc2VsZiBzZXRWaWRlb0RpbWVuc2lvbnM6TlNFcXVhbFNpemVzKF92aWRlb0RpbWVuc2lvbnMs
IE5TWmVyb1NpemUpID8gZnJhbWUuc2l6ZSA6IF92aWRlb0RpbWVuc2lvbnNdOworICAgIGlmIChf
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFZp
ZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKTsKKworICAg
IF92aWRlb1ZpZXdDb250YWluZXIgPSBhZG9wdE5TKFtbV2ViVmlkZW9WaWV3Q29udGFpbmVyIGFs
bG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXSk7CisgICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0
VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU6c2VsZl07CisgICAgW192aWRlb1ZpZXdDb250YWlu
ZXIgYWRkU3Vidmlldzp2aWRlb1ZpZXddOworICAgIHZpZGVvVmlldy5mcmFtZSA9IFtfdmlkZW9W
aWV3Q29udGFpbmVyIGJvdW5kc107CisgICAgdmlkZW9WaWV3LmF1dG9yZXNpemluZ01hc2sgPSBO
U1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOworCisgICAgX3ZpZGVvVmll
d0NvbnRhaW5lckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbTlNWaWV3Q29udHJvbGxlciBhbGxvY10g
aW5pdF0pOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciBzZXRWaWV3Ol92aWRl
b1ZpZXdDb250YWluZXIuZ2V0KCldOworICAgIFt3aW5kb3cuY29udGVudFZpZXcgYWRkU3Vidmll
dzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxh
dGl2ZVRvOm5pbF07Cit9CisKKy0gKHZvaWQpZW50ZXJQSVAKK3sKKyAgICBpZiAoX3BpcFN0YXRl
ID09IFBJUFN0YXRlOjpJblBJUCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW192aWRlb1ZpZXdD
b250YWluZXJDb250cm9sbGVyIHZpZXddLmxheWVyLmJhY2tncm91bmRDb2xvciA9IENHQ29sb3JH
ZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQmxhY2spOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIg
cHJlc2VudFZpZXdDb250cm9sbGVyQXNQaWN0dXJlSW5QaWN0dXJlOl92aWRlb1ZpZXdDb250YWlu
ZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6SW5QSVA7Cit9
CisKKy0gKHZvaWQpZXhpdFBJUAoreworICAgIGlmIChfcGlwU3RhdGUgIT0gUElQU3RhdGU6Oklu
UElQIHx8ICFfcGlwVmlld0NvbnRyb2xsZXIgfHwgIV92aWRlb1ZpZXdDb250YWluZXJDb250cm9s
bGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBZRVM7
CisgICAgW192aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHZpZXddLmxheWVyLmJhY2tncm91
bmRDb2xvciA9IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQ2xlYXIpOworICAgIFtf
cGlwVmlld0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250cm9sbGVyOl92aWRlb1ZpZXdDb250YWlu
ZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6RXhpdGluZ1BJ
UDsKK30KKworLSAodm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpcmVjdCBpbldp
bmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBfcmV0dXJuaW5nV2luZG93ID0gd2luZG93
OworICAgIF9yZXR1cm5pbmdSZWN0ID0gcmVjdDsKKyAgICAKKyAgICBbX3BpcFZpZXdDb250cm9s
bGVyIHNldFJlcGxhY2VtZW50UmVjdDpyZWN0XTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNl
dFJlcGxhY2VtZW50V2luZG93OndpbmRvd107CisKKyAgICBbc2VsZiBleGl0UElQXTsKK30KKwor
Ly8gV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUKKworLSAodm9pZClib3VuZHNEaWRDaGFu
Z2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmll
d0NvbnRhaW5lcgoreworICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5lciB8fCAhX3BpcFZpZXdD
b250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfVU5VU0VEKHZpZGVvVmll
d0NvbnRhaW5lciwgdmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250YWluZXIpOwor
CisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKKyAgICAgICAgX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXll
ckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOworfQorCistICh2b2lkKXN1cGVy
dmlld0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVy
ICopdmlkZW9WaWV3Q29udGFpbmVyCit7CisgICAgaWYgKCFfdmlkZW9WaWV3Q29udGFpbmVyIHx8
ICFfcGlwVmlld0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh2aWRl
b1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7CisKKyAgICBpZiAoIVt2aWRl
b1ZpZXdDb250YWluZXIgaXNEZXNjZW5kYW50T2Y6W19waXBWaWV3Q29udHJvbGxlciB2aWV3XV0p
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIE9uY2UgdGhlIHZpZXcgaXMgbW92ZWQgaW50byB0
aGUgcGlwIHZpZXcsIG1ha2Ugc3VyZSBpdCByZXNpemVzIHdpdGggdGhlIHBpcCB2aWV3LgorICAg
IHZpZGVvVmlld0NvbnRhaW5lci5mcmFtZSA9IFt2aWRlb1ZpZXdDb250YWluZXIgc3VwZXJ2aWV3
XS5ib3VuZHM7CisgICAgdmlkZW9WaWV3Q29udGFpbmVyLmF1dG9yZXNpemluZ01hc2sgPSBOU1Zp
ZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOworfQorCisvLyBQSVBWaWV3Q29u
dHJvbGxlckRlbGVnYXRlCisKKy0gKEJPT0wpcGlwU2hvdWxkQ2xvc2U6KFBJUFZpZXdDb250cm9s
bGVyICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRy
b2xsZXIpOworCisgICAgaWYgKCFfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjIHx8ICFfdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigp
KQorICAgICAgICByZXR1cm4gWUVTOworCisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gWUVT
OworICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKCktPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworCisgICAgcmV0dXJu
IE5POworfQorCistICh2b2lkKXBpcERpZENsb3NlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAor
eworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKKwor
ICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgJiYgX3ZpZGVvVmlld0NvbnRhaW5l
ciAmJiBfcmV0dXJuaW5nV2luZG93ICYmICFOU0VxdWFsUmVjdHMoX3JldHVybmluZ1JlY3QsIE5T
WmVyb1JlY3QpKSB7CisgICAgICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgcnVuQW5pbWF0aW9uR3Jv
dXA6XihOU0FuaW1hdGlvbkNvbnRleHQgKmNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQu
YWxsb3dzSW1wbGljaXRBbmltYXRpb24gPSBOTzsKKyAgICAgICAgICAgIFtfdmlkZW9WaWV3Q29u
dGFpbmVyIHNldEZyYW1lOl9yZXR1cm5pbmdSZWN0XTsKKyAgICAgICAgICAgIF92aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJG
cmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKKyAgICAgICAgICAgIF92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5
ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Qp
OworCisgICAgICAgICAgICBbW19yZXR1cm5pbmdXaW5kb3cgY29udGVudFZpZXddIGFkZFN1YnZp
ZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93QWJvdmUgcmVs
YXRpdmVUbzpuaWxdOworICAgICAgICB9IGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgfQor
CisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpIHsKKyAgICAgICAgaWYgKCFz
ZWxmLmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSB7CisgICAgICAgICAgICBpZiAoVmlk
ZW9GdWxsc2NyZWVuTW9kZWwqIHZpZGVvRnVsbHNjcmVlbk1vZGVsID0gX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkgeworICAgICAgICAgICAgICAg
IHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgICAgICAgICAgICAgdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+Y2xlYXJNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwor
CisgICAgICAgIGlmIChWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyID0gX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgICAgIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpcGlwQWN0aW9uUGxh
eTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlw
ID09IF9waXBWaWV3Q29udHJvbGxlcik7CisKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25N
b2RlbCgpKQorICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbCgpLT5wbGF5KCk7Cit9CisKKy0gKHZvaWQpcGlwQWN0aW9uUGF1c2U6KFBJUFZp
ZXdDb250cm9sbGVyICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlw
Vmlld0NvbnRyb2xsZXIpOworCisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMg
JiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkK
KyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9k
ZWwoKS0+cGF1c2UoKTsKK30KKworLSAodm9pZClwaXBBY3Rpb25TdG9wOihQSVBWaWV3Q29udHJv
bGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250
cm9sbGVyKTsKKworICAgIGlmICghX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1v
ZGVsID0gX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwo
KTsKKyAgICBpZiAocGxheWJhY2tTZXNzaW9uTW9kZWwpCisgICAgICAgIHBsYXliYWNrU2Vzc2lv
bk1vZGVsLT5wYXVzZSgpOworCisgICAgLy8gRklYTUUgMjUwOTYxNzA6IFNob3VsZCBhbmltYXRl
IG9ubHkgaWYgdGhlIHBhZ2Ugd2l0aCB0aGUgdmlkZW8gaXMgdW5vYnNjdXJlZC4gRm9yIG5vdywg
YWx3YXlzIGNsb3NlIHdpdGhvdXQgYW5pbWF0aW9uLgorICAgIFtzZWxmIGV4aXRQSVBdOworfQor
CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgOiBtX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCit7CisgICAgQVNTRVJUKG1fcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKTsKKyAgICBhdXRvIG1v
ZGVsID0gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7
CisgICAgbW9kZWwtPmFkZENsaWVudCgqdGhpcyk7CisgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMoKSB1cGRhdGVJc1BsYXlpbmc6bW9kZWwtPmlzUGxheWluZygpIG5ld1BsYXliYWNr
UmF0ZTptb2RlbC0+cGxheWJhY2tSYXRlKCldOworfQorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKQoreworICAgIGlmIChtX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgbV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnJlbW92ZUNs
aWVudCgqdGhpcyk7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCogbW9kZWwpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwp
CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Cisg
ICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG1vZGVsOworICAgIGlmIChtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQoKnRo
aXMpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQoreworICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gb2JzZXJ2ZXI7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKKyAg
ICBpZiAobV9tb2RlID09IG5ld01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9kZSA9
IG5ld01vZGU7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7Cisg
ICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUg
PSBuZXdNb2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5
aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMoKSB1cGRhdGVJc1BsYXlpbmc6aXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTpwbGF5YmFj
a1JhdGVdOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29u
dHJvbHNNYW5hZ2VyKCkKK3sKKyAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+ZW5zdXJl
Q29udHJvbHNNYW5hZ2VyKCk7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09i
akMgKlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQygpCit7CisgICAgaWYgKCFtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMpCisg
ICAgICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyA9IGFkb3B0TlMoW1tXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIGFsbG9jXSBpbml0V2l0aFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzp0aGlzXSk7CisKKyAgICByZXR1cm4gbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDLmdldCgpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6c2V0dXBGdWxsc2NyZWVuKE5TVmlldyYgbGF5ZXJIb3N0ZWRWaWV3LCBjb25zdCBJbnRS
ZWN0JiBpbml0aWFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdywgSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGlj
dHVyZVBsYXliYWNrKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oJXApLCBpbml0aWFsUmVjdDp7JWQsICVkLCAlZCwg
JWR9LCBwYXJlbnRXaW5kb3c6JXAsIG1vZGU6JWQiLCB0aGlzLCBpbml0aWFsUmVjdC54KCksIGlu
aXRpYWxSZWN0LnkoKSwgaW5pdGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJlY3QuaGVpZ2h0KCks
IHBhcmVudFdpbmRvdywgbW9kZSk7CisKKyAgICBVTlVTRURfUEFSQU0oYWxsb3dzUGljdHVyZUlu
UGljdHVyZVBsYXliYWNrKTsKKyAgICBBU1NFUlQobW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKworICAgIG1fbW9kZSA9
IG1vZGU7CisKKyAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHNldFVwUElQRm9y
VmlkZW9WaWV3OiZsYXllckhvc3RlZFZpZXcgd2l0aEZyYW1lOihOU1JlY3QpaW5pdGlhbFJlY3Qg
aW5XaW5kb3c6cGFyZW50V2luZG93XTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYg
KG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOworICAgIH0pOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVu
KCVwKSIsIHRoaXMpOworCisgICAgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSB7CisgICAgICAgIFttX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZW50ZXJQSVBdOworCisjaWYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgICAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2
ZTpZRVNdOworI2VuZGlmCisKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNj
cmVlbigpOworICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4
aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdp
bmRvdykKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6ZXhpdEZ1bGxzY3JlZW4oJXApLCBmaW5hbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50
V2luZG93OiVwIiwgdGhpcywgZmluYWxSZWN0LngoKSwgZmluYWxSZWN0LnkoKSwgZmluYWxSZWN0
LndpZHRoKCksIGZpbmFsUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKKworI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBbbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFj
dGl2ZTpOT107CisjZW5kaWYKKworICAgIGlmIChbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDIGRpZFJlcXVlc3RFeGl0aW5nUElQXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGZpbmFsUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgZXhpdFBJUF07CisgICAgZWxzZQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6ZmluYWxSZWN0IGluV2luZG93
OnBhcmVudFdpbmRvd107Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
eGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRv
TW9kZSglcCksIG1vZGU6JWQiLCB0aGlzLCBtb2RlKTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpOT107Cisj
ZW5kaWYKKworICAgIGlmIChbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGRpZFJl
cXVlc3RFeGl0aW5nUElQXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpc0V4aXRpbmdU
b1N0YW5kYXJkRnVsbHNjcmVlbiA9IG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQ7CisgICAgLy8gT24gTWFjLCBzdGFuZGFyZCBmdWxsc2Ny
ZWVuIGlzIGhhbmRsZWQgYnkgdGhlIEZ1bGxzY3JlZW4gQVBJIGFuZCBub3QgYnkgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci4KKyAgICAvLyBKdXN0IHVwZGF0ZSBtX21vZGUgZGlyZWN0bHkgdG8gSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgaW4gdGhhdCBj
YXNlIHRvIGtlZXAKKyAgICAvLyBtX21vZGUgaW4gc3luYyB3aXRoIHRoZSBmdWxsc2NyZWVuIG1v
ZGUgaW4gSFRNTE1lZGlhRWxlbWVudC4KKyAgICBpZiAoaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxz
Y3JlZW4pCisgICAgICAgIG1fbW9kZSA9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVN0YW5kYXJkOworCisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQyBzZXRFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW46aXNFeGl0aW5nVG9TdGFuZGFyZEZ1
bGxzY3JlZW5dOworICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJ
UF07Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNj
cmVlbigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworCisgICAgW21fd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VPYmpDIGludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGVdOworCisgICAgaWYgKG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6OmludmFsaWRhdGUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCVwKSIsIHRoaXMpOworCisgICAgbV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9
IG5pbDsKKworICAgIGNsZWFudXBGdWxsc2NyZWVuKCk7CisKKyAgICBbbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDIGludmFsaWRhdGVdOworICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQyA9IG5pbDsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBjb25z
dCBjaGFyKiBib29sU3RyaW5nKGJvb2wgdmFsKQoreworICAgIHJldHVybiB2YWwgPyAidHJ1ZSIg
OiAiZmFsc2UiOworfQorI2VuZGlmCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBp
bmxpbmVSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQoreworICAgIExPRyhGdWxsc2NyZWVu
LCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
JXApLCB2aXNpYmxlOiVzLCBpbmxpbmVSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRv
dzolcCIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSksIGlubGluZVJlY3QueCgpLCBpbmxpbmVS
ZWN0LnkoKSwgaW5saW5lUmVjdC53aWR0aCgpLCBpbmxpbmVSZWN0LmhlaWdodCgpLCBwYXJlbnRX
aW5kb3cpOworCisgICAgaWYgKCF2aXNpYmxlKSB7CisgICAgICAgIFttX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlQocGFyZW50V2luZG93KTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClpbmxpbmVSZWN0IGluV2luZG93
OnBhcmVudFdpbmRvd107Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoJXApLCBlbmFibGVkOiVzIiwgdGhpcywgYm9vbFN0cmluZyhlbmFibGVkKSk7CisK
KyAgICBpZiAoZW5hYmxlZCAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW4o
SW50UmVjdCgpLCBuaWwpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZCglcCk6JXMiLCB0aGlz
LCBib29sU3RyaW5nKGhhc1ZpZGVvKSk7CisKKyAgICBpZiAoIWhhc1ZpZGVvKQorICAgICAgICBl
eGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9E
aW1lbnNpb25zKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6JS4wZiwgaGVpZ2h0OiUu
MGYiLCB0aGlzLCB2aWRlb0RpbWVuc2lvbnMud2lkdGgoKSwgdmlkZW9EaW1lbnNpb25zLmhlaWdo
dCgpKTsKKworICAgIC8vIFdpZHRoIGFuZCBoZWlnaHQgY2FuIGJlIHplcm8gd2hlbiB3ZSBhcmUg
dHJhbnNpdGlvbmluZyBmcm9tIG9uZSB2aWRlbyB0byBhbm90aGVyLiBJZ25vcmUgemVybyB2YWx1
ZXMuCisgICAgaWYgKCF2aWRlb0RpbWVuc2lvbnMuaXNaZXJvKCkpCisgICAgICAgIFttX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5z
aW9uc107Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppc1BsYXlpbmdW
aWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzTW9kZShX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJl
SW5QaWN0dXJlKSAmJiBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGlzUGxheWlu
Z107Cit9CisKK2Jvb2wgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICByZXR1cm4g
UElQTGlicmFyeSgpICYmIGdldFBJUFZpZXdDb250cm9sbGVyQ2xhc3MoKTsKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyLmgKaW5kZXggNzA1ZDYzYjQ4YTk5YWVlMWU4OTM5NjU2MjQwMTMy
MjQzZTQ3MmM0ZC4uNzY3ZjAxMjg3MzAwMDFhYjRkNzlmZTYwM2MxMjI3NzRhZjcxM2UyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwogc3RydWN0IE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uOwogfQogCkBAIC01OCwxMCArNTgsMTAgQEAgV0VCQ09SRV9FWFBPUlQKICAg
ICBmbG9hdCBfcmF0ZTsKICAgICBCT09MIF9jYW5Ub2dnbGVQbGF5YmFjazsKIAotICAgIFJlZlB0
cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IF93ZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYz4gX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIH0KIAotQHByb3BlcnR5
IChhc3NpZ24pIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyogd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyogcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwog
QHByb3BlcnR5IChyZWFkd3JpdGUpIE5TVGltZUludGVydmFsIGNvbnRlbnREdXJhdGlvbjsKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkgQVZWYWx1ZVRpbWluZyAqdGlt
aW5nOwogQHByb3BlcnR5IChub25hdG9taWMpIE5TVGltZUludGVydmFsIHNlZWtUb1RpbWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIubW0KaW5kZXggN2I0NGEwNzRkZjI5ODA2MmY4MDUzZTllYmM3ZDMxNDUxZTgy
ZTVlNS4uYWJiZGI1Mjc3MjA3MjRhZmU1NDczMTE3NDA4YjQzN2EwOTQ5MmFlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5tbQpAQCAtMjksOCArMjksOCBAQAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCiAKICNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0ICJX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcu
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01OSw4ICs1OSw4IEBAIEBz
eW50aGVzaXplIGNhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmU7CiAKIC0gKHZvaWQpZGVhbGxvYwog
ewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQotICAgICAgICBfd2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihu
dWxscHRyKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICAgICAg
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIo
bnVsbHB0cik7CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCkBAIC05Myw3ICs5Myw3IEBAIC0g
KHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6KE5T
VGltZUludGVydmFsKXRvbGVyYW5jCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRvbGVyYW5jZUJlZm9y
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRvbGVyYW5jZUFmdGVyKTsKLSAgICBfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWVrVG9UaW1l
KHRpbWUpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPnNlZWtUb1RpbWUodGltZSk7CiB9CiAKIC0gKHZvaWQpY2FuY2VsVGh1bWJuYWls
QW5kQXVkaW9BbXBsaXR1ZGVTYW1wbGVHZW5lcmF0aW9uCkBAIC0xMjUsMTIgKzEyNSwxMiBAQCAt
IChCT09MKWNhbkJlZ2luVG91Y2hCYXJTY3J1YmJpbmcKIAogLSAodm9pZCliZWdpblRvdWNoQmFy
U2NydWJiaW5nCiB7Ci0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+YmVnaW5T
Y3J1YmJpbmcoKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5iZWdpblNjcnVi
YmluZygpOwogfQogCiAtICh2b2lkKWVuZFRvdWNoQmFyU2NydWJiaW5nCiB7Ci0gICAgX3dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+ZW5kU2NydWJiaW5nKCk7CisgICAgX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy0+ZW5kU2NydWJiaW5nKCk7CiB9CiAKICNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMzAwCkBAIC0xOTIsNyArMTkyLDcgQEAgLSAodm9p
ZClzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOihBVlRvdWNoQmFy
TWVkaWFTZWxlY3Rpb25PcHQKICAgICBpZiAoYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbiAmJiBf
YXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucykKICAgICAgICAgaW5kZXggPSBbX2F1
ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMgaW5kZXhPZk9iamVjdDphdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uXTsKIAotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMt
PndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgg
IT0gTlNOb3RGb3VuZCA/IGluZGV4IDogVUlOVDY0X01BWCk7CisgICAgX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5UNjRfTUFYKTsKIH0KIAogLSAo
TlNBcnJheTxBVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24gKj4gKilsZWdpYmxlVG91Y2hC
YXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMKQEAgLTIyMiw3ICsyMjIsNyBAQCAtICh2b2lkKXNldEN1
cnJlbnRMZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbjooQVZUb3VjaEJhck1lZGlh
U2VsZWN0aW9uTwogICAgIGlmIChsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb24gJiYgX2xlZ2li
bGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucykKICAgICAgICAgaW5kZXggPSBbX2xlZ2li
bGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucyBpbmRleE9mT2JqZWN0OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbl07CiAKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5k
ZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4IDogVUlOVDY0X01BWCk7CisgICAgX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOwogfQog
CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDAKQEAgLTI5Miw0
NyArMjkyLDQ3IEBAIC0gKHZvaWQpc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6KE5TVUlu
dGVnZXIpc2VsZWN0ZWRJbmRleAogICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAiY3Vy
cmVudExlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uIl07CiB9CiAKLS0gKFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
CistIChQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYwogewotICAgIHJldHVybiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmdldCgp
OworICAgIHJldHVybiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmdldCgpOwogfQogCi0t
ICh2b2lkKXNldFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzooV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjKil3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKKy0gKHZvaWQp
c2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOihQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMqKXBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYwogewotICAgIGlmIChfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjID09IHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAg
ICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9PSBwbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5z
ZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihudWxscHRyKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYykKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CiAKLSAgICBfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjID0gd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworICAg
IF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM7CiAKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAgICAgICAg
X3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFn
ZXIoc2VsZik7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgICAg
IF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2Vy
KHNlbGYpOwogfQogCiAtICh2b2lkKXRvZ2dsZVBsYXliYWNrCiB7Ci0gICAgaWYgKF93ZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGxheVN0YXRl
KCk7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGxh
eVN0YXRlKCk7CiB9CiAKIC0gKHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nCiB7Ci0gICAg
aWYgKCFfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIHx8ICFfd2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgIGlmICghX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyB8fCAhX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQk9PTCBp
c0N1cnJlbnRseVBsYXlpbmcgPSBzZWxmLnBsYXlpbmc7CiAgICAgaWYgKCFpc0N1cnJlbnRseVBs
YXlpbmcgJiYgcGxheWluZykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOworICAgICAgICBfcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7CiAgICAg
ZWxzZSBpZiAoaXNDdXJyZW50bHlQbGF5aW5nICYmICFwbGF5aW5nKQotICAgICAgICBfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVz
ZSgpOworICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5wYXVzZSgpOwogfQogCiAtIChCT09MKWlzUGxheWluZwogewotICAgIGlmIChf
d2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIHJldHVybiBfd2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5p
c1BsYXlpbmcoKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAg
ICByZXR1cm4gX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9k
ZWwoKS0+aXNQbGF5aW5nKCk7CiAKICAgICByZXR1cm4gTk87CiB9CkBAIC0zNDAsOCArMzQwLDgg
QEAgLSAoQk9PTClpc1BsYXlpbmcKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTMwMAogLSAodm9pZCl0b2dnbGVQaWN0dXJlSW5QaWN0dXJlCiB7Ci0gICAgaWYgKF93
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGlj
dHVyZUluUGljdHVyZSgpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYm
IF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisg
ICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCktPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MTI0YzFlMWJmZTAxNWJk
MjljMGVmMDdhNzBlMzcxYzE5YjUxZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkKLQotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVt
cy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgotI2luY2x1ZGUg
IldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLU9CSkNfQ0xBU1MgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXI7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDsKLQotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
IGZpbmFsCi0gICAgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBw
dWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBjcmVhdGUoV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwmKTsKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMoKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9Ci0KLSAgICAvLyBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0
TWVkaWFTdGF0ZSgpIGZpbmFsIHsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAv
KmN1cnJlbnRUaW1lKi8sIGRvdWJsZSAvKmFuY2hvclRpbWUqLykgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIC8qaXNQbGF5aW5nKi8sIGZsb2F0IC8qcGxh
eWJhY2tSYXRlKi8pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5n
ZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgLypsYXN0TW9kaWZpZWRUaW1lKi8s
IGRvdWJsZSAvKmxpdmVVcGRhdGVJbnRlcnZhbCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiAvKm9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4
Ki8pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRp
b25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERl
dmljZU5hbWUgKi8pIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRl
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLSNp
ZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlciAqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAq
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSNlbmRpZgotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYmVnaW5TY3J1YmJpbmcoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmlu
ZygpOwotCi1wcml2YXRlOgotICAgIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCYpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3Bs
YXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0ciB9OwotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tf
Q09OVFJPTFNfTUFOQUdFUikKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbV9wbGF5
YmFja0NvbnRyb2xzTWFuYWdlciAgeyBudWxscHRyIH07Ci0KLSAgICB2b2lkIHVwZGF0ZVBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hv
clRpbWUsIGRvdWJsZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKTsKLSNlbmRpZgotCi19
OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4YjQ0YTYxYzUwZTAxNjJjM2MxMGU3MTc1ZDgxYzZmMmEyNDg0Y2VhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KKysrIC9kZXYv
bnVsbApAQCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLQotI2lmIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW1wb3J0
ICJBVktpdFNQSS5oIgotI2ltcG9ydCAiSW50UmVjdC5oIgotI2ltcG9ydCAiTWVkaWFTZWxlY3Rp
b25PcHRpb24uaCIKLSNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgotI2ltcG9ydCAi
VGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCIKLSNp
bXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24v
QVZUaW1lLmg+Ci0KLSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19G
UkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQs
IEFWVmFsdWVUaW1pbmcpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBt
b2RlbCkKLXsKLSAgICBhdXRvIGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKG1vZGVsKSk7Ci0gICAgbW9kZWwuYWRkQ2xpZW50KGludGVyZmFj
ZSk7Ci0gICAgcmV0dXJuIGludGVyZmFjZTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwmIG1vZGVsKQotICAgIDogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCi17Ci19
Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6fldlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYygpCi17Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsK
LSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKCk7Ci0KLSAgICBjb250cm9sc01hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247
Ci0KLSAgICAvLyBGSVhNRTogV2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5
YmFjayBpcyByZWFkeSwgYnV0IHRoYXQgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUuCi0gICAgY29u
dHJvbHNNYW5hZ2VyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKLSAgICBjb250cm9sc01hbmFnZXIu
aGFzRW5hYmxlZFZpZGVvID0gWUVTOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZHVyYXRpb24p
OwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjdXJy
ZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKLXsK
LSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKCk7Ci0gICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoY3VycmVudFRp
bWUsIGFuY2hvclRpbWUsIGNvbnRyb2xzTWFuYWdlci5yYXRlLCBjb250cm9sc01hbmFnZXIucGxh
eWluZyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50VGltZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGFuY2hvclRpbWUpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250
cm9sc01hbmFnZXIoKTsKLSAgICBbY29udHJvbHNNYW5hZ2VyIHNldFJhdGU6aXNQbGF5aW5nID8g
cGxheWJhY2tSYXRlIDogMC5dOwotICAgIFtjb250cm9sc01hbmFnZXIgc2V0UGxheWluZzppc1Bs
YXlpbmddOwotICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIDog
MCwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdLCBwbGF5YmFja1Jh
dGUsIGlzUGxheWluZyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpc1BsYXlpbmcpOwotICAg
IFVOVVNFRF9QQVJBTShwbGF5YmFja1JhdGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpiZWdpblNjcnViYmluZygpCi17Ci0jaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyVGltaW5nKG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPyBtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsLT5jdXJyZW50VGltZSgpIDogMCwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0
ZW1VcHRpbWVdLCAwLCBmYWxzZSk7Ci0jZW5kaWYKLSAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpLT5iZWdpblNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgp
LT5lbmRTY3J1YmJpbmcoKTsKLX0KLQotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKLXN0YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHRpbWVSYW5nZXNUb0Fy
cmF5KGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiByYW5nZUFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgo
KTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFBsYXRmb3JtVGltZVJhbmdlcyYgcmFuZ2VzID0gdGlt
ZVJhbmdlcy5yYW5nZXMoKTsKLSAgICAgICAgQ01UaW1lUmFuZ2UgcmFuZ2UgPSBDTVRpbWVSYW5n
ZU1ha2UodG9DTVRpbWUocmFuZ2VzLnN0YXJ0KGkpKSwgdG9DTVRpbWUocmFuZ2VzLmVuZChpKSkp
OwotICAgICAgICBbcmFuZ2VBcnJheSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1l
UmFuZ2U6cmFuZ2VdXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmFuZ2VBcnJheTsKLX0KLSNlbmRp
ZgotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSwgZG91YmxlKQotewot
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tD
b250cm9sc01hbmFnZXIoKSBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6dGltZVJhbmdlc1RvQXJyYXko
dGltZVJhbmdlcykuZ2V0KCldOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGltZVJhbmdlcyk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotI2lmIEVOQUJMRShX
RUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFn
ZXIoKSBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczpvcHRpb25zIHdpdGhTZWxlY3RlZElu
ZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKG9wdGlvbnMpOwotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsK
LSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKCkgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczpvcHRpb25zIHdpdGhTZWxlY3Rl
ZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOwotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4
KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewot
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tD
b250cm9sc01hbmFnZXIoKSBzZXRBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXg6c2VsZWN0ZWRJbmRl
eF07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKLSNlbmRpZgotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdl
cigpIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5kZXhdOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wg
ZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlLCBjb25zdCBTdHJpbmcmKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRDYW5Ub2dnbGVQaWN0
dXJlSW5QaWN0dXJlOiFlbmFibGVkXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQp
OwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjppbnZh
bGlkYXRlKCkKLXsKLSAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7
Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQotewotI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBwbGF5QmFja0NvbnRy
b2xzTWFuYWdlcigpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCi0KLVdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSAgICByZXR1
cm4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyICptYW5hZ2VyKQotewotICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXIg
PSBtYW5hZ2VyOwotCi0gICAgaWYgKCFtYW5hZ2VyIHx8ICFtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAg
PSAhW21hbmFnZXIgcmF0ZV0gPyBOQU4gOiBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5
c3RlbVVwdGltZV07Ci0gICAgbWFuYWdlci50aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNz
KCkgdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3Vy
cmVudFRpbWUoKSBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0gICAg
ZG91YmxlIGR1cmF0aW9uID0gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+ZHVyYXRpb24oKTsKLSAg
ICBtYW5hZ2VyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIG1hbmFnZXIuaGFzRW5h
YmxlZEF1ZGlvID0gZHVyYXRpb24gPiAwOwotICAgIG1hbmFnZXIuaGFzRW5hYmxlZFZpZGVvID0g
ZHVyYXRpb24gPiAwOwotICAgIG1hbmFnZXIucmF0ZSA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwt
PmlzUGxheWluZygpID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cGxheWJhY2tSYXRlKCkgOiAw
LjsKLSAgICBtYW5hZ2VyLnNlZWthYmxlVGltZVJhbmdlcyA9IHRpbWVSYW5nZXNUb0FycmF5KG1f
cGxheWJhY2tTZXNzaW9uTW9kZWwtPnNlZWthYmxlUmFuZ2VzKCkpLmdldCgpOwotICAgIG1hbmFn
ZXIuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7Ci0gICAgbWFuYWdlci5wbGF5aW5nID0gbV9wbGF5
YmFja1Nlc3Npb25Nb2RlbC0+aXNQbGF5aW5nKCk7Ci0gICAgW21hbmFnZXIgc2V0QXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPiht
X3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpKV07Ci0gICAg
W21hbmFnZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lv
bk1vZGVsLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6
c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1l
ZGlhU2VsZWN0ZWRJbmRleCgpKV07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjp1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxh
eWluZykKLXsKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IHBsYXlC
YWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgaWYgKCFtYW5hZ2VyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCAqbW9kZWwgPSB3ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpOwotICAgIGlmICghbW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJs
ZSBlZmZlY3RpdmVBbmNob3JUaW1lID0gcGxheWJhY2tSYXRlID8gYW5jaG9yVGltZSA6IE5BTjsK
LSAgICBkb3VibGUgZWZmZWN0aXZlUGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwotICAgIGlm
ICghaXNQbGF5aW5nCi0gICAgICAgIHx8IG1vZGVsLT5pc1NjcnViYmluZygpCi0gICAgICAgIHx8
IChtYW5hZ2VyLnJhdGUgPiAwICYmIG1vZGVsLT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCkgPj0gY3Vy
cmVudFRpbWUpCi0gICAgICAgIHx8IChtYW5hZ2VyLnJhdGUgPCAwICYmIG1vZGVsLT5wbGF5YmFj
a1N0YXJ0ZWRUaW1lKCkgPD0gY3VycmVudFRpbWUpKQotICAgICAgICBlZmZlY3RpdmVQbGF5YmFj
a1JhdGUgPSAwOwotCi0gICAgbWFuYWdlci50aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNz
KCkgdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUgYW5jaG9yVGltZVN0YW1w
OmVmZmVjdGl2ZUFuY2hvclRpbWUgcmF0ZTplZmZlY3RpdmVQbGF5YmFja1JhdGVdOwotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotCi19Ci0KLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4
M2VjOTQ0MDc2Y2E1OGQ2MDNmNDBhYjgxOGNkNTVhMTBiZTkxMS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjX2gKLSNkZWZpbmUgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjX2gKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1z
LmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW5jbHVk
ZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1PQkpDX0NMQVNT
IE5TV2luZG93OwotT0JKQ19DTEFTUyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpD
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRTaXpl
OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwotY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7Ci0KLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYwotICAgIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50Ci0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0g
ICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHsK
LQotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpOwotICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsKiB3ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwqKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogd2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcjsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKLQot
ICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVy
cmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wgIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKLQot
ICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZp
ZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGlj
dHVyZUluUGljdHVyZVBsYXliYWNrKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVudGVyRnVs
bHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29uc3Qg
SW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFs
aWRhdGUoKTsKLSAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKSB7IH0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2li
bGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0KLSAgICBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZTsgfQotICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsg
fQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQotICAgIHZvaWQgc2V0
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIHZv
aWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7
Ci0KLSAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsK
LQotICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3Rp
dmUoKSB7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakMgKnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKTsKLQotcHJpdmF0ZToKLSAg
ICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjJik7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gbV9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OwotICAg
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07Ci0gICAgUmV0YWlu
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM+IG1fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQzsKLX07Ci0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZTY0MmM4ZWMwY2JmOTQ3NWU4NDk2ZGY3Yzg3
MDJjMjQ4NjU1M2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDU3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW1wb3J0ICJBVktpdFNQSS5o
IgotI2ltcG9ydCAiSW50UmVjdC5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVk
aWFUaW1lQVZGb3VuZGF0aW9uLmgiCi0jaW1wb3J0ICJQSVBTUEkuaCIKLSNpbXBvcnQgIlRpbWVS
YW5nZXMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCi0jaW1wb3J0
ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bC5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgotCi0jaW1wb3J0ICJDb3JlTWVk
aWFTb2Z0TGluay5oIgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi1TT0ZUX0xJTktf
UFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoUElQKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFM
KFBJUCwgUElQVmlld0NvbnRyb2xsZXIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1A
Y2xhc3MgV2ViVmlkZW9WaWV3Q29udGFpbmVyOwotCi1AcHJvdG9jb2wgV2ViVmlkZW9WaWV3Q29u
dGFpbmVyRGVsZWdhdGUgPE5TT2JqZWN0PgotCi0tICh2b2lkKWJvdW5kc0RpZENoYW5nZUZvclZp
ZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFp
bmVyOwotLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdl
YlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcjsKLQotQGVuZAotCi1AaW50
ZXJmYWNlIFdlYlZpZGVvVmlld0NvbnRhaW5lciA6IE5TVmlldyB7Ci0gICAgaWQgPFdlYlZpZGVv
Vmlld0NvbnRhaW5lckRlbGVnYXRlPiBfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Ci19Ci0K
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlkIDxXZWJWaWRlb1ZpZXdDb250YWluZXJE
ZWxlZ2F0ZT4gdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFdlYlZpZGVvVmlld0NvbnRhaW5lcgotCi1Ac3ludGhlc2l6ZSB2aWRlb1ZpZXdDb250
YWluZXJEZWxlZ2F0ZT1fdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Ci0KLS0gKHZvaWQpcmVz
aXplV2l0aE9sZFN1cGVydmlld1NpemU6KE5TU2l6ZSlvbGRCb3VuZHNTaXplCi17Ci0gICAgW3N1
cGVyIHJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXplOm9sZEJvdW5kc1NpemVdOwotCi0gICAgW192
aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250
YWluZXI6c2VsZl07Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb1N1cGVydmlldwotewotICAg
IFtzdXBlciB2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3XTsKLQotICAgIFtfdmlkZW9WaWV3Q29udGFp
bmVyRGVsZWdhdGUgc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNlbGZd
OwotfQotCi1AZW5kCi0KLWVudW0gY2xhc3MgUElQU3RhdGUgewotICAgIE5vdEluUElQLAotICAg
IEluUElQLAotICAgIEV4aXRpbmdQSVAKLX07Ci0KLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjT2JqQyA6IE5TT2JqZWN0IDxQSVBWaWV3Q29udHJvbGxlckRlbGVnYXRl
LCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gewotICAgIFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYyogX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsK
LSAgICBOU1NpemUgX3ZpZGVvRGltZW5zaW9uczsKLSAgICBSZXRhaW5QdHI8UElQVmlld0NvbnRy
b2xsZXI+IF9waXBWaWV3Q29udHJvbGxlcjsKLSAgICBSZXRhaW5QdHI8TlNWaWV3Q29udHJvbGxl
cj4gX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFdlYlZpZGVv
Vmlld0NvbnRhaW5lcj4gX3ZpZGVvVmlld0NvbnRhaW5lcjsKLSAgICBQSVBTdGF0ZSBfcGlwU3Rh
dGU7Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBfcmV0dXJuaW5nV2luZG93OwotICAgIE5TUmVj
dCBfcmV0dXJuaW5nUmVjdDsKLSAgICBCT09MIF9wbGF5aW5nOwotICAgIEJPT0wgX2RpZFJlcXVl
c3RFeGl0aW5nUElQOwotICAgIEJPT0wgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OihXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzsKLS0gKHZvaWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZTsKLS0g
KHZvaWQpaW52YWxpZGF0ZTsKLQotLy8gVHJhY2tpbmcgdmlkZW8gcGxheWJhY2sgc3RhdGUKLUBw
cm9wZXJ0eSAobm9uYXRvbWljKSBOU1NpemUgdmlkZW9EaW1lbnNpb25zOwotQHByb3BlcnR5IChu
b25hdG9taWMsIGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWluZzsKLS0gKHZvaWQpdXBkYXRl
SXNQbGF5aW5nOihCT09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNr
UmF0ZTsKLQotLy8gSGFuZGxpbmcgUElQIHRyYW5zaXRpb25zCi1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgZGlkUmVxdWVzdEV4aXRpbmdQSVA7Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgZ2V0dGVyPWlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSBCT09MIGV4aXRpbmdU
b1N0YW5kYXJkRnVsbHNjcmVlbjsKLQotLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNW
aWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG93OihOU1dpbmRv
dyAqKXdpbmRvdzsKLS0gKHZvaWQpZW50ZXJQSVA7Ci0tICh2b2lkKWV4aXRQSVA7Ci0tICh2b2lk
KWV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2luZG93OihOU1dpbmRvdyAq
KXdpbmRvdzsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjT2JqQwotCi1Ac3ludGhlc2l6ZSBwbGF5aW5nPV9wbGF5aW5nOwotQHN5bnRoZXNp
emUgdmlkZW9EaW1lbnNpb25zPV92aWRlb0RpbWVuc2lvbnM7Ci1Ac3ludGhlc2l6ZSBkaWRSZXF1
ZXN0RXhpdGluZ1BJUD1fZGlkUmVxdWVzdEV4aXRpbmdQSVA7Ci1Ac3ludGhlc2l6ZSBleGl0aW5n
VG9TdGFuZGFyZEZ1bGxzY3JlZW49X2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IHdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6Tm90
SW5QSVA7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlRnVsbHNj
cmVlblN0YXRlCi17Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwot
ICAgIF9waXBWaWV3Q29udHJvbGxlciA9IG5pbDsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1Zp
ZXdDb250YWluZXJEZWxlZ2F0ZTpuaWxdOwotICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBuaWw7
Ci0gICAgX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgPSBuaWw7Ci0gICAgX3BpcFN0YXRl
ID0gUElQU3RhdGU6Ok5vdEluUElQOwotICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IE5POwot
ICAgIF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBOTzsKLSAgICBfcmV0dXJuaW5nV2lu
ZG93ID0gbmlsOwotICAgIF9yZXR1cm5pbmdSZWN0ID0gTlNaZXJvUmVjdDsKLX0KLQotLSAodm9p
ZClpbnZhbGlkYXRlCi17Ci0gICAgW3NlbGYgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07Ci0g
ICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IG51bGxwdHI7Ci0gICAgX3ZpZGVv
RGltZW5zaW9ucyA9IE5TWmVyb1NpemU7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihC
T09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZQotewotICAg
IF9wbGF5aW5nID0gaXNQbGF5aW5nICYmIHBsYXliYWNrUmF0ZTsKLQotICAgIFtfcGlwVmlld0Nv
bnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107Ci19Ci0KLS0gKHZvaWQpc2V0VmlkZW9EaW1l
bnNpb25zOihOU1NpemUpdmlkZW9EaW1lbnNpb25zCi17Ci0gICAgX3ZpZGVvRGltZW5zaW9ucyA9
IHZpZGVvRGltZW5zaW9uczsKLQotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0QXNwZWN0UmF0
aW86X3ZpZGVvRGltZW5zaW9uc107Ci19Ci0KLS0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6
KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNX
aW5kb3cgKil3aW5kb3cKLXsKLSAgICBBU1NFUlQoIV9waXBWaWV3Q29udHJvbGxlcik7Ci0gICAg
QVNTRVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcik7Ci0gICAgQVNTRVJUKCFfdmlk
ZW9WaWV3Q29udGFpbmVyKTsKLQotICAgIF9waXBWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2Fs
bG9jUElQVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICBbX3BpcFZpZXdDb250
cm9sbGVyIHNldERlbGVnYXRlOnNlbGZdOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0VXNl
ckNhblJlc2l6ZTpZRVNdOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxh
eWluZ107Ci0gICAgW3NlbGYgc2V0VmlkZW9EaW1lbnNpb25zOk5TRXF1YWxTaXplcyhfdmlkZW9E
aW1lbnNpb25zLCBOU1plcm9TaXplKSA/IGZyYW1lLnNpemUgOiBfdmlkZW9EaW1lbnNpb25zXTsK
LSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAgICAgICBf
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgp
LT5zZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2
aXR5UmVzaXplQXNwZWN0RmlsbCk7Ci0KLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gYWRvcHRO
UyhbW1dlYlZpZGVvVmlld0NvbnRhaW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOwot
ICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOnNl
bGZdOwotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKLSAg
ICB2aWRlb1ZpZXcuZnJhbWUgPSBbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdOwotICAgIHZp
ZGVvVmlldy5hdXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVp
Z2h0U2l6YWJsZTsKLQotICAgIF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyID0gYWRvcHRO
UyhbW05TVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbX3ZpZGVvVmlld0NvbnRh
aW5lckNvbnRyb2xsZXIgc2V0VmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpXTsKLSAgICBb
d2luZG93LmNvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBw
b3NpdGlvbmVkOk5TV2luZG93QWJvdmUgcmVsYXRpdmVUbzpuaWxdOwotfQotCi0tICh2b2lkKWVu
dGVyUElQCi17Ci0gICAgaWYgKF9waXBTdGF0ZSA9PSBQSVBTdGF0ZTo6SW5QSVApCi0gICAgICAg
IHJldHVybjsKLQotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXll
ci5iYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNr
KTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlckFzUGljdHVy
ZUluUGljdHVyZTpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07Ci0gICAgX3Bp
cFN0YXRlID0gUElQU3RhdGU6OkluUElQOwotfQotCi0tICh2b2lkKWV4aXRQSVAKLXsKLSAgICBp
ZiAoX3BpcFN0YXRlICE9IFBJUFN0YXRlOjpJblBJUCB8fCAhX3BpcFZpZXdDb250cm9sbGVyIHx8
ICFfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
X2RpZFJlcXVlc3RFeGl0aW5nUElQID0gWUVTOwotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29u
dHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRD
b2xvcihrQ0dDb2xvckNsZWFyKTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3
Q29udHJvbGxlcjpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07Ci0gICAgX3Bp
cFN0YXRlID0gUElQU3RhdGU6OkV4aXRpbmdQSVA7Ci19Ci0KLS0gKHZvaWQpZXhpdFBJUEFuaW1h
dGluZ1RvUmVjdDooTlNSZWN0KXJlY3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0g
ICAgX3JldHVybmluZ1dpbmRvdyA9IHdpbmRvdzsKLSAgICBfcmV0dXJuaW5nUmVjdCA9IHJlY3Q7
Ci0gICAgCi0gICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFJlY3Q6cmVjdF07
Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFdpbmRvdzp3aW5kb3ddOwot
Ci0gICAgW3NlbGYgZXhpdFBJUF07Ci19Ci0KLS8vIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVn
YXRlCi0KLS0gKHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJW
aWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXIKLXsKLSAgICBpZiAoIV92aWRl
b1ZpZXdDb250YWluZXIgfHwgIV9waXBWaWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUX1VOVVNFRCh2aWRlb1ZpZXdDb250YWluZXIsIHZpZGVvVmlld0NvbnRhaW5l
ciA9PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVv
Vmlld0NvbnRhaW5lciBib3VuZHNdKTsKLX0KLQotLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VG
b3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0Nv
bnRhaW5lcgotewotICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5lciB8fCAhX3BpcFZpZXdDb250
cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQodmlkZW9WaWV3Q29udGFpbmVy
ID09IF92aWRlb1ZpZXdDb250YWluZXIpOwotCi0gICAgaWYgKCFbdmlkZW9WaWV3Q29udGFpbmVy
IGlzRGVzY2VuZGFudE9mOltfcGlwVmlld0NvbnRyb2xsZXIgdmlld11dKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBPbmNlIHRoZSB2aWV3IGlzIG1vdmVkIGludG8gdGhlIHBpcCB2aWV3LCBt
YWtlIHN1cmUgaXQgcmVzaXplcyB3aXRoIHRoZSBwaXAgdmlldy4KLSAgICB2aWRlb1ZpZXdDb250
YWluZXIuZnJhbWUgPSBbdmlkZW9WaWV3Q29udGFpbmVyIHN1cGVydmlld10uYm91bmRzOwotICAg
IHZpZGVvVmlld0NvbnRhaW5lci5hdXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxl
IHwgTlNWaWV3SGVpZ2h0U2l6YWJsZTsKLX0KLQotLy8gUElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZQotCi0tIChCT09MKXBpcFNob3VsZENsb3NlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAotewot
ICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAg
IGlmICghX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyB8fCAhX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKLSAg
ICAgICAgcmV0dXJuIFlFUzsKLQotICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKLSAg
ICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcigpLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKLQotICAgIHJldHVy
biBOTzsKLX0KLQotLSAodm9pZClwaXBEaWRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAK
LXsKLSAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0K
LSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpICYmIF92aWRlb1Zp
ZXdDb250YWluZXIgJiYgX3JldHVybmluZ1dpbmRvdyAmJiAhTlNFcXVhbFJlY3RzKF9yZXR1cm5p
bmdSZWN0LCBOU1plcm9SZWN0KSkgewotICAgICAgICBbTlNBbmltYXRpb25Db250ZXh0IHJ1bkFu
aW1hdGlvbkdyb3VwOl4oTlNBbmltYXRpb25Db250ZXh0ICpjb250ZXh0KSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LmFsbG93c0ltcGxpY2l0QW5pbWF0aW9uID0gTk87Ci0gICAgICAgICAgICBbX3Zp
ZGVvVmlld0NvbnRhaW5lciBzZXRGcmFtZTpfcmV0dXJuaW5nUmVjdF07Ci0gICAgICAgICAgICBf
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgp
LT5zZXRWaWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7Ci0gICAg
ICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKLQotICAgICAgICAgICAgW1tfcmV0dXJuaW5nV2lu
ZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkgcG9z
aXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsKLSAgICAgICAgfSBjb21wbGV0
aW9uSGFuZGxlcjpuaWxdOwotICAgIH0KLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjKSB7Ci0gICAgICAgIGlmICghc2VsZi5pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNj
cmVlbikgewotICAgICAgICAgICAgaWYgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1
bGxzY3JlZW5Nb2RlbCA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKCkpIHsKLSAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2Rl
bC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZU5vbmUpOwotICAgICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5z
ZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5
UmVzaXplQXNwZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLQotICAgICAgICBpZiAo
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ciA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKCkpCi0gICAgICAgICAgICBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgfQotfQotCi0tICh2b2lkKXBpcEFjdGlvblBsYXk6KFBJ
UFZpZXdDb250cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBf
cGlwVmlld0NvbnRyb2xsZXIpOwotCi0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOwotfQotCi0tICh2b2lkKXBpcEFjdGlvblBh
dXNlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBw
aXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7Ci19Ci0KLS0gKHZvaWQpcGlw
QWN0aW9uU3RvcDooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VE
KHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoIV93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBfd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBwbGF5
YmFja1Nlc3Npb25Nb2RlbC0+cGF1c2UoKTsKLQotICAgIC8vIEZJWE1FIDI1MDk2MTcwOiBTaG91
bGQgYW5pbWF0ZSBvbmx5IGlmIHRoZSBwYWdlIHdpdGggdGhlIHZpZGVvIGlzIHVub2JzY3VyZWQu
IEZvciBub3csIGFsd2F5cyBjbG9zZSB3aXRob3V0IGFuaW1hdGlvbi4KLSAgICBbc2VsZiBleGl0
UElQXTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotICAgIDog
bV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotewot
ICAgIEFTU0VSVChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKSk7Ci0gICAgYXV0byBtb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOwotICAgIG1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwot
ICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOm1vZGVs
LT5pc1BsYXlpbmcoKSBuZXdQbGF5YmFja1JhdGU6bW9kZWwtPnBsYXliYWNrUmF0ZSgpXTsKLX0K
LQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp+V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjKCkKLXsKLSAgICBpZiAobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5yZW1vdmVDbGllbnQoKnRoaXMpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwqIG1vZGVsKQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkK
LSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZl
cikKLXsKLSAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7Ci0g
ICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21vZGUg
PSBuZXdNb2RlOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2Rl
OwotICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9t
b2RlID0gbmV3TW9kZTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29s
IGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIFt2aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOmlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6
cGxheWJhY2tSYXRlXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCi17Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UtPmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWNPYmpDICpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakMoKQotewotICAgIGlmICghbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDKQotICAgICAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBh
ZG9wdE5TKFtbV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBhbGxvY10gaW5pdFdp
dGhXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6dGhpc10pOwotCi0gICAgcmV0dXJuIG1f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQy5nZXQoKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9z
dGVkVmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5k
b3csIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29s
IGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5p
dGlhbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhp
cywgaW5pdGlhbFJlY3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCks
IGluaXRpYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUpOwotCi0gICAgVU5VU0VE
X1BBUkFNKGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7Ci0gICAgQVNTRVJUKG1vZGUg
PT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSk7Ci0KLSAgICBtX21vZGUgPSBtb2RlOwotCi0gICAgW3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMoKSBzZXRVcFBJUEZvclZpZGVvVmlldzombGF5ZXJIb3N0ZWRWaWV3IHdpdGhGcmFt
ZTooTlNSZWN0KWluaXRpYWxSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107Ci0KLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCB0aGlzXSB7Ci0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAg
ICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4o
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVu
dGVyRnVsbHNjcmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAgIGlmICht
b2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSkgewotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpD
IGVudGVyUElQXTsKLQotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
LSAgICAgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6WUVTXTsKLSNlbmRpZgotCi0gICAgICAg
IGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbihjb25zdCBJbnRS
ZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpCi17Ci0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKCVw
KSwgZmluYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGZp
bmFsUmVjdC54KCksIGZpbmFsUmVjdC55KCksIGZpbmFsUmVjdC53aWR0aCgpLCBmaW5hbFJlY3Qu
aGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCi0gICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOwotI2VuZGlmCi0K
LSAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhp
dGluZ1BJUF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChmaW5hbFJlY3QuaXNFbXB0eSgp
KQotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwot
ICAgIGVsc2UKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0
UElQQW5pbWF0aW5nVG9SZWN0OmZpbmFsUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRo
b3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoJXApLCBtb2Rl
OiVkIiwgdGhpcywgbW9kZSk7Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01B
TkFHRVIpCi0gICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xz
TWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOwotI2VuZGlmCi0KLSAgICBp
ZiAoW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJ
UF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxz
Y3JlZW4gPSBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVN0YW5kYXJkOwotICAgIC8vIE9uIE1hYywgc3RhbmRhcmQgZnVsbHNjcmVlbiBpcyBoYW5kbGVk
IGJ5IHRoZSBGdWxsc2NyZWVuIEFQSSBhbmQgbm90IGJ5IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIuCi0gICAgLy8gSnVzdCB1cGRhdGUgbV9tb2RlIGRpcmVjdGx5IHRvIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIGluIHRoYXQgY2FzZSB0byBrZWVw
Ci0gICAgLy8gbV9tb2RlIGluIHN5bmMgd2l0aCB0aGUgZnVsbHNjcmVlbiBtb2RlIGluIEhUTUxN
ZWRpYUVsZW1lbnQuCi0gICAgaWYgKGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKQotICAg
ICAgICBtX21vZGUgPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZDsKLQotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgc2V0RXhp
dGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuXTsK
LSAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpj
bGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgZXhpdFBJUF07Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQyBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKLQotICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZENsZWFudXBGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjppbnZhbGlkYXRlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSglcCkiLCB0aGlzKTsKLQotICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIg
PSBuaWw7Ci0KLSAgICBjbGVhbnVwRnVsbHNjcmVlbigpOwotCi0gICAgW21fd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlXTsKLSAgICBtX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgPSBuaWw7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgY29u
c3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAgICByZXR1cm4gdmFsID8gInRydWUi
IDogImZhbHNlIjsKLX0KLSNlbmRpZgotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVj
dCYgaW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKLXsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKCVwKSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJl
bnRXaW5kb3c6JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpLCBpbmxpbmVSZWN0LngoKSwg
aW5saW5lUmVjdC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5saW5lUmVjdC5oZWlnaHQoKSwg
cGFyZW50V2luZG93KTsKLQotICAgIGlmICghdmlzaWJsZSkgewotICAgICAgICBbbV93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKHBhcmVudFdpbmRvdyk7Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpaW5saW5lUmVjdCBp
bldpbmRvdzpwYXJlbnRXaW5kb3ddOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYp
Ci17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKCVwKSwgZW5hYmxlZDolcyIsIHRoaXMsIGJvb2xTdHJp
bmcoZW5hYmxlZCkpOwotCi0gICAgaWYgKGVuYWJsZWQgJiYgbV9tb2RlID09IEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAg
IGV4aXRGdWxsc2NyZWVuKEludFJlY3QoKSwgbmlsKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQotewotICAg
IExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRl
b0NoYW5nZWQoJXApOiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbykpOwotCi0gICAgaWYg
KCFoYXNWaWRlbykKLSAgICAgICAgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBMT0coRnVsbHNjcmVl
biwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZCglcCksIHdpZHRoOiUuMGYsIGhlaWdodDolLjBmIiwgdGhpcywgdmlkZW9EaW1lbnNpb25zLndp
ZHRoKCksIHZpZGVvRGltZW5zaW9ucy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBXaWR0aCBhbmQgaGVp
Z2h0IGNhbiBiZSB6ZXJvIHdoZW4gd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgdmlkZW8g
dG8gYW5vdGhlci4gSWdub3JlIHplcm8gdmFsdWVzLgotICAgIGlmICghdmlkZW9EaW1lbnNpb25z
LmlzWmVybygpKQotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNl
dFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwotfQotCi1ib29sIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgJiYgW21fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpc1BsYXlpbmddOwotfQotCi1ib29sIHN1cHBvcnRzUGlj
dHVyZUluUGljdHVyZSgpCi17Ci0gICAgcmV0dXJuIFBJUExpYnJhcnkoKSAmJiBnZXRQSVBWaWV3
Q29udHJvbGxlckNsYXNzKCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KaW5kZXggNGExNzBhMzY3NmExOTAzZDQ3NGI5MDkxY2NjOTEyMTQ2YzdmMTg4
MS4uODg2OWMwMTdjYjdkY2YzMWYzNjQ3ZTNkYTQ2MGZhOWE3MDQyNmNkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMzE5LDggKzMxOSw4IEBACiAKIAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2Vi
Q29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0lO
VEVSQUNUSU9OKQpAQCAtOTI2MiwxMSArOTI2MiwxMSBAQCAtICh2b2lkKV9zZXRVcFBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyRm9yTWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
JgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25N
b2RlbCkKLSAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOworICAgICAgICBfcHJpdmF0ZS0+
cGxheWJhY2tTZXNzaW9uTW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
Y3JlYXRlKCk7CiAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZXRNZWRpYUVs
ZW1lbnQoJm1lZGlhRWxlbWVudCk7CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UpCi0gICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Ug
PSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXli
YWNrU2Vzc2lvbk1vZGVsKTsKKyAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKCpfcHJpdmF0ZS0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwpOwogCiAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCmluZGV4IGE3OGIwOTBlMDdiZTQzNjE5
NmE2OTVjYTEyODdlODc4ZDI2NjYxY2MuLmJkZWRmNzczZGRmZGUwNjZmYTUyZTE3NTZjYjY4MjIy
NzQ2Y2Y0Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0Rh
dGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKQEAgLTU0
LDggKzU0LDggQEAgY2xhc3MgUGFnZTsKIGNsYXNzIFRleHRJbmRpY2F0b3JXaW5kb3c7CiBjbGFz
cyBWYWxpZGF0aW9uQnViYmxlOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwot
Y2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CitjbGFzcyBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDsKICNlbmRpZgogfQogCkBAIC0zMzgsOCArMzM4LDggQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0g
ICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBw
bGF5YmFja1Nlc3Npb25Nb2RlbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjPiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBwbGF5YmFja1Nlc3Npb25N
b2RlbDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBw
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQppbmRleCA3
Nzk3MzZhMTZhZmY2MGUzZmE1YTBhYzdlYTM2NDA2ZGMzNjRmMmU0Li5mOTMwZmE5NmM4ODViYmZm
NzQwNGYwNzIzNTk2NzU5NTVmYzRiODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXdEYXRhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlld0RhdGEubW0KQEAgLTUxLDggKzUxLDggQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0jaW1wb3J0IDxXZWJDb3JlL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQuaD4KICNlbmRpZgogCiBCT09MIGFwcGxpY2F0aW9uSXNUZXJtaW5h
dGluZyA9IE5POwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFr
ZSBiL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggODNhZDBlOGE1Nzhl
MTJkNjg3NTU2MGIwODc4MWE3NzQ3MTg0NDYxNS4uZTI0ZTMwNThiNjcyYjc4MGVjZDQ5NzdlNjcy
NjI0YmM4NGQxMzBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xNTQsOCAr
MTU0LDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViUGFzdGVib2FyZFByb3h5IFwK
ICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3IgXAogICAgIFdlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5IFwKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIFwKLSAgICBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkgXAorICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgXAorICAgIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSBcCiAgICAgV2ViUHJvY2VzcyBcCiAgICAgV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24gXAogICAgIFdlYlByb2Nlc3NQb29sIFwKQEAgLTE2OCw4ICsxNjgsOCBA
QCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBXZWJTb2NrZXRTdHJlYW0gXAogICAgIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlciBcCiAgICAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkg
XAotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgXAotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eSBcCisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBcCisgICAgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5IFwKICMKIAogU0NSSVBUUyA9IFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggNjQwNzFjYmYxMDFm
MDE3ZGRlOGNhYTUzODEyN2YzZWEzOWJiNzdjNC4uOWIyZDU5YThhNTZhYTk2YWE0ZGRiMjQ1ZmIx
ZDU2NzcxZDgyNGY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KQEAgLTEyNiwxMiArMTI2LDEyIEBACiAjaW1wb3J0ICJSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCIK
ICNpbXBvcnQgIldLUERGVmlldy5oIgogI2ltcG9ydCAiV0tQYXNzd29yZFZpZXcuaCIKICNpbXBv
cnQgIldLU2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVn
aXN0cnkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2lt
cG9ydCAiX1dLRHJhZ2dhYmxlRWxlbWVudEluZm9JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2Vi
Vmlld1ByaW50Rm9ybWF0dGVyLmgiCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU4MGY5NTc3ZjA0NDMwY2NjNjRjZjMz
Y2VlN2U3YTg5Yjk1M2Y2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaApAQCAtMCwwICsxLDIzMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2VsZWN0aW9uT3B0aW9uLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vz
c2lvbk1vZGVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPFdlYkNvcmUvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9T
KQordHlwZWRlZiBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCBQbGF0Zm9y
bVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyNlbHNlCit0eXBlZGVmIFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xh
c3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbCAgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBjcmVhdGUoUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgflBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dCgpIHsgfQorCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21h
bmFnZXIgPSBudWxscHRyOyB9CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgIHZv
aWQgYWRkQ2xpZW50KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgZmluYWw7
CisgICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmKWZpbmFsOworCisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKTsKKyAgICB2b2lk
IGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUpOworICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdl
ZChkb3VibGUpOworICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlKTsK
KyAgICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUp
OworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBk
b3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7CisgICAg
dm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgYXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVj
dGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIGF1ZGlv
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAg
dm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCk7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sLCBQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpOwor
ICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpOworICAg
IHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7CisKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQoUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250
ZXh0SWQpCisgICAgICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAgICAgICAsIG1fY29udGV4
dElkKGNvbnRleHRJZCkKKyAgICB7CisgICAgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9k
ZWwKKyAgICB2b2lkIHBsYXkoKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlKCkgZmluYWw7CisgICAg
dm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKCkg
ZmluYWw7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5hbDsKKyAgICB2b2lkIHNlZWtUb1Rp
bWUoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBmaW5hbDsK
KyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgZmluYWw7CisgICAgdm9pZCBiZWdpblNj
YW5uaW5nQmFja3dhcmQoKSBmaW5hbDsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKCkgZmluYWw7Cisg
ICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lk
IHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCB0b2dn
bGVQaWN0dXJlSW5QaWN0dXJlKCkgZmluYWw7CisgICAgdm9pZCB0b2dnbGVNdXRlZCgpIGZpbmFs
OworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7CisKKyAgICBkb3VibGUgcGxheWJhY2tT
dGFydGVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGxheWJhY2tTdGFydGVkVGltZTsg
fQorICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZHVyYXRpb247
IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2N1cnJl
bnRUaW1lOyB9CisgICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fYnVmZmVyZWRUaW1lOyB9CisgICAgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2lzUGxheWluZzsgfQorICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2lzU2NydWJiaW5nOyB9CisgICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wbGF5YmFja1JhdGU7IH0KKyAgICBSZWY8V2ViQ29yZTo6VGltZVJh
bmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlZWthYmxlUmFu
Z2VzLmNvcHlSZWYoKTsgfQorICAgIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZp
ZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9k
aWZpZWRUaW1lOyB9CisgICAgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGl2ZVVwZGF0ZUludGVydmFsOyB9CisgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2Uo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NhblBsYXlGYXN0UmV2ZXJzZTsgfQorICAgIFZlY3Rv
cjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOyB9
CisgICAgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OyB9CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOyB9CisgICAgdWlu
dDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsgfQorICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0Vu
YWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkOyB9
CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZTsgfQorICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxp
emVkRGV2aWNlTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0xv
Y2FsaXplZERldmljZU5hbWU7IH0KKyAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZDsgfQorICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbXV0ZWQ7IH0K
KworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOworICAgIHVpbnQ2
NF90IG1fY29udGV4dElkOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgZG91YmxlIG1fcGxheWJhY2tTdGFydGVkVGltZSB7
IDAgfTsKKyAgICBib29sIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlIHsgZmFsc2Ug
fTsKKyAgICBkb3VibGUgbV9kdXJhdGlvbiB7IDAgfTsKKyAgICBkb3VibGUgbV9jdXJyZW50VGlt
ZSB7IDAgfTsKKyAgICBkb3VibGUgbV9idWZmZXJlZFRpbWUgeyAwIH07CisgICAgYm9vbCBtX2lz
UGxheWluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzU2NydWJiaW5nIHsgZmFsc2UgfTsKKyAg
ICBmbG9hdCBtX3BsYXliYWNrUmF0ZSB7IDAgfTsKKyAgICBSZWY8V2ViQ29yZTo6VGltZVJhbmdl
cz4gbV9zZWVrYWJsZVJhbmdlcyB7IFdlYkNvcmU6OlRpbWVSYW5nZXM6OmNyZWF0ZSgpIH07Cisg
ICAgZG91YmxlIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSB7IDAgfTsKKyAg
ICBkb3VibGUgbV9saXZlVXBkYXRlSW50ZXJ2YWwgeyAwIH07CisgICAgYm9vbCBtX2NhblBsYXlG
YXN0UmV2ZXJzZSB7IGZhbHNlIH07CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9u
T3B0aW9uPiBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOworICAgIHVpbnQ2NF90IG1fYXVk
aW9NZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAgdWludDY0
X3QgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9OworICAgIGJvb2wgbV9leHRlcm5h
bFBsYXliYWNrRW5hYmxlZCB7IGZhbHNlIH07CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgeyBQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUgfTsKKyAgICBTdHJpbmcgbV9leHRl
cm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICBib29sIG1fd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07
Cit9OworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291
bnRlZDxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJl
Y2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYpOworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBQbGF0
Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogY29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCk7
CisgICAgdm9pZCByZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7CisgICAgZnJpZW5kIGNs
YXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKKworICAgIGV4cGxpY2l0IFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworCisgICAgdHlw
ZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBSZWZQ
dHI8UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxl
OworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBQbGF0Zm9ybVBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAv
LyBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKyAgICB2b2lkIHNldFVwUGxh
eWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICB2b2lkIHJlc2V0TWVkaWFTdGF0
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpOworICAg
IHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZm
ZXJlZFRpbWUpOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91
YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgIHZv
aWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFs
dWUpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2
b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwor
ICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVk
RGV2aWNlTmFtZSk7CisgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbik7CisgICAgdm9pZCBwbGF5YmFja1N0
YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0
ZWRUaW1lKTsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBp
c1BsYXlpbmcsIGRvdWJsZSByYXRlKTsKKyAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXNwb25zZSh1aW50NjRfdCwgU3RyaW5nKSBjb25zdDsKKyAgICB2b2lkIG11dGVkQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOworCisgICAgLy8gTWVzc2FnZXMgdG8g
UGxheWJhY2tTZXNzaW9uTWFuYWdlcgorICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBs
YXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1l
KTsKKyAgICB2b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOwor
ICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2
b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQg
ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRl
eCk7CisgICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgdm9pZCB0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0
TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKKworICAgIFdlYlBhZ2VQcm94eSogbV9w
YWdlOworICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4
dE1hcDsKKyAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKKyAg
ICBIYXNoQ291bnRlZFNldDx1aW50NjRfdD4gbV9jbGllbnRDb3VudHM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhYzhmNzlkMWIyNDU1YTc4MGY4
MjI3YTNlZmE0OTE2OWZkMDVlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQorbWVzc2FnZXMgLT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5IHsKKyAgICBSZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQorICAgIEN1cnJl
bnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91
YmxlIGhvc3RUaW1lKQorICAgIEJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgYnVmZmVyZWRUaW1lKQorICAgIFNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5n
ZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQor
ICAgIENhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZh
bHVlKQorICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBBdWRpb01lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKKyAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQorICAgIEV4dGVybmFsUGxheWJhY2tQcm9w
ZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3Qg
dGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCisgICAgV2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxl
ZCkKKyAgICBEdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRp
b24pCisgICAgUGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKKyAgICBSYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKKyAgICBNdXRlZENoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKKyAgICBTZXRVcFBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBDbGVhclBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyKCkKKworICAgIEhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50
NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDJjMzk5ZThkYjg2YTkxNTA1YTJhZGQ2NjQ0ZGQ4OTAzNjIyN2U3
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KQEAgLTAsMCArMSw1NjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmgiCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1By
b3h5LmgiCisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjcHJhZ21hIG1hcmsgLSBQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQKKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAg
IEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRk
KCZjbGllbnQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmVtb3Zl
Q2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJU
KG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xp
ZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXkoKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGxheShtX2NvbnRleHRJZCk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSgpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5wYXVzZShtX2NvbnRleHRJZCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGxheVN0YXRl
KG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJl
Z2luU2NydWJiaW5nKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PmJlZ2luU2NydWJiaW5nKG1fY29udGV4dElkKTsKKworICAgIG1faXNTY3J1YmJpbmcgPSB0cnVl
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmVuZFNjcnViYmluZyht
X2NvbnRleHRJZCk7CisKKyAgICBtX2lzU2NydWJiaW5nID0gZmFsc2U7CisgICAgbV9wbGF5YmFj
a1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgPSBpc1BsYXlpbmcoKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYg
KG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0
aW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRv
dWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZmFz
dFNlZWsobV9jb250ZXh0SWQsIHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQoreworICAgIGlmIChtX21hbmFnZXIpCisg
ICAgICAgIG1fbWFuYWdlci0+YmVnaW5TY2FubmluZ0ZvcndhcmQobV9jb250ZXh0SWQpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJk
KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5p
bmdCYWNrd2FyZChtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjplbmRTY2FubmluZygpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9t
YW5hZ2VyLT5lbmRTY2FubmluZyhtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklk
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlv
bklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUo
bV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9n
Z2xlTXV0ZWQoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dG9n
Z2xlTXV0ZWQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPnNldE11dGVkKG1fY29udGV4dElkLCBtdXRlZCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3Vi
bGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWUgPSBw
bGF5YmFja1N0YXJ0ZWRUaW1lOworICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRl
ID0gZmFsc2U7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpkdXJhdGlv
bkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQoreworICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsK
KyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5kdXJh
dGlvbkNoYW5nZWQoZHVyYXRpb24pOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSkKK3sKKyAgICBtX2N1
cnJlbnRUaW1lID0gY3VycmVudFRpbWU7CisgICAgYXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOworICAgIGlmIChtX3BsYXliYWNrU3Rh
cnRlZFRpbWVOZWVkc1VwZGF0ZSkKKyAgICAgICAgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQo
Y3VycmVudFRpbWUpOworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAg
ICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5n
ZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBtX2J1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVk
VGltZTsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50
LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxh
eWJhY2tSYXRlKQoreworICAgIG1faXNQbGF5aW5nID0gaXNQbGF5aW5nOworICAgIG1fcGxheWJh
Y2tSYXRlID0gcGxheWJhY2tSYXRlOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRz
KQorICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hh
bmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiBzZWVrYWJsZVJhbmdlcywgZG91YmxlIGxhc3RNb2Rp
ZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgbV9zZWVrYWJsZVJh
bmdlcyA9IHNlZWthYmxlUmFuZ2VzOworICAgIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlm
aWVkVGltZSA9IGxhc3RNb2RpZmllZFRpbWU7CisgICAgbV9saXZlVXBkYXRlSW50ZXJ2YWwgPSBs
aXZlVXBkYXRlSW50ZXJ2YWw7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisg
ICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBsYXN0
TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlG
YXN0UmV2ZXJzZSkKK3sKKyAgICBtX2NhblBsYXlGYXN0UmV2ZXJzZSA9IGNhblBsYXlGYXN0UmV2
ZXJzZTsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50
LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnMsIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KQoreworICAg
IG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
czsKKyAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5k
ZXg7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zLCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
LCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQoreworICAgIG1fbGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAg
bV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsK
KworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMsIGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxl
Y3RlZEluZGV4OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAg
IGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fbGVnaWJs
ZU1lZGlhU2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXg7CisKKyAgICBmb3IgKGF1dG8qIGNs
aWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIGxvY2FsaXplZE5hbWUpCit7CisgICAgbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCA9IGVu
YWJsZWQ7CisgICAgbV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSA9IHR5cGU7CisgICAgbV9l
eHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZE5hbWU7CisKKyAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5leHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWROYW1lKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkQ2hhbmdlZChib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQoreworICAgIG1f
d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgPSB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZDsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50
LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0
ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit7CisgICAgbV9tdXRlZCA9IG11dGVkOworICAgIGZvciAo
YXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZCht
dXRlZCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQor
CitSZWZQdHI8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGFnZSkpOworfQorCitQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdl
UHJveHkmIHBhZ2UpCisgICAgOiBtX3BhZ2UoJnBhZ2UpCit7CisgICAgbV9wYWdlLT5wcm9jZXNz
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOworfQor
CitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkoKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgaW52YWxpZGF0
ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgp
Cit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlID0gbnVsbHB0cjsKKworICAgIGZvciAoYXV0byYg
dHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAgICAgICBzdGQ6OnRpZShtb2RlbCwg
aW50ZXJmYWNlKSA9IHR1cGxlOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwor
ICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fY2xpZW50Q291bnRzLmNs
ZWFyKCk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VU
dXBsZSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0PiBtb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBj
b250ZXh0SWQpOworICAgIFJlZjxQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50
ZXJmYWNlID0gUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6OmNyZWF0ZShtb2RlbCk7
CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGlu
dGVyZmFjZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJm
YWNlVHVwbGUmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250
ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCkpOworfQorCitQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQor
eworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4
dElkKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRDbGllbnRG
b3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX2NsaWVudENvdW50cy5hZGQo
Y29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92
ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIGlmICghbV9jbGll
bnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVuc3Vy
ZUludGVyZmFjZShjb250ZXh0SWQpLmludmFsaWRhdGUoKTsKKyAgICBtX2NvbnRleHRNYXAucmVt
b3ZlKGNvbnRleHRJZCk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIKKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldFVw
UGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQoreworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPT0gY29u
dGV4dElkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpCisgICAgICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQpOworCisgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7
CisgICAgZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKS5lbnN1cmVD
b250cm9sc01hbmFnZXIoKTsKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkKTsKKworICAgIG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFu
Z2UoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7CisjZW5kaWYKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01h
bmFnZXIoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRl
eHRJZCA9IDA7CisgICAgbV9wYWdlLT52aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpOwor
I2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXNldE1lZGlh
U3RhdGUodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0
SWQpLnJlc2V0TWVkaWFTdGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5j
dXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5idWZmZXJl
ZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1v
ZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBSZWY8VGltZVJh
bmdlcz4gdGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworICAgIGZvciAoY29uc3Qg
YXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKKyAgICAgICAgQVNTRVJUKGlzZmluaXRlKHJhbmdlLmZp
cnN0KSk7CisgICAgICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5zZWNvbmQpKTsKKyAgICAgICAg
QVNTRVJUKHJhbmdlLnNlY29uZCA+PSByYW5nZS5maXJzdCk7CisgICAgICAgIHRpbWVSYW5nZXMt
PmFkZChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsKKyAgICB9CisKKyAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZp
ZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgdmFsdWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jYW5QbGF5RmFzdFJl
dmVyc2VDaGFuZ2VkKHZhbHVlKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRl
eCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQbGF5YmFja1By
b3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJf
dCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9IHN0YXRpY19j
YXN0PFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4odGFy
Z2V0VHlwZSk7CisgICAgQVNTRVJUKHR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdl
dFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVU
Vk91dCB8fCB0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSk7CisK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJs
ZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIG11dGVkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubXV0
ZWRDaGFuZ2VkKG11dGVkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKK3sK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQor
eworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQo
cGxheWJhY2tTdGFydGVkVGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3Vi
bGUgcmF0ZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJhdGVDaGFuZ2VkKGlzUGxh
eWluZywgcmF0ZSk7Cit9CisKKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Omhh
bmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmlu
ZyBpZGVudGlmaWVyKSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoY29udGV4
dElkID09IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICBtX3BhZ2UtPmhhbmRs
ZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShpZGVudGlmaWVyKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGNvbnRleHRJZCk7CisgICAgVU5VU0VEX1BBUkFNKGlkZW50aWZpZXIpOworI2Vu
ZGlmCit9CisKKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIKKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBsYXkodWludDY0X3QgY29u
dGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6UGxheShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBhdXNlKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBsYXlT
dGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2lu
U2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVu
ZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpmYXN0U2Vlayh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RmFzdFNlZWsoY29udGV4dElkLCB0aW1lKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdp
blNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdp
blNjYW5uaW5nQmFja3dhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpFbmRTY2FubmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWlu
dDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oY29u
dGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4dElkLCBp
bmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4
dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6VG9nZ2xlTXV0ZWQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgbXV0ZWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpTZXRNdXRlZChjb250ZXh0SWQsIG11dGVkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXF1ZXN0Q29udHJvbGxl
ZEVsZW1lbnRJRCgpCit7CisgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAg
ICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkhhbmRs
ZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK1BsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgp
Cit7CisgICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UobV9jb250
cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAgIHJldHVybiAmaW50ZXJmYWNlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jMTc3MjU2ZTRhZWU4MWVkNDZjY2FkNmZkZTI2MDliM2ViYzQ5
NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2lu
Y2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8V2ViQ29yZS9WaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1Mp
Cit0eXBlZGVmIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IFBsYXRmb3Jt
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworI2Vsc2UKK3R5cGVkZWYgV2ViQ29yZTo6VmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjIFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CitjbGFz
cyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CisKK2NsYXNzIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCBmaW5hbAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PgorICAgICwgcHVibGljIFdlYkNvcmU6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIgIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dD4gY3JlYXRlKFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0
X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0KG1hbmFnZXIsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250
ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KKwor
ICAgIFBsYXRmb3JtVmlldyAqbGF5ZXJIb3N0VmlldygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJI
b3N0Vmlldy5nZXQoKTsgfQorICAgIHZvaWQgc2V0TGF5ZXJIb3N0VmlldyhSZXRhaW5QdHI8UGxh
dGZvcm1WaWV3PiYmIGxheWVySG9zdFZpZXcpIHsgbV9sYXllckhvc3RWaWV3ID0gV1RGTW92ZShs
YXllckhvc3RWaWV3KTsgfQorCitwcml2YXRlOgorICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmLCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQmLCB1aW50NjRfdCk7CisKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZv
aWQgYWRkQ2xpZW50KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJh
bWUoV2ViQ29yZTo6RmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJH
cmF2aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNo
YW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KSBvdmVycmlkZTsKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9CisgICAg
V2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9CisKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcgorICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEV4aXRGdWxsc2Ny
ZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRl
OworICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7CisKKyAg
ICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKKyAgICBSZWY8UGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOworICAgIHVpbnQ2
NF90IG1fY29udGV4dElkOworICAgIFJldGFpblB0cjxQbGF0Zm9ybVZpZXcgKj4gbV9sYXllckhv
c3RWaWV3OworICAgIEhhc2hTZXQ8V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQq
PiBtX2NsaWVudHM7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdmlkZW9EaW1lbnNpb25zOwor
ICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07Cit9OworCitjbGFzcyBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94
eSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOworICAgIHZpcnR1YWwgflZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2
b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBib29sIGhhc01vZGUoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdDsK
KyAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29u
c3Q7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOworICAgIGJvb2wgaXNW
aXNpYmxlKCkgY29uc3Q7CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkKKyAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3Jl
ZW4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ7CisKKyAgICBleHBsaWNpdCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkoV2ViUGFnZVByb3h5JiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7Cisg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1v
ZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VU
dXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgUGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRf
dCBjb250ZXh0SWQpOworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyCisgICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1
aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0
LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKKyAg
ICB2b2lkIHNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAgdm9pZCBz
ZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmKTsKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRS
ZWN0IGZpbmFsUmVjdCk7CisgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpOworI2lmIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorICAgIHZvaWQg
ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyNl
bmRpZgorCisgICAgLy8gTWVzc2FnZXMgdG8gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIHZv
aWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0
aE1lZGlhID0gZmFsc2UpOworICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQg
c2V0VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0
KTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSk7CisgICAgdm9pZCBmdWxs
c2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJQYWdlUHJveHkq
IG1fcGFnZTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFj
ZVR1cGxlPiBtX2NvbnRleHRNYXA7CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQgeyAwIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50czsK
K307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWZjM2I1MDQ3ZWY0N2FiYTE5NTcxZTc2NDNhMDcyZWNlODIyMGFlZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCittZXNz
YWdlcyAtPiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgeworICAgIFNldEhhc1ZpZGVvKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKKyAgICBTZXRWaWRlb0RpbWVuc2lvbnMo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKQor
ICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZp
ZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1Nj
YWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKQor
ICAgIEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRXhpdEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKKyAgICBD
bGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgUHJlcGFyZWRUb1JldHVy
blRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRS
ZWN0IGlubGluZVJlY3QpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpCisgICAgRXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCisjZW5kaWYKK30KKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNjYjliMjkyMTk2ODI2ODY0ZjAwOTEw
MDhmOTMwODk4ODhhMThhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KQEAgLTAsMCArMSw1MjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5oIgorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisj
aW1wb3J0ICJBUElVSUNsaWVudC5oIgorI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2lt
cG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1w
b3J0IDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5
ZXJFbnVtcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgor
CisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5oIgorI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNlbmRpZgorCitAaW50ZXJmYWNlIFdLTGF5
ZXJIb3N0VmlldyA6IFBsYXRmb3JtVmlldworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
dWludDMyX3QgY29udGV4dElEOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tMYXllckhvc3RW
aWV3CisKKyNpZiBQTEFURk9STShJT1MpCisrIChDbGFzcylsYXllckNsYXNzIHsKKyAgICByZXR1
cm4gW0NBTGF5ZXJIb3N0IGNsYXNzXTsKK30KKyNlbHNlCistIChDQUxheWVyICopbWFrZUJhY2tp
bmdMYXllcgoreworICAgIHJldHVybiBbW1tDQUxheWVySG9zdCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworfQorI2VuZGlmCisKKy0gKHVpbnQzMl90KWNvbnRleHRJRCB7CisgICAgcmV0dXJu
IFtbc2VsZiBsYXllckhvc3RdIGNvbnRleHRJZF07Cit9CisKKy0gKHZvaWQpc2V0Q29udGV4dElE
Oih1aW50MzJfdCljb250ZXh0SUQgeworICAgIFtbc2VsZiBsYXllckhvc3RdIHNldENvbnRleHRJ
ZDpjb250ZXh0SURdOworfQorCistIChDQUxheWVySG9zdCAqKWxheWVySG9zdCB7CisgICAgcmV0
dXJuIChDQUxheWVySG9zdCAqKVtzZWxmIGxheWVyXTsKK30KKworQGVuZAorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBQTEFURk9STShJT1Mp
ICYmICFIQVZFKEFWS0lUKQorCitSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmKQoreworICAg
IHJldHVybiBudWxscHRyOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aW52YWxpZGF0ZSgpCit7Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpo
YXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit7CisKK30KKwordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3sKKwor
fQorI2Vsc2UKKworI3ByYWdtYSBtYXJrIC0gVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0CisK
K1ZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
KFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQorICAg
IDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbChwbGF5
YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKwor
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
KCkKK3sKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmFkZENsaWVudChW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGll
bnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250
YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hl
ZFdpdGhNZWRpYSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnJl
cXVlc3RGdWxsc2NyZWVuTW9kZShtX2NvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEp
OworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZy
YW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAg
ICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJhbWUpOwor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZp
dHkoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckdy
YXZpdHkobV9jb250ZXh0SWQsIGdyYXZpdHkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fY29udGV4dElkLCBt
b2RlKTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFuYWdlciA/IG1fbWFuYWdlci0+aXNWaXNpYmxlKCkg
OiBmYWxzZTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVw
RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5k
aWRTZXR1cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRFeGl0RnVsbHNj
cmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAg
bV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKG1fY29udGV4dElkKTsKK30KKworI3ByYWdtYSBtYXJrIC0gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5CisKK1JlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFn
ZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KSk7Cit9CisKK1ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94
eSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkpCisgICAgOiBtX3BhZ2UoJnBhZ2UpCisgICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eShwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCit7CisgICAgbV9wYWdlLT5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMp
OworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5WaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkoKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgaW52
YWxpZGF0ZSgpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxp
ZGF0ZSgpCit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlID0gbnVsbHB0cjsKKworICAgIGZvciAo
YXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9y
bVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAgICAgICBzdGQ6OnRpZSht
b2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0
ZSgpOworICAgICAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKKyAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7CisgICAgfQorCisg
ICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4oKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVz
KCkpCisgICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNj
cmVlbigpOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKK3sK
KyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAg
IGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmhhc01vZGUobW9kZSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1
cmUoKSBjb25zdAoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVz
KCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+bWF5QXV0b21hdGljYWxseVNo
b3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKK3sKKyAgICBmb3Ig
KGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6
OmdldDwxPih0dXBsZSktPmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisjZW5kaWYKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9u
RGlkQmVjb21lQWN0aXZlKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFw
LnZhbHVlcygpKQorICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPmFwcGxpY2F0aW9uRGlkQmVj
b21lQWN0aXZlKCk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRl
cmZhY2VUdXBsZSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25N
b2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVNb2RlbChjb250ZXh0
SWQpOworICAgIFJlZjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsID0gVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1vZGVs
LCBjb250ZXh0SWQpOworICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IG1fcGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKKyAg
ICBSZWY8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRm
b3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpjcmVhdGUocGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+YWRkQ2xpZW50Rm9yQ29u
dGV4dChjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bCgmbW9kZWwuZ2V0KCkpOworICAgIGludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RG
TW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZh
Y2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQp
OworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9k
ZWwodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1BsYXRmb3JtVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlJiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVN
b2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCwgMSk7Cisg
ICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSsrOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3Zl
Q2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgQVNTRVJUKG1fY2xp
ZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOworCisgICAgaW50IGNsaWVudENvdW50ID0g
bV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7CisgICAgQVNTRVJUKGNsaWVudENvdW50ID4g
MCk7CisgICAgY2xpZW50Q291bnQtLTsKKworICAgIGlmIChjbGllbnRDb3VudCA8PSAwKSB7Cisg
ICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5yZW1vdmVDbGllbnRGb3JDb250
ZXh0KGNvbnRleHRJZCk7CisgICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQp
OworICAgICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3Vu
dCk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldp
dGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3Rv
ciwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNj
cmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKK3sKKyAgICBBU1NFUlQodmlk
ZW9MYXllcklEKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2Rl
bDsKKyAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFj
ZTsKKworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKTsKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisK
KyAgICBSZXRhaW5QdHI8V0tMYXllckhvc3RWaWV3PiB2aWV3ID0gc3RhdGljX2Nhc3Q8V0tMYXll
ckhvc3RWaWV3Kj4obW9kZWwtPmxheWVySG9zdFZpZXcoKSk7CisgICAgaWYgKCF2aWV3KSB7Cisg
ICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tMYXllckhvc3RWaWV3IGFsbG9jXSBpbml0XSk7Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgICAgICBbdmlldyBzZXRXYW50c0xheWVyOllFU107CisjZW5k
aWYKKyAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcodmlldyk7CisgICAgfQorICAgIFt2
aWV3IHNldENvbnRleHRJRDp2aWRlb0xheWVySURdOworICAgIGlmIChob3N0aW5nRGV2aWNlU2Nh
bGVGYWN0b3IgIT0gMSkgeworICAgICAgICAvLyBJbnZlcnQgdGhlIHNjYWxlIHRyYW5zZm9ybSBh
ZGRlZCBpbiB0aGUgV2ViUHJvY2VzcyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4K
KyAgICAgICAgZmxvYXQgaW52ZXJzZVNjYWxlID0gMSAvIGhvc3RpbmdEZXZpY2VTY2FsZUZhY3Rv
cjsKKyAgICAgICAgW1t2aWV3IGxheWVyXSBzZXRTdWJsYXllclRyYW5zZm9ybTpDQVRyYW5zZm9y
bTNETWFrZVNjYWxlKGludmVyc2VTY2FsZSwgaW52ZXJzZVNjYWxlLCAxKV07CisgICAgfQorCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIFVJVmlldyAqcGFyZW50VmlldyA9IGRvd25jYXN0PFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLnJlbW90
ZUxheWVyVHJlZUhvc3QoKS5yb290TGF5ZXIoKTsKKyAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNj
cmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIHZp
ZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOworI2Vsc2UKKyAgICBJ
bnRSZWN0IGluaXRpYWxXaW5kb3dSZWN0OworICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhp
bml0aWFsUmVjdCwgaW5pdGlhbFdpbmRvd1JlY3QpOworICAgIGludGVyZmFjZS0+c2V0dXBGdWxs
c2NyZWVuKCptb2RlbC0+bGF5ZXJIb3N0VmlldygpLCBpbml0aWFsV2luZG93UmVjdCwgbV9wYWdl
LT5wbGF0Zm9ybVdpbmRvdygpLCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlKTsKKyNlbmRpZgorICAgIG1fcGFnZS0+dWlDbGllbnQoKS5oYXNWaWRlb0luUGljdHVy
ZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIHZpZGVvRnVsbHNjcmVlbk1vZGUgJiBNZWRpYVBs
YXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCku
aGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZs
b2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0
SWQpLnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJ
ZCk7CisgICAgaW50ZXJmYWNlLmVudGVyRnVsbHNjcmVlbigpOworCisgICAgLy8gT25seSBvbmUg
Y29udGV4dCBjYW4gYmUgaW4gYSBnaXZlbiBmdWxsIHNjcmVlbiBtb2RlIGF0IGEgdGltZToKKyAg
ICBmb3IgKGF1dG8mIGNvbnRleHRQYWlyIDogbV9jb250ZXh0TWFwKSB7CisgICAgICAgIGF1dG8m
IG90aGVyQ29udGV4dElkID0gY29udGV4dFBhaXIua2V5OworICAgICAgICBpZiAoY29udGV4dElk
ID09IG90aGVyQ29udGV4dElkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0
byYgb3RoZXJJbnRlcmZhY2UgPSBzdGQ6OmdldDwxPihjb250ZXh0UGFpci52YWx1ZSk7CisgICAg
ICAgIGlmIChvdGhlckludGVyZmFjZS0+aGFzTW9kZShpbnRlcmZhY2UubW9kZSgpKSkKKyAgICAg
ICAgICAgIG90aGVySW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Cisg
ICAgfQorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKK3sKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxz
Y3JlZW4oZmluYWxSZWN0KTsKKyNlbHNlCisgICAgSW50UmVjdCBmaW5hbFdpbmRvd1JlY3Q7Cisg
ICAgbV9wYWdlLT5yb290Vmlld1RvV2luZG93KGZpbmFsUmVjdCwgZmluYWxXaW5kb3dSZWN0KTsK
KyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbihmaW5hbFdpbmRv
d1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7CisjZW5kaWYKK30KKworI2lmIFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9k
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpLmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh0YXJnZXRNb2RlKTsK
K30KKyNlbmRpZgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpLmNsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBi
b29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCkKK3sKKyAgICBtX3BhZ2Ut
PmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2aXNp
YmxlLCBpbmxpbmVSZWN0KTsKKyNlbHNlCisgICAgSW50UmVjdCBpbmxpbmVXaW5kb3dSZWN0Owor
ICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhpbmxpbmVSZWN0LCBpbmxpbmVXaW5kb3dSZWN0
KTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9Jbmxp
bmUodmlzaWJsZSwgaW5saW5lV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpKTsK
KyNlbmRpZgorfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3Jl
ZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoY29udGV4dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
U2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVlbihjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEV4aXRGdWxs
c2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+ZGlkRXhp
dEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRp
ZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFbnRlckZ1bGxzY3JlZW4oY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5kaWRFbnRlckZ1bGxzY3Jl
ZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2Up
ID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIFtDQVRyYW5zYWN0
aW9uIGZsdXNoXTsKKyAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKKyAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0VmlldyhudWxscHRyKTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2Ny
ZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworCisgICAgaW50ZXJmYWNlLT5zZXRN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAg
IHJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKK30KKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQs
IFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gW1VJ
V2luZG93IF9zeW5jaHJvbml6ZURyYXdpbmdBY3Jvc3NQcm9jZXNzZXNdOworI2Vsc2UKKyAgICAg
ICAgTWFjaFNlbmRSaWdodCBmZW5jZVNlbmRSaWdodDsKKyAgICAgICAgaWYgKERyYXdpbmdBcmVh
UHJveHkqIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICAgICAg
ZmVuY2VTZW5kUmlnaHQgPSBkcmF3aW5nQXJlYS0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAgbWFj
aF9wb3J0X25hbWVfdCBmZW5jZVBvcnQgPSBmZW5jZVNlbmRSaWdodC5sZWFrU2VuZFJpZ2h0KCk7
CisjZW5kaWYKKworICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250ZXh0SWQsIGZyYW1lLCBJUEM6
OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5
RW51bShjb250ZXh0SWQsICh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlk
ZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCBtb2RlICYgTWVkaWFQbGF5ZXJF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCitib29sIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCkgJiYgbV9wYWdlLT5pc0luV2luZG93KCk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUodWludDY0X3QgY29udGV4dElkKQoreworICAgIGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFn
ZS0+aXNWaWV3VmlzaWJsZSgpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNW
aWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMzNiZTY1YTk4YzIxOWMw
ZGI5MWQwMzI4NDI5NWVjZTVmNTQ3M2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1WaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUv
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KElPUykKLXR5cGVkZWYgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQg
UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0jZWxzZQotdHlwZWRlZiBXZWJD
b3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2U7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdl
YlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKLQotY2xh
c3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0IGZpbmFsOiBwdWJsaWMgUmVmQ291bnRl
ZDxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwgIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KG1hbmFnZXIsIGNvbnRl
eHRJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQoKSB7IH0KLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsg
fQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKLSAgICB2b2lkIGFkZENsaWVudChX
ZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIGZpbmFsOwotICAgIHZvaWQg
cmVtb3ZlQ2xpZW50KFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JilmaW5h
bDsKLQotICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9pZCBjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91Ymxl
KTsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9p
ZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKLSAgICB2
b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxh
c3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotICAgIHZvaWQgY2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVn
aWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwot
ICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCwgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKTsKLSAgICB2
b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKTsKLSAgICB2b2lk
IG11dGVkQ2hhbmdlZChib29sKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3Qg
Y29udGV4dElkKQotICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICAgICAgLCBtX2Nv
bnRleHRJZChjb250ZXh0SWQpCi0gICAgewotICAgIH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsCi0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAgdm9pZCBwYXVzZSgpIGZpbmFs
OwotICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7Ci0gICAgdm9pZCBiZWdpblNjcnVi
YmluZygpIGZpbmFsOwotICAgIHZvaWQgZW5kU2NydWJiaW5nKCkgZmluYWw7Ci0gICAgdm9pZCBz
ZWVrVG9UaW1lKGRvdWJsZSkgZmluYWw7Ci0gICAgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkg
ZmluYWw7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOwotICAgIHZvaWQg
YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7Ci0gICAgdm9pZCBlbmRTY2FubmluZygpIGZp
bmFsOwotICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkgZmluYWw7Ci0g
ICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QpIGZpbmFsOwotICAgIHZv
aWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOwotICAgIHZvaWQgdG9nZ2xlTXV0ZWQo
KSBmaW5hbDsKLSAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwotCi0gICAgZG91YmxlIHBs
YXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrU3RhcnRl
ZFRpbWU7IH0KLSAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2R1
cmF0aW9uOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9jdXJyZW50VGltZTsgfQotICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2J1ZmZlcmVkVGltZTsgfQotICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KLSAgICBib29sIGlzU2NydWJiaW5nKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9pc1NjcnViYmluZzsgfQotICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGxheWJhY2tSYXRlOyB9Ci0gICAgUmVmPFdlYkNvcmU6
OlRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVr
YWJsZVJhbmdlcy5jb3B5UmVmKCk7IH0KLSAgICBkb3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFz
dE1vZGlmaWVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vla2FibGVUaW1lUmFuZ2Vz
TGFzdE1vZGlmaWVkVGltZTsgfQotICAgIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25z
dCB7IHJldHVybiBtX2xpdmVVcGRhdGVJbnRlcnZhbDsgfQotICAgIGJvb2wgY2FuUGxheUZhc3RS
ZXZlcnNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jYW5QbGF5RmFzdFJldmVyc2U7IH0KLSAg
ICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uczsgfQotICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleDsgfQotICAgIFZlY3RvcjxXZWJD
b3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQot
ICAgIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7IH0KLSAgICBib29sIGV4dGVybmFsUGxh
eWJhY2tFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrRW5h
YmxlZDsgfQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU7IH0KLSAgICBTdHJpbmcgZXh0ZXJuYWxQbGF5
YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFs
UGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOyB9Ci0gICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQ7IH0KLSAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X211dGVkOyB9Ci0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIG1fbWFuYWdl
cjsKLSAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIGRvdWJsZSBtX3BsYXli
YWNrU3RhcnRlZFRpbWUgeyAwIH07Ci0gICAgYm9vbCBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVk
c1VwZGF0ZSB7IGZhbHNlIH07Ci0gICAgZG91YmxlIG1fZHVyYXRpb24geyAwIH07Ci0gICAgZG91
YmxlIG1fY3VycmVudFRpbWUgeyAwIH07Ci0gICAgZG91YmxlIG1fYnVmZmVyZWRUaW1lIHsgMCB9
OwotICAgIGJvb2wgbV9pc1BsYXlpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1NjcnViYmlu
ZyB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAwIH07Ci0gICAgUmVmPFdl
YkNvcmU6OlRpbWVSYW5nZXM+IG1fc2Vla2FibGVSYW5nZXMgeyBXZWJDb3JlOjpUaW1lUmFuZ2Vz
OjpjcmVhdGUoKSB9OwotICAgIGRvdWJsZSBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmll
ZFRpbWUgeyAwIH07Ci0gICAgZG91YmxlIG1fbGl2ZVVwZGF0ZUludGVydmFsIHsgMCB9OwotICAg
IGJvb2wgbV9jYW5QbGF5RmFzdFJldmVyc2UgeyBmYWxzZSB9OwotICAgIFZlY3RvcjxXZWJDb3Jl
OjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKLSAg
ICB1aW50NjRfdCBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9OwotICAgIFZlY3RvcjxX
ZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zOwotICAgIHVpbnQ2NF90IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKLSAg
ICBib29sIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgeyBmYWxzZSB9OwotICAgIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBtX2V4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIHsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25l
IH07Ci0gICAgU3RyaW5nIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWU7Ci0g
ICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fbXV0ZWQgeyBmYWxzZSB9OwotfTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJv
eHkmKTsKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKTsKLQot
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpOwotICAgIHZvaWQgcmVxdWVzdENv
bnRyb2xsZWRFbGVtZW50SUQoKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk7Ci0KLSAgICBleHBsaWNpdCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkoV2ViUGFnZVByb3h5Jik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKLQotICAgIHR5cGVkZWYgc3RkOjp0
dXBsZTxSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRm
b3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKLSAg
ICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgUGxhdGZvcm1XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAg
IHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAg
Ly8gTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0gICAgdm9pZCBzZXRV
cFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgdm9pZCByZXNldE1lZGlh
U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKTsK
LSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
YnVmZmVyZWRUaW1lKTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMs
IGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKLSAg
ICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IHZhbHVlKTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0g
ICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2Fs
aXplZERldmljZU5hbWUpOwotICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0gICAgdm9pZCBkdXJhdGlvbkNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pOwotICAgIHZvaWQgcGxheWJh
Y2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tT
dGFydGVkVGltZSk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSk7Ci0gICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVzcG9uc2UodWludDY0X3QsIFN0cmluZykgY29uc3Q7Ci0gICAgdm9pZCBtdXRlZENo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKLQotICAgIC8vIE1lc3NhZ2Vz
IHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLSAgICB2b2lkIHBsYXkodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCB0
b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGJlZ2luU2NydWJi
aW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3Qg
Y29udGV4dElkKTsKLSAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgdGltZSk7Ci0gICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0
aW1lKTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZWxlY3RB
dWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOwotICAg
IHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpOwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2
b2lkIHNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0KLSAgICBXZWJQYWdlUHJv
eHkqIG1fcGFnZTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBt
X2NvbnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAw
IH07Ci0gICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjYzNmE4MzI3M2ViOGUxNDRhNmExMDM1MDU1Nzg5YzIzZTA5MTI3ZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgewotICAgIFJlc2V0TWVkaWFTdGF0ZSh1aW50NjRf
dCBjb250ZXh0SWQpCi0gICAgQ3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCi0gICAgQnVmZmVyZWRUaW1lQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCi0gICAgU2Vla2Fi
bGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFp
cjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJs
ZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi0gICAgQ2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi0gICAgQXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotICAgIExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdl
YkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQotICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotICAgIExlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi0g
ICAgRXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNl
TmFtZSkKLSAgICBXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGRpc2FibGVkKQotICAgIER1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKLSAgICBQbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQotICAgIFJh
dGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRl
KQotICAgIE11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOwotICAg
IFNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQot
ICAgIENsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQotCi0gICAgSGFuZGxlQ29udHJvbGxl
ZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgU3RyaW5nIGlkKQotfQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZGY5ZDMzZjlmYzA4OTNhODIwOTdhNWVlYzhmODZmNWFhODY1M2NmZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCisrKyAvZGV2
L251bGwKQEAgLTEsNTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCi0KLSNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi0KLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW1w
b3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmFk
ZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFT
U0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMuYWRkKCZj
bGllbnQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmVtb3Zl
Q2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNT
RVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZSgm
Y2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXko
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cGxheShtX2NvbnRl
eHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSgp
Ci17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5wYXVzZShtX2NvbnRl
eHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQ
bGF5U3RhdGUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+dG9n
Z2xlUGxheVN0YXRlKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAg
ICAgICBtX21hbmFnZXItPmJlZ2luU2NydWJiaW5nKG1fY29udGV4dElkKTsKLQotICAgIG1faXNT
Y3J1YmJpbmcgPSB0cnVlOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFn
ZXItPmVuZFNjcnViYmluZyhtX2NvbnRleHRJZCk7Ci0KLSAgICBtX2lzU2NydWJiaW5nID0gZmFs
c2U7Ci0gICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgPSBpc1BsYXlpbmcoKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWtUb1RpbWUoZG91
YmxlIHRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5zZWVr
VG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21hbmFnZXIp
Ci0gICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWsobV9jb250ZXh0SWQsIHRpbWUpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQo
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YmVnaW5TY2Fubmlu
Z0ZvcndhcmQobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZChtX2NvbnRleHRJZCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY2FubmluZygpCi17
Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY2FubmluZyhtX2Nv
bnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQotewotICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihtX2NvbnRleHRJ
ZCwgb3B0aW9uSWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQotewotICAgIGlmICht
X21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKG1f
Y29udGV4dElkLCBvcHRpb25JZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUobV9jb250ZXh0SWQpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQot
ewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlTXV0ZWQobV9j
b250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0
TXV0ZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFn
ZXItPnNldE11dGVkKG1fY29udGV4dElkLCBtdXRlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxh
eWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWUgPSBwbGF5YmFj
a1N0YXJ0ZWRUaW1lOwotICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlID0gZmFs
c2U7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpkdXJhdGlvbkNo
YW5nZWQoZG91YmxlIGR1cmF0aW9uKQotewotICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5kdXJhdGlv
bkNoYW5nZWQoZHVyYXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSkKLXsKLSAgICBtX2N1
cnJlbnRUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgYXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwotICAgIGlmIChtX3BsYXliYWNrU3Rh
cnRlZFRpbWVOZWVkc1VwZGF0ZSkKLSAgICAgICAgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQo
Y3VycmVudFRpbWUpOwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAg
ICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVkVGltZUNo
YW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBtX2J1ZmZlcmVkVGltZSA9IGJ1ZmZl
cmVkVGltZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xp
ZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxv
YXQgcGxheWJhY2tSYXRlKQotewotICAgIG1faXNQbGF5aW5nID0gaXNQbGF5aW5nOwotICAgIG1f
cGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9j
bGllbnRzKQotICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tS
YXRlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiBzZWVrYWJsZVJhbmdlcywgZG91Ymxl
IGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi17Ci0gICAgbV9z
ZWVrYWJsZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2VzOwotICAgIG1fc2Vla2FibGVUaW1lUmFuZ2Vz
TGFzdE1vZGlmaWVkVGltZSA9IGxhc3RNb2RpZmllZFRpbWU7Ci0gICAgbV9saXZlVXBkYXRlSW50
ZXJ2YWwgPSBsaXZlVXBkYXRlSW50ZXJ2YWw7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCi0gICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFu
Z2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChi
b29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKLXsKLSAgICBtX2NhblBsYXlGYXN0UmV2ZXJzZSA9IGNh
blBsYXlGYXN0UmV2ZXJzZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAg
ICAgICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJz
ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMsIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3Rl
ZEluZGV4KQotewotICAgIG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBhdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uczsKLSAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gYXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXg7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0g
ICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zLCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQot
ewotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnM7Ci0gICAgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gbGVnaWJsZU1l
ZGlhU2VsZWN0ZWRJbmRleDsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQot
ICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMsIGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlv
bkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1fYXVkaW9NZWRp
YVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4OwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQg
OiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZChzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQotewotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5k
ZXg7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50
LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZE5hbWUpCi17Ci0gICAg
bV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgbV9leHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSA9IHR5cGU7Ci0gICAgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2
aWNlTmFtZSA9IGxvY2FsaXplZE5hbWU7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xp
ZW50cykKLSAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0
eXBlLCBsb2NhbGl6ZWROYW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIHdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkKQotewotICAgIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQgPSB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsKLSAgICBmb3IgKGF1dG8qIGNs
aWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQp
Ci17Ci0gICAgbV9tdXRlZCA9IG11dGVkOwotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGll
bnRzKQotICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChtdXRlZCk7Ci19Ci0KLSNwcmFnbWEg
bWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQotCi1SZWZQdHI8V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5PiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNy
ZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGFnZSkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJv
eHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UoJnBhZ2UpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCku
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwotfQot
Ci1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6On5XZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkoKQotewotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaW52
YWxpZGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52
YWxpZGF0ZSgpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsKLQotICAg
IGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVm
UHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0
cjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlOwotICAgICAg
ICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotCi0gICAgICAgIGludGVyZmFj
ZS0+aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwotICAg
IG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwotICAgIFJlZjxQbGF0Zm9y
bVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2U6OmNyZWF0ZShtb2RlbCk7Ci0KLSAgICByZXR1cm4gc3RkOjpt
YWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250
ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBy
ZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwot
fQotCi1QbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewot
ICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRDbGllbnRG
b3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX2NsaWVudENvdW50cy5hZGQo
Y29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJl
bW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIGlmICghbV9j
bGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpLmludmFsaWRhdGUoKTsKLSAgICBtX2NvbnRleHRNYXAu
cmVtb3ZlKGNvbnRleHRJZCk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElk
KQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0
SWQgPT0gY29udGV4dElkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb250cm9sc01h
bmFnZXJDb250ZXh0SWQpCi0gICAgICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQpOwotCi0gICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBj
b250ZXh0SWQ7Ci0gICAgZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KS5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLSAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLQotICAgIG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFn
ZXJEaWRDaGFuZ2UoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJh
Y2tDb250cm9sc01hbmFnZXIoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIW1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZW1vdmVDbGll
bnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICBtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCA9IDA7Ci0gICAgbV9wYWdlLT52aWRlb0NvbnRyb2xzTWFuYWdlckRp
ZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQotewotICAgIGVuc3VyZUlu
dGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFTdGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCi17Ci0gICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91Ymxl
Pj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRl
cnZhbCkKLXsKLSAgICBSZWY8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNy
ZWF0ZSgpOwotICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKLSAgICAgICAg
QVNTRVJUKGlzZmluaXRlKHJhbmdlLmZpcnN0KSk7Ci0gICAgICAgIEFTU0VSVChpc2Zpbml0ZShy
YW5nZS5zZWNvbmQpKTsKLSAgICAgICAgQVNTRVJUKHJhbmdlLnNlY29uZCA+PSByYW5nZS5maXJz
dCk7Ci0gICAgICAgIHRpbWVSYW5nZXMtPmFkZChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsK
LSAgICB9Ci0KLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi17Ci0gICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHZhbHVlKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxl
Y3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJ
bmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBT
dHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7
Ci0gICAgQVNTRVJUKHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVB
aXJQbGF5IHx8IHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91
dCB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSk7Ci0K
LSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJs
ZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkubXV0ZWRDaGFuZ2VkKG11dGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJh
dGlvbikKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmR1cmF0aW9uQ2hhbmdlZChkdXJh
dGlvbik7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5YmFj
a1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0
YXJ0ZWRUaW1lKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxheWJhY2tTdGFydGVk
VGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
aXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJh
dGVDaGFuZ2VkKGlzUGxheWluZywgcmF0ZSk7Ci19Ci0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRf
dCBjb250ZXh0SWQsIFN0cmluZyBpZGVudGlmaWVyKSBjb25zdAotewotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBpZiAoY29udGV4dElkID09IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAg
ICAgICBtX3BhZ2UtPmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShpZGVudGlmaWVy
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGlkZW50aWZpZXIpOwotI2VuZGlmCi19Ci0KLQotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBh
dXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBhdXNlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxh
eVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZShjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2NydWJiaW5nKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjcnVi
YmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgdGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpmYXN0U2Vlayh1aW50
NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RmFzdFNlZWsoY29udGV4dElkLCB0aW1lKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5u
aW5nRm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nQmFja3dhcmQoY29udGV4dElkKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRT
Y2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY2FubmluZyhjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRl
eCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0
TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi17
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpT
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGlj
dHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJlSW5QaWN0dXJl
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQotewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xl
TXV0ZWQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
bXV0ZWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpTZXRNdXRlZChjb250ZXh0SWQsIG11dGVkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXF1ZXN0Q29udHJvbGxl
ZEVsZW1lbnRJRCgpCi17Ci0gICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAg
ICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Okhh
bmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLVBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNvbnRyb2xzTWFuYWdlcklu
dGVyZmFjZSgpCi17Ci0gICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZh
Y2UobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgIHJldHVybiAmaW50ZXJmYWNlOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMx
OTIyODgxNjcxODk4ODEyNjc5N2VkMWYzZTg4OTQ0ZjUzZGY5NS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5X2gKLSNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5X2gKLQotI2lm
IChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQot
I2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykKLXR5cGVkZWYg
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0jZWxzZQotdHlwZWRlZiBXZWJDb3JlOjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsK
LQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGZpbmFsCi0gICAgOiBwdWJs
aWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+Ci0gICAgLCBwdWJs
aWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciAgewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBjcmVhdGUoV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5JiBtYW5hZ2VyLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQmIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQo
bWFuYWdlciwgcGxheWJhY2tTZXNzaW9uTW9kZWwsIGNvbnRleHRJZCkpOwotICAgIH0KLSAgICB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKTsKLQotICAgIHZvaWQgaW52
YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi0gICAgUGxhdGZvcm1WaWV3ICps
YXllckhvc3RWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9sYXllckhvc3RWaWV3LmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRMYXllckhvc3RWaWV3KFJldGFpblB0cjxQbGF0Zm9ybVZpZXc+JiYgbGF5ZXJI
b3N0VmlldykgeyBtX2xheWVySG9zdFZpZXcgPSBXVEZNb3ZlKGxheWVySG9zdFZpZXcpOyB9Ci0K
LXByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYsIHVp
bnQ2NF90KTsKLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgdm9pZCBhZGRD
bGllbnQoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hl
ZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZShXZWJDb3JlOjpGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdy
YXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hh
bmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
IG92ZXJyaWRlOwotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0KLSAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0KLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyCi0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkRXhpdEZ1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKLQot
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOwotICAgIFJlZjxX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7Ci0g
ICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtVmlldyAqPiBt
X2xheWVySG9zdFZpZXc7Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCo+IG1fY2xpZW50czsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV92aWRlb0Rp
bWVuc2lvbnM7Ci0gICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7
Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7Ci0KLSAgICB2
b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVl
bigpOwotICAgIGJvb2wgaGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0OwotICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dW
aWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVj
b21lQWN0aXZlKCk7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLQotI2lmIFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIGJvb2wgaXNQbGF5
aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKLQotICAg
IGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmLCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgdHlw
ZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+LCBS
ZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFj
ZVR1cGxlOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBQbGF0
Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCk7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKLSAg
ICB2b2lkIHNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90
IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0
IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOwotICAgIHZvaWQg
c2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sKTsKLSAgICB2b2lkIHNldFZpZGVv
RGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYp
OwotICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCBleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmlu
YWxSZWN0KTsKLSAgICB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBi
b29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCk7Ci0jaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgdm9pZCBleGl0RnVs
bHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotI2VuZGlmCi0K
LSAgICAvLyBNZXNzYWdlcyB0byBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCi0gICAgdm9pZCBy
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVk
aWEgPSBmYWxzZSk7Ci0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKTsKLSAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IGRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZXRW
aWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QpOwot
ICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KTsKLSAgICB2b2lkIGZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKTsKLQotICAgIFdlYlBhZ2VQcm94eSog
bV9wYWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OwotICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJm
YWNlVHVwbGU+IG1fY29udGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCB7IDAgfTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1fY2xpZW50Q291bnRz
OwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQotCi0jZW5kaWYgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmMjgxNWQ2NzIzOGU5ZDNhZmZjZjAxZjRmNGRiZDQwNTI0MDg0NGNmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLW1l
c3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSB7Ci0gICAgU2V0SGFzVmlk
ZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQotICAgIFNldFZpZGVvRGltZW5z
aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lv
bnMpCi0gICAgU2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMy
X3QgdmlkZW9MYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBmbG9hdCBob3N0
aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1
cmUpCi0gICAgRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBFeGl0RnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQot
ICAgIENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBQcmVwYXJlZFRv
UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6
OkludFJlY3QgaW5saW5lUmVjdCkKLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkKLSAgICBFeGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01v
ZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLSNlbmRpZgotfQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjEyOWFkOWExNDFkNDE2YjFiOWJlZDJlMzM3YWU2YWFlMWRhZTFjNS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCisrKyAvZGV2L251
bGwKQEAgLTEsNTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgotCi0jaWYgUExBVEZPUk0o
SU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBUElVSUNsaWVudC5oIgotI2ltcG9ydCAiRHJh
d2luZ0FyZWFQcm94eS5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5o
IgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCA8UXVh
cnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01hY2hTZW5kUmlnaHQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5ZXJFbnVtcy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9RdWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBv
cnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2ltcG9y
dCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgotI2ltcG9ydCAiVUlLaXRTUEku
aCIKLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdLTGF5ZXJIb3N0VmlldyA6IFBsYXRmb3JtVmlldwot
QHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgdWludDMyX3QgY29udGV4dElEOwotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV0tMYXllckhvc3RWaWV3Ci0KLSNpZiBQTEFURk9STShJT1MpCi0r
IChDbGFzcylsYXllckNsYXNzIHsKLSAgICByZXR1cm4gW0NBTGF5ZXJIb3N0IGNsYXNzXTsKLX0K
LSNlbHNlCi0tIChDQUxheWVyICopbWFrZUJhY2tpbmdMYXllcgotewotICAgIHJldHVybiBbW1tD
QUxheWVySG9zdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotfQotI2VuZGlmCi0KLS0gKHVp
bnQzMl90KWNvbnRleHRJRCB7Ci0gICAgcmV0dXJuIFtbc2VsZiBsYXllckhvc3RdIGNvbnRleHRJ
ZF07Ci19Ci0KLS0gKHZvaWQpc2V0Q29udGV4dElEOih1aW50MzJfdCljb250ZXh0SUQgewotICAg
IFtbc2VsZiBsYXllckhvc3RdIHNldENvbnRleHRJZDpjb250ZXh0SURdOwotfQotCi0tIChDQUxh
eWVySG9zdCAqKWxheWVySG9zdCB7Ci0gICAgcmV0dXJuIChDQUxheWVySG9zdCAqKVtzZWxmIGxh
eWVyXTsKLX0KLQotQGVuZAotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLSNpZiBQTEFURk9STShJT1MpICYmICFIQVZFKEFWS0lUKQotCi1SZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmKQotewotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci19
Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVz
dEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKLXsKLQotfQotI2Vs
c2UKLQotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ci0KLVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4
dElkKQotICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgICwgbV9wbGF5YmFja1Nlc3Npb25N
b2RlbChwbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkK
LXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQot
ewotICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVu
dHMuYWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17
Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRz
LnJlbW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKLXsKLSAgICBpZiAobV9t
YW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtX2NvbnRl
eHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBm
cmFtZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNldFZpZGVv
TGF5ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJhbWUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewotICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckdyYXZpdHkobV9jb250ZXh0SWQs
IGdyYXZpdHkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fY29udGV4dElkLCBtb2RlKTsKLX0KLQotYm9v
bCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fbWFuYWdlciA/IG1fbWFuYWdlci0+aXNWaXNpYmxlKCkgOiBmYWxzZTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVl
bigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kaWRTZXR1cEZ1
bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAg
ICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCi17
Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kaWRFeGl0RnVsbHNjcmVl
bihtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAg
bV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKG1fY29udGV4dElkKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ci0KLVJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBh
Z2VQcm94eSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KSk7
Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCi0gICAgOiBtX3BhZ2UoJnBhZ2Up
Ci0gICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQotewotICAgIGlm
ICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgbV9w
YWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsKLQotICAgIGZvciAoYXV0byYgdHVwbGUgOiBt
X2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50
ZXJmYWNlKSA9IHR1cGxlOwotCi0gICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAg
ICAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAg
ICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7Ci0gICAgfQotCi0gICAgbV9jb250
ZXh0TWFwLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3Jl
ZW4oKQotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpCi0g
ICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigp
OwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKLXsKLSAg
ICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlm
IChzdGQ6OmdldDwxPih0dXBsZSktPmhhc01vZGUobW9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1
cmUoKSBjb25zdAotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVz
KCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+bWF5QXV0b21hdGljYWxseVNo
b3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICBm
b3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChz
dGQ6OmdldDwxPih0dXBsZSktPmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxp
Y2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250
ZXh0TWFwLnZhbHVlcygpKQotICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPmFwcGxpY2F0aW9u
RGlkQmVjb21lQWN0aXZlKCk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0
ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvJiBwbGF5
YmFja1Nlc3Npb25Nb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVN
b2RlbChjb250ZXh0SWQpOwotICAgIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+
IG1vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIHBs
YXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpOwotICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZSA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVJbnRlcmZh
Y2UoY29udGV4dElkKTsKLSAgICBSZWY8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U+IGludGVyZmFjZSA9IFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpjcmVh
dGUocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkpOwotICAgIGludGVyZmFj
ZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsKLQot
ICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJm
YWNlKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZh
Y2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2Nv
bnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKLSAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQm
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29u
dGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZh
Y2UoY29udGV4dElkKSk7Ci19Ci0KLVBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCwgMSk7Ci0gICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSsrOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xp
ZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50
Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotCi0gICAgaW50IGNsaWVudENvdW50ID0gbV9j
bGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7Ci0gICAgQVNTRVJUKGNsaWVudENvdW50ID4gMCk7
Ci0gICAgY2xpZW50Q291bnQtLTsKLQotICAgIGlmIChjbGllbnRDb3VudCA8PSAwKSB7Ci0gICAg
ICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5yZW1vdmVDbGllbnRGb3JDb250ZXh0
KGNvbnRleHRJZCk7Ci0gICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpOwot
ICAgICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7
Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVl
bldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZh
Y3RvciwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVs
bHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKLXsKLSAgICBBU1NFUlQo
dmlkZW9MYXllcklEKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
PiBtb2RlbDsKLSAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+
IGludGVyZmFjZTsKLQotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRl
eHRJZCk7Ci0KLSAgICBSZXRhaW5QdHI8V0tMYXllckhvc3RWaWV3PiB2aWV3ID0gc3RhdGljX2Nh
c3Q8V0tMYXllckhvc3RWaWV3Kj4obW9kZWwtPmxheWVySG9zdFZpZXcoKSk7Ci0gICAgaWYgKCF2
aWV3KSB7Ci0gICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tMYXllckhvc3RWaWV3IGFsbG9jXSBp
bml0XSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBbdmlldyBzZXRXYW50c0xheWVyOllF
U107Ci0jZW5kaWYKLSAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcodmlldyk7Ci0gICAg
fQotICAgIFt2aWV3IHNldENvbnRleHRJRDp2aWRlb0xheWVySURdOwotICAgIGlmIChob3N0aW5n
RGV2aWNlU2NhbGVGYWN0b3IgIT0gMSkgewotICAgICAgICAvLyBJbnZlcnQgdGhlIHNjYWxlIHRy
YW5zZm9ybSBhZGRlZCBpbiB0aGUgV2ViUHJvY2VzcyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzE4
MzE2NTQyPi4KLSAgICAgICAgZmxvYXQgaW52ZXJzZVNjYWxlID0gMSAvIGhvc3RpbmdEZXZpY2VT
Y2FsZUZhY3RvcjsKLSAgICAgICAgW1t2aWV3IGxheWVyXSBzZXRTdWJsYXllclRyYW5zZm9ybTpD
QVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VTY2FsZSwgaW52ZXJzZVNjYWxlLCAxKV07Ci0g
ICAgfQotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFVJVmlldyAqcGFyZW50VmlldyA9IGRvd25j
YXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UtPmRyYXdpbmdBcmVh
KCkpLnJlbW90ZUxheWVyVHJlZUhvc3QoKS5yb290TGF5ZXIoKTsKLSAgICBpbnRlcmZhY2UtPnNl
dHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5pdGlhbFJlY3QsIHBhcmVu
dFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOwotI2Vs
c2UKLSAgICBJbnRSZWN0IGluaXRpYWxXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+cm9vdFZpZXdU
b1dpbmRvdyhpbml0aWFsUmVjdCwgaW5pdGlhbFdpbmRvd1JlY3QpOwotICAgIGludGVyZmFjZS0+
c2V0dXBGdWxsc2NyZWVuKCptb2RlbC0+bGF5ZXJIb3N0VmlldygpLCBpbml0aWFsV2luZG93UmVj
dCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpLCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlKTsKLSNlbmRpZgotICAgIG1fcGFnZS0+dWlDbGllbnQoKS5oYXNWaWRl
b0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIHZpZGVvRnVsbHNjcmVlbk1vZGUg
JiBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCkuaGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250
ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAgIGVuc3VyZUlu
dGVyZmFjZShjb250ZXh0SWQpLnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25z
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJl
SW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgaW50ZXJmYWNlLmVudGVyRnVsbHNjcmVlbigpOwot
Ci0gICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBnaXZlbiBmdWxsIHNjcmVlbiBt
b2RlIGF0IGEgdGltZToKLSAgICBmb3IgKGF1dG8mIGNvbnRleHRQYWlyIDogbV9jb250ZXh0TWFw
KSB7Ci0gICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29udGV4dFBhaXIua2V5OwotICAg
ICAgICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBzdGQ6OmdldDwxPihjb250ZXh0
UGFpci52YWx1ZSk7Ci0gICAgICAgIGlmIChvdGhlckludGVyZmFjZS0+aGFzTW9kZShpbnRlcmZh
Y2UubW9kZSgpKSkKLSAgICAgICAgICAgIG90aGVySW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4
aXRGdWxsc2NyZWVuKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRS
ZWN0IGZpbmFsUmVjdCkKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsKLSNlbHNlCi0gICAgSW50UmVj
dCBmaW5hbFdpbmRvd1JlY3Q7Ci0gICAgbV9wYWdlLT5yb290Vmlld1RvV2luZG93KGZpbmFsUmVj
dCwgZmluYWxXaW5kb3dSZWN0KTsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0
RnVsbHNjcmVlbihmaW5hbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7Ci0j
ZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2Ny
ZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQotewot
ICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1h
dGlvblRvTW9kZSh0YXJnZXRNb2RlKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQot
ewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmNsZWFudXBGdWxsc2NyZWVuKCk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJl
Y3QgaW5saW5lUmVjdCkKLXsKLSAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQp
LnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxpbmVSZWN0KTsKLSNlbHNlCi0g
ICAgSW50UmVjdCBpbmxpbmVXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRv
dyhpbmxpbmVSZWN0LCBpbmxpbmVXaW5kb3dSZWN0KTsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29u
dGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lV2luZG93UmVj
dCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpKTsKLSNlbmRpZgotfQotCi0jcHJhZ21hIG1hcmsg
TWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRl
eHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0RnVsbHNjcmVlbk1vZGUoY29u
dGV4dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEV4aXRGdWxsc2NyZWVu
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZS0+ZGlkRXhpdEZ1bGxz
Y3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFbnRlckZ1bGxzY3JlZW4oY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5kaWRFbnRlckZ1bGxzY3Jl
ZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFu
dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLQotICAgIHN0ZDo6dGllKG1vZGVsLCBp
bnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIFtD
QVRyYW5zYWN0aW9uIGZsdXNoXTsKLSAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKLSAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0VmlldyhudWxscHRyKTsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZENs
ZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotCi0gICAgaW50
ZXJmYWNlLT5zZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZU5vbmUpOwotICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZSh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKLXsKLSAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIG1hY2hfcG9ydF9uYW1lX3Qg
ZmVuY2VQb3J0ID0gW1VJV2luZG93IF9zeW5jaHJvbml6ZURyYXdpbmdBY3Jvc3NQcm9jZXNzZXNd
OwotI2Vsc2UKLSAgICAgICAgTWFjaFNlbmRSaWdodCBmZW5jZVNlbmRSaWdodDsKLSAgICAgICAg
aWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgp
KQotICAgICAgICAgICAgZmVuY2VTZW5kUmlnaHQgPSBkcmF3aW5nQXJlYS0+Y3JlYXRlRmVuY2Uo
KTsKLSAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBvcnQgPSBmZW5jZVNlbmRSaWdodC5s
ZWFrU2VuZFJpZ2h0KCk7Ci0jZW5kaWYKLQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250
ZXh0SWQsIGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01P
VkVfU0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jh
dml0eSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQsICh1bnNpZ25lZClncmF2
aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsK
LSAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFu
Z2UobV9wYWdlLCBtb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBp
Y3R1cmVJblBpY3R1cmUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlLT5pc1ZpZXdWaXNpYmxl
KCkgJiYgbV9wYWdlLT5pc0luV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4
dElkKQotewotICAgIGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgp
OwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNWaWV3VmlzaWJsZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwotfQotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0KaW5kZXggN2YxZTk4NTk4NmU1MzU4YzQ1NDhjYTU5OTNlYWE2M2VjMWJh
OWMwMy4uOWFlZGU3MGFlMTcxMzdmYWExMjNjYjUwZThlNjM4NDlhNWUyMmQ4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpAQCAtNDEsNiArNDEs
NyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIK
ICNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lmgi
CiAjaW1wb3J0ICJSZW1vdGVPYmplY3RSZWdpc3RyeS5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0
UmVnaXN0cnlNZXNzYWdlcy5oIgpAQCAtNjIsNyArNjMsNiBAQAogI2ltcG9ydCAiV2ViRXZlbnRG
YWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgogI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNp
bXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNp
bXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKQEAgLTExNzAsOCArMTE3
MCw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZU1lZGlhVG91Y2hCYXIoKQogICAgICAgICBb
bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlOllF
U107CiAgICAgfQogCi0gICAgaWYgKFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KiBpbnRlcmZhY2UgPSBtX3BhZ2UtPnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKS0+Y29udHJvbHNN
YW5hZ2VySW50ZXJmYWNlKCkpCi0gICAgICAgIFttX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNl
dFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzppbnRlcmZhY2VdOworICAgIGlmIChQbGF0
Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogaW50ZXJmYWNlID0gbV9wYWdlLT5wbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKCktPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpKQorICAgICAgICBb
bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
aW50ZXJmYWNlXTsKIAogICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0Nv
bnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsKICAgICBb
bV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVy
Om1fcGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA0MDc1ZWEyMzg0NTEzZGJiOWQwZjdlMzg2NTQ4ODFk
ZWE5NTkwYzliLi5lOGYxMjlhNzk5MDllZTMwYzk4Y2ZjOWUyNWE4MzBkYThkNDIxMGI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTUyLDkgKzE1Miw5
IEBACiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1h
bmNlRGF0YS5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2lu
Y2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
Vmlld1NuYXBzaG90U3RvcmUuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdl
cy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTWFjaFNlbmRSaWdodC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUnVuTG9vcE9ic2VydmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yV2lu
ZG93Lmg+CkBAIC0xODAsNyArMTgwLDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2lu
Y2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQpAQCAtMzk0LDggKzM5NCw4IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VD
bGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgdWluCiAgICAgbV9m
dWxsU2NyZWVuTWFuYWdlciA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhp
cywgbV9wYWdlQ2xpZW50LmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSk7CiAjZW5kaWYK
ICNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpOwotICAg
IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKKyAgICBtX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXIgPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgq
dGhpcyk7CisgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpjcmVhdGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpAQCAtNjM2LDggKzYzNiw4IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2VzcygpCiAgICAgbV9mdWxsU2NyZWVuTWFuYWdl
ciA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgbV9wYWdlQ2xpZW50
LmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSk7CiAjZW5kaWYKICNpZiBQTEFURk9STShJ
T1MpICYmIEhBVkUoQVZLSVQpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpOwotICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlz
LCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIgPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV92
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVh
dGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoQVBQTEVfUEFZKQpAQCAtNDI5NSwxMiArNDI5NSwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0RnVsbHNjcmVlbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGdWxsc2NyZWVuQ2xpZW50
PiYmCiAjZW5kaWYKICAgICAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLVdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogV2ViUGFnZVByb3h5OjpwbGF5YmFja1Nlc3Npb25N
YW5hZ2VyKCkKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogV2ViUGFnZVByb3h5OjpwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKCkKIHsKICAgICByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLmdldCgpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQ
cm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkqIFdlYlBhZ2VQcm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CiAgICAgcmV0dXJu
IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlci5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAppbmRleCBhOTA4ODAzZmQ1ZTIyODE4Y2IwNGUxNjczYzU3ZThiZjg3
MjAxN2YxLi5mZDBmZDdlZGZlNmVkYzI1N2U4OGI0M2Q0NzBjOGJmMmJlZmE2MjZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0yMDAsOSArMjAwLDkgQEAgY2xh
c3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYkNvbnRleHRNZW51UHJveHk7CiBj
bGFzcyBXZWJFZGl0Q29tbWFuZFByb3h5OwogY2xhc3MgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKK2NsYXNzIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYk5hdmlnYXRpb25TdGF0ZTsKLWNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJVUkxTY2hlbWVIYW5k
bGVyOwogY2xhc3MgV2ViTW91c2VFdmVudDsKQEAgLTM0Miw4ICszNDIsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZ1bGxzY3Jl
ZW5DbGllbnQ+JiYpOwogI2VuZGlmCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0g
ICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKCk7CisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyKCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTE2NzgsOCAr
MTY3OCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUo
QVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5PiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBjMWJhNzY0ZjAxNTQyNzExZTI5YWQ1ZjlhMDczNDI3
NzY4MjhhYmJhLi5jOTJlYTlmNGMzYjMzZjNhOGZjYzlhMjBkZGYyNjI4MDVlNDljOWQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAt
NDEsMTEgKzQxLDExIEBACiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgIlVzZXJEYXRhLmgiCisjaW1wb3J0ICJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlZpZXdVcGRhdGVEaXNwYXRjaGVy
TWVzc2FnZXMuaCIKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFs
LmgiCiAjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94
eS5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZmZTJhMjQ1MWFlYThm
YjgyMzRjYjNmMmY3YmFmYjY1ODZiMzdkNGUuLmI5ZTE3NzE4NjBiOGRlZjM1ZmM2OWRiYjkzMjM1
YzRlOGNiMzRiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTg3MSw4ICs4NzEsOCBAQAogCQkzN0ZDMTk0NzE4NTBGQkYyMDA4
Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0NjE4NTBGQkYyMDA4
Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGQzE5NEExODUxMEQ2
QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMxOTQ4MTg1MTBENkEwMDhD
RkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gKi87IH07CiAJCTM3RkMx
OTRCMTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMxOTQ5MTg1
MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCAqLzsgfTsK
LQkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkzRjQxOEVGQjE4ODdCRDk3MDAyNzk1
RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY3MTg4
N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovOyB9OworCQkzRjQxOEVGOTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9G
dWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCTNGNDE4RUZCMTg4
N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0
MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTNGODdCOUJEMTU4OTQwMTIwMDkwRkY2MiAvKiBXZWJD
b2xvckNob29zZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0Y4N0I5QkExNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgKi87
IH07CiAJCTNGODdCOUJFMTU4OTQwMTkwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODdCOUJCMTU4OTNG
NjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAqLzsgfTsKIAkJM0Y4N0I5QzAxNTg5NDBE
ODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlCRjE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQ
aWNrZXIuaCAqLzsgfTsKQEAgLTExMTQsOSArMTExNCw5IEBACiAJCTUyNzJENEM5MUU3MzVGMDkw
MEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjcyRDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90
ZWN0aW9uU3BhY2VOUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUyNzJENENBMUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkQ0
QzgxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMubW0gKi87IH07CiAJCTUy
OEMzN0MxMTk1Q0JCMUEwMEQ4QjlDQyAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUYyODEwMTk1OEY0
NzgwMDhDQUM3MiAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07Ci0JCTUyRDVBMUIxMUM1NzQ5
NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRFMDBE
RTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9OwotCQk1MkQ1
QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5
RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9OworCQk1MkQ1
QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0
OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07CisJCTUy
RDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFD
NTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9Owor
CQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1
NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9OwogCQk1MzAy
NTgzQjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRTFEQ0JCRDFE
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi87IH07CiAJCTUzMDI1ODND
MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovOyB9OwogCQk1MzAyNTgzRDFEQ0JCRDIy
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzMDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVFdmVudC5jcHAgKi87IH07CkBAIC0xOTI1LDE0ICsxOTI1LDE0IEBACiAJCUNE
NzhFMTE3MURCN0RDMEEwMDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDc4RTExNjFEQjdEQzBBMDAx
NEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oICovOyB9OwogCQlDRDc4RTExOTFEQjdFNUFE
MDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDc4RTExODFEQjdFNUFEMDAxNEEyREUgLyogX1dL
RnVsbHNjcmVlbkRlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQ0RBMDQxRjQxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZp
Y2VzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEwNDFGMzFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0JvYXJkU2VydmljZXNTUEkuaCAqLzsgfTsK
LQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
ODFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLzsgfTsK
LQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE5
MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi87IH07Ci0J
CUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAq
LzsgfTsKLQkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubW0gKi87IH07Ci0JCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJQ0RBMjlB
MjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUx
Q0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICov
OyB9OwotCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQlDREEyOUEy
QjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNz
YWdlcy5oICovOyB9OworCQlDREEyOUExQTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1t
ICovOyB9OworCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RB
MjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLzsgfTsK
KwkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlB
MUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovOyB9
OworCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RB
MjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAq
LzsgfTsKKwkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi87IH07CisJCUNEQTI5QTJBMUNCRUI2
N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlB
MjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi87IH07CisJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCUNEQzM4MkZFMTcyMTE3OTkw
MDhBMkZDMyAvKiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRl
bVNoaW1MaWJyYXJ5Lm1tICovOyB9OwogCQlDREMzODMwNzE3MjExN0REMDA4QTJGQzMgLyogQ29v
a2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdl
U2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlDREMzODMwQzE3MjEyMjgyMDA4QTJGQzMgLyogQ29v
a2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREMzODMwQjE3MjEyMUNFMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNo
aW1MaWJyYXJ5LmggKi87IH07CkBAIC0zMDk0LDEwICszMDk0LDEwIEBACiAJCTM3RkMxOTQ2MTg1
MEZCRjIwMDhDRkE0NyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRMb2FkRGVs
ZWdhdGVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkMxOTQ4MTg1
MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS05TVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkMxOTQ5MTg1MTBE
NkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNjE4
ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNzE4ODdCRDk3
MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVu
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQg
LyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5QkExNTg5M0Y2MzAwOTBGRjYyIC8q
IFdlYkNvbG9yQ2hvb3Nlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJDb2xvckNob29zZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjg3
QjlCQjE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzRjg3QjlCRjE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQaWNrZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzODEsMTIgKzMzODEsMTIgQEAKIAkJNTI3MkIyODkx
NDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0YXRpc3RpY3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyNzJENEM3MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUHJvdGVjdGlvblNwYWNlTlMuaDsgcGF0
aCA9IG1hYy9XS1Byb3RlY3Rpb25TcGFjZU5TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyNzJENEM4MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQcm90ZWN0aW9uU3BhY2VO
Uy5tbTsgcGF0aCA9IG1hYy9XS1Byb3RlY3Rpb25TcGFjZU5TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJE
NUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUFCMUM1
NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBQzFDNTc0OTRFMDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUI0MUM1NzQ5RjIw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmg7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDI2NCwxNiArNDI2NCwxNiBAQAogCQlDRDc4RTExNjFEQjdEQzBBMDAxNEEyREUgLyogQVBJ
RnVsbHNjcmVlbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElG
dWxsc2NyZWVuQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENzhFMTE4
MURCN0U1QUQwMDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEQTA0MUYzMUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRT
ZXJ2aWNlc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrQm9hcmRT
ZXJ2aWNlc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExODFDQkRC
RjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RB
MjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMUYxQ0JFQjVG
QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjIxQ0JFQjYxQTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTI0MUNCRUI2N0EwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEy
OUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2Vz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNjFD
QkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlB
MUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjIxQ0JFQjYx
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNTFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5
QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODJG
NzE3MjExNTA2MDA4QTJGQzMgLyogQ0ZOZXR3b3JrLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1l
ID0gQ0ZOZXR3b3JrLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NGTmV0d29yay5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUNE
QzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDMzgzMDYxNzIxMTc5OTAwOEEyRkMzIC8qIFdlYlByb2Nl
c3NTaGltLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
V2ViUHJvY2Vzc1NoaW0uZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CkBAIC01MjA3LDE3ICs1MjA3LDE3IEBACiAJCQkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8q
IFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbiAqLywKIAkJCQkxQUMwMjczRTE5NjYy
MkQ2MDBDMTJCNzUgLyogV2ViUGFnZVByb3h5Q29jb2EubW0gKi8sCiAJCQkJN0M0Njk0Q0IxQTRC
NTEwQTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tICovLAotCQkJCUNEQTI5
QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAq
LywKLQkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCisJCQkJQ0RBMjlBMUUxQ0JF
QjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovLAorCQkJCUNE
QTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4gKi8sCisJCQkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eS5tbSAqLywKIAkJCQk3Q0U0RDIxNTFBNDkxNDg0MDBDN0YxNTIgLyog
V2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSAqLywKIAkJCQkxQTA0RjYxNzFBNEEzQTdBMDBBMjFCNkUg
LyogV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0gKi8sCiAJCQkJN0FBRDE3NUUxRUE2QUYzNzAwM0Iw
ODk0IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tICovLAogCQkJCTUx
RDEyNDMxMUU2REU1MjEwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyQ29jb2EuaCAqLywK
IAkJCQk1MUQxMjQzMjFFNkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlckNvY29h
Lm1tICovLAotCQkJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCAqLywKLQkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCTUyRDVBMUFD
MUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8s
CisJCQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oICovLAorCQkJCTUyRDVBMUFCMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNTJENUExQUMxQzU3NDk0RTAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLywKIAkJCQkyREZDN0RCOTFC
Q0NDMTk1MDBDMTU0OEMgLyogV2ViVmlld0ltcGwuaCAqLywKIAkJCQkyREZDN0RCQTFCQ0NDMTk1
MDBDMTU0OEMgLyogV2ViVmlld0ltcGwubW0gKi8sCiAJCQkJMUFEMDFCQ0IxOTA1RDU0OTAwQzlD
NDVGIC8qIFdLUmVsb2FkRnJhbWVFcnJvclJlY292ZXJ5QXR0ZW1wdGVyLmggKi8sCkBAIC02Mzk5
LDE0ICs2Mzk5LDE0IEBACiAJCQkJQ0Q0OTFCMDUxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyLmNwcCAqLywKIAkJCQlDRDQ5MUIwNjFFNzBEMDVGMDAwMDkwNjYgLyog
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLywKIAkJCQlDRDQ5MUIwQTFFNzMyRDEyMDAwMDkw
NjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlB
MTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLywKLQkJ
CQlDREEyOUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5t
ZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlci5tbSAqLywKKwkJCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovLAorCQkJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAorCQkJCUNEQTI5QTE4
MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovLAogCQkJCUVD
QTY4MEQ3MUU2OTBERjgwMDczMUQyMCAvKiBXZWJQcm9jZXNzQ29jb2EuaCAqLywKIAkJCQk3QzZF
NzBGOTE4QjJENEEwMDBGMjRFMkUgLyogV2ViUHJvY2Vzc0NvY29hLm1tICovLAotCQkJCTUyRDVB
MUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8sCi0J
CQkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
bWVzc2FnZXMuaW4gKi8sCi0JCQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIubW0gKi8sCisJCQkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLywKKwkJCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0
QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MkQ1QTFC
NDFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLywKIAkJCSk7
CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzg5MSwx
MCArNzg5MSwxMCBAQAogCQkJCTFBQjFGNzkzMUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50
Q29vcmRpbmF0b3JNZXNzYWdlcy5oICovLAogCQkJCTFBQjFGNzk0MUQxQjM2MTMwMDdDOUJEMSAv
KiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJ
MUFCMUY3OTUxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVz
c2FnZXMuaCAqLywKLQkJCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJQ0RBMjlBMjUxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovLAotCQkJ
CUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5
QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLywKKwkJCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlck1lc3NhZ2VzLmggKi8sCisJCQkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJ
Q0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmggKi8sCiAJCQkJMUEwNDNGNjcxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3ND
b25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkxQTA0M0Y2ODEyNTE0RDhCMDBG
RkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovLAogCQkJCUJDMzA2NkJD
MTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAg
LTc5MTYsMTAgKzc5MTYsMTAgQEAKIAkJCQkxQUFGMDhCNjE5MjY5RTZEMDBCNjM5MEMgLyogV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZXMuaCAqLywKIAkJCQk3QzM2MUQ3NjE5MjgwM0JE
MDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovLAogCQkJCTdDMzYxRDc3MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi8sCi0JCQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZE
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJ
CTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVz
c2FnZXMuaCAqLywKLQkJCQkzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkzRjQxOEVGODE4
ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMu
aCAqLywKKwkJCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZE
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICovLAorCQkJCTNGNDE4RUY3MTg4
N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovLAorCQkJCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSAiRGVyaXZlZCBT
b3VyY2VzIjsKIAkJCXBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyOwpAQCAtODc1OSwxMCAr
ODc1OSwxMCBAQAogCQkJCTFBQjFGNzk5MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg1MEZFNzFFRDdD
MzlGMDBGQjc3QTcgLyogV2ViUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTNFNzM2MTExQ0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMjkxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlB
MjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUQ1OTI5RjE2NkUw
NjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzU3
NDRGMDEyNjM4RkIzMDA2RjBGMTIgLyogV2ViUG9wdXBJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlEM0I5NDg0NzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggaW4gSGVhZGVycyAq
LywKQEAgLTg4MTUsNyArODgxNSw3IEBACiAJCQkJN0MzNjFENzkxOTI4MDNCRDAwMzZBNTlEIC8q
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTgzRUU1NzVDMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9u
TWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUExQjAxQzU3NDk1QTAwREUz
NEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRGQzdEQkIxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZp
ZXdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUNENTVBQTEyOEUyOTRGMDAxMzNDODUgLyog
V0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5
MjMyREY0MThCMjlENjgwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFj
LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzY5LDEwICsxMDM2OSwxMCBAQAogCQkJCTFBM0U3MzYy
MTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzAzMzdEREQxMjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBsYXRmb3JtVG91Y2hQb2lu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDRBMjE4ODRFNEYwMDBFRDg2REIgLyogV2Vi
UGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTFBMUNC
REJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjExQ0JF
QjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RB
MjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4gU291
cmNlcyAqLywKKwkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyMTFD
QkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUQ1OTI5
RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBMDhGRUU0MUQ1OTNFMkEwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVw
SXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDQ1LDEwICsxMDQ0NSwxMCBAQAogCQkJCTdD
MzYxRDc4MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTczOUJCRTFCNDIwNDY2MDBE
MjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzRUU1
NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTNGNDE4RUY5MTg4N0JEOTcwMDI3
OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKLQkJCQkzRjQxOEVGQjE4ODdCRDk3
MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0Y0MThFRjkxODg3QkQ5
NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNGNDE4RUZCMTg4N0JEOTcw
MDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGQzdEQkMxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJ
bXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDExMjdBMjk4MDAwOEZGNEY0IC8qIFdl
YldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4MTYwRDAxODc2NDU1NzAwMjFF
NzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAppbmRleCA0ZDIyYWZmMTI4OWY3MDJlOGU1ODRhNjcyM2I1YzZhZTllZGQ5
YjhmLi5mZWUwZDI4Njc3ZDAwMGE1YTc5NzBkYWQ0OWE1MTkwZjRkMjhhZGEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCkBAIC03OCw4ICs3OCw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAwODU5ZjY2NWY3
MGVlNjFiZTUyMDdkNTJhNTgzOWJiZWRjYTEzNzQ2Li44ODNmNjFiYWUzZjFkN2MyZDBhY2UzOGU4
NTdiNzBjMmQ1NDMzZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSAiUERGUGx1Z2luLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdl
ci5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIldLU3RyaW5nQ0YuaCIKLSNpbmNs
dWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgog
I2VuZGlmCiAKQEAgLTM0NzAsMTcgKzM0NzAsMTcgQEAgUmVtb3RlV2ViSW5zcGVjdG9yVUkqIFdl
YlBhZ2U6OnJlbW90ZUluc3BlY3RvclVJKCkKIH0KIAogI2lmIChQTEFURk9STShJT1MpICYmIEhB
VkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgV2ViUGFnZTo6cGxheWJhY2tTZXNz
aW9uTWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBXZWJQYWdlOjpwbGF5YmFja1Nl
c3Npb25NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLSAg
ICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsKICAgICByZXR1cm4gKm1fcGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgV2ViUGFn
ZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBXZWJQ
YWdlOjp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fdmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcikKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkp
OworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKSk7CiAgICAgcmV0dXJu
ICptX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDE0MmY1N2Q1NzVhNmE2ZjEzMTQ2YTli
ZjQyMjQyZTkyYzcxODRjNjEuLmI3ZWJiZTgxYWQ4YmJjNTFmMmVmMjhhNWY4YWZmN2IwNTBmNGU0
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAt
MTg2LDExICsxODYsMTEgQEAgY2xhc3MgV2ViTm90aWZpY2F0aW9uQ2xpZW50OwogY2xhc3MgV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7CiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94eTsKIGNsYXNz
IFdlYlBhZ2VPdmVybGF5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKK2NsYXNz
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CiBjbGFzcyBXZWJQb3B1cE1lbnU7CiBjbGFzcyBXZWJV
bmRvU3RlcDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjsKLWNsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogY2xhc3Mg
V2ViV2hlZWxFdmVudDsKIGVudW0gRmluZE9wdGlvbnMgOiB1aW50MTZfdDsKIHN0cnVjdCBBc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbjsKQEAgLTI2Niw4ICsyNjYsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0luc3BlY3RvclBhZ2UoKSB7IHJldHVybiAhIW1faW5zcGVjdG9yVUkgfHwgISFtX3JlbW90
ZUluc3BlY3RvclVJOyB9CiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXImIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlciYgdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9T
KQogICAgIHZvaWQgc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrKGJvb2wpOwpA
QCAtMTQwMCw4ICsxNDAwLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UmVtb3RlV2ViSW5zcGVj
dG9yVUk+IG1fcmVtb3RlSW5zcGVjdG9yVUk7CiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZF
KEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBtX3Zp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcj4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9T
KQogICAgIGJvb2wgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sgeyBmYWxzZSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzZhMjgxN2I5MDJkZGEyOTZiYTM2YmIxY2U4
YWNlNjI3OTAxM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50RW51bXMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtQ0FMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXR0YWNobWVudDsKK2NsYXNzIENv
bm5lY3Rpb247CitjbGFzcyBEZWNvZGVyOworY2xhc3MgTWVzc2FnZVJlY2VpdmVyOworfQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOb2RlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CisKK2NsYXNz
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQgZmluYWwKKyAgICA6IHB1YmxpYyBSZWZD
b3VudGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+CisgICAgLCBwdWJsaWMgV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIm
IG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4
dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OworCisgICAgLy8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgdm9pZCByZXNldE1l
ZGlhU3RhdGUoKSBmaW5hbDsKKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Cisg
ICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIGN1cnJlbnRU
aW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBmaW5hbDsK
KyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIHBs
YXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKSBmaW5h
bDsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1Jh
dGUpIGZpbmFsOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6
OlRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJ
bnRlcnZhbCkgZmluYWw7CisgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wg
dmFsdWUpIGZpbmFsOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpIGZpbmFsOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7CisgICAgdm9pZCBh
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lk
IGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CisgICAg
dm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5n
JiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsKKyAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBmaW5hbDsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZChi
b29sKSBmaW5hbDsKKworICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoUGxheWJh
Y2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Cit9Owor
CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2Um
KTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisKKyAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQmKTsKKyAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAg
ICB1aW50NjRfdCBjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudCYpOworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7
CisKKyAgICBleHBsaWNpdCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2UmKTsKKworICAg
IHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ+LCBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4+IE1v
ZGVsSW50ZXJmYWNlVHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFu
ZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUm
IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViQ29y
ZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJl
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCk7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dAorICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7Cisg
ICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUpOworICAg
IHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSk7CisgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBwbGF5
YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFj
a1N0YXJ0ZWRUaW1lKTsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSk7CisgICAgdm9pZCBzZWVrYWJsZVJh
bmdlc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2Vz
JiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOwor
ICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgdmFsdWUpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVn
aWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFt
ZSk7CisgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sKTsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wpOworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkKKyAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBh
dXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBm
YXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5u
aW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQg
aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKTsKKyAg
ICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2
b2lkIHRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXRNdXRlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOworCisgICAgV2ViUGFnZSogbV9wYWdlOwor
ICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCosIHVpbnQ2NF90PiBtX21lZGlh
RWxlbWVudHM7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9j
b250ZXh0TWFwOworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9
OworICAgIEhhc2hDb3VudGVkU2V0PHVpbnQ2NF90PiBtX2NsaWVudENvdW50czsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNThkYzk4NDdjZWRjOTIyOWI3YTNk
ZTIzMjE3YzQ3ZmVjY2YzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTAsMCAr
MSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKK21lc3NhZ2VzIC0+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgeworICAgIFBsYXkodWlu
dDY0X3QgY29udGV4dElkKQorICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBUb2dn
bGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQorICAgIEJlZ2luU2NydWJiaW5nKHVpbnQ2
NF90IGNvbnRleHRJZCkKKyAgICBFbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQorICAg
IFNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKKyAgICBGYXN0U2Vl
ayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEJlZ2luU2Nhbm5pbmdGb3J3
YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBCZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0
X3QgY29udGV4dElkKQorICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBT
ZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgp
CisgICAgU2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpCisgICAgSGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3Qg
Y29udGV4dElkKQorICAgIFRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElk
KQorICAgIFRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZXRNdXRlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MTQxZTM4ZjU0NDUzZGIxNTJiMzFkMmFiZTFmNGNiYjA2MDM4YmFiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLm1tCkBAIC0wLDAgKzEsNDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKworI2lm
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKKworI2ltcG9ydCAiQXR0YWNobWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1w
b3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0IDxXZWJDb3Jl
L0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2
ZW50TmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CisjaW1wb3J0IDxtYWNoL21h
Y2hfcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3N0YXRpYyB1aW50NjRfdCBuZXh0Q29udGV4dElkKCkKK3sKKyAgICBzdGF0aWMgdWlu
dDY0X3QgY29udGV4dElkID0gMDsKKyAgICByZXR1cm4gKytjb250ZXh0SWQ7Cit9CisKKyNwcmFn
bWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQKKworUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgOiBt
X21hbmFnZXIoJm1hbmFnZXIpCisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisK
K1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0KCkKK3sKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
OjpyZXNldE1lZGlhU3RhdGUoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFu
YWdlci0+cmVzZXRNZWRpYVN0YXRlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZHVyYXRpb25DaGFuZ2Vk
KG1fY29udGV4dElkLCBkdXJhdGlvbik7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGFuY2hvclRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5j
dXJyZW50VGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpidWZmZXJlZFRpbWVD
aGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5idWZmZXJlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBidWZmZXJlZFRp
bWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJhdGVDaGFu
Z2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAgaWYgKG1fbWFu
YWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5yYXRlQ2hhbmdlZChtX2NvbnRleHRJZCwgaXNQbGF5
aW5nLCBwbGF5YmFja1JhdGUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRU
aW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZp
ZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKG1fY29udGV4dElkLCBy
YW5nZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZChib29sIHZhbHVlKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtX2NvbnRleHRJZCwgdmFsdWUpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBv
cHRpb25zLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5k
ZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQobV9jb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdl
ZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElk
LCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxv
Y2FsaXplZERldmljZU5hbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwg
bG9jYWxpemVkRGV2aWNlTmFtZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJs
ZWQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQobV9jb250ZXh0SWQsIGRpc2FibGVkKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBt
dXRlZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPm11dGVkQ2hh
bmdlZChtX2NvbnRleHRJZCwgbXV0ZWQpOworfQorCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyCisKK1JlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBhZ2UpKTsKK30KKworUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQorICAgIDogbV9w
YWdlKCZwYWdlKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9j
b250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZh
Y2UpID0gdHVwbGU7CisgICAgICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7Cisg
ICAgICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisKKyAgICAgICAgaW50ZXJm
YWNlLT5pbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7Cisg
ICAgbV9tZWRpYUVsZW1lbnRzLmNsZWFyKCk7CisgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsK
KworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZh
Y2VUdXBsZSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50PiBtb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250
ZXh0SWQpOworICAgIG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFjZSk7CisKKyAgICByZXR1cm4g
c3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQor
CitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9k
ZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShj
b250ZXh0SWQpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAq
c3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVu
c3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6Omdl
dDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOworICAg
IFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAg
c3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpOworCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IG1v
ZGVsLT5tZWRpYUVsZW1lbnQoKTsKKyAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIp
OworICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisgICAgaW50ZXJmYWNlLT5p
bnZhbGlkYXRlKCk7CisgICAgbV9tZWRpYUVsZW1lbnRzLnJlbW92ZShtZWRpYUVsZW1lbnQuZ2V0
KCkpOworICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7
CisgICAgaWYgKG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQorICAgICAgICByZW1v
dmVDb250ZXh0KGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBt
ZWRpYUVsZW1lbnQpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gZm91bmRJdGVyYXRv
ciA9IG1fbWVkaWFFbGVtZW50cy5maW5kKCZtZWRpYUVsZW1lbnQpOworICAgIGlmIChmb3VuZEl0
ZXJhdG9yICE9IG1fbWVkaWFFbGVtZW50cy5lbmQoKSkgeworICAgICAgICB1aW50NjRfdCBjb250
ZXh0SWQgPSBmb3VuZEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKG1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAgICAgICAgICByZW1vdmVDbGll
bnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICAgICAgbV9jb250
cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsm
XSB7IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOworICAgICAgICBhdXRvIGNvbnRleHRJZCA9
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdl
ckNvbnRleHRJZCkKKyAgICAgICAgICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQpOworICAgICAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9
IGNvbnRleHRJZDsKKyAgICAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRNZWRpYUVsZW1l
bnQoJm1lZGlhRWxlbWVudCk7CisgICAgfQorCisgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRo
SUQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyNlbmRp
ZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tDb250cm9s
c01hbmFnZXIoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVDbGllbnRGb3JDb250
ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICBtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCA9IDA7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OkNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisjZW5kaWYKK30KKwordWludDY0X3QgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y29u
dGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxl
bWVudCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1l
ZGlhRWxlbWVudCwgWyZdIHsgcmV0dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7CisgICAgdWludDY0
X3QgY29udGV4dElkID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLnNldE1lZGlhRWxlbWVudCgmbWVkaWFFbGVtZW50KTsKKyAgICByZXR1cm4g
Y29udGV4dElkOworfQorCisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVzZXRN
ZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRleHRJ
ZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKK3sK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
RHVyYXRpb25DaGFuZ2VkKGNvbnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQor
eworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpDdXJyZW50VGltZUNoYW5nZWQoY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSks
IG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJ1
ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1l
KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpCdWZmZXJlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgYnVmZmVyZWRUaW1lKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFy
dGVkVGltZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6UGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY29udGV4dElkLCBwbGF5YmFj
a1N0YXJ0ZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSYXRlQ2hhbmdlZChjb250ZXh0SWQsIGlzUGxheWlu
ZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Y29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmll
ZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgVmVjdG9yPHN0ZDo6cGFp
cjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlc1ZlY3RvcjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSBzdGFydCA9
IHRpbWVSYW5nZXMucmFuZ2VzKCkuc3RhcnQoaSkudG9Eb3VibGUoKTsKKyAgICAgICAgZG91Ymxl
IGVuZCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuZW5kKGkpLnRvRG91YmxlKCk7CisgICAgICAgIHJh
bmdlc1ZlY3Rvci5hcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIH0KKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6U2Vla2FibGVSYW5nZXNW
ZWN0b3JDaGFuZ2VkKGNvbnRleHRJZCwgV1RGTW92ZShyYW5nZXNWZWN0b3IpLCBsYXN0TW9kaWZp
ZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChj
b250ZXh0SWQsIHZhbHVlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3Rl
ZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVu
YWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0
YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJuYWxQbGF5YmFj
a1Byb3BlcnRpZXNDaGFuZ2VkKGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHRhcmdldFR5cGUpLCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxlY3RlZEluZGV4
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkQ2hhbmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBtdXRlZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFuZ2VkKGNvbnRleHRJZCwgbXV0ZWQpKTsKK30KKworI3By
YWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OgorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXkodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxheSgpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLnBhdXNlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBsYXlTdGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjcnViYmluZygpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgdGltZSkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWtUb1Rp
bWUodGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWsodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLmZhc3RTZWVrKHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdCYWNr
d2FyZCgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNj
YW5uaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9u
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLm1lZGlhRWxlbWVudCgpOworICAgIGlmIChlbGVtZW50KQorICAgICAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6SGFuZGxlQ29u
dHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNvbnRleHRJZCwgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1
dGUoKSkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkudG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZU11dGVkKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQorewor
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TXV0ZWQobXV0ZWQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjhkM2MyNDkyNTUxMmJhMzM4ZGIwOWMyYzEyZjc1Yzc1MjkyM2NkNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3Nh
Z2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNBTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIElQQyB7
CitjbGFzcyBBdHRhY2htZW50OworY2xhc3MgQ29ubmVjdGlvbjsKK2NsYXNzIERlY29kZXI7Citj
bGFzcyBNZXNzYWdlUmVjZWl2ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZs
b2F0U2l6ZTsKK2NsYXNzIE5vZGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBM
YXllckhvc3RpbmdDb250ZXh0OworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworY2xhc3Mg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVu
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0PiBjcmVhdGUoVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29u
dGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmly
dHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpOworCisgICAgdm9pZCBpbnZh
bGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisKKyAgICBMYXllckhvc3RpbmdDb250
ZXh0KiBsYXllckhvc3RpbmdDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0
LmdldCgpOyB9CisgICAgdm9pZCBzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0
cjxMYXllckhvc3RpbmdDb250ZXh0PiYmKTsKKworICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25z
dCB7IHJldHVybiBtX2lzQW5pbWF0aW5nOyB9CisgICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29s
IGZsYWcpIHsgbV9pc0FuaW1hdGluZyA9IGZsYWc7IH0KKworICAgIGJvb2wgdGFyZ2V0SXNGdWxs
c2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRJc0Z1bGxzY3JlZW47IH0KKyAgICB2b2lk
IHNldFRhcmdldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4g
PSBmbGFnOyB9CisKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgZnVsbHNjcmVlbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5N
b2RlOyB9CisgICAgdm9pZCBzZXRGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgeyBtX2Z1bGxzY3JlZW5Nb2RlID0g
bW9kZTsgfQorCisgICAgYm9vbCBpc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVs
bHNjcmVlbjsgfQorICAgIHZvaWQgc2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX2lzRnVs
bHNjcmVlbiA9IGZsYWc7IH0KKworcHJpdmF0ZToKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudAorICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVy
cmlkZTsKKworICAgIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKKyAg
ICBib29sIG1faXNBbmltYXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV90YXJnZXRJc0Z1bGxz
Y3JlZW4geyBmYWxzZSB9OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtX2Z1bGxzY3JlZW5Nb2RlIHsgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OworICAgIGJvb2wgbV9pc0Z1bGxz
Y3JlZW4geyBmYWxzZSB9OworfTsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1
YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI+IGNyZWF0ZShXZWJQYWdlJiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOworICAgIHZp
cnR1YWwgflZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAgICAKKyAgICB2b2lkIGludmFsaWRh
dGUoKTsKKyAgICAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSW50ZXJmYWNlIHRvIENocm9tZUNs
aWVudAorICAgIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdDsKKyAgICB2b2lkIGVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQm
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwor
ICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1M
VmlkZW9FbGVtZW50Jik7CisgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91
dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKworcHJvdGVjdGVkOgorICAgIGZy
aWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OworCisgICAgZXhwbGlj
aXQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiwgUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYpOworCisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4sIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNy
ZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRl
cmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsK
KyAgICBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgZW5zdXJlTW9k
ZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92
ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRl
eHQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQo
dWludDY0X3QgY29udGV4dElkKTsKKworICAgIC8vIEludGVyZmFjZSB0byBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0CisgICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIGhhc1ZpZGVvKTsKKyAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKworICAgIC8v
IE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisgICAgdm9pZCByZXF1
ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEp
OworICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlk
RW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRDbGVhbnVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZy
YW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywg
SVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0
eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KTsKKyAgICB2b2lkIGZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUp
OworICAgIAorICAgIFdlYlBhZ2UqIG1fcGFnZTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTWFu
YWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRN
TFZpZGVvRWxlbWVudCosIHVpbnQ2NF90PiBtX3ZpZGVvRWxlbWVudHM7CisgICAgSGFzaE1hcDx1
aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90
IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAgIEhhc2hNYXA8dWludDY0X3Qs
IGludD4gbV9jbGllbnRDb3VudHM7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5p
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41YzRiNTY4OTU1OWVlNzVkOTk0MTZlODA0YzdmY2Y2OTdiYjAyNTEyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUo
QVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQorbWVzc2FnZXMgLT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlciB7CisgICAgUmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmlu
aXNoZWRXaXRoTWVkaWEpCisgICAgRGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKKyAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkRW50
ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRDbGVhbnVwRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50
IGZlbmNlUG9ydCkKKyAgICBTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4
dElkLCB1bnNpZ25lZCBncmF2aXR5KQorICAgIEZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQorICAgIEZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lu
bGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNjgwYjlkYWI0NmIyZmM2NTVmNzMyMGU3YTU1
ZDA5MjExODIxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KQEAgLTAsMCArMSw0NjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIuaCIKKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJB
dHRhY2htZW50LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW1wb3J0
ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBv
cnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVz
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1M
VmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXll
ckJhY2tpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlkZW8uaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBJ
bnRSZWN0IGlubGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxlbWVudCYgZWxlbWVudCkKK3sKKyAg
ICBlbGVtZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFy
ZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHJlY3QgPSByZW5kZXJlci0+
dmlkZW9Cb3goKTsKKyAgICByZWN0Lm1vdmVCeShyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZpZXco
KS0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOworfQorCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2Vy
KQorICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQoreworfQorCitWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpCit7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGF5ZXJIb3N0aW5n
Q29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4mJiBjb250ZXh0KQor
eworICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdURk1vdmUoY29udGV4dCk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wg
aGFzVmlkZW8pCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5oYXNW
aWRlb0NoYW5nZWQobV9jb250ZXh0SWQsIGhhc1ZpZGVvKTsKK30KKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0
U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgdmlkZW9EaW1lbnNp
b25zKTsKK30KKworI3ByYWdtYSBtYXJrIC0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCitSZWY8
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFdl
YlBhZ2UmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihw
YWdlLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKSk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSwgUGxheWJhY2tTZXNzaW9u
TWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAg
ICAsIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcihwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQorewor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJ
RCgpLCAqdGhpcyk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5WaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
bW9kZWw7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CisgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CisK
KyAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbW9kZWwt
PnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRh
dGUoKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX3ZpZGVvRWxl
bWVudHMuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOworICAgIAorICAgIGlm
IChtX3BhZ2UpCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjppbnZhbGlkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlID0gbnVsbHB0cjsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJ
bnRlcmZhY2VUdXBsZSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVy
ZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBtb2RlbCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4g
aW50ZXJmYWNlID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlz
LCBjb250ZXh0SWQpOworICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+YWRkQ2xpZW50Rm9y
Q29udGV4dChjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250
ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3Mo
KSk7CisgICAgbW9kZWwtPmFkZENsaWVudCgqaW50ZXJmYWNlKTsKKworICAgIHJldHVybiBzdGQ6
Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1Zp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbElu
dGVyZmFjZVR1cGxlKCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYkNv
cmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6
OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJl
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+
KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6
OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJ
ZCk7CisKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPnJlbW92ZUNsaWVudEZvckNvbnRl
eHQoY29udGV4dElkKTsKKworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1l
bnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7CisgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChu
dWxscHRyKTsKKyAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOworICAgIGludGVy
ZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIG1fdmlkZW9FbGVtZW50cy5yZW1vdmUodmlkZW9FbGVt
ZW50LmdldCgpKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50cy5hZGQoY29u
dGV4dElkLCAxKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgQVNT
RVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOworCisgICAgaW50IGNsaWVu
dENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7CisgICAgQVNTRVJUKGNsaWVu
dENvdW50ID4gMCk7CisgICAgY2xpZW50Q291bnQtLTsKKworICAgIGlmIChjbGllbnRDb3VudCA8
PSAwKSB7CisgICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpOworICAgICAg
ICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7Cit9CisKKyNwcmFn
bWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50OgorCitib29sIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAoreworI2lmIFBMQVRGT1JN
KElPUykKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgcmV0dXJuIFNldHRpbmdzOjphdktp
dEVuYWJsZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSAmJiBzdXBwb3J0c1BpY3R1
cmVJblBpY3R1cmUoKTsKKyNlbmRpZgorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQmIHZp
ZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCit7CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisKKyAgICB1aW50NjRfdCBj
b250ZXh0SWQgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNvbnRleHRJZEZvck1lZGlhRWxl
bWVudCh2aWRlb0VsZW1lbnQpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92aWRlb0VsZW1lbnRz
LmFkZCgmdmlkZW9FbGVtZW50LCBjb250ZXh0SWQpOworICAgIFVOVVNFRF9QQVJBTShhZGRSZXN1
bHQpOworICAgIEFTU0VSVChhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID09IGNvbnRleHRJZCk7
CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Cisg
ICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShj
b250ZXh0SWQpOworICAgIGFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKyAgICBpZiAo
IWludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKQorICAgICAgICBpbnRlcmZhY2UtPnNl
dExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJu
YWxIb3N0aW5nUHJvY2VzcygpKTsKKworICAgIGF1dG8gdmlkZW9SZWN0ID0gaW5saW5lVmlkZW9G
cmFtZSh2aWRlb0VsZW1lbnQpOworICAgIEZsb2F0UmVjdCB2aWRlb0xheWVyRnJhbWUgPSBGbG9h
dFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZpZGVvUmVjdC5oZWlnaHQoKSk7CisKKyAg
ICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgb2xkTW9kZSA9IGlu
dGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsKKyAgICBpbnRlcmZhY2UtPnNldFRhcmdldElzRnVs
bHNjcmVlbih0cnVlKTsKKyAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOwor
ICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQoJnZpZGVvRWxlbWVudCk7CisgICAgaWYgKG9sZE1v
ZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSkKKyAg
ICAgICAgbW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZSh2aWRlb0xheWVyRnJhbWUpOworCisgICAg
aWYgKGludGVyZmFjZS0+aXNBbmltYXRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludGVy
ZmFjZS0+c2V0SXNBbmltYXRpbmcodHJ1ZSk7CisKKyAgICBib29sIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmUgPSB2aWRlb0VsZW1lbnQud2Via2l0U3VwcG9ydHNQcmVzZW50YXRpb25Nb2RlKEhUTUxW
aWRlb0VsZW1lbnQ6OlZpZGVvUHJlc2VudGF0aW9uTW9kZTo6UGljdHVyZUluUGljdHVyZSk7Cisg
ICAgCisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChjb250ZXh0SWQsIGludGVyZmFjZS0+bGF5ZXJIb3N0
aW5nQ29udGV4dCgpLT5jb250ZXh0SUQoKSwgdmlkZW9SZWN0LCBtX3BhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKSwgYWxsb3dzUGljdHVyZUluUGlj
dHVyZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVv
RWxlbWVudCYgdmlkZW9FbGVtZW50KQoreworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIEFTU0VS
VChtX3ZpZGVvRWxlbWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOworCisgICAgdWludDY0
X3QgY29udGV4dElkID0gbV92aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKKyAgICBh
dXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVy
ZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYgKGludGVyZmFjZS5p
c0FuaW1hdGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnRlcmZhY2Uuc2V0SXNBbmlt
YXRpbmcodHJ1ZSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCwgaW5saW5lVmlkZW9GcmFtZSh2
aWRlb0VsZW1lbnQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2Vi
Q29yZTo6SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKK3sKKyNpZiBQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICBBU1NFUlQo
bV9wYWdlKTsKKyAgICBBU1NFUlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1l
bnQpKTsKKworICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZp
ZGVvRWxlbWVudCk7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCk7CisKKyAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpF
eGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoY29udGV4dElkLCB0YXJnZXRNb2Rl
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aWRlb0VsZW1l
bnQpOworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRNb2RlKTsKKyNlbmRpZgorfQorCisjcHJhZ21h
IG1hcmsgSW50ZXJmYWNlIHRvIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBoYXNWaWRlbykKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0SGFzVmlkZW8o
Y29udGV4dElkLCBoYXNWaWRlbyksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAobV9wYWdl
KQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6U2V0VmlkZW9EaW1lbnNpb25zKGNvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eToKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1
ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhN
ZWRpYSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVl
bk1vZGUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mdWxsc2NyZWVuTW9kZUNoYW5n
ZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBBU1NFUlQo
bV9wYWdlKTsKKyAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJd
OworI2lmbmRlZiBOREVCVUcKKyAgICBbdmlkZW9MYXllciBzZXROYW1lOkAiV2ViIHZpZGVvIGZ1
bGxzY3JlZW4gbWFuYWdlciBsYXllciJdOworI2VuZGlmCisKKyAgICBbQ0FUcmFuc2FjdGlvbiBi
ZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKworICAg
IFt2aWRlb0xheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDAsIDApXTsKKyAgICBbdmlkZW9M
YXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJh
bnNwYXJlbnQpXTsKKworICAgIC8vIFNldCBhIHNjYWxlIGZhY3RvciBoZXJlIHRvIG1ha2UgY29u
dmVydFJlY3Q6dG9MYXllcjpuaWwgdGFrZSBzY2FsZSBmYWN0b3IgaW50byBhY2NvdW50LiA8cmRh
cjovL3Byb2JsZW0vMTgzMTY1NDI+LgorICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9yIGlzIGludmVy
dGVkIGluIHRoZSBob3N0aW5nIHByb2Nlc3MuCisgICAgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9y
ID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIFt2aWRlb0xheWVyIHNldFRyYW5z
Zm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3RvciwgaG9zdGluZ1Nj
YWxlRmFjdG9yLCAxKV07CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdD
b250ZXh0KCktPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKKworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIAorICAgIG1vZGVsLT5z
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyLCBbcHJvdGVjdGVkVGhpcywgdGhpcywg
Y29udGV4dElkXSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKKyAgICAgICAgICAgIGlm
IChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCisgICAgICAgICAgICAgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVlbihjb250
ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKyAgICAKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZh
Y2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7
CisgICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYgKGludGVy
ZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0
cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7
CisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIGV4aXQg
ZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1cmluZyBhbiBh
bmltYXRpb24uCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudF0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhp
cy0+bV9wYWdlKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZXhpdFZpZGVvRnVsbHNjcmVl
bkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50KTsKKyAgICB9KTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwor
ICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICAKKyAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhl
bihbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7CisgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlz
LCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKKyAgICAgICAgICAgIG1vZGVsLT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVy
ZmFjZV0geworICAgICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0geworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5z
ZXRSb290TGF5ZXIobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2Ut
PnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBw
cm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQoreworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
KyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAg
ICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7CisgICAgSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5N
b2RlKCk7CisgICAgYm9vbCB0YXJnZXRJc0Z1bGxzY3JlZW4gPSBpbnRlcmZhY2UtPnRhcmdldElz
RnVsbHNjcmVlbigpOworCisgICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7
CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRl
b0VsZW1lbnQoKTsKKworICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgcmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dChjb250ZXh0SWQpOworCisgICAgaWYgKCF2aWRlb0VsZW1lbnQgfHwgIXRhcmdl
dElzRnVsbHNjcmVlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudCwgbW9k
ZV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxl
bWVudCwgbW9kZSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVk
IGdyYXZpdHkpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRWaWRlb0xheWVyR3Jh
dml0eSgoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKK30KKyAg
ICAKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQoreworICAgIGlmICgh
bV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBtb2RlbCA9IGVuc3VyZU1vZGVs
KGNvbnRleHRJZCk7CisKKyAgICBpZiAoIWlzUGFnZVZpc2libGUpCisgICAgICAgIG1vZGVsLnZp
ZGVvRWxlbWVudCgpLT5zY3JvbGxJbnRvVmlld0lmTm90VmlzaWJsZShmYWxzZSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVk
VG9SZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIHRydWUsIGlubGluZVZpZGVvRnJhbWUoKm1vZGVs
LnZpZGVvRWxlbWVudCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorICAgIAordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQ
b3J0KQoreworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKGNvbnRleHRJZCk7CisKKyAgICBpZiAoc3RkOjppc25hbihib3VuZHMueCgpKSB8fCBzdGQ6
OmlzbmFuKGJvdW5kcy55KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLndpZHRoKCkpIHx8IHN0ZDo6
aXNuYW4oYm91bmRzLmhlaWdodCgpKSkgeworICAgICAgICBhdXRvIHZpZGVvUmVjdCA9IGlubGlu
ZVZpZGVvRnJhbWUoKm1vZGVsLT52aWRlb0VsZW1lbnQoKSk7CisgICAgICAgIGJvdW5kcyA9IEZs
b2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKKyAg
ICB9CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9u
IHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOworICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGlu
Z0NvbnRleHQoKSkKKyAgICAgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNl
dEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgpKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZy
YW1lKGJvdW5kcyk7CisgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwg
ZmVuY2VQb3J0LnBvcnQoKSk7CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNjYjE2OThiZGIxNTVmOTY2
OTgxMTFmMDUxNWYyMzg4N2Y1ZGEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVz
c2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50RW51bXMuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtQ0FMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgQXR0YWNobWVudDsKLWNsYXNz
IENvbm5lY3Rpb247Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgTWVzc2FnZVJlY2VpdmVyOwotfQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBOb2RlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0K
LWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQgZmluYWwKLSAgICA6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+Ci0gICAg
LCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJs
aWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0
ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OwotCi0gICAgLy8gV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbDsKLQot
ICAgIC8vIFdlYlBsYXliYWNrTW9kZWxDbGllbnQKLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChk
b3VibGUpIGZpbmFsOwotICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50
VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIGZpbmFsOwotICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hh
bmdlZChkb3VibGUpIGZpbmFsOwotICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQo
ZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpIGZpbmFsOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQo
Ym9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkgZmluYWw7Ci0gICAgdm9pZCBzZWVr
YWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0
TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKSBmaW5hbDsKLSAgICB2b2lk
IGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkgZmluYWw7Ci0gICAgdm9pZCBh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmlu
YWw7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KSBmaW5hbDsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQodWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFu
Z2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUp
IGZpbmFsOwotICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJv
b2wpIGZpbmFsOwotICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIGZpbmFsOwotCi0gICAgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiwgdWludDY0X3QgY29udGV4dElkKTsKLQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIq
IG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLX07Ci0KLWNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYpOwot
ICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKLQotICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7Ci0K
LSAgICB2b2lkIHNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudCYpOwotICAgIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAg
IHVpbnQ2NF90IGNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50Jik7Ci0KLXByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjsKLQotICAgIGV4cGxpY2l0IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYp
OwotCi0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudD4sIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxl
IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJ
bnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KTsKLSAgICBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgZW5z
dXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2
b2lkIHJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVu
dEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZv
ckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLQotICAgIC8vIEludGVyZmFjZSB0byBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ci0gICAgdm9pZCByZXNldE1lZGlhU3RhdGUo
dWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSk7Ci0gICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKTsKLSAgICB2
b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVy
ZWRUaW1lKTsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpOwotICAgIHZvaWQgcmF0ZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRl
KTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNv
bnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91Ymxl
IGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJD
b3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUs
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQg
bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0KLSAgICAvLyBNZXNzYWdl
cyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQotICAgIHZvaWQgcGxheSh1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVn
aW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGVuZFNjcnViYmluZyh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSB0aW1lKTsKLSAgICB2b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIHRpbWUpOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0
SWQpOwotICAgIHZvaWQgZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRl
eCk7Ci0gICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElk
LCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVx
dWVzdCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVy
ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIHNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRl
ZCk7Ci0KLSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50KiwgdWludDY0X3Q+IG1fbWVkaWFFbGVtZW50czsKLSAgICBIYXNoTWFwPHVpbnQ2
NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9j
b250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaENvdW50ZWRTZXQ8dWludDY0
X3Q+IG1fY2xpZW50Q291bnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NjY2YTcxNTRjYzRhOTQ0ZDA0ZWNhODZj
YjMwMzAwNmJkNzc4YTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLW1lc3NhZ2Vz
IC0+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgewotICAgIFBsYXkodWludDY0X3QgY29udGV4
dElkKQotICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBUb2dnbGVQbGF5U3RhdGUo
dWludDY0X3QgY29udGV4dElkKQotICAgIEJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICBFbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQotICAgIFNlZWtUb1RpbWUo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLSAgICBGYXN0U2Vlayh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSB0aW1lKQotICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90
IGNvbnRleHRJZCkKLSAgICBCZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElk
KQotICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBTZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi0gICAgU2VsZWN0
TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi0g
ICAgSGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQot
ICAgIFRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQotICAgIFRvZ2ds
ZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBTZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgbXV0ZWQpCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1YTI3ZTQ4YjJhNDI4MjlmYjQ0MjI0YzE3NGQ5YjIz
ODM1NWI1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW0KKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0K
LSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIkF0dGFjaG1lbnQuaCIKLSNpbXBvcnQgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9y
dCA8V2ViQ29yZS9Db2xvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgotI2ltcG9ydCA8
V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGltZVJh
bmdlcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgotI2ltcG9y
dCA8bWFjaC9tYWNoX3BvcnQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdWludDY0X3QgbmV4dENvbnRleHRJZCgpCi17Ci0gICAg
c3RhdGljIHVpbnQ2NF90IGNvbnRleHRJZCA9IDA7Ci0gICAgcmV0dXJuICsrY29udGV4dElkOwot
fQotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ci0K
LVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OldlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0
X3QgY29udGV4dElkKQotICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgICwgbV9jb250ZXh0
SWQoY29udGV4dElkKQotewotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
Ojp+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmVzZXRNZWRpYVN0YXRlKCkKLXsKLSAg
ICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnJlc2V0TWVkaWFTdGF0ZShtX2Nv
bnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPmR1cmF0aW9uQ2hhbmdlZChtX2NvbnRleHRJZCwgZHVyYXRpb24p
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRU
aW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQotewotICAg
IGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+Y3VycmVudFRpbWVDaGFuZ2VkKG1f
Y29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVm
ZmVyZWRUaW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YnVm
ZmVyZWRUaW1lQ2hhbmdlZChtX2NvbnRleHRJZCwgYnVmZmVyZWRUaW1lKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+cmF0ZUNoYW5nZWQobV9jb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tS
YXRlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpwbGF5
YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAg
ICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnBsYXliYWNrU3RhcnRlZFRpbWVD
aGFuZ2VkKG1fY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29u
c3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwg
ZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChtX2NvbnRleHRJZCwgcmFuZ2VzLCBs
YXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9v
bCB2YWx1ZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQobV9jb250ZXh0SWQsIHZhbHVlKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0
aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2Nv
bnRleHRJZCwgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29u
c3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0g
ICAgICAgIG1fbWFuYWdlci0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQobV9jb250ZXh0SWQsIGVu
YWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChib29sIGRpc2FibGVkKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKG1fY29udGV4dElkLCBk
aXNhYmxlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAg
bV9tYW5hZ2VyLT5tdXRlZENoYW5nZWQobV9jb250ZXh0SWQsIG11dGVkKTsKLX0KLQotI3ByYWdt
YSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgotCi1SZWY8V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcj4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBh
Z2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cihwYWdlKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZSgmcGFnZSkKLXsKLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQo
KSwgKnRoaXMpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp+V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcigpCi17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52
YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dD4gaW50ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9
IHR1cGxlOwotICAgICAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAgICAg
ICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOwotCi0gICAgICAgIGludGVyZmFjZS0+
aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwotICAgIG1f
bWVkaWFFbGVtZW50cy5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci0KLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJm
YWNlVHVwbGUgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudD4gbW9kZWwgPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ+IGludGVyZmFjZSA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNy
ZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAgICBtb2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2Up
OwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShp
bnRlcmZhY2UpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZh
Y2VUdXBsZSYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0
TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3Jl
YXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90
IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVs
LCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAg
IFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtZWRpYUVsZW1lbnQgPSBtb2RlbC0+bWVkaWFFbGVt
ZW50KCk7Ci0gICAgbW9kZWwtPnNldE1lZGlhRWxlbWVudChudWxscHRyKTsKLSAgICBtb2RlbC0+
cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwot
ICAgIG1fbWVkaWFFbGVtZW50cy5yZW1vdmUobWVkaWFFbGVtZW50LmdldCgpKTsKLSAgICBtX2Nv
bnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
bV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17
Ci0gICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotICAgIGlm
IChtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKSkKLSAgICAgICAgcmVtb3ZlQ29udGV4
dChjb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldFVw
UGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFF
bGVtZW50KQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBhdXRvIGZvdW5kSXRlcmF0b3IgPSBt
X21lZGlhRWxlbWVudHMuZmluZCgmbWVkaWFFbGVtZW50KTsKLSAgICBpZiAoZm91bmRJdGVyYXRv
ciAhPSBtX21lZGlhRWxlbWVudHMuZW5kKCkpIHsKLSAgICAgICAgdWludDY0X3QgY29udGV4dElk
ID0gZm91bmRJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCA9PSBjb250ZXh0SWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgICAgIG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1lbnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyBy
ZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9KTsKLSAgICAgICAgYXV0byBjb250ZXh0SWQgPSBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpCi0gICAgICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkKTsKLSAgICAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250
ZXh0SWQ7Ci0gICAgICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TWVkaWFFbGVtZW50KCZt
ZWRpYUVsZW1lbnQpOwotICAgIH0KLQotICAgIGFkZENsaWVudEZvckNvbnRleHQobV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElE
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjbGVhclBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlQ2xpZW50Rm9yQ29u
dGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgbV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQgPSAwOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+
cGFnZUlEKCkpOwotI2VuZGlmCi19Ci0KLXVpbnQ2NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBt
ZWRpYUVsZW1lbnQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5z
dXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOwotICAg
IHVpbnQ2NF90IGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7Ci0gICAg
cmV0dXJuIGNvbnRleHRJZDsKLX0KLQotI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OgotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJlc2V0TWVk
aWFTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgZHVyYXRpb24pCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1cmF0aW9uQ2hhbmdlZChjb250ZXh0SWQsIGR1cmF0aW9u
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRU
aW1lLCBkb3VibGUgYW5jaG9yVGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJ
ZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QnVmZmVyZWRUaW1lQ2hhbmdl
ZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCi17Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJh
dGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXli
YWNrUmF0ZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5nZWQoY29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNr
UmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdl
YkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8ZG91Ymxl
LCBkb3VibGU+PiByYW5nZXNWZWN0b3I7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRp
bWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewotICAgICAgICBkb3VibGUgc3RhcnQgPSB0aW1lUmFu
Z2VzLnJhbmdlcygpLnN0YXJ0KGkpLnRvRG91YmxlKCk7Ci0gICAgICAgIGRvdWJsZSBlbmQgPSB0
aW1lUmFuZ2VzLnJhbmdlcygpLmVuZChpKS50b0RvdWJsZSgpOwotICAgICAgICByYW5nZXNWZWN0
b3IuYXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsKLSAgICB9Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNlZWthYmxlUmFuZ2VzVmVjdG9y
Q2hhbmdlZChjb250ZXh0SWQsIFdURk1vdmUocmFuZ2VzVmVjdG9yKSwgbGFzdE1vZGlmaWVkVGlt
ZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQo
Y29udGV4dElkLCB2YWx1ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
Ci17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0
aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUp
Ci17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OkV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZChjb250ZXh0SWQsIGVuYWJs
ZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFt
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5k
ZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBib29sIGRpc2FibGVkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoY29udGV4dElkLCBkaXNhYmxlZCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6Om11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi17
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6Ok11dGVkQ2hhbmdlZChjb250ZXh0SWQsIG11dGVkKSk7Ci19Ci0KLSNwcmFnbWEgbWFyayBN
ZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eToKLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXkoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5wYXVzZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQbGF5U3RhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17
Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjcnViYmluZygpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250
ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY3J1YmJpbmcoKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5zZWVrVG9UaW1lKHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi17Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5mYXN0U2Vlayh0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNr
d2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5lbmRTY2FubmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1
aW50NjRfdCBpbmRleCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5n
VXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKGluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpo
YW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgYXV0byBlbGVtZW50ID0gZW5zdXJlTW9kZWwoY29udGV4dElkKS5tZWRpYUVsZW1lbnQoKTsK
LSAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25z
ZShjb250ZXh0SWQsIGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCkpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVN
dXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS50b2dnbGVNdXRlZCgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNl
dE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLXsKLSAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLnNldE11dGVkKG11dGVkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YThlNDdjMGVkMWFhMmU2MzZiMjZmNjg2OWE4YjI1MWNl
ODFkOWM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyX2gKLSNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cl9oCi0KLSNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIk1lc3Nh
Z2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIElQ
QyB7Ci1jbGFzcyBBdHRhY2htZW50OwotY2xhc3MgQ29ubmVjdGlvbjsKLWNsYXNzIERlY29kZXI7
Ci1jbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IEZsb2F0U2l6ZTsKLWNsYXNzIE5vZGU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBMYXllckhvc3RpbmdDb250ZXh0OwotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKLQotY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dAotICAgIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4KLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChtYW5hZ2Vy
LCBjb250ZXh0SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dCgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBu
dWxscHRyOyB9Ci0KLSAgICBMYXllckhvc3RpbmdDb250ZXh0KiBsYXllckhvc3RpbmdDb250ZXh0
KCkgeyByZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRM
YXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiYm
KTsKLQotICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzQW5pbWF0aW5n
OyB9Ci0gICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29sIGZsYWcpIHsgbV9pc0FuaW1hdGluZyA9
IGZsYWc7IH0KLQotICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRJc0Z1bGxzY3JlZW47IH0KLSAgICB2b2lkIHNldFRhcmdldElzRnVsbHNjcmVlbihi
b29sIGZsYWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSBmbGFnOyB9Ci0KLSAgICBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgZnVsbHNjcmVlbk1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlOyB9Ci0gICAgdm9pZCBzZXRGdWxs
c2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkgeyBtX2Z1bGxzY3JlZW5Nb2RlID0gbW9kZTsgfQotCi0gICAgYm9vbCBpc0Z1
bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbHNjcmVlbjsgfQotICAgIHZvaWQgc2V0
SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX2lzRnVsbHNjcmVlbiA9IGZsYWc7IH0KLQotcHJp
dmF0ZToKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgIHZvaWQgaGFz
VmlkZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKLQotICAgIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYsIHVp
bnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKiBtX21h
bmFnZXI7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExh
eWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKLSAgICBib29sIG1faXNB
bmltYXRpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90YXJnZXRJc0Z1bGxzY3JlZW4geyBmYWxz
ZSB9OwotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtX2Z1bGxzY3JlZW5Nb2RlIHsgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OwotICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4geyBmYWxz
ZSB9OwotfTsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJl
Y2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI+IGNyZWF0ZShXZWJQYWdlJiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOwotICAgIHZp
cnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKLSAgICAKLSAgICB2b2lkIGludmFs
aWRhdGUoKTsKLSAgICAKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8gSW50ZXJmYWNlIHRvIENocm9t
ZUNsaWVudAotICAgIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdDsKLSAgICB2b2lkIGVu
dGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
OwotICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50Jik7Ci0gICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0
aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLQotcHJvdGVjdGVkOgotICAg
IGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OwotCi0gICAg
ZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiwgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlciYpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4sIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKLSAgICBNb2Rl
bEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLQotICAgIC8vIElu
dGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ci0gICAgdm9pZCBo
YXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKTsKLSAgICB2
b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmKTsKLQotICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Ci0gICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3Qg
Y29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpOwotICAgIHZvaWQgZGlkU2V0dXBGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCk7
Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1
bnNpZ25lZCBncmF2aXR5KTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSk7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpOwotICAgIAotICAgIFdlYlBhZ2UqIG1fcGFn
ZTsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCosIHVpbnQ2NF90
PiBtX3ZpZGVvRWxlbWVudHM7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VU
dXBsZT4gbV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkIHsgMCB9OwotICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7Ci19
OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0K
LSNlbmRpZiAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1
OWMyNWFhZTdiMDE1ZTMwMTNkOWExYjE1MDdiNjEwYTJmYmNhNS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApA
QCAtMSwzNSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgewotICAgIFJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQotICAgIERpZFNl
dHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRGlkRXhpdEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQotICAgIERpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCi0gICAgRGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotICAg
IFNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZs
b2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCi0gICAgU2V0VmlkZW9M
YXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSkKLSAg
ICBGdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9k
ZSkKLSAgICBGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBi
b29sIGlzUGFnZVZpc2libGUpCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY0NjE3NGVmM2FkODNlMDhmNDNhZDhlMzdhYmZi
NTEyODlhODA2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSw0NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgot
Ci0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIkF0dGFjaG1lbnQu
aCIKLSNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAiV2ViUGFnZS5o
IgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViUHJv
Y2Vzcy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCi0j
aW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9y
dCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxW
aWRlb0VsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVy
QmFja2luZy5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWRlby5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBvcnQgPG1hY2gvbWFjaF9wb3J0Lmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIElu
dFJlY3QgaW5saW5lVmlkZW9GcmFtZShIVE1MVmlkZW9FbGVtZW50JiBlbGVtZW50KQotewotICAg
IGVsZW1lbnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKLSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGF1dG8gcmVjdCA9IHJlbmRlcmVyLT52
aWRlb0JveCgpOwotICAgIHJlY3QubW92ZUJ5KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgpLmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkudmlldygp
LT5jb250ZW50c1RvUm9vdFZpZXcocmVjdCk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgOiBtX21hbmFn
ZXIoJm1hbmFnZXIpCi0gICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCi17Ci19Ci0KLVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdD
b250ZXh0PiYmIGNvbnRleHQpCi17Ci0gICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gV1RGTW92
ZShjb250ZXh0KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPmhhc1ZpZGVvQ2hhbmdlZChtX2NvbnRleHRJZCwgaGFzVmlkZW8p
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAg
aWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT52aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KG1fY29udGV4dElkLCB2aWRlb0RpbWVuc2lvbnMpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCi0KLVJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKHBhZ2UsIHBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIpKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQotICAgIDogbV9wYWdlKCZwYWdlKQotICAgICwgbV9w
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCi17Ci0gICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlEKCks
ICp0aGlzKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIoKQotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFs
dWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ+IGludGVyZmFjZTsKLSAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0
dXBsZTsKLQotICAgICAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwotICAgICAg
ICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotCi0gICAgICAgIGludGVyZmFjZS0+
aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwotICAgIG1f
dmlkZW9FbGVtZW50cy5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci0gICAg
Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmludmFsaWRhdGUoKQotewotICAgIEFTU0VSVChtX3BhZ2UpOwot
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKLSAgICBtX3BhZ2UgPSBudWxscHRyOwotfQotCi1XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7Ci0gICAgbV9w
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5hZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci0K
LSAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5nQ29udGV4
dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKLSAgICBtb2RlbC0+YWRkQ2xp
ZW50KCppbnRlcmZhY2UpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1v
ZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7
Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViQ29yZTo6V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3Vy
ZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAg
IHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKTsKLQotICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+cmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dChjb250ZXh0SWQpOwotCi0gICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVv
RWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKLSAgICBtb2RlbC0+c2V0VmlkZW9FbGVt
ZW50KG51bGxwdHIpOwotICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7Ci0gICAg
aW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7Ci0gICAgbV92aWRlb0VsZW1lbnRzLnJlbW92ZSh2aWRl
b0VsZW1lbnQuZ2V0KCkpOwotICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRz
LmFkZChjb250ZXh0SWQsIDEpOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkK
LXsKLSAgICBBU1NFUlQobV9jbGllbnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7Ci0KLSAg
ICBpbnQgY2xpZW50Q291bnQgPSBtX2NsaWVudENvdW50cy5nZXQoY29udGV4dElkKTsKLSAgICBB
U1NFUlQoY2xpZW50Q291bnQgPiAwKTsKLSAgICBjbGllbnRDb3VudC0tOwotCi0gICAgaWYgKGNs
aWVudENvdW50IDw9IDApIHsKLSAgICAgICAgbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJ
ZCk7Ci0gICAgICAgIHJlbW92ZUNvbnRleHQoY29udGV4dElkKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fY2xpZW50Q291bnRzLnNldChjb250ZXh0SWQsIGNsaWVudENvdW50KTsK
LX0KLQotI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQ6Ci0KLWJvb2wgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Ci17
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICByZXR1cm4g
U2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpOwotI2Vsc2UKLSAgICByZXR1cm4gbW9kZSA9PSBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlICYm
IHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRN
TFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBBU1NFUlQobV9wYWdlKTsKLSAgICBBU1NFUlQo
bW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsK
LQotICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+Y29u
dGV4dElkRm9yTWVkaWFFbGVtZW50KHZpZGVvRWxlbWVudCk7Ci0gICAgYXV0byBhZGRSZXN1bHQg
PSBtX3ZpZGVvRWxlbWVudHMuYWRkKCZ2aWRlb0VsZW1lbnQsIGNvbnRleHRJZCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGFkZFJlc3VsdCk7Ci0gICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPT0gY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgYWRkQ2xpZW50Rm9yQ29udGV4
dChjb250ZXh0SWQpOwotICAgIGlmICghaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkp
Ci0gICAgICAgIGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdD
b250ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOwotCi0gICAgYXV0byB2
aWRlb1JlY3QgPSBpbmxpbmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCk7Ci0gICAgRmxvYXRSZWN0
IHZpZGVvTGF5ZXJGcmFtZSA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlk
ZW9SZWN0LmhlaWdodCgpKTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBvbGRNb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOwotICAgIGlu
dGVyZmFjZS0+c2V0VGFyZ2V0SXNGdWxsc2NyZWVuKHRydWUpOwotICAgIGludGVyZmFjZS0+c2V0
RnVsbHNjcmVlbk1vZGUobW9kZSk7Ci0gICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudCgmdmlkZW9F
bGVtZW50KTsKLSAgICBpZiAob2xkTW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVOb25lKQotICAgICAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKHZp
ZGVvTGF5ZXJGcmFtZSk7Ci0KLSAgICBpZiAoaW50ZXJmYWNlLT5pc0FuaW1hdGluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyh0cnVlKTsKLQotICAg
IGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSA9IHZpZGVvRWxlbWVudC53ZWJraXRTdXBwb3J0
c1ByZXNlbnRhdGlvbk1vZGUoSFRNTFZpZGVvRWxlbWVudDo6VmlkZW9QcmVzZW50YXRpb25Nb2Rl
OjpQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKGNvbnRl
eHRJZCwgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPmNvbnRleHRJRCgpLCB2aWRl
b1JlY3QsIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgaW50ZXJmYWNlLT5mdWxsc2NyZWVu
TW9kZSgpLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZp
ZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCi17Ci0g
ICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlucygm
dmlkZW9FbGVtZW50KSk7Ci0KLSAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVu
dHMuZ2V0KCZ2aWRlb0VsZW1lbnQpOwotICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVy
ZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihm
YWxzZSk7Ci0KLSAgICBpZiAoaW50ZXJmYWNlLmlzQW5pbWF0aW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGludGVyZmFjZS5zZXRJc0FuaW1hdGluZyh0cnVlKTsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3Jl
ZW4oY29udGV4dElkLCBpbmxpbmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCkpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50
JiB2aWRlb0VsZW1lbnQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSB0YXJnZXRNb2RlKQotewotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVCht
X3ZpZGVvRWxlbWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOwotCi0gICAgdWludDY0X3Qg
Y29udGV4dElkID0gbV92aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKLSAgICBhdXRv
JiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFj
ZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotCi0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuV2l0aG91
dEFuaW1hdGlvblRvTW9kZShjb250ZXh0SWQsIHRhcmdldE1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZpZGVvRWxlbWVudCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRhcmdldE1vZGUpOwotI2VuZGlmCi19Ci0KLSNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDoKLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpoYXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGhh
c1ZpZGVvKQotewotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRIYXNWaWRlbyhjb250ZXh0SWQs
IGhhc1ZpZGVvKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNv
bnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAgIGlmIChtX3BhZ2UpCi0gICAg
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpTZXRWaWRlb0RpbWVuc2lvbnMoY29udGV4dElkLCB2aWRlb0RpbWVuc2lvbnMpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLX0KLQotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OgotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJl
cXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0
aE1lZGlhKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmVxdWVzdEZ1bGxzY3JlZW5N
b2RlKG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxs
c2NyZWVuTW9kZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAg
IEFTU0VSVChtX3BhZ2UpOwotICAgIFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbQ0FMYXll
ciBsYXllcl07Ci0jaWZuZGVmIE5ERUJVRwotICAgIFt2aWRlb0xheWVyIHNldE5hbWU6QCJXZWIg
dmlkZW8gZnVsbHNjcmVlbiBtYW5hZ2VyIGxheWVyIl07Ci0jZW5kaWYKLQotICAgIFtDQVRyYW5z
YWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNd
OwotCi0gICAgW3ZpZGVvTGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UoMCwgMCldOwotICAg
IFt2aWRlb0xheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNv
bG9yOjp0cmFuc3BhcmVudCldOwotCi0gICAgLy8gU2V0IGEgc2NhbGUgZmFjdG9yIGhlcmUgdG8g
bWFrZSBjb252ZXJ0UmVjdDp0b0xheWVyOm5pbCB0YWtlIHNjYWxlIGZhY3RvciBpbnRvIGFjY291
bnQuIDxyZGFyOi8vcHJvYmxlbS8xODMxNjU0Mj4uCi0gICAgLy8gVGhpcyBzY2FsZSBmYWN0b3Ig
aXMgaW52ZXJ0ZWQgaW4gdGhlIGhvc3RpbmcgcHJvY2Vzcy4KLSAgICBmbG9hdCBob3N0aW5nU2Nh
bGVGYWN0b3IgPSBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgW3ZpZGVvTGF5ZXIg
c2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaG9zdGluZ1NjYWxlRmFjdG9yLCBo
b3N0aW5nU2NhbGVGYWN0b3IsIDEpXTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2Ut
PmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9vdExheWVyKHZpZGVvTGF5ZXIpOwotCi0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAg
Ci0gICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKHZpZGVvTGF5ZXIsIFtzdHJvbmdU
aGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGNvbnRleHRJZF0gewotICAgICAg
ICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fcGFnZSkKLSAgICAgICAgICAgICAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RW50ZXJGdWxsc2Ny
ZWVuKGNvbnRleHRJZCksIHN0cm9uZ1RoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOwotICAgICAgICB9
KTsKLSAgICB9KTsKLSAgICAKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotfQotICAgIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldElzQW5p
bWF0aW5nKGZhbHNlKTsKLSAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0K
LSAgICBpZiAoaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52
aWRlb0VsZW1lbnQoKTsKLSAgICBpZiAoIXZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0
ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdmlkZW9FbGVtZW50XSB7Ci0gICAgICAgIGlmIChz
dHJvbmdUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBzdHJvbmdUaGlzLT5leGl0VmlkZW9GdWxs
c2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQpOwotICAgIH0pOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyPiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIG1vZGVsLT53YWl0Rm9yUHJlcGFy
ZWRGb3JJbmxpbmVUaGVuKFtzdHJvbmdUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxd
IHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0
cm9uZ1RoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0gewotICAgICAgICAgICAgbW9k
ZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCwgW3N0cm9uZ1RoaXMsIGNvbnRleHRJZCwg
aW50ZXJmYWNlXSB7Ci0gICAgICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlXSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkt
PnNldFJvb3RMYXllcihudWxscHRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFj
ZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChudWxscHRyKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9wYWdlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkNsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIHN0
cm9uZ1RoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2Rl
bDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcoZmFsc2Up
OwotICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKLSAgICBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSA9IGludGVyZmFjZS0+ZnVsbHNj
cmVlbk1vZGUoKTsKLSAgICBib29sIHRhcmdldElzRnVsbHNjcmVlbiA9IGludGVyZmFjZS0+dGFy
Z2V0SXNGdWxsc2NyZWVuKCk7Ci0KLSAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
bmlsKTsKLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0gbW9kZWwt
PnZpZGVvRWxlbWVudCgpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICByZW1vdmVD
bGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci0KLSAgICBpZiAoIXZpZGVvRWxlbWVudCB8fCAh
dGFyZ2V0SXNGdWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdmlkZW9FbGVtZW50LCBt
b2RlXSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBzdHJv
bmdUaGlzLT5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50
LCBtb2RlKTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQg
Z3Jhdml0eSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldFZpZGVvTGF5ZXJHcmF2
aXR5KChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KWdyYXZpdHkpOwotfQot
ICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCi17Ci0gICAg
aWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIG1vZGVsID0gZW5zdXJl
TW9kZWwoY29udGV4dElkKTsKLQotICAgIGlmICghaXNQYWdlVmlzaWJsZSkKLSAgICAgICAgbW9k
ZWwudmlkZW9FbGVtZW50KCktPnNjcm9sbEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNlKTsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
UHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGNvbnRleHRJZCwgdHJ1ZSwgaW5saW5lVmlkZW9GcmFt
ZSgqbW9kZWwudmlkZW9FbGVtZW50KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0gICAgCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNo
bWVudCBmZW5jZVBvcnQpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGlmIChzdGQ6OmlzbmFuKGJv
dW5kcy54KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLnkoKSkgfHwgc3RkOjppc25hbihib3VuZHMu
d2lkdGgoKSkgfHwgc3RkOjppc25hbihib3VuZHMuaGVpZ2h0KCkpKSB7Ci0gICAgICAgIGF1dG8g
dmlkZW9SZWN0ID0gaW5saW5lVmlkZW9GcmFtZSgqbW9kZWwtPnZpZGVvRWxlbWVudCgpKTsKLSAg
ICAgICAgYm91bmRzID0gRmxvYXRSZWN0KDAsIDAsIHZpZGVvUmVjdC53aWR0aCgpLCB2aWRlb1Jl
Y3QuaGVpZ2h0KCkpOwotICAgIH0KLSAgICAKLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0g
ICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07Ci0gICAgaWYgKGludGVy
ZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKQotICAgICAgICBpbnRlcmZhY2UtPmxheWVySG9z
dGluZ0NvbnRleHQoKS0+c2V0RmVuY2VQb3J0KGZlbmNlUG9ydC5wb3J0KCkpOwotICAgIG1vZGVs
LT5zZXRWaWRlb0xheWVyRnJhbWUoYm91bmRzKTsKLSAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZSht
YWNoX3Rhc2tfc2VsZigpLCBmZW5jZVBvcnQucG9ydCgpKTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315360</attachid>
            <date>2017-07-13 11:21:16 -0700</date>
            <delta_ts>2017-07-13 12:20:26 -0700</delta_ts>
            <desc>Better diff. No filename change.</desc>
            <filename>bug-174437-20170713112116.patch</filename>
            <type>text/plain</type>
            <size>420794</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzODQ3ZWU5NmI5OTI2
ODM4MGIzYWNmZGI2MGU3ZjBkOGI1MDMyOC4uNTA5ZTU2ZThhYjNiZmUwMzQ5YzBhMWZlNmJhMzJj
MDZhNTA3NDhhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1MCBAQAorMjAxNy0wNy0xMiAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVm
aXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50
ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFj
a1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVu
ZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFt
ZXNwYWNlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmguCisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6flBsYXliYWNrU2Vzc2lvbk1v
ZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojp+UGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlh
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpi
ZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0
b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5Q
bGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI6On5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgu
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6flZpZGVvRnVsbHNjcmVl
bk1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
LgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbS4KKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcyk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENs
aWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3Zl
Q2xpZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zp
c2libGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhh
c1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmguCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
LgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJh
bmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICgtW1dlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSBmdWxsc2NyZWVuSW50ZXJmYWNlXSk6CisgICAgICAgICgtW1dl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0p
OgorICAgICAgICAoY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckxheWVyIGZ1bGxzY3JlZW5JbnRlcmZhY2VdKToKKyAgICAgICAgKC1bV2ViQVZQ
bGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0pOgorICAgICAgICAoLVtXZWJBVlBs
YXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpdKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpjcmVhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIp
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNj
cmVlbk1vZGVsKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVs
bHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRU
b1N0YXJ0UGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVT
dG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dl
YkFWUGxheWVyQ29udHJvbGxlci5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZCk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnBhdXNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKToK
KyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmR1cmF0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpjdXJyZW50VGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRl
cnZhbCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxh
eUZhc3RSZXZlcnNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxz
Y3JlZW46bW9kZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRGaW5pc2hGdWxsc2NyZWVuOl0pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENs
ZWFudXBGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hh
bmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdl
c0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
Om11dGVkQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVu
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnBsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnBhdXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YmVnaW5TY3J1YmJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2Fi
bGVSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJ
bnRlcnZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxs
c2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJiaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjph
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0uCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6XSk6Cisg
ICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgaW52YWxpZGF0ZV0p
OgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIHNldFVwUElQ
Rm9yVmlkZW9WaWV3OndpdGhGcmFtZTppbldpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250
YWluZXI6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
cGlwU2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakMgcGlwRGlkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgcGlwQWN0aW9uUGxheTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25QYXVzZTpdKToKKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25TdG9wOl0pOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhck1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlk
ZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZWVrVG9UaW1lOnRvbGVyYW5jZUJlZm9yZTp0b2xl
cmFuY2VBZnRlcjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgYmVn
aW5Ub3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlciBlbmRUb3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOl0p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDdXJyZW50TGVnaWJs
ZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hY10pOgorICAgICAgICAo
LVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHRvZ2dsZVBsYXli
YWNrXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6
XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGlzUGxheWluZ10pOgor
ICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciB0b2dnbGVQaWN0dXJlSW5QaWN0
dXJlXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hY10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6XSk6IERlbGV0
ZWQuCisKIDIwMTctMDctMTEgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBOQVZJR0FUT1JfSFdDT05DVVJSRU5DWQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDE4
NGEyMTA3YTUyM2M5Zjg4ZTM0MTAzNmFhN2E3Mzg2MzEzMzI0MGMuLmJkYTNkMjkyMjRmMWI2ODEy
MDM1YWIzNzUzNGY5M2MzMzY3MWJmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNy0wNy0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXli
YWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
cmVtb3ZlcyB0aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxz
Y3JlZW4qIGFuZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAg
IFRoaXMgcHJlZml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUg
V2ViS2l0IG9yIFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZv
ck1lZGlhRWxlbWVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAg
ICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKwogMjAxNy0wNy0xMSAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIE5BVklHQVRPUl9IV0NPTkNVUlJF
TkNZCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggMDNkZTVjZGIwYjc3Yjg3ZjQwZTY0MzhiNjBkYjM4MjEzZmI4NzQy
YS4uN2UzZGQ3MzBjYThkMTM5ZTYyM2RjN2Q3MzU0MGUwOWEzMGQ2N2E3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI2MyBAQAorMjAxNy0wNy0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3Jl
ZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNs
YXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUg
YWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW06CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGlj
dHVyZUluUGljdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6dG9nZ2xlTXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnNldE11dGVkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVk
VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6flBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRD
bGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElE
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla2FibGVSYW5n
ZXNWZWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVD
b250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmZhc3RTZWVrKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5T
Y2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Ojp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbS4KKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4pOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxs
c2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpk
aWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5k
SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2V0dXBGdWxsc2NyZWVuV2l0aElEKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9EaW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXll
ckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNoQmFyKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV93
ZWFrUHRyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhdHRhY2hU
b1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKiBXZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxheWJhY2tTZXNzaW9u
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVz
c2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vz
cy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6bmV4dENvbnRleHRJZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZl
cmVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1
cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tD
b250cm9sc01hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Ojpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyYXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnNldE11dGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oLgorICAgICAgICAoV2ViS2l0OjpWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0uCisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVySG9zdGluZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpoYXNWaWRlb0NoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAgICAg
KFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Up
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCk6
CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRG
b3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVt
b3ZlQ2xpZW50Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpoYXNWaWRlb0NoYW5nZWQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0
OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAg
IChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51
bSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBSZW1vdmVkLgorCiAyMDE3LTA3LTExICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgTkFWSUdBVE9S
X0hXQ09OQ1VSUkVOQ1kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA5M2VjODYxOTRmNGY4NGU1NGQ3NmMwZjQ5ZDJlNzZlODc2MjNj
YTJmLi42MjIzMGZhNWRlMzJiY2FiMDNiYTkwZTFiZGJlNTUxZWMyZjI5OTc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjg1
LDggKzE2ODUsOCBAQAogCQkzRjgwMjAzNjFFOUU0N0MzMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzRjgwMjAzMTFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5j
cHAgKi87IH07CiAJCTNGODAyMDM3MUU5RTQ3QzUwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJl
RGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0Y4MDIwMzQxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyLmggKi87IH07CiAJCTNGODAyMDM4MUU5RTQ3QzkwMERFQzYxRCAvKiBDb3JlQXVkaW9D
YXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwICovOyB9OwotCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi87IH07Ci0JCTNGQkM0QUY0MTg5ODgx
NTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjIxODk4ODE1NjAw
NDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0ZCQzRBRjMxODk4ODE1NjAw
NDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OworCQkzRkJDNEFGNDE4
OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRjFGQTY2MUU3MzUwRkQwMEMx
MDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlLmNwcCAqLzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAx
IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNGQzQzNEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2Nr
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5
QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CkBA
IC0yNDc1LDExICsyNDc1LDExIEBACiAJCTUxRkI1NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Ns
b3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgKi87IH07CiAJ
CTUxRkI2N0RCMUFFNkI4MkIwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNjdE
OTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovOyB9
OwogCQk1MUZCNjdEQzFBRTZCODJGMDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI2
N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyMTMxRTVCMUM0
RjE1NzYwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMUU1QTFDNEYxNTYx
MDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovOyB9OworCQk1
MjEzMUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzFFNUEx
QzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLzsgfTsK
IAkJNTI2NzI0RjMxQ0IyRkVBRDAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3
MjRGMTFDQjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSAq
LzsgfTsKIAkJNTJCMEQ0QkUxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkQxQzU3RkQx
RTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QzEx
QzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQjZDOUMyMTVFM0Y0
REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJEMTVFM0Y0REYwMDY5MEIwNSAv
KiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJNTJCNkM5QzMxNUUzRjRERjAw
NjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJFMTVFM0Y0REYwMDY5MEIwNSAvKiBET01O
YW1lZEZsb3dDb2xsZWN0aW9uLmggKi87IH07CiAJCTUyQjZDOUM1MTVFM0Y0REYwMDY5MEIwNSAv
KiBOYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjZDOUMwMTVFM0Y0REYwMDY5MEIwNSAvKiBOYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCAqLzsgfTsKQEAgLTI0ODcsOSArMjQ4Nyw5IEBACiAJCTUyQ0NBOUUyMTVFM0Y2
MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5RTAxNUUzRjYyQzAwNTNDNzdG
IC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTUyQ0NBOUUzMTVFM0Y2
MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0NBOUUxMTVFM0Y2MkMwMDUzQzc3RiAv
KiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJNTJENUExOEYxQzU0NTkyMzAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gKi87IH07Ci0JCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi87IH07CisJCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQubW0gKi87IH07CiAJCTUyRTJDQUZDMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRp
YVByb2R1Y2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkUyQ0FGQjE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRjEwODY1MTYyQjZEQTQw
MDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhl
ZENvbnRlbnRDaGVja2VyLmNwcCAqLzsgfTsKIAkJNTJGMTA4NjYxNjJCNkRBODAwOUFDODFFIC8q
IE1peGVkQ29udGVudENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVj
a2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTYyMDAsMTUgKzYyMDAsMTUgQEAKIAkJQ0RBMDdGQkUxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3Rl
bVNsZWVwTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTA3RkJDMThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RBMDdG
QzExOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwN0ZCRjE4RTBBMjJCMDA0
Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSAqLzsgfTsKIAkJQ0RBMDdGQzIxOEUw
QTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA3RkMwMThFMEEyMkIwMDQ2OTlGQSAv
KiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmggKi87IH07Ci0JCUNEQTI5QTA5MUNCRDk5RjQwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUNEQTI5QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSAqLzsgfTsKLQkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLzsgfTsKLQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKKwkJQ0RBMjlBMDkxQ0JEOTlGNDAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMEUx
Q0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEMxQ0JE
OUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9
OworCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
NDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovOyB9
OworCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMzAx
Q0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkYxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OwogCQlD
REEyOUEzMTFDQkY3NERBMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkQxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAqLzsgfTsKLQkJQ0RBMjlBMzIx
Q0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRTFDQkY3
M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEzMjFDQzAx
QTk1MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJFMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTc5ODI0MTcwQTI1ODMwMEQ0NUM1
NSAvKiBBdWRpb1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBNzk4MjMxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAg
Ki87IH07CiAJCUNEQTc5ODI3MTcwQTI3OTEwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyNTE3
MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICovOyB9OwogCQlDREE3OTgyQTE3
MEEzRDAwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTkzMjYsOCArOTMyNiw4IEBACiAJCTNGODAyMDMyMUU5RTM4MUQwMERFQzYxRCAvKiBDb3Jl
QXVkaW9DYXB0dXJlRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
cmVBdWRpb0NhcHR1cmVEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4
MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4MDIwMzQx
RTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVF
MzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU1ZpZXdw
b3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE3MTU5RDlB
NTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTNGRkZGOUFCMTU5RDlCMDYwMDIwQkJENSAvKiBWaWV3cG9ydFN0eWxlUmVz
b2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRT
dHlsZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjI5LDEy
ICsxMDIyOSwxMiBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1
QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50
RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMTFD
QjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYyMUNCMkZERjYw
MDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QkQxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRm
b3JtVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRDE1RTNGNERGMDA2
OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkUxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRjE1
RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDI0NCw5ICsxMDI0NCw5IEBACiAJCTUyQ0NBOUUxMTVFM0Y2MkMwMDUz
Qzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyRDVBMThFMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE0MUM1NzQ4
ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBNTFD
NTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQTYxQzU3NDg4OTAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRTJDQUZCMTlGRjAyMDcw
MDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhUHJvZHVjZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGMTA4
NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWl4ZWRDb250ZW50Q2hlY2tlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhl
ZENvbnRlbnRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1peGVk
Q29udGVudENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzM4LDE2
ICsxNDczOCwxNiBAQAogCQlDREEwN0ZCQzE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBM
aXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1TbGVlcExp
c3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTA3RkJGMThFMEEyMkIw
MDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQzAxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNs
ZWVwTGlzdGVuZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVt
U2xlZXBMaXN0ZW5lck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEw
ODFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEy
OUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RB
MjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
QTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExNDFD
QkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExNTFDQkRBNTZDMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyQzFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5
ZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFWUGxh
eWVyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyRDFD
QkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdWRpb1Nlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBNzk4MjMx
NzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBdWRpb1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uSU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkxMzgsMTQgKzE5MTM4LDE0IEBACiAJ
CQkJRTFBMzE2MkMxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5tbSAqLywKIAkJCQlDRDU4OTZFMDFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIuaCAqLywKIAkJCQlDRDU4OTZERjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIubW0gKi8sCi0JCQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovLAotCQkJCUNEQTI5QTE0MUNC
REE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8sCisJ
CQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oICovLAorCQkJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRDgyMDMwNzEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLywKIAkJCQlDRDgyMDMwODEz
OTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5o
ICovLAogCQkJCUNEODIwMzA5MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLm1tICovLAotCQkJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLywKLQkJCQk1MjEzMUU1QTFDNEYx
NTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovLAorCQkJ
CTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
aCAqLywKKwkJCQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLm1tICovLAogCQkJCUNEODIwMzBFMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5k
b3dBbmltYXRpb24uaCAqLywKIAkJCQlDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLm1tICovLAogCQkJCTkzODBGNDc3MDlBMTFBQ0MwMDFGREIzNCAvKiBXaWRn
ZXRNYWMubW0gKi8sCkBAIC0yMTE1MCwxNCArMjExNTAsMTQgQEAKIAkJCQlGRTBEODRFQTEwNDg0
MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gKi8sCiAJCQkJRjQ4MjIzMEYxRTM4NjlCODAwNjZG
Qzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaCAqLywKIAkJCQlGNDgyMjMwRTFFMzg2
OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbSAqLywKLQkJCQlDREEy
OUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCAqLywKLQkJCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0gKi8sCisJCQkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8sCisJCQkJQ0RBMjlBMkYxQ0JGNzNGQzAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovLAogCQkJCTFGODc1
NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAq
LywKIAkJCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFj
a2VyQ2xpZW50Lm1tICovLAogCQkJCTNGNDJCMzFCMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLywKIAkJCQkzRjQyQjMxQzE4ODExOTFCMDAy
NzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovLAotCQkJCTNG
QkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oICovLAotCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLywKKwkJCQkzRkJDNEFGMTE4OTg4MTU2
MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJRTQ1
MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gaW9zOwpAQCAtMjEyMDQsMTQgKzIxMjA0LDE0IEBACiAJCQkJQ0RDOTc5RjMxQzQ5OEMwOTAw
REI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLmggKi8sCiAJCQkJQ0RDOTc5RjIxQzQ5OEMw
OTAwREI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLm1tICovLAogCQkJCTVERkVCQUI2MTg1
OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKLQkJCQlDREEyOUEwODFD
QkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8sCi0JCQkJ
Q0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8s
Ci0JCQkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50LmggKi8sCi0JCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovLAotCQkJCTUyQjBENEJGMUM1N0ZE
NjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAotCQkJ
CTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICov
LAotCQkJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oICovLAotCQkJCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLywKKwkJCQlDREEyOUEwODFDQkQ5
OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi8sCisJCQkJQ0RBMjlB
MEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8sCisJCQkJQ0RB
MjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
LmggKi8sCisJCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lm1tICovLAorCQkJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAorCQkJCTUyRDVBMUE0MUM1NzQ4ODkw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovLAorCQkJCTUyRDVBMUE1MUM1NzQ4
ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovLAorCQkJ
CTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzAxMTgsMTEgKzMwMTE4LDExIEBACiAJCQkJMDcwOUQ3OTMxQUU1NTU3RTAw
NEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxQTMxNjJEMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNENTg5NkUyMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMDkxQ0JEOTlG
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQlD
REEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMDkxQ0JE
OTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEw
QjFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZF
IC8qIFdlYlNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1
MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNTY5RDFCMEQ3RTJCODIwMDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDEzOSwxNCArMzAxMzksMTQgQEAKIAkJCQkxRjg3NTZCMjFFMjJD
MzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BM
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkIwRDRDMDFDNTdGRDY2
MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q4MjAzMEExMzk1QUI2QTAwRjk1NkM2
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTNG
NDJCMzFEMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBDMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkz
RkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyRDVBMUE3
MUM1NzQ4OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzRkJDNEFGNDE4OTg4MTU2MDA0
NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRDVBMUE3MUM1NzQ4OUQwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQTgxQzU3NDhBMzAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGMTIxNzFGNjE2QThDRjBCMDAwMDUzQ0EgLyogV2ViVlRURWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjEwQjY5ODAxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRv
a2VuLmggaW4gSGVhZGVycyAqLywKQEAgLTMzODM1LDkgKzMzODM1LDkgQEAKIAkJCQkwNzA5RDc5
MjFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMUEzMTYyRTEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q1ODk2RTExQ0QyQjE1MTAwQjNC
Q0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5
QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTE2
MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291
cmNlcyAqLywKKwkJCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0FGMzQ4MjBBNkM0MDUy
MDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdBQUJE
MUExNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
N0FBQkQxRDE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMzODUzLDkgKzMzODUzLDkgQEAKIAkJCQlDRDgyMDMwQjEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTNGNDJCMzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
QVZLaXQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDgyMDMwRDEzOTVBQjZBMDBGOTU2QzYgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk1
MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MjEz
MUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjEyMTcxRjUxNkE4
Q0VEMjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQy
MUE4MDIxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMTBCNjk4MTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXgg
MjY2MDI2OTI4ZjM2NWIzY2Y2ODg1M2MzNTQ4YzA4NDA0YjFiZmIwNS4uMGQ0NjExYzUwOTYyZWI4
ODEwYTIxYzI0ZjlkY2U5MWYyMzM2YWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKICNp
bmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCkBAIC0xNTYsNyArMTU2LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1
ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCIKICNlbmRpZgogCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAu
Li4pIFJFTEVBU0VfTE9HX0lGKGRvY3VtZW50KCkucGFnZSgpICYmIGRvY3VtZW50KCkucGFnZSgp
LT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTWVkaWEsICIlcCAtIEhUTUxNZWRpYUVsZW1l
bnQ6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAKaW5kZXggMzZjZjQ5N2I5OWI4OTdhOGFhZGRlYWY2MjZiOWFhYjM4ZmZj
MmJhMS4uNjU4OTVmOTM4OTdmMDY4NDE0N2I5ZDBjY2YxNTcwY2I3OTY4N2NjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC00OCw3ICs0OCw3IEBACiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRl
ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLmgKaW5kZXggYzU5YjhjODY0NmJiOGVkNDFlZTcyMDM3NzNjZGQ5
OTA4Y2FmZjllMi4uMDAzNzJhZmM3NTU5NjFlMWYxMjBlZWJiNmQyOTRiODQwYWZmMjNiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZV9oCi0jZGVmaW5lIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZV9oCisjcHJhZ21hIG9u
Y2UKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKIApAQCAtMzgsOSArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFRpbWVSYW5nZXM7CiAKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSB7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgewogcHVibGljOgotICAgIHZp
cnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSgpIHsgfTsKKyAgICB2aXJ0dWFsIH5Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UoKSB7IH07CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVk
aWFTdGF0ZSgpID0gMDsKIH07CiAKQEAgLTQ4LDQgKzQ3LDQgQEAgcHVibGljOgogCiAjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQogCi0jZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKaW5kZXggMDZkNTNmMGY3NzY5
Mzc3NWFkNDg2MWMyMjMwNGFjOTM4MDA5YzgyMy4uYTg3NDQxNTc0NjlhMmE3YjJlNzYzOWUxZjlh
M2FlNzE0ZGYyODY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oCkBAIC0zNCwxNCArMzQsMTQgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGltZVJhbmdlczsKLWNsYXNzIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ7CiBzdHJ1
Y3QgTWVkaWFTZWxlY3Rpb25PcHRpb247CiAKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
IHsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5X
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50
KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSA9IDA7CisgICAgdmly
dHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENs
aWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIHBsYXkoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOwpAQCAt
ODMsOSArODMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTXV0ZWQoKSBjb25zdCA9
IDA7CiB9OwogCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7CitjbGFzcyBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQoKSB7IH07CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQoKSB7IH07CiAgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChk
b3VibGUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIC8q
IGN1cnJlbnRUaW1lICovLCBkb3VibGUgLyogYW5jaG9yVGltZSAqLykgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSB7IH0KQEAgLTk3LDcgKzk3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1
aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4ICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXVkaW9N
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2Nh
bGl6ZWREZXZpY2VOYW1lICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBtdXRlZENo
YW5nZWQoYm9vbCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgK
aW5kZXggYWQ4OTUxMzc1ODg0ZDZjODFhN2YyMzg5NmQ4YzRmNjUzMzkwMzhjNS4uM2E3MzE0M2I0
YmY5YmRlZTM3MzgyNjlkMTgyMDFiODlkMzBkMmIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJFdmVudExpc3Rl
bmVyLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM5LDE1ICszOSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBBdWRpb1RyYWNrOwogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIFRl
eHRUcmFjazsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKK2NsYXNzIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwsIHB1YmxpYyBF
dmVudExpc3RlbmVyIHsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50IGZp
bmFsIDogcHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudD4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkpOwogICAgIH0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCopOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9CiAKQEAgLTU1LDggKzU1LDgg
QEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJik7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykg
Y29uc3QgZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0
ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xp
ZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwbGF5KCkgZmluYWw7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBwYXVzZSgpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7CkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdFQkNPUkVf
RVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKIAogcHJpdmF0ZToK
ICAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7CkBAIC0xMDMsNyArMTAzLDcgQEAg
cHJpdmF0ZToKIAogICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsK
ICAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgSGFzaFNldDxQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKICAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
az4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7CiAgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNr
Pj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0KaW5kZXggY2ZjZGU0MzNmMDM3MDIxZTUxYTBiNDY4NmUyZmI1MTdkN2U5N2Y3NC4u
ODc0ZGZmNzAxMDI0YjNiZDhiMmEwOTFmNmY2NTY3Y2FlODRlMzFjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgogCiAj
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQogCkBAIC00NywxNiArNDcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6V2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQoKQorUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKICAgICA6IEV2ZW50TGlzdGVuZXIo
RXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiB7CiB9CiAKLVdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQoKQorUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5QbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudCgpCiB7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVs
ZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogewogICAgIGlmIChtX21lZGlh
RWxlbWVudCA9PSBtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTg1LDEyICs4NSwx
MiBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVs
ZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaQogICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVu
dE5hbWVBbGwoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3Jl
OjpFdmVudCogZXZlbnQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpo
YW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZl
bnQqIGV2ZW50KQogewogICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC0+dHlwZSgpKTsKIH0K
IAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZl
bnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpB
dG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBpZiAobV9jbGllbnRzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTc2LDc5ICsxNzYsNzkgQEAgdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRv
bWljU3QKICAgICAgICAgICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKGlzTXV0ZWQoKSk7CiAgICAg
fQogfQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50
KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
CiAgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JiBjbGllbnQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpy
ZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBB
U1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2NsaWVudHMucmVtb3Zl
KCZjbGllbnQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpwbGF5KCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkoKQog
ewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBsYXko
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2Uo
KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2UoKQogewogICAg
IGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBsYXlT
dGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5
U3RhdGUoKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpiZWdpblNjcnViYmluZygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpiZWdpblNjcnViYmluZygpCiB7CiAgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygpCiB7CiAgICAg
aWYgKG1fbWVkaWFFbGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5n
KCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtU
b1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVrKGRvdWJsZSB0
aW1lKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PmZhc3RTZWVrKHRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7CiAgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKIHsKICAgICBp
ZiAobV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5n
KE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCiB7CiAgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVkaW9NZWRp
YU9wdGlvbih1aW50NjRfdCBzZWxlY3RlZEF1ZGlvSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVj
dGVkQXVkaW9JbmRleCkKIHsKICAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1
cm47CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBzZWxlY3QKICAgICAgICAg
bV9hdWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJsZWQoaSA9PSBzZWxlY3RlZEF1ZGlvSW5k
ZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpCiB7CiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcx
LDcgKzI3MSw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRlCiAgICAgbV9tZWRpYUVsZW1lbnQt
PnNldFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjayk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgp
CiB7CiAgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpID09IE1lZGlhUGxh
eWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQogICAgICAgICBt
X21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKQEAgLTI3OSwxOCArMjc5LDE4IEBAIHZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBp
Y3R1cmUoKQogICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKE1lZGlhUGxh
eWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlTXV0ZWQoKQordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlTXV0ZWQoKQogewogICAg
IHNldE11dGVkKCFpc011dGVkKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRNdXRlZChib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKIHsKICAgICBpZiAobV9tZWRp
YUVsZW1lbnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRNdXRlZChtdXRlZCk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1
cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKQogewogICAgIGlmICghbV9tZWRpYUVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKQogICAg
IH0KIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRl
TWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpCiB7CiAgICAgYXV0byBhdWRpb0lu
ZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKICAgICBhdXRvIGxlZ2libGVJbmRleCA9
IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbklu
ZGljZXMoKQogICAgIH0KIH0KIAotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX21lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zNDEsNyArMzQxLDcg
QEAgZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1N0
YXJ0ZWRUaW1lKCkgY29uc3QKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrU3Rh
cnRlZFRpbWUoKTsKIH0KIAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQorY29uc3QgVmVj
dG9yPEF0b21pY1N0cmluZz4mIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNl
cnZlZEV2ZW50TmFtZXMoKQogewogICAgIC8vIEZJWE1FKDE1NzQ1Mik6IFJlbW92ZSB0aGUgcmln
aHQtaGFuZCBjb25zdHJ1Y3RvciBub3RhdGlvbiBvbmNlIE5ldmVyRGVzdHJveWVkIHN1cHBvcnRz
IGluaXRpYWxpemVyX2xpc3RzLgogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRv
bWljU3RyaW5nPj4gbmFtZXMgPSBWZWN0b3I8QXRvbWljU3RyaW5nPih7CkBAIC0zNTksNjAgKzM1
OSw2MCBAQCBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6Om9ic2VydmVkRXZlbnROYQogICAgIHJldHVybiBuYW1lcy5nZXQoKTsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCitjb25zdCBBdG9taWNTdHJpbmcmICBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBldmVudE5hbWVBbGwoImFsbEV2ZW50cyIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIHJldHVybiBldmVudE5hbWVBbGw7CiB9
CiAKLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZHVyYXRpb24o
KSBjb25zdAorZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlv
bigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVkaWFF
bGVtZW50LT5kdXJhdGlvbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKIH0KIAotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpj
dXJyZW50VGltZSgpIGNvbnN0Citkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmN1cnJlbnRUaW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBt
X21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSA6IDA7CiB9CiAKLWRvdWJsZSBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YnVmZmVyZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YnVmZmVyZWRUaW1lKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWF4QnVmZmVyZWRU
aW1lKCkgOiAwOwogfQogCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojppc1BsYXlpbmcoKSBjb25zdAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6aXNQbGF5aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyAhbV9t
ZWRpYUVsZW1lbnQtPnBhdXNlZCgpIDogZmFsc2U7CiB9CiAKLWZsb2F0IFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAorZmxvYXQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUmF0ZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrUmF0ZSgpIDog
MDsKIH0KIAotUmVmPFRpbWVSYW5nZXM+IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CitSZWY8VGltZVJhbmdlcz4gUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGUoKSA6IFRpbWVSYW5n
ZXM6OmNyZWF0ZSgpOwogfQogCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAorZG91Ymxl
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0
TW9kaWZpZWRUaW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21l
ZGlhRWxlbWVudC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDogMDsKIH0K
IAotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsaXZlVXBkYXRl
SW50ZXJ2YWwoKSBjb25zdAorZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdAogewogICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dCA/IG1fbWVkaWFFbGVtZW50LT5saXZlVXBkYXRlSW50ZXJ2YWwoKSA6IDA7CiB9CiAgICAgCi1i
b29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVy
c2UoKSBjb25zdAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y2FuUGxh
eUZhc3RSZXZlcnNlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21l
ZGlhRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAgOiBmYWxzZTsKIH0KIAotVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAogewogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gYXVkaW9PcHRpb25zOwogCkBAIC00MjgsNyArNDI4LDcgQEAgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9N
ZWRpYVNlbGUKICAgICByZXR1cm4gYXVkaW9PcHRpb25zOwogfQogCi11aW50NjRfdCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBj
b25zdAordWludDY0X3QgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVk
aWFTZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgbV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGlm
IChtX2F1ZGlvVHJhY2tzRm9yTWVudVtpbmRleF0tPmVuYWJsZWQoKSkKQEAgLTQzNyw3ICs0Mzcs
NyBAQCB1aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAogICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KCk7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlT3B0aW9uczsKIApA
QCAtNDUyLDcgKzQ1Miw3IEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlCiAgICAgcmV0dXJuIGxl
Z2libGVPcHRpb25zOwogfQogCi11aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit1aW50NjRfdCBQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgp
IGNvbnN0CiB7CiAgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDY0X3Q+OjptYXgoKTsKICAgICB1aW50NjRfdCBvZmZJbmRleCA9IDA7CkBAIC00ODks
MTIgKzQ4OSwxMiBAQCB1aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CiAgICAgcmV0dXJuIHNlbGVjdGVk
SW5kZXg7CiB9CiAKLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4
dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPndlYmtpdEN1cnJlbnRQbGF5YmFj
a1RhcmdldElzV2lyZWxlc3MoKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CitQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
bWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKICAg
ICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwpAQCAtNTEyLDE5ICs1MTIsMTkgQEAgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWEKICAgICB9CiB9CiAKLVN0cmluZyBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBj
b25zdAorU3RyaW5nIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBs
YXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fbWVkaWFFbGVt
ZW50ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQogICAgICAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlz
cGxheU5hbWUoKTsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotYm9vbCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQoKSBjb25zdAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAogewogICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCkud2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKm1fbWVkaWFFbGVtZW50KTsKIH0KIAotYm9vbCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6aXNNdXRlZCgpIGNvbnN0Citib29sIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Ojppc011dGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bXV0ZWQoKSA6IGZhbHNlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLmgKaW5kZXggMzkwNzVjNzgxMGRhOWI0MjdhNjE4NTRjOTk3ZDUz
YjM1ZWIwYjFmOS4uZTQ3ZGM4MTVkYjEzMDYwNjQ5ZjQ5ZTk0MjVlOTAxOGY1MzczYjY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCkBAIC0yMywxNyArMjMsMTUgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotCi0jaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyX2gKLSNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXJfaAorI3ByYWdt
YSBvbmNlCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeworY2xhc3MgVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKCkgeyB9OworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSA9IDA7CkBAIC00NSw0ICs0MywzIEBAIHB1Ymxp
YzoKIAogI2VuZGlmCiAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKaW5kZXggYjE2ODdmODE1MzA1Y2Nj
MWMzMWI1NGMwMzljYjNkZGIzODUyMjliMi4uYWM4NDlmYzIwZGEwY2I0MmJkOTI3NjE3ZjE0MThm
OWI3NzMwYzI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCkBAIC0yNCwyNCArMjQsMjMgQEAKICAqLwogCiAK
LSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKIAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1
ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9u
TW9kZWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50OwogCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7
CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSB7IH07Ci0g
ICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50Jik9IDA7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWwoKSB7IH07
CisgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50Jik9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdp
dGhNZWRpYSA9IGZhbHNlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZShGbG9hdFJlY3QpID0gMDsKQEAgLTU0LDkgKzUzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKIH07CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCgpIHsgfQorICAg
IHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAwOwogfTsKQEAgLTY3LDQgKzY2LDMg
QEAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKIAogI2Vu
ZGlmCiAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKaW5kZXgg
ZmVlMWI5ZGUyNzVjZTk4Mjg3ODAzYTFkOTg0ZmEyMzFjZDIxMmEzZS4uY2M3ZGI1Njc5MjE0NTdl
NThmYWMzMzY0OGExYTUzNjA2ZDZlNDRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5oCkBAIC0yMyw5ICsyMyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLQotI2lm
bmRlZiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudF9oCi0jZGVmaW5lIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQogCkBAIC0zMyw3ICszMSw3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSAiVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDE1ICs0MiwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb1RyYWNrOwogY2xhc3MgSFRNTFZpZGVv
RWxlbWVudDsKIGNsYXNzIFRleHRUcmFjazsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CiAK
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IDogcHVibGljIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitjbGFzcyBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwg
cHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50KCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudCgpKTsKICAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKICAgICBIVE1M
VmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRWxlbWVu
dC5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5
ZXIoUGxhdGZvcm1MYXllciosIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyID0gW10geyB9KTsKQEAgLTYyLDggKzYwLDggQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRl
Rm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7CiAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDbGll
bnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJy
aWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpIG92
ZXJyaWRlOwpAQCAtNzQsNyArNzIsNyBAQCBwdWJsaWM6CiAKIAogcHJvdGVjdGVkOgotICAgIFdF
QkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKIAogcHJp
dmF0ZToKICAgICB2b2lkIHNldEhhc1ZpZGVvKGJvb2wpOwpAQCAtODYsNyArODQsNyBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBS
ZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKICAgICBib29s
IG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgSGFzaFNldDxWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCo+IG1fY2xpZW50czsKICAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OwogICAg
IEZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsKICAgICBGbG9hdFJlY3QgbV92aWRlb0ZyYW1l
OwpAQCAtOTgsNCArOTYsMyBAQCBwcml2YXRlOgogCiAjZW5kaWYKIAotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCmluZGV4IGNhNGZiZTAxNzAyY2M1MGU0YTQz
OWY4Njg1ZDY0MmI3OWNkOWE0MDcuLjA4MTZlYTljYmYxNzU2NTE4NWIwZWM2OWViMWM1YWM2ZWQ4
MzJhODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCkBAIC0yNiwx
MyArMjYsMTMgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2ltcG9y
dCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKKyNpbXBvcnQgIlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCiAKICNpbXBvcnQgIkRPTVdpbmRvdy5oIgog
I2ltcG9ydCAiSGlzdG9yeS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFD
b250cm9sc0hvc3QuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgogI2lt
cG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KQEAgLTQ3LDE2ICs0NywxNiBA
QAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKK1ZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudCgpCiAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVu
ZXJUeXBlKQogewogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6fldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKK1ZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogewogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1l
bnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVv
RWxlbWVudCkKIHsKICAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50KQogICAg
ICAgICByZXR1cm47CkBAIC04MSwxMiArODEsMTIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGUK
ICAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKIHsKICAgICB1cGRhdGVGb3JF
dmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmlu
ZyYgZXZlbnROYW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBk
YXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7CiAg
ICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMCw3ICsx
MDAsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVG
b3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdAogICAgIH0KIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxh
dGZvcm1MYXllciogdmlkZW9MYXllciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAobV92aWRlb0Z1bGxzY3Jl
ZW5MYXllciA9PSB2aWRlb0xheWVyKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBA
IC0xMjMsNyArMTIzLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllcioKICAgICBtX3ZpZGVvRWxl
bWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQo
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURjo6
RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIW1fdmlkZW9F
bGVtZW50KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0xMzMsNyArMTMzLDcg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6d2FpdEZvclByZXBh
cmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmMKICAgICBtX3ZpZGVvRWxlbWVudC0+d2FpdEZvclBy
ZXBhcmVkRm9ySW5saW5lVGhlbihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJlcXVlc3RGdWxsc2NyZWVu
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9v
bCBmaW5pc2hlZFdpdGhNZWRpYSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKIHsKICAgICBpZiAobV92
aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgIT0gbW9kZSkK
ICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOwpAQCAtMTQ4
LDcgKzE0OCw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJl
cXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50CiAgICAgfQogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxv
YXRSZWN0IHJlY3QpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCiB7CiAgICAgbV92aWRlb0ZyYW1lID0gcmVj
dDsKICAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3VuZHM6Q0dSZWN0KHJlY3QpXTsK
QEAgLTE1NiwxNCArMTU2LDE0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKICAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCiB7CiAgICAgTWVkaWFQbGF5ZXI6OlZp
ZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0OwotICAgIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemUpCisgICAgaWYgKGdyYXZpdHkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZSkKICAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6
OlZpZGVvR3Jhdml0eVJlc2l6ZTsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpCisgICAgZWxzZSBpZiAoZ3Jh
dml0eSA9PSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQog
ICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0OwotICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpCisgICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCkKICAgICAgICAg
dmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7
CiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE3MSw3ICsxNzEs
NyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xh
eWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZQogICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRl
b0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7CiB9CiAKLWNvbnN0IFZlY3RvcjxBdG9t
aWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2ZWRF
dmVudE5hbWVzKCkKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKIHsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOwogCkBAIC0xODAs
MzEgKzE4MCwzMSBAQCBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYQogICAgIHJldHVybiBzRXZlbnRO
YW1lcy5nZXQoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKK2NvbnN0IEF0b21pY1N0cmluZyYgVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCiB7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc0V2ZW50TmFtZUFsbCA9ICJhbGxFdmVu
dHMiOwogICAgIHJldHVybiBzRXZlbnROYW1lQWxsOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVl
bk1vZGUpCiB7CiAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQogICAgICAgICBtX3ZpZGVvRWxlbWVu
dC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjphZGRDbGllbnQoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OmFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50
KQogewogICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2Ns
aWVudHMuYWRkKCZjbGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpyZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNs
aWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJlbW92ZUNsaWVu
dChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVChtX2Ns
aWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7
CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmlzVmlzaWJs
ZSgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zpc2li
bGUoKSBjb25zdAogewogICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8oYm9vbCBo
YXNWaWRlbykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhhc1Zp
ZGVvKGJvb2wgaGFzVmlkZW8pCiB7CiAgICAgaWYgKGhhc1ZpZGVvID09IG1faGFzVmlkZW8pCiAg
ICAgICAgIHJldHVybjsKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRIYXNWaWRlbyhib29sIGhhc1ZpZGVvKQogICAgICAgICBj
bGllbnQtPmhhc1ZpZGVvQ2hhbmdlZChtX2hhc1ZpZGVvKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0
U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6c2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25z
KQogewogICAgIGlmIChtX3ZpZGVvRGltZW5zaW9ucyA9PSB2aWRlb0RpbWVuc2lvbnMpCiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJB
VlBsYXllckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBs
YXllckNvbnRyb2xsZXIuaAppbmRleCBlNWNmZjEyYmJhZmFlNjkxMTgzMTI3YmYyODBmYTkzY2U5
MGYyNTEyLi4xYjEwZmJhMGQ0MjE5ZjA5MWY3M2I4Yzc5NzA2MDRiYjVkMjBjMGVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5o
CkBAIC0yOCw4ICsyOCw4IEBACiAjaW1wb3J0ICJBVktpdFNQSS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKLWNsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWw7CitjbGFz
cyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDsKIH0KIAogQGludGVyZmFjZSBXZWJBVk1l
ZGlhU2VsZWN0aW9uT3B0aW9uIDogTlNPYmplY3QKQEAgLTQ0LDggKzQ0LDggQEAgY2xhc3MgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ7CiB9CiAKIEBwcm9wZXJ0eSAocmV0YWluKSBB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXJQcm94eTsKLUBwcm9wZXJ0eSAoYXNz
aWduKSBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogZGVsZWdhdGU7Ci1AcHJvcGVy
dHkgKGFzc2lnbikgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQqIHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbCogZGVsZWdhdGU7CitAcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQqIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsK
IAogQHByb3BlcnR5IChyZWFkb25seSkgQk9PTCBjYW5TY2FuRm9yd2FyZDsKIEBwcm9wZXJ0eSBC
T09MIGNhblNjYW5CYWNrd2FyZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tCmluZGV4IDZiZmM1Y2ExYWEyNmIyM2U1ZThhNDdh
MmY2OGMyMjg3ZjMxOGFhMDEuLjg1MDMwNmFjMTVlZDBhMThiYzhmMTdiNGYyYjdhNjRjMTBkZWQz
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNv
bnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVy
Q29udHJvbGxlci5tbQpAQCAtMzEsOSArMzEsOSBAQAogCiAjaW1wb3J0ICJBVktpdFNQSS5oIgog
I2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0ICJUaW1lUmFu
Z2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2lt
cG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9B
VlRpbWUuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaAppbmRleCAyMzMwMmZiZDFi
ZTY4NjdlOGZmZjVkOWE5NzQwNTYwNzhlOWNkZTY1Li5kNTBkMjI5ZWFkMTlmZjIwNTRmZjJlMjI2
ZTBlNTcxN2U5ZTE0YjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApAQCAtMjMsMTcg
KzIzLDE1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLQotI2lmbmRlZiBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdF9oCi0jZGVmaW5lIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0X2gKKyNwcmFnbWEgb25jZQogCiAjaWYgUExBVEZPUk0oSU9TKQogCiAjaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2lu
Y2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgog
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTUyLDI2ICs1MCwyNiBAQCBjbGFzcyBTdHJpbmc7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsOwogY2xhc3MgV2ViUGxheWJhY2tT
ZXNzaW9uQ2hhbmdlT2JzZXJ2ZXI7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Ci0gICAgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAs
IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiB7Citj
bGFzcyBXRUJDT1JFX0VYUE9SVCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdAorICAgIDog
cHVibGljIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgICwgcHVibGljIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdD4gewogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2Rl
bCkKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBjcmVhdGUo
UGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQobW9kZWwpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQobW9k
ZWwpKTsKICAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQoKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9CisgICAgdmlydHVh
bCB+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25N
b2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vz
c2lvbk1vZGVsOyB9CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAv
LyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0
TWVkaWFTdGF0ZSgpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSkgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBidWZmZXJlZFRp
bWVDaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CkBAIC04MCw3ICs3OCw3IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgb3Zl
cnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5h
YmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
LCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CiAKQEAg
LTg5LDE0ICs4NywxMyBAQCBwdWJsaWM6CiAgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5
ZXJDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOyB9
CiAKIHByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOworICAgIFdFQkNPUkVfRVhQT1JU
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbk1vZGVsJik7CiAK
ICAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7
Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBu
dWxscHRyIH07CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9k
ZWwgeyBudWxscHRyIH07CiB9OwogCiB9CiAKICNlbmRpZgogCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5tbQppbmRleCAyN2QxNmRiMWVmNGRkZmEzZWZiMDUzZWUwZjg1MGI5NTli
ZmUyYjM3Li45NWJhOTA1YTcwMTk0OTY1NzczMTdiMTBkNTMwMDI3ZmMxYzUxNTEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCkBAIC0yNSw3ICsyNSw3IEBACiAKIAogI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgor
I2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKIAogI2lmIFBMQVRGT1JN
KElPUykKICNpZiBIQVZFKEFWS0lUKQpAQCAtMzMsOSArMzMsOSBAQAogI2ltcG9ydCAiQVZLaXRT
UEkuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9u
LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCAiVGltZVJhbmdl
cy5oIgogI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAt
NDgsNyArNDgsNyBAQCBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1p
bmcpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsJiBtb2RlbCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCiAgICAgOiBt
X3BsYXllckNvbnRyb2xsZXIoYWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10g
aW5pdF0pKQogICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCiB7CkBAIC02OCw3
ICs2OCw3IEBAIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1NlCiAgICAgd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKG1vZGVsLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkp
OwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6fldlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0KCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKQogewogICAgIFttX3BsYXllckNvbnRyb2xsZXIg
c2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOm51bGxwdHJdOwogICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0RXh0ZXJuYWxQbGF5YmFja0FjdGl2ZTpmYWxzZV07CkBAIC03NiwxMiArNzYsMTIg
QEAgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6On5XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdCgpCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0OjpyZXNldE1lZGlhU3RhdGUoKQordm9pZCBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6cmVzZXRNZWRpYVN0YXRlKCkKIHsKICAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHJlc2V0TWVkaWFTdGF0ZV07CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit2b2lkIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0
aW9uKQogewogICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1f
cGxheWVyQ29udHJvbGxlci5nZXQoKTsKIApAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9u
KQogICAgIHBsYXllckNvbnRyb2xsZXIuc3RhdHVzID0gQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVz
UmVhZHlUb1BsYXk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1l
KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3VycmVudFRpbWVDaGFuZ2Vk
KGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7CiAgICAgTlNUaW1lSW50
ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4g
OiBhbmNob3JUaW1lOwogICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGlt
aW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQpAQCAtMTA2
LDcgKzEwNiw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmN1cnJl
bnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvCiAgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRUaW1pbmc6dGltaW5nXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQordm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3Vi
bGUgYnVmZmVyZWRUaW1lKQogewogICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29u
dHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKICAgICBkb3VibGUgZHVyYXRpb24g
PSBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbjsKQEAgLTExOCwxMiArMTE4LDEyIEBA
IHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5n
ZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKICAgICBwbGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVS
YW5nZXMgPSBAW0AwLCBAKG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUpXTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcs
IGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAg
W21fcGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAu
XTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVS
YW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9k
aWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMm
IHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKQogewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gc2Vla2FibGVSYW5nZXMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAtMTQwLDcgKzE0
MCw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0CiAgICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRMaXZlVXBkYXRlSW50ZXJ2YWw6bGl2ZVVwZGF0ZUludGVydmFsXTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChi
b29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCiB7
CiAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RS
ZXZlcnNlXTsKIH0KQEAgLTE1Niw3ICsxNTYsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aQog
ICAgIHJldHVybiB3ZWJPcHRpb25zOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKICAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMu
Z2V0KCldOwpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWCiAgICAg
ICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxl
Y3RlZEluZGV4KV1dOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdl
Yk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CiAgICAgW21fcGxheWVy
Q29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0
KCldOwpAQCAtMTcyLDEyICsxNzIsMTIgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QKICAgICAg
ICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2Vs
ZWN0ZWRJbmRleCldXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgY29uc3QgU3Ry
aW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgY29uc3QgU3Ry
aW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKQogewogICAgIEFWUGxheWVyQ29udHJvbGxlckV4dGVy
bmFsUGxheWJhY2tUeXBlIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVy
RXh0ZXJuYWxQbGF5YmFja1R5cGVOb25lOwotICAgIGlmICh0YXJnZXRUeXBlID09IFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSkKKyAgICBpZiAodGFyZ2V0VHlwZSA9
PSBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCiAgICAgICAgIGV4dGVy
bmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVB
aXJQbGF5OwotICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OlRhcmdldFR5cGVUVk91dCkKKyAgICBlbHNlIGlmICh0YXJnZXRUeXBlID09IFBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQpCiAgICAgICAgIGV4dGVybmFsUGxheWJhY2tU
eXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKIAogICAg
IFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJv
bGxlci5nZXQoKTsKQEAgLTE4NiwxNyArMTg2LDE3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2Vi
CiAgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQo
Ym9vbCBkaXNhYmxlZCkKIHsKICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEFsbG93c0V4dGVy
bmFsUGxheWJhY2s6IWRpc2FibGVkXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKIHsKICAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldE11dGVkOm11dGVkXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9k
ZWwpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCmluZGV4
IGIwNjAxMTg5NzZjYjBiNDBhMjkxMzZlM2VmYzA0NzY4NTA4MDZmNzQuLmU0NTU2NjAxYWE1NjY3
NjQ2MjNkZTZiNGU5MWFmMWQyZThjMjYzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktp
dC5tbQpAQCAtMzEsMTMgKzMxLDEzIEBACiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQg
Ik1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIK
ICNpbXBvcnQgIlF1YXJ0ekNvcmVTUEkuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
IgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+
CiAjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+
CkBAIC05MiwyNCArOTIsMjQgQEAgc3RhdGljIEludFJlY3QgZWxlbWVudFJlY3RJbldpbmRvdyhI
VE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiAgICAgcmV0dXJuIHZpZXctPmNvbnZlcnRU
b0NvbnRhaW5pbmdXaW5kb3cocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwog
fQogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDsKK2NsYXNzIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OwogCiBAaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgKGRlbGVnYXRlKQotLSh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0OworLSh2b2lkKWRp
ZEZpbmlzaEZ1bGxzY3JlZW46KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250
ZXh0OwogQGVuZAogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCBm
aW5hbAotICAgIDogcHJpdmF0ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgICwgcHJpdmF0
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgICwgcHJpdmF0ZSBXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgotICAgICwgcHJpdmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbAotICAgICwgcHJpdmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwg
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiB7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCBmaW5hbAor
ICAgIDogcHJpdmF0ZSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgICwgcHJpdmF0ZSBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudAorICAgICwgcHJpdmF0ZSBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcgorICAgICwgcHJpdmF0ZSBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgICwgcHJpdmF0
ZSBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiB7CiAKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBjcmVhdGUo
KQorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IGNyZWF0
ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KTsKICAgICB9CiAKICAgICB2b2lkIHNldENvbnRy
b2xsZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOyB9CkBAIC0xMTksMjIgKzExOSwyMiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbnZhbGlkYXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQoKSB7IH0KKyAgICBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dCgpIHsgfQogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICAv
LyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgogICAgIHZvaWQgZGlkU2V0dXBGdWxsc2Ny
ZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZSB7
IH0KICAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRD
bGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKCkgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudAorICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CiAgICAgdm9pZCBoYXNWaWRl
b0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwKLSAgICB2b2lkIGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50Jikgb3ZlcnJpZGU7CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICB2b2lk
IGFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZv
aWQgcmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOwogICAg
IHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgb3ZlcnJpZGU7CkBAIC0xNzAsNyArMTcwLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHRvZ2dsZU11dGVkKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRNdXRl
ZChib29sKSBmaW5hbDsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Cisg
ICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdl
ZChkb3VibGUpIG92ZXJyaWRlOwogICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBj
dXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgYnVmZmVy
ZWRUaW1lQ2hhbmdlZChkb3VibGUpIG92ZXJyaWRlOwpAQCAtMTc5LDM5ICsxNzksMzkgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworICAg
IHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9v
bCkgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgIHZvaWQg
YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCByZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlk
ZTsKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50KFZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVDbGllbnQo
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlcXVlc3RG
dWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUs
IGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRW
aWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZp
ZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKICAgICBi
b29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25z
dCBvdmVycmlkZTsKICAgICBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBpc011dGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBIYXNoU2V0PFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9wbGF5YmFja0NsaWVudHM7Ci0gICAgSGFz
aFNldDxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1fZnVsbHNjcmVlbkNsaWVudHM7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBtX2ludGVyZmFj
ZTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1fZnVs
bHNjcmVlbk1vZGVsOwotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudD4gbV9wbGF5YmFja01vZGVsOworICAgIEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQqPiBtX3BsYXliYWNrQ2xpZW50czsKKyAgICBIYXNoU2V0PFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50Kj4gbV9mdWxsc2NyZWVuQ2xpZW50czsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IG1faW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudD4gbV9mdWxsc2NyZWVuTW9kZWw7CisgICAgUmVmUHRyPFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtX3BsYXliYWNrTW9kZWw7CiAgICAgUmVmUHRy
PEhUTUxWaWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVtZW50OwogICAgIFJldGFpblB0cjxVSVZpZXc+
IG1fdmlkZW9GdWxsc2NyZWVuVmlldzsKICAgICBSZXRhaW5QdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlcj4gbV9jb250cm9sbGVyOwogfTsKIAotI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyCisjcHJhZ21hIG1hcmsgVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlk
U2V0dXBGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmRpZFNldHVwRnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAg
UmV0YWluUHRyPENBTGF5ZXI+IHZpZGVvRnVsbHNjcmVlbkxheWVyID0gW21fdmlkZW9GdWxsc2Ny
ZWVuVmlldyBsYXllcl07Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4o
W3Byb3RlY3RlZFRoaXMsIHRoaXMsIHZpZGVvRnVsbHNjcmVlbkxheWVyXSB7CiAgICAgICAgIFt2
aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJD
b3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQpXTsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNl
dFZpZGVvRnVsbHNjcmVlbkxheWVyKHZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBbcHJvdGVj
dGVkVGhpcywgdGhpc10gewpAQCAtMjIyLDEwICsyMjIsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxz
Y3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1
bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAg
IG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0
ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewpAQCAtMjM1LDE1ICsyMzUsMTUg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxz
Y3JlZW4oKQogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7Ci0gICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51
bGxwdHIpOwotICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcihudWxscHRyKTsKKyAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwo
bnVsbHB0cik7CisgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKG51bGxwdHIpOwogICAgIG1faW50ZXJmYWNlID0gbnVsbHB0cjsKICAgICBtX3ZpZGVvRnVs
bHNjcmVlblZpZXcgPSBuaWw7CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVh
ZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+
c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwt
PnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKQEAgLTI1NiwxMCArMjU2LDEwIEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCiB7CiAgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4o
W3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgSW50UmVjdCBjbGllbnRSZWN0ID0gZWxl
bWVudFJlY3RJbldpbmRvdyhtX3ZpZGVvRWxlbWVudC5nZXQoKSk7CiAgICAgICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBj
bGllbnRSZWN0XSB7CkBAIC0yNjgsMTIgKzI2OCwxMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQogICAgIH0p
OwogfQogCi0jcHJhZ21hIG1hcmsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyNwcmFn
bWEgbWFyayBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRv
dWJsZSBkdXJhdGlvbikKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBkdXJhdGlvbl0gewogICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKICAgICAgICAgfSk7
CkBAIC0yODQsMTAgKzI4NCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogICAgICAgICBjbGllbnQt
PmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUs
IGRvdWJsZSBhbmNob3JUaW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRp
bWUpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgY3VycmVudFRpbWUsIGFuY2hvclRpbWVdIHsKICAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5j
aG9yVGltZSk7CiAgICAgICAgIH0pOwpAQCAtMjk4LDEwICsyOTgsMTAgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBj
dXJyZW50VGltZSwKICAgICAgICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRp
bWUsIGFuY2hvclRpbWUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSBidWZmZXJlZFRpbWUpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgYnVmZmVyZWRUaW1lXSB7CiAgICAg
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7
CiAgICAgICAgIH0pOwpAQCAtMzEyLDEwICszMTIsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRU
aW0KICAgICAgICAgY2xpZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2Vk
KGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxh
eWJhY2tSYXRlKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGlzUGxheWluZywgcGxheWJhY2tSYXRlXSB7
CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXli
YWNrUmF0ZSk7CiAgICAgICAgIH0pOwpAQCAtMzI2LDEwICszMjYsMTAgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcs
IGZsb2F0IHBsYXkKICAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXli
YWNrUmF0ZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCiB7CiAgICAgaWYg
KFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwog
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgaGFzVmlkZW9dIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmhhc1ZpZGVv
Q2hhbmdlZChoYXNWaWRlbyk7CiAgICAgICAgIH0pOwpAQCAtMzQwLDEwICszNDAsMTAgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJv
b2wgaGFzVmlkZW8pCiAgICAgICAgIGNsaWVudC0+aGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9EaW1l
bnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3Vy
cmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9E
aW1lbnNpb25zID0gdmlkZW9EaW1lbnNpb25zXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7CiAgICAgICAgIH0pOwpA
QCAtMzU0LDEwICszNTQsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUKICAgICAgICAgY2xp
ZW50LT52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwg
ZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFu
Z2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkK
IHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
ICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtwcm90ZWN0ZWRUaGlzLCBwbGF0Zm9ybVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdl
cygpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWxdIHsKICAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChUaW1lUmFuZ2VzOjpjcmVhdGUo
cGxhdGZvcm1UaW1lUmFuZ2VzKSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFs
KTsKICAgICAgICAgfSk7CkBAIC0zNjgsMTAgKzM2OCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJh
bmdlcwogICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBs
YXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJv
b2wgY2FuUGxheUZhc3RSZXZlcnNlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkK
IHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
ICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtwcm90ZWN0ZWRUaGlzLCBjYW5QbGF5RmFzdFJldmVyc2VdIHsKICAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNl
KTsKICAgICAgICAgfSk7CkBAIC0zOTEsMTAgKzM5MSwxMCBAQCBzdGF0aWMgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBpc29sYXRlZENvcHkoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aQogICAgIHJldHVybiBvcHRpb25zQ29weTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBpZiAoV2ViVGhy
ZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlz
LCBvcHRpb25zID0gaXNvbGF0ZWRDb3B5KG9wdGlvbnMpLCBzZWxlY3RlZEluZGV4XSB7CiAgICAg
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
b3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiAgICAgICAgIH0pOwpAQCAtNDA1LDEwICs0MDUsMTAg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnMKICAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3Byb3RlY3RlZFRoaXMsIG9wdGlvbnMgPSBpc29sYXRlZENvcHkob3B0aW9ucyksIHNl
bGVjdGVkSW5kZXhdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogICAgICAgICB9
KTsKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjbwogICAgICAgICBj
bGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVj
dGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxv
Y2FsaXplZERldmljZU5hbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2Fs
aXplZERldmljZU5hbWUpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7CiAgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGhp
cywgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZERldmljZU5h
bWUuaXNvbGF0ZWRDb3B5KCldIHsKQEAgLTQzMywxMCArNDMzLDEwIEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wg
ZW5hYmxlZCwKICAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVk
LCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2Vk
KGJvb2wgZGlzYWJsZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKIHsKICAg
ICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtw
cm90ZWN0ZWRUaGlzLCBkaXNhYmxlZF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+d2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKTsKICAgICAgICAgfSk7
CkBAIC00NDcsMTAgKzQ0NywxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYgogICAgICAgICBj
bGllbnQtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdl
ZChib29sIG11dGVkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0
ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgbXV0ZWRdIHsKICAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm11dGVkQ2hhbmdlZChtdXRlZCk7CiAgICAgICAgIH0pOwpA
QCAtNDYxLDM0ICs0NjEsMzQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCiAgICAgICAgIGNsaWVudC0+bXV0ZWRDaGFu
Z2VkKG11dGVkKTsKIH0KIAotI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCisj
cHJhZ21hIG1hcmsgVmlkZW9GdWxsc2NyZWVuTW9kZWwKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xp
ZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRD
bGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQo
IW1fZnVsbHNjcmVlbkNsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fZnVsbHNjcmVl
bkNsaWVudHMuYWRkKCZjbGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQm
IGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNs
aWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCht
X2Z1bGxzY3JlZW5DbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2Z1bGxzY3JlZW5D
bGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZp
bmlzaGVkV2l0aE1lZGlhKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBtb2Rl
LCBmaW5pc2hlZFdpdGhNZWRpYV0gewogICAgICAgICBpZiAobV9mdWxsc2NyZWVuTW9kZWwpCiAg
ICAgICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1vZGUs
IGZpbmlzaGVkV2l0aE1lZGlhKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFt
ZShGbG9hdFJlY3QgZnJhbWUpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gdmlkZW9GdWxsc2NyZWVuTGF5
ZXIgPSBbbV92aWRlb0Z1bGxzY3JlZW5WaWV3IGxheWVyXTsKICAgICAKICAgICBbdmlkZW9GdWxs
c2NyZWVuTGF5ZXIgc2V0U3VibGF5ZXJUcmFuc2Zvcm06W3ZpZGVvRnVsbHNjcmVlbkxheWVyIHRy
YW5zZm9ybV1dOwpAQCAtNTA4LDEwNSArNTA4LDEwNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IGZyYW1lKQog
ICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5
IHZpZGVvR3Jhdml0eSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlk
ZW9HcmF2aXR5KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB2aWRlb0dyYXZp
dHldIHsKICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbk1vZGVsKQogICAgICAgICAgICAgbV9mdWxs
c2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJHcmF2aXR5KHZpZGVvR3Jhdml0eSk7CiAgICAgfSk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwog
ICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgbW9kZV0gewogICAgICAgICBp
ZiAobV9mdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+ZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKG1vZGUpOwogICAgIH0pOwogfQogCi1ib29sIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAorYm9vbCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1bGxz
Y3JlZW5Nb2RlbC0+aXNWaXNpYmxlKCkgOiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVl
bk1vZGVsLT5oYXNWaWRlbygpIDogZmFsc2U7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmlzTXV0ZWQoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6aXNNdXRlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+aXNN
dXRlZCgpIDogZmFsc2U7CiB9CiAKLUZsb2F0U2l6ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zKCkgY29uc3QKK0Zsb2F0U2l6ZSBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1
bGxzY3JlZW5Nb2RlbC0+dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKTsKIH0KIAotI3By
YWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKKyNwcmFnbWEgbWFyayAtIFBsYXli
YWNrU2Vzc2lvbk1vZGVsCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKCFtX3BsYXliYWNrQ2xpZW50
cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9wbGF5YmFja0NsaWVudHMuYWRkKCZjbGllbnQp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVD
bGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVChtX3BsYXliYWNrQ2xpZW50cy5jb250
YWlucygmY2xpZW50KSk7CiAgICAgbV9wbGF5YmFja0NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkoKQogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAg
ICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnBsYXkoKTsKICAgICB9KTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGF1c2UoKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGF1c2UoKQogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0
ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAg
ICBtX3BsYXliYWNrTW9kZWwtPnBhdXNlKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQogewogICAgIEFT
U0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFk
UnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwp
CiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnRvZ2dsZVBsYXlTdGF0ZSgpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVN
dXRlZCgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVNdXRl
ZCgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1f
cGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+dG9nZ2xlTXV0ZWQo
KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlzKSwgdGhp
cywgbXV0ZWRdIHsKQEAgLTYxNSwxNTEgKzYxNSwxNTEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmco
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmco
KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3Bs
YXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2NydWJiaW5n
KCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmVuZFNjcnViYmluZygpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjplbmRTY3J1YmJpbmcoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAg
ICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwt
PmVuZFNjcnViYmluZygpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVh
ZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgdGltZV0gewogICAgICAgICBpZiAobV9wbGF5YmFj
a01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWVrVG9UaW1lKHRpbWUpOwog
ICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpm
YXN0U2Vlayhkb3VibGUgdGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0
aGlzLCB0aW1lXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBt
X3BsYXliYWNrTW9kZWwtPmZhc3RTZWVrKHRpbWUpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2Fy
ZCgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1f
cGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+YmVnaW5TY2Fubmlu
Z0ZvcndhcmQoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7CiAgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4o
W3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAg
ICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+YmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7CiAgICAg
fSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNj
YW5uaW5nKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5u
aW5nKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAo
bV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5lbmRTY2Fubmlu
ZygpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRf
dCBpbmRleCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgaW5kZXhdIHsKICAg
ICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1
aW50NjRfdCBpbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJv
dGVjdGVkVGhpcywgdGhpcywgaW5kZXhdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkK
ICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGlu
ZGV4KTsKICAgICB9KTsKIH0KIAotZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpkdXJhdGlvbigpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmR1cmF0aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
ICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5kdXJhdGlvbigp
IDogMDsKIH0KIAotZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmN1cnJlbnRUaW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAg
ICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5jdXJyZW50VGltZSgp
IDogMDsKIH0KIAotZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpi
dWZmZXJlZFRpbWUoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpidWZmZXJlZFRpbWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwog
ICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmJ1ZmZlcmVkVGlt
ZSgpIDogMDsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
aXNQbGF5aW5nKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmlzUGxheWluZygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0
dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+aXNQbGF5aW5nKCkgOiBmYWxz
ZTsKIH0KIAotZmxvYXQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXli
YWNrUmF0ZSgpIGNvbnN0CitmbG9hdCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
cGxheWJhY2tSYXRlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBy
ZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5wbGF5YmFja1JhdGUoKSA6
IDA7CiB9CiAKLVJlZjxUaW1lUmFuZ2VzPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAorUmVmPFRpbWVSYW5nZXM+IFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJh
Y2tNb2RlbC0+c2Vla2FibGVSYW5nZXMoKSA6IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogfQogCi1k
b3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJh
bmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVs
ID8gbV9wbGF5YmFja01vZGVsLT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkg
OiAwOwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxp
dmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+
bGl2ZVVwZGF0ZUludGVydmFsKCkgOiAwOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAorYm9vbCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8g
bV9wbGF5YmFja01vZGVsLT5jYW5QbGF5RmFzdFJldmVyc2UoKSA6IGZhbHNlOwogfQogCi1WZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CitWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAg
ICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKQEAgLTc2NywxMyArNzY3LDEzIEBAIFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1
ZGlvTWVkaWFTZWxlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdWludDY0X3QgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QK
K3VpbnQ2NF90IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2Vs
ZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0
dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGVk
SW5kZXgoKSA6IC0xOwogfQogCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
KCkgY29uc3QKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAogewog
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCkBAIC03
ODEsMzEgKzc4MSwzMSBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZQogICAgIHJldHVybiB7IH07
CiB9CiAKLXVpbnQ2NF90IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdp
YmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKK3VpbnQ2NF90IFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9w
bGF5YmFja01vZGVsLT5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgOiAtMTsKIH0KIAotYm9v
bCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0Vu
YWJsZWQoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFs
UGxheWJhY2tFbmFibGVkKCkgOiBmYWxzZTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CitQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5
YmFja01vZGVsLT5leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIDogVGFyZ2V0VHlwZU5vbmU7
CiB9CiAKLVN0cmluZyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJu
YWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdAorU3RyaW5nIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFt
ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxh
eWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERl
dmljZU5hbWUoKSA6IFN0cmluZygpOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0Citib29s
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJu
IG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+d2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQoKSA6IHRydWU7CkBAIC04MTMsMTYgKzgxMywxNiBAQCBib29sIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgp
IGNvbnN0CiAKICNwcmFnbWEgbWFyayBPdGhlcgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9F
bGVtZW50LCBVSVZpZXcgKnZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgVUlWaWV3ICp2aWV3
LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFJldGFpblB0cjxVSVZpZXc+IHZpZXdSZWYg
PSB2aWV3OwogICAgIG1fdmlkZW9FbGVtZW50ID0gJnZpZGVvRWxlbWVudDsKLSAgICBtX3BsYXli
YWNrTW9kZWwgPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7
CisgICAgbV9wbGF5YmFja01vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmNyZWF0ZSgpOwogICAgIG1fcGxheWJhY2tNb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBt
X3BsYXliYWNrTW9kZWwtPnNldE1lZGlhRWxlbWVudChtX3ZpZGVvRWxlbWVudC5nZXQoKSk7CiAK
LSAgICBtX2Z1bGxzY3JlZW5Nb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpjcmVhdGUoKTsKKyAgICBtX2Z1bGxzY3JlZW5Nb2RlbCA9IFZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsKICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xp
ZW50KCp0aGlzKTsKICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9FbGVtZW50KG1fdmlk
ZW9FbGVtZW50LmdldCgpKTsKIApAQCAtODMyLDE1ICs4MzIsMTUgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1l
bnQmIHZpZGUKICAgICBGbG9hdFJlY3QgdmlkZW9MYXllckZyYW1lID0gRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgdmlkZW9FbGVtZW50Q2xpZW50UmVjdC5zaXplKCkpOwogICAgIG1fZnVsbHNjcmVl
bk1vZGVsLT5zZXRWaWRlb0xheWVyRnJhbWUodmlkZW9MYXllckZyYW1lKTsKIAotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIHZpZGVvRWxlbWVudENsaWVudFJlY3QsIHZpZXdSZWYs
IG1vZGUsIGFsbG93c1BpY3R1cmVJblBpY3R1cmVdIHsKICAgICAgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7CiAKLSAgICAgICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBz
ZXNzaW9uSW50ZXJmYWNlID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNyZWF0
ZSgqdGhpcyk7Ci0gICAgICAgIG1faW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmNyZWF0ZShzZXNzaW9uSW50ZXJmYWNlLmdldCgpKTsKLSAgICAgICAgbV9pbnRl
cmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOwotICAgICAg
ICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwodGhpcyk7Ci0gICAgICAg
IG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsK
KyAgICAgICAgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBzZXNzaW9uSW50ZXJm
YWNlID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZSgqdGhpcyk7CisgICAg
ICAgIG1faW50ZXJmYWNlID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZShz
ZXNzaW9uSW50ZXJmYWNlLmdldCgpKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0Vmlk
ZW9GdWxsc2NyZWVuTW9kZWwodGhpcyk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKIAogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
blZpZXcgPSBhZG9wdE5TKFthbGxvY1VJVmlld0luc3RhbmNlKCkgaW5pdF0pOwogICAgICAgICAK
QEAgLTg0OCwyNSArODQ4LDI1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnNldFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlCiAgICAgfSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2Ny
ZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2Ny
ZWVuKCkKIHsKICAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwgaXNNYWluVGhyZWFk
KCkpOwogICAgIEludFJlY3QgY2xpZW50UmVjdCA9IGVsZW1lbnRSZWN0SW5XaW5kb3cobV92aWRl
b0VsZW1lbnQuZ2V0KCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNsaWVu
dFJlY3RdIHsKICAgICAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgICAgIG1faW50ZXJm
YWNlLT5leGl0RnVsbHNjcmVlbihjbGllbnRSZWN0KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNj
cmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBt
X2ludGVyZmFjZS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwogfQogCiBAaW1wbGVt
ZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciB7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBfY29udGV4dDsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IF9jb250ZXh0OwogICAgIFJlZlB0cjxIVE1M
VmlkZW9FbGVtZW50PiBfdmlkZW9FbGVtZW50OwogfQogCkBAIC04OTEsNyArODkxLDcgQEAgLSAo
SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjoo
VUlWaWV3ICopdmlldyBtb2RlOihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUpbW9kZQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgX2NvbnRleHQg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3JlYXRlKCk7CisgICAgX2Nv
bnRleHQgPSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3JlYXRlKCk7CiAgICAg
X2NvbnRleHQtPnNldENvbnRyb2xsZXIoc2VsZik7CiAgICAgX2NvbnRleHQtPnNldFVwRnVsbHNj
cmVlbigqX3ZpZGVvRWxlbWVudC5nZXQoKSwgdmlldywgbW9kZSk7CiB9CkBAIC05MDksNyArOTA5
LDcgQEAgLSAodm9pZClyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuCiAgICAgICAgIF9jb250
ZXh0LT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKLS0gKHZvaWQpZGlkRmlu
aXNoRnVsbHNjcmVlbjooV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRl
eHQKKy0gKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjooVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQqKWNvbnRleHQKIHsKICAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwog
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dCA9PSBfY29udGV4dCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oCmluZGV4IDk4YjRkYmRjYzhiMGRlYmE5YzgwMjgwMjM0NDVjODc0
ZGExMWY3NDQuLjEyNzcxMDNjMzQxMWE5MzA5YzhmYzUyNDkzNjViZjA1ODUxNDY1YjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCkBAIC0yNCwxNiArMjQsMTUgQEAKICAqLwogCiAKLSNp
Zm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXRfaAotI2RlZmluZSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIFBMQVRGT1JN
KElPUykKIAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50RW51bXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmgi
CisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNpbmNsdWRlIDxvYmpjL29iamMu
aD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgpAQCAtNTgsMjcgKzU3LDI3IEBAIGNsYXNzIFN0cmluZzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEludFJlY3Q7CiBjbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOworY2xhc3Mg
VmlkZW9GdWxsc2NyZWVuTW9kZWw7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cjsKICAgICAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0IGZpbmFsCi0gICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQK
LSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBmaW5h
bAorICAgIDogcHVibGljIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMg
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gewogCiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Jik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9CisgICAgc3RhdGljIFJlZjxW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Jik7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVv
RnVsbHNjcmVlbk1vZGVsKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOworICAg
IFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9
CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIC8vIFZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5n
ZWQoYm9vbCkgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFs
OworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXZpY2VOYW1lKSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiwgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmll
dyAqLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7CkBAIC05Niw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQKICAgICB9OwogCi0gICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsg
fQorICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWw7IH0KICAgICBib29sIHNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJl
YXNvbihFeGl0RnVsbFNjcmVlblJlYXNvbik7CiAgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBi
b29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fYWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOyB9CkBAIC0xMTgsMTggKzExNywxOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Jik7CiAgICAgdm9pZCBiZWdpblNlc3Npb24oKTsKICAgICB2b2lkIGVudGVyUGljdHVyZUluUGlj
dHVyZSgpOwogICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKICAgICB2b2lkIHdh
dGNoZG9nVGltZXJGaXJlZCgpOwogICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29u
dHJvbGxlcigpIGNvbnN0OwogCi0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogICAgIFJldGFpblB0
cjxXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IG1fcGxheWVyVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZTsKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5
ZXJWaWV3Q29udHJvbGxlcjsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlciogbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CisgICAgVmlk
ZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Cisg
ICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyIHsgbnVsbHB0ciB9OwogCiAgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCB3aGVuIGZ1bGxz
Y3JlZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2luZG93LgogICAgIFJldGFpblB0cjxV
SVdpbmRvdz4gbV93aW5kb3c7CkBAIC0xMzksNyArMTM4LDcgQEAgcHJvdGVjdGVkOgogICAgIFJl
dGFpblB0cjxXZWJBVlBsYXllckxheWVyVmlldz4gbV9wbGF5ZXJMYXllclZpZXc7CiAgICAgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKICAgICBXVEY6OkZ1bmN0
aW9uPHZvaWQoYm9vbCk+IG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2s7Ci0gICAgUnVuTG9vcDo6
VGltZXI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1fd2F0Y2hkb2dUaW1lcjsK
KyAgICBSdW5Mb29wOjpUaW1lcjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV93YXRj
aGRvZ1RpbWVyOwogICAgIGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1f
ZXhpdENvbXBsZXRlZCB7IGZhbHNlIH07CkBAIC0xNTYsNCArMTU1LDMgQEAgcHJvdGVjdGVkOgog
CiAjZW5kaWYKIAotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggNzZm
ZmZjMjAwNDhkYmU0M2JkYjU0ODE3ODY4YjJjYTM3Mjc3YzYzZS4uMjVlY2U2MzY2MDhlMTRhYjY5
YjYzMDYxNWZmZjBiNTYwMGIwYWY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpA
QCAtMjMsMjUgKzIzLDIzIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLQogI2ltcG9ydCAiY29u
ZmlnLmgiCiAKICNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oIgogCiAjaWYgSEFWRShBVktJVCkKIAogI2ltcG9ydCAiQVZLaXRTUEkuaCIKICNpbXBvcnQg
Ikdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgogI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNp
bXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIK
LSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5o
PgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KICNpbXBvcnQgPG9iamMvbWVzc2FnZS5oPgpAQCAt
OTIsMTkgKzkwLDE5IEBAIHN0YXRpYyBjb25zdCBTZWNvbmRzIGRlZmF1bHRXYXRjaGRvZ1RpbWVy
SW50ZXJ2YWwgeyAxX3MgfTsKIEBjbGFzcyBXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uOwogCiBA
aW50ZXJmYWNlIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxB
VlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGVfV2ViS2l0T25seT4gewotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbkludGVy
ZmFjZTsKIH0KLUBwcm9wZXJ0eSAoYXNzaWduKSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsKIC0gKEJPT0wpcGxheWVy
Vmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJv
bGxlciBzaG91bGRFeGl0RnVsbFNjcmVlbldpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRyb2xs
ZXJFeGl0RnVsbFNjcmVlblJlYXNvbilyZWFzb247CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUKLS0gKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCistIChWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQogewogICAgIHJldHVybiBfZnVsbHNjcmVl
bkludGVyZmFjZS5nZXQoKTsKIH0KIAotLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQorLSAo
dm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dCopZnVsbHNjcmVlbkludGVyZmFjZQogewogICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVs
bHNjcmVlbkludGVyZmFjZTsKIH0KQEAgLTE0MCwxOSArMTM4LDE5IEBAIC0gKHZvaWQpcGxheWVy
Vmlld0NvbnRyb2xsZXJEaWRTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJv
bGxlciAqKXBsCiAgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdG9wUGljdHVyZUlu
UGljdHVyZSgpOwogfQogCi1zdGF0aWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OkV4aXRGdWxsU2NyZWVuUmVhc29uIGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKEFWUGxh
eWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCitzdGF0aWMgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uIGNvbnZlcnRU
b0V4aXRGdWxsU2NyZWVuUmVhc29uKEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVl
blJlYXNvbiByZWFzb24pCiB7CiAgICAgc3dpdGNoIChyZWFzb24pIHsKICAgICBjYXNlIEFWUGxh
eWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkRvbmVCdXR0b25UYXBwZWQ6Ci0g
ICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxT
Y3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQ7CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBw
ZWQ7CiAgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25G
dWxsU2NyZWVuQnV0dG9uVGFwcGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpGdWxsU2NyZWVuQnV0dG9uVGFw
cGVkOworICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRG
dWxsU2NyZWVuUmVhc29uOjpGdWxsU2NyZWVuQnV0dG9uVGFwcGVkOwogICAgIGNhc2UgQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGljdHVyZUluUGljdHVyZVN0YXJ0
ZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhp
dEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVkOworICAgICAgICByZXR1
cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQ
aWN0dXJlSW5QaWN0dXJlU3RhcnRlZDsKICAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJF
eGl0RnVsbFNjcmVlblJlYXNvblBpbmNoR2VzdHVyZUhhbmRsZWQ6Ci0gICAgICAgIHJldHVybiBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBp
bmNoR2VzdHVyZUhhbmRsZWQ7CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpbmNoR2VzdHVyZUhhbmRsZWQ7CiAgICAg
Y2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25SZW1vdGVDb250
cm9sU3RvcEV2ZW50UmVjZWl2ZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZl
bnRSZWNlaXZlZDsKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkOwog
ICAgIH0KIH0KIApAQCAtMTcyLDcgKzE3MCw3IEBAIEBlbmQKIEBpbnRlcmZhY2UgV2ViQVZQbGF5
ZXJMYXllciA6IENBTGF5ZXIKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIE5TU3RyaW5n
ICp2aWRlb0dyYXZpdHk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzUmVhZHlGb3JE
aXNwbGF5KSBCT09MIHJlYWR5Rm9yRGlzcGxheTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNl
OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
KSBBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXI7CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluKSBDQUxheWVyICp2aWRlb1N1YmxheWVyOwogQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHksIG51bGxhYmxlKSBOU0RpY3Rpb25hcnkgKnBpeGVsQnVmZmVyQXR0cmlidXRlczsK
QEAgLTE4MSw3ICsxNzksNyBAQCBAcHJvcGVydHkgQ0dSZWN0IG1vZGVsVmlkZW9MYXllckZyYW1l
OwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJMYXllciB7Ci0gICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50
ZXJmYWNlOwogICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IF9hdlBsYXllckNv
bnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IF92aWRlb1N1YmxheWVyOwogICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX3ZpZGVvR3Jhdml0eTsKQEAgLTIwNCwxMiArMjAyLDEyIEBAIC0g
KHZvaWQpZGVhbGxvYwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAotLSAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKKy0gKFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCiB7CiAgICAgcmV0dXJuIF9m
dWxsc2NyZWVuSW50ZXJmYWNlLmdldCgpOwogfQogCi0tICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRl
cmZhY2U6KFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJm
YWNlCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCiB7CiAgICAgX2Z1bGxzY3JlZW5JbnRlcmZh
Y2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOwogfQpAQCAtMjcyLDcgKzI3MCw3IEBAIC0gKHZvaWQp
bGF5b3V0U3VibGF5ZXJzCiAgICAgW3ZpZXcgc2V0VHJhbnNmb3JtOnRyYW5zZm9ybV07CiAgICAg
CiAgICAgTlNUaW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSBbQ0FUcmFuc2FjdGlvbiBh
bmltYXRpb25EdXJhdGlvbl07Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeIHsKICAgICAgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0
aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSBvYmplY3Q6bmls
XTsKIAogICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3Vu
ZHMpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6YW5pbWF0aW9uRHVyYXRpb24gKyAwLjFdOwpA
QCAtMzEyLDEzICszMTAsMTMgQEAgLSAodm9pZClzZXRWaWRlb0dyYXZpdHk6KE5TU3RyaW5nICop
dmlkZW9HcmF2aXR5CiAgICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9k
ZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5ID0gV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKICAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFW
TGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSkKLSAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6Oldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemU7CisgICAgICAgIGdyYXZp
dHkgPSBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplOwog
ICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dCgpKQotICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CiAgICAgZWxzZSBp
ZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxs
KCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6
OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOwogICAg
IGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgCkBAIC0zNjUsNyArMzYz
LDcgQEAgc3RhdGljIENsYXNzIGdldFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
d0NsYXNzKCkKIHsKICAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7CiAgICAgc3RhdGlj
IGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2Vu
LCBeeworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7CiAgICAgICAgIHRoZUNsYXNz
ID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihnZXRVSVZpZXdDbGFzcygpLCAiV2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3IiwgMCk7CiAgICAgICAgIG9iamNfcmVnaXN0ZXJDbGFz
c1BhaXIodGhlQ2xhc3MpOwogICAgICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFD
bGFzcygiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Iik7CkBAIC00NzEsNyAr
NDY5LDcgQEAgc3RhdGljIENsYXNzIGdldFdlYkFWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKQogewog
ICAgIHN0YXRpYyBDbGFzcyB0aGVDbGFzcyA9IG5pbDsKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25j
ZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgZGlz
cGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKICAgICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9j
YXRlQ2xhc3NQYWlyKGdldF9fQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpLCAiV2ViQVZQbGF5ZXJM
YXllclZpZXciLCAwKTsKICAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0
b3IoZGVhbGxvYyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYywgInZAOiIpOwog
ICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRQbGF5ZXJDb250
cm9sbGVyOiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxlciwg
InZAOkAiKTsKQEAgLTQ5MSwzNSArNDg5LDM1IEBAIHN0YXRpYyBDbGFzcyBnZXRXZWJBVlBsYXll
ckxheWVyVmlld0NsYXNzKCkKICAgICByZXR1cm4gdGhlQ2xhc3M7CiB9CiAKLVJlZjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKQorUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCiB7Ci0gICAgUmVmPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgIFJl
ZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5l
dyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Up
KTsKICAgICBbaW50ZXJmYWNlLT5tX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgc2V0RnVs
bHNjcmVlbkludGVyZmFjZTppbnRlcmZhY2UucHRyKCldOwogICAgIHJldHVybiBpbnRlcmZhY2U7
CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKQorVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBw
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCiAgICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCiAgICAgLCBtX3BsYXllclZpZXdDb250cm9sbGVy
RGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pKQotICAgICwgbV93YXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
JldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQpCisg
ICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCkKIHsKIH0KIAotV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dCgpCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6flZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0KCkKIHsKICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xs
ZXIgPSB0aGlzLT5wbGF5ZXJDb250cm9sbGVyKCk7CiAgICAgaWYgKHBsYXllckNvbnRyb2xsZXIg
JiYgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlKQotICAgICAgICBleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChmYWxzZSwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdl
dFR5cGVOb25lLCAiIik7CisgICAgICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGZhbHNlLCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUsICIiKTsKICAgICBpZiAobV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3Zl
Q2xpZW50KCp0aGlzKTsKIH0KIAotV2ViQVZQbGF5ZXJDb250cm9sbGVyICpXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6cGxheWVyQ29udHJvbGxlcigpIGNvbnN0CitXZWJBVlBsYXll
ckNvbnRyb2xsZXIgKlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwbGF5ZXJDb250cm9s
bGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBs
YXllckNvbnRyb2xsZXIoKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwq
IG1vZGVsKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9GdWxs
c2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQogewogICAgIGlmIChtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsKQogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1v
dmVDbGllbnQoKnRoaXMpOwpAQCAtNTMzLDE4ICs1MzEsMTggQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9G
dWxsc2MKICAgICB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwg
PyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6IEZsb2F0U2l6ZSgp
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0V2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIqIG9ic2VydmVyKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0Vmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogewogICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gb2JzZXJ2ZXI7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Omhhc1ZpZGVvQ2hh
bmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCiB7CiAgICAgW3BsYXllckNvbnRyb2xsZXIo
KSBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlkZW9dOwogICAgIFtwbGF5ZXJDb250cm9sbGVyKCkg
c2V0SGFzVmlkZW86aGFzVmlkZW9dOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9E
aW1lbnNpb25zKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6dmlkZW9EaW1l
bnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBX
ZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxh
eWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKIApAQCAtNTU4LDE0ICs1NTYsMTQgQEAgdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChj
b25zdCBGbG9hdFNpemUmIHYKICAgICBbcGlwVmlldyBzZXROZWVkc0xheW91dF07CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFu
Z2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCiB7
CiAgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEhpZGRlbjplbmFibGVkXTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3Rp
dmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRC
ZWNvbWVBY3RpdmUoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCVwKSIsIHRoaXMpOwor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxp
Y2F0aW9uRGlkQmVjb21lQWN0aXZlKCVwKSIsIHRoaXMpOwogICAgIGlmIChtX3Nob3VsZFJldHVy
blRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kICYmIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aXNWaXNpYmxlKCkpIHsKICAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwogICAgICAgICBy
ZXR1cm47CkBAIC01NzQsNyArNTcyLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQogICAgIC8vIElmIHdlIGFyZSBi
b3RoIGluIFBpUCBhbmQgaW4gRnVsbHNjcmVlbiAoaS5lLiwgdmlhIGF1dG8tUGlQKSwgYW5kIHdl
IGRpZCBub3Qgc3RvcCBmdWxsc2NyZWVuIHVwb24gcmV0dXJuaW5nLCBpdCBtdXN0IGJlCiAgICAg
Ly8gYmVjYXVzZSB0aGUgb3JpZ2luYXRpbmcgdmlldyBpcyBub3QgdmlzaWJsZSwgc28gaGlkZSB0
aGUgZnVsbHNjcmVlbiB3aW5kb3cuCiAgICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCB8IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKSB7Ci0gICAgICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFu
aW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwg
TlNFcnJvciopIHsKICAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAg
ICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKQEAg
LTU5MCwxMCArNTg4LDEwIEBAIEBpbnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAoKQogQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbiwgc2V0dGVyPV9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmll
bnRhdGlvbnM6KSBCT09MIF9pZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM7CiBAZW5kCiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihV
SVZpZXcmIHZpZGVvVmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJ
VmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKFVJVmlldyYgdmlkZW9W
aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3KiBwYXJlbnRW
aWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9v
bCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCiB7CiAgICAgQVNTRVJUKG1vZGUgIT0g
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxs
c2NyZWVuKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAogICAgIG1fYWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrID0gYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXli
YWNrOwogCkBAIC02NTksMTYgKzY1NywxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiB2aWRlb1ZpZXcsIGNvbnN0CiAKICAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10g
ewogICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCiAgICAgICAgICAgICBt
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7CiAgICAgfSk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNj
cmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3Jl
ZW4oKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhp
cyk7CiAKICAgICBtX2V4aXRDb21wbGV0ZWQgPSBmYWxzZTsKICAgICBtX2V4aXRSZXF1ZXN0ZWQg
PSBmYWxzZTsKQEAgLTY4Miw5ICs2ODAsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0
dXJlSW5QaWN0dXJlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVy
UGljdHVyZUluUGljdHVyZSgpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVy
UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKICAgICAKICAgICBpZiAoW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlUG9zc2libGVdKQogICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzdGFydFBpY3R1cmVJblBpY3R1cmVdOwpAQCAtNjkyLDEwICs2OTAs
MTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0dXJl
SW5QaWN0dXJlKCkKICAgICAgICAgZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVu
U3RhbmRhcmQoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxs
c2NyZWVuU3RhbmRhcmQoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCVwKSIsIHRoaXMpOwot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCglcCkiLCB0aGlzKTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAKICAgICBp
ZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlXSkgewog
ICAgICAgICAvLyBOT1RFOiBUaGUgZnVsbHNjcmVlbiBtb2RlIHdpbGwgYmUgcmVzdG9yZWQgaW4g
cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCkuCkBA
IC03MDYsNyArNzA0LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQogCiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
ZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOlt0aGlzLCBwcm90
ZWN0ZWRUaGlzXSAoQk9PTCBzdWNjZWVkZWQsIE5TRXJyb3IqKSB7CiAgICAgICAgIFVOVVNFRF9Q
QVJBTShzdWNjZWVkZWQpOwotICAgICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCAtIGxhbWJkYSglcCkg
LSBzdWNjZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0cmluZyhzdWNjZWVkZWQpKTsKKyAgICAgICAg
TE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxs
c2NyZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXApIC0gc3VjY2VlZGVkKCVzKSIsIHRoaXMsIGJvb2xT
dHJpbmcoc3VjY2VlZGVkKSk7CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNo
b3dzUGxheWJhY2tDb250cm9sczpZRVNdOwogCiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKQEAgLTcxNCw3ICs3MTIsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpCiAgICAgfV07CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsUmVjdCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsUmVj
dCkKIHsKICAgICBtX3dhdGNoZG9nVGltZXIuc3RvcCgpOwogCkBAIC03MjUsNyArNzIzLDcgQEAg
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwogICAgIAog
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBj
b252ZXJ0UmVjdDpmaW5hbFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
LnN1cGVydmlld107CkBAIC03NDAsMTQgKzczOCwxNCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBm
aQogICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKICAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwogICAgIH0gZWxzZSBpZiAoaXNNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1
cmUgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkp
IHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3Rl
ZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewogICAgICAgICAgICAgY2xlYXJNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKICAgICAg
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwogICAgICAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwogICAgICAgICB9XTsKICAgICB9IGVs
c2UgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVy
Oltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKICAgICAgICAgICAgIG1f
ZXhpdENvbXBsZXRlZCA9IHRydWU7CiAKQEAgLTc3Myw5ICs3NzEsOSBAQCBAaW50ZXJmYWNlIFVJ
V2luZG93ICgpCiAtIChVSUludGVyZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9yaWVudGF0aW9u
OwogQGVuZAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVw
RnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVw
RnVsbHNjcmVlbigpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3Jl
ZW4oJXApIiwgdGhpcyk7CiAgICAgaWYgKG1fd2luZG93KSB7CiAgICAgICAgIFttX3dpbmRvdyBz
ZXRIaWRkZW46WUVTXTsKICAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpu
aWxdOwpAQCAtODEwLDcgKzgwOCw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCkKICAgICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUo
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCiB7CiAg
ICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlciA9IG5pbDsKQEAgLTgxOCw3ICs4MTYsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKICAgICBjbGVhbnVwRnVsbHNjcmVlbigpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJl
cXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQogewogICAgIGlmICghbV9lbnRlclJlcXVlc3Rl
ZCkKICAgICAgICAgcmV0dXJuOwpAQCAtODI2LDIwICs4MjQsMjAgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCiAg
ICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4
aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oJXApIiwg
dGhpcyk7CiAKICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CiAgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwogCi0gICAgaWYgKHdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCkgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiAhbV9leGl0UmVxdWVz
dGVkKSB7Ci0gICAgICAgIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAg
aWYgKHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiAh
bV9leGl0UmVxdWVzdGVkKSB7CisgICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNl
KCk7CiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICB9
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9Jbmxp
bmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KQogewotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZSglcCkgLSB2aXNpYmxlKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJs
ZSkpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCkgLSB2aXNpYmxlKCVzKSIsIHRoaXMsIGJvb2xT
dHJpbmcodmlzaWJsZSkpOwogICAgIGlmIChtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7CiAg
ICAgICAgIAogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFtt
X3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKQEAgLTg0OSwzMyArODQ3LDMzIEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShi
b29sIHZpc2libGUsIGNvCiAgICAgfQogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNv
bnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5
U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFtwbGF5ZXJD
b250cm9sbGVyKCkgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJl
KCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3Jl
ZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2sp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQogewogICAgIG1f
cHJlcGFyZVRvSW5saW5lQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKICAgICBpZiAobV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCiAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJl
KCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxs
c2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBpY3R1cmVJ
blBpY3R1cmUoJXApIiwgdGhpcyk7CiAgICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVy
ZSgpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxs
c2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUlu
UGljdHVyZSglcCkiLCB0aGlzKTsKICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVy
RW50ZXJpbmdGb3JlZ3JvdW5kID0gW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGlj
dHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXTsKICAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKIAogICAgIGlmIChtX21v
ZGUgJiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkg
ewogICAgICAgICBpZiAoIVttX3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVX
YXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF0pIHsKLSAgICAgICAgICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKICAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxs
U2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlz
XSAoQk9PTCwgTlNFcnJvciopIHsKICAgICAgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVu
OllFU107CiAgICAgICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNl
dEhpZGRlbjpZRVNdOwpAQCAtODkwLDkgKzg4OCw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCiAgICAgICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBp
Y3R1cmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFy
dFBpY3R1cmVJblBpY3R1cmUoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIs
IHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwogICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwogCiAgICAg
aWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpKQpAQCAtOTA3LDEyICs5MDUsMTIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKQogICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKQog
ewogICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7
CiAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9
IGZhbHNlOwogCi0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhG
dWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVy
ZUluUGljdHVyZSglcCkiLCB0aGlzKTsKICAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2Ny
ZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApCiAgICAgICAgIHJldHVybjsKIApAQCAtOTIzLDkg
KzkyMSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9w
UGljdHVyZUluUGljdHVyZSgpCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVl
c3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlk
U3RvcFBpY3R1cmVJblBpY3R1cmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVw
KSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwogICAgIGlmIChoYXNN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB8
fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkgewogICAgICAg
ICAvLyBBU1NVTVBUSU9OOiB3ZSBhcmUgZXhpdGluZyBwaXAgYmVjYXVzZSB3ZSBhcmUgZW50ZXJp
bmcgZnVsbHNjcmVlbgogICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CkBAIC05NDQsOSArOTQyLDkgQEAg
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBp
Y3R1cmUoKQogICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxz
Y3JlZW4oKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJl
cGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQgKF5j
b21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCit2b2lkIFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlv
bkhhbmRsZXIodm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSkKIHsKLSAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVw
YXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoJXApIiwgdGhp
cyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIs
IHRoaXMpOwogICAgIGlmIChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1Bp
UCB8fCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kKSB7
CiAgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFs
c2U7CiAgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVn
cm91bmQgPSBmYWxzZTsKQEAgLTk2NSwxNiArOTYzLDE2IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21w
bGV0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFJldGFp
blB0cjxpZD4gc3Ryb25nQ29tcGxldGlvbkhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFu
ZGxlciBjb3B5XSk7CiAgICAgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFtwcm90ZWN0ZWRU
aGlzLCBzdHJvbmdDb21wbGV0aW9uSGFuZGxlcl0oYm9vbCByZXN0b3JlZCkgIHsKLSAgICAgICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFy
ZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyIGxhbWJkYSglcCkg
LSByZXN0b3JlZCglcykiLCBwcm90ZWN0ZWRUaGlzLmdldCgpLCBib29sU3RyaW5nKHJlc3RvcmVk
KSk7CisgICAgICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciBs
YW1iZGEoJXApIC0gcmVzdG9yZWQoJXMpIiwgcHJvdGVjdGVkVGhpcy5nZXQoKSwgYm9vbFN0cmlu
ZyhyZXN0b3JlZCkpOwogICAgICAgICB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVz
dG9yZWQpID0gc3Ryb25nQ29tcGxldGlvbkhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJlc3RvcmVkKTsKICAgICB9KTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCiti
b29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldp
dGhSZWFzb24oVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVh
c29uIHJlYXNvbikKIHsKICAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtOTg4LDggKzk4Niw4IEBAIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihXZWJWaWRlb0Z1
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICh3ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpICYmIChyZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25U
YXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3Rv
cEV2ZW50UmVjZWl2ZWQpKQotICAgICAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVz
ZSgpOworICAgIGlmIChwbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIChyZWFzb24gPT0gRXhpdEZ1
bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2Ny
ZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQpKQorICAgICAgICBwbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwogICAgIAogICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVOb25lLCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVC
dXR0b25UYXBwZWQpOwogCkBAIC05OTksMTUgKzk5NywxNSBAQCBib29sIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oV2ViVmlk
ZW9GdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCkK
K05PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OndhdGNoZG9nVGltZXJGaXJlZCgpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCVwKSAtIG5vIGV4
aXQgZnVsbHNjcmVlbiByZXNwb25zZSBpbiAlZ3M7IGZvcmNpbmcgZnVsbHNjcmVlbiBoaWRkZW4u
IiwgdGhpcywgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbC52YWx1ZSgpKTsKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVy
RmlyZWQoJXApIC0gbm8gZXhpdCBmdWxsc2NyZWVuIHJlc3BvbnNlIGluICVnczsgZm9yY2luZyBm
dWxsc2NyZWVuIGhpZGRlbi4iLCB0aGlzLCBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsLnZh
bHVlKCkpOwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIFttX3dpbmRvdyBzZXRIaWRk
ZW46WUVTXTsKICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllF
U107CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldE1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKICAgICBpZiAo
bV9tb2RlID09IG5ld01vZGUpCkBAIC0xMDE4LDcgKzEwMTYsNyBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxscwogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNo
YW5nZWQobV9tb2RlKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYg
fm1vZGU7CiAgICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaAppbmRleCA3
MDVkNjNiNDhhOTlhZWUxZTg5Mzk2NTYyNDAxMzIyNDNlNDcyYzRkLi43NjdmMDEyODczMDAwMWFi
NGQ3OWZlNjAzYzEyMjc3NGFmNzEzZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaApAQCAtMzAsNyArMzAs
NyBAQAogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM7CiBzdHJ1Y3QgTWVkaWFTZWxlY3Rpb25PcHRpb247CiB9CiAKQEAgLTU4LDEw
ICs1OCwxMCBAQCBXRUJDT1JFX0VYUE9SVAogICAgIGZsb2F0IF9yYXRlOwogICAgIEJPT0wgX2Nh
blRvZ2dsZVBsYXliYWNrOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYz4gX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBfcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOwogfQogCi1AcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjKiB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitA
cHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKiBw
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiBAcHJvcGVydHkgKHJlYWR3cml0ZSkgTlNUaW1l
SW50ZXJ2YWwgY29udGVudER1cmF0aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
cmVhZHdyaXRlKSBBVlZhbHVlVGltaW5nICp0aW1pbmc7CiBAcHJvcGVydHkgKG5vbmF0b21pYykg
TlNUaW1lSW50ZXJ2YWwgc2Vla1RvVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQppbmRleCA3YjQ0YTA3
NGRmMjk4MDYyZjgwNTNlOWViYzdkMzE0NTFlODJlNWU1Li5hYmJkYjUyNzcyMDcyNGFmZTU0NzMx
MTc0MDhiNDM3YTA5NDkyYWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCkBAIC0yOSw4ICsyOSw4IEBA
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpICYm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKIAogI2ltcG9ydCAiTWVkaWFT
ZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWwu
aCIKICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTU5LDggKzU5LDggQEAgQHN5bnRoZXNpemUgY2FuVG9nZ2xlUGljdHVyZUlu
UGljdHVyZTsKIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMt
PnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxwdHIpOworICAgIGlmIChfcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihudWxscHRyKTsKICAgICBbc3VwZXIgZGVhbGxv
Y107CiB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgLSAodm9pZClzZWVrVG9UaW1lOihOU1RpbWVJbnRl
cnZhbCl0aW1lIHRvbGVyYW5jZUJlZm9yZTooTlNUaW1lSW50ZXJ2YWwpdG9sZXJhbmMKIHsKICAg
ICBVTlVTRURfUEFSQU0odG9sZXJhbmNlQmVmb3JlKTsKICAgICBVTlVTRURfUEFSQU0odG9sZXJh
bmNlQWZ0ZXIpOwotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsKCktPnNlZWtUb1RpbWUodGltZSk7CisgICAgX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2Vla1RvVGltZSh0aW1lKTsK
IH0KIAogLSAodm9pZCljYW5jZWxUaHVtYm5haWxBbmRBdWRpb0FtcGxpdHVkZVNhbXBsZUdlbmVy
YXRpb24KQEAgLTEyNSwxMiArMTI1LDEyIEBAIC0gKEJPT0wpY2FuQmVnaW5Ub3VjaEJhclNjcnVi
YmluZwogCiAtICh2b2lkKWJlZ2luVG91Y2hCYXJTY3J1YmJpbmcKIHsKLSAgICBfd2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5iZWdpblNjcnViYmluZygpOworICAgIF9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMtPmJlZ2luU2NydWJiaW5nKCk7CiB9CiAKIC0gKHZvaWQpZW5kVG91
Y2hCYXJTY3J1YmJpbmcKIHsKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5l
bmRTY3J1YmJpbmcoKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5lbmRTY3J1
YmJpbmcoKTsKIH0KIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEz
MDAKQEAgLTE5Miw3ICsxOTIsNyBAQCAtICh2b2lkKXNldEN1cnJlbnRBdWRpb1RvdWNoQmFyTWVk
aWFTZWxlY3Rpb25PcHRpb246KEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdAogICAgIGlmIChh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uICYmIF9hdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25P
cHRpb25zKQogICAgICAgICBpbmRleCA9IFtfYXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0
aW9ucyBpbmRleE9mT2JqZWN0OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25dOwogCi0gICAgX3dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5U
NjRfTUFYKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBp
bmRleCA6IFVJTlQ2NF9NQVgpOwogfQogCiAtIChOU0FycmF5PEFWVG91Y2hCYXJNZWRpYVNlbGVj
dGlvbk9wdGlvbiAqPiAqKWxlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucwpAQCAt
MjIyLDcgKzIyMiw3IEBAIC0gKHZvaWQpc2V0Q3VycmVudExlZ2libGVUb3VjaEJhck1lZGlhU2Vs
ZWN0aW9uT3B0aW9uOihBVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PCiAgICAgaWYgKGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbiAmJiBfbGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRp
b25zKQogICAgICAgICBpbmRleCA9IFtfbGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRp
b25zIGluZGV4T2ZPYmplY3Q6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uXTsKIAotICAgIF93
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkt
PnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBV
SU5UNjRfTUFYKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbCgpLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3Vu
ZCA/IGluZGV4IDogVUlOVDY0X01BWCk7CiB9CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTMwMApAQCAtMjkyLDQ3ICsyOTIsNDcgQEAgLSAodm9pZClzZXRMZWdp
YmxlTWVkaWFTZWxlY3Rpb25JbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiAgICAgW3Nl
bGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJjdXJyZW50TGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxl
Y3Rpb25PcHRpb24iXTsKIH0KIAotLSAoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKil3
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKKy0gKFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYyopcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjCiB7Ci0gICAgcmV0dXJuIF93ZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuZ2V0KCk7CisgICAgcmV0dXJuIF9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMuZ2V0KCk7CiB9CiAKLS0gKHZvaWQpc2V0V2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOihXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYworLSAodm9pZClzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPT0gd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQorICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjID09IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCi0gICAgICAgIF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51
bGxwdHIpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQorICAgICAgICBf
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihu
dWxscHRyKTsKIAotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPSB3ZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YyA9IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIAotICAgIGlmIChfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihzZWxmKTsKKyAgICBpZiAoX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoc2VsZik7CiB9CiAKIC0gKHZvaWQpdG9nZ2xl
UGxheWJhY2sKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBf
d2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgp
KQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCgpLT50b2dnbGVQbGF5U3RhdGUoKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYyAmJiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbCgpKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT50b2dnbGVQbGF5U3RhdGUoKTsKIH0KIAogLSAodm9pZClzZXRQ
bGF5aW5nOihCT09MKXBsYXlpbmcKIHsKLSAgICBpZiAoIV93ZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMgfHwgIV93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCkpCisgICAgaWYgKCFfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIHx8
ICFfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBCT09MIGlzQ3VycmVudGx5UGxheWluZyA9IHNlbGYucGxh
eWluZzsKICAgICBpZiAoIWlzQ3VycmVudGx5UGxheWluZyAmJiBwbGF5aW5nKQotICAgICAgICBf
d2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgp
LT5wbGF5KCk7CisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKICAgICBlbHNlIGlmIChpc0N1cnJlbnRseVBsYXlpbmcg
JiYgIXBsYXlpbmcpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAgICAgIF9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CiB9CiAKIC0g
KEJPT0wpaXNQbGF5aW5nCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMgJiYgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKSkKLSAgICAgICAgcmV0dXJuIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMt
PndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmlzUGxheWluZygpOworICAgIGlmIChfcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBs
YXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIHJldHVybiBfcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5pc1BsYXlpbmcoKTsKIAogICAgIHJl
dHVybiBOTzsKIH0KQEAgLTM0MCw4ICszNDAsOCBAQCAtIChCT09MKWlzUGxheWluZwogI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCiAtICh2b2lkKXRvZ2dsZVBp
Y3R1cmVJblBpY3R1cmUKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YyAmJiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCgpKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgaWYgKF9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGljdHVyZUluUGljdHVyZSgp
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaAppbmRleCBiODEyNGMxZTFiZmUw
MTViZDI5YzBlZjA3YTcwZTM3MWMxOWI1MWU2Li4wOGI4ZDEzNWI1NWEyNjdjMWIyZGFhZGIxM2Vj
OGY3NDMxMGFiYmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oCkBAIC0yOCw4ICsyOCw4IEBA
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAK
ICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
IgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0z
OCwyMSArMzgsMjEgQEAgT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWw7CiAKLWNsYXNzIFdFQkNPUkVf
RVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBmaW5hbAotICAgIDogcHVibGlj
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM+IHsKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYyBmaW5hbAorICAgIDogcHVibGljIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQor
ICAgICwgcHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVm
Q291bnRlZDxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gY3JlYXRlKFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsJik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjKCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQorICAgIHN0YXRp
YyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBjcmVhdGUoUGxheWJhY2tTZXNzaW9u
TW9kZWwmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKTsKKyAg
ICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIGZpbmFsIHsgfQogCi0gICAgLy8gV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgZmluYWw7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIC8qY3Vy
cmVudFRpbWUqLywgZG91YmxlIC8qYW5jaG9yVGltZSovKSBmaW5hbDsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyppc1BsYXlpbmcqLywgZmxvYXQgLypwbGF5YmFj
a1JhdGUqLykgZmluYWw7CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyovLCB1aW50NjRfdCAvKnNlbGVjdGVk
SW5kZXgqLykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJs
ZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICovKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxl
ZCAqLywgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBj
b25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIGZpbmFsOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bnN1cmVDb250cm9sc01hbmFnZXIoKTsKQEAgLTczLDggKzczLDggQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZW5kU2NydWJiaW5nKCk7CiAKIHByaXZhdGU6Ci0gICAgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0gICAg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxscHRy
IH07CisgICAgICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25N
b2RlbCYpOworICAgICAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25N
b2RlbCB7IG51bGxwdHIgfTsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCiAgICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1fcGxheWJhY2tDb250cm9sc01h
bmFnZXIgIHsgbnVsbHB0ciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQppbmRleCA4YjQ0
YTYxYzUwZTAxNjJjM2MxMGU3MTc1ZDgxYzZmMmEyNDg0Y2VhLi41OWVmMjIzMDY5YTljZWU5ZjEx
MjUxM2JiZmVmMGIxMmM2N2IyNGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KQEAgLTI0
LDcgKzI0LDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmgiCiAKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkKIApAQCAtMzIsOSArMzIsOSBAQAogI2ltcG9ydCAiSW50UmVjdC5oIgogI2ltcG9y
dCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKICNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlv
bi5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgIlRpbWVSYW5n
ZXMuaCIKICNpbXBvcnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCi0jaW1wb3J0ICJX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5o
PgogCiAjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgpAQCAtNDYsMjQgKzQ2LDI0IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6Y3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKK1JlZjxQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM+IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKFBs
YXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKIHsKLSAgICBhdXRvIGludGVyZmFjZSA9IGFkb3B0
UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKG1vZGVsKSk7CisgICAgYXV0
byBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyht
b2RlbCkpOwogICAgIG1vZGVsLmFkZENsaWVudChpbnRlcmZhY2UpOwogICAgIHJldHVybiBpbnRl
cmZhY2U7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKK1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFBsYXli
YWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKICAgICA6IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1v
ZGVsKQogewogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMoKQorUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp+UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCkKIHsKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQoZG91Ymxl
IGR1cmF0aW9uKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hh
bmdlZChkb3VibGUgZHVyYXRpb24pCiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQogICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFn
ZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJh
dGlvbikKICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVDaGFuZ2VkKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7CiAjaWYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
KiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwpAQCAtODksNyAr
ODksNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVD
aGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YgogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxv
YXQgcGxheWJhY2tSYXRlKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJhdGVD
aGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAjaWYgRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIFdlYlBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwpAQCAt
MTAyLDE3ICsxMDIsMTcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJh
dGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1IKICNlbmRpZgogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YmVnaW5TY3J1YmJpbmcoKQordm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKCkKIHsKICNpZiBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAgICAgdXBkYXRlUGxheWJhY2tD
b250cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tT
ZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0lu
Zm9dIHN5c3RlbVVwdGltZV0sIDAsIGZhbHNlKTsKICNlbmRpZgotICAgIHdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCktPmJlZ2luU2NydWJiaW5nKCk7CisgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwo
KS0+YmVnaW5TY3J1YmJpbmcoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OmVuZFNjcnViYmluZygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
ZW5kU2NydWJiaW5nKCkKIHsKLSAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5lbmRTY3J1
YmJpbmcoKTsKKyAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5lbmRTY3J1YmJpbmcoKTsKIH0K
IAogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKQEAgLTEzMCw3ICsx
MzAsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0aW1lUmFuZ2VzVG9BcnJh
eShjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQogfQogI2VuZGlmCiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGlt
ZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlLCBkb3VibGUpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRp
bWVSYW5nZXMsIGRvdWJsZSwgZG91YmxlKQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09O
VFJPTFNfTUFOQUdFUikKICAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRTZWVrYWJs
ZVRpbWVSYW5nZXM6dGltZVJhbmdlc1RvQXJyYXkodGltZVJhbmdlcykuZ2V0KCldOwpAQCAtMTM5
LDcgKzEzOSw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZWVrYWJs
ZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltCiAjZW5kaWYKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBbcGxheUJhY2tDb250cm9sc01h
bmFnZXIoKSBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczpvcHRpb25zIHdpdGhTZWxlY3Rl
ZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXTsKQEAgLTE0OSw3
ICsxNDksNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlYwogI2VuZGlmCiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAjaWYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIFtwbGF5QmFja0NvbnRyb2xz
TWFuYWdlcigpIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2Vs
ZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07CkBAIC0x
NTksNyArMTU5LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFYKICNlbmRpZgogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKIHsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAg
ICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4
OnNlbGVjdGVkSW5kZXhdOwpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
IHNlCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBz
ZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4XTsKQEAgLTE3Nyw3ICsx
NzcsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5h
YmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
LCBjb25zdCBTdHJpbmcmKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQogewogI2lmIEVOQUJMRShX
RUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBbcGxheUJhY2tDb250cm9sc01hbmFn
ZXIoKSBzZXRDYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlOiFlbmFibGVkXTsKQEAgLTE4Niw3ICsx
ODYsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbAogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tTZXNz
aW9uTW9kZWwpCiAgICAgICAgIHJldHVybjsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCiAgICAgbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbCA9IG51bGxwdHI7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CkBA
IC0yMDQsMTIgKzIwNCwxMiBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKIAogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKIAotV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKldlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIoKQorV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIgKlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250
cm9sc01hbmFnZXIoKQogewogICAgIHJldHVybiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250
cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIpCit2b2lkIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2Vi
UGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIpCiB7CiAgICAgbV9wbGF5YmFja0NvbnRy
b2xzTWFuYWdlciA9IG1hbmFnZXI7CiAKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQ
bGF5YmFja0NvbnRyCiAgICAgW21hbmFnZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
czptX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkg
d2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4obV9wbGF5YmFja1Nlc3Np
b25Nb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpKV07CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRp
bWluZyhkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJh
Y2tSYXRlLCBib29sIGlzUGxheWluZykKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
Ojp1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVudFRpbWUs
IGRvdWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxheWluZykK
IHsKICAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IHBsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKCk7CiAgICAgaWYgKCFtYW5hZ2VyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCAqbW9kZWwgPSB3ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsICptb2RlbCA9IHBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCk7CiAgICAgaWYgKCFtb2RlbCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLmgKaW5kZXggYTc4M2VjOTQ0MDc2Y2E1OGQ2MDNmNDBhYjgxOGNkNTVhMTBiZTkxMS4u
MWM3NGI4NDhmYWY5YjI5MGVlZjg2YTcyOTAyYjYzMGRkZGJlYzE4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMuaApAQCAtMjMsMTUgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjX2gKLSNkZWZpbmUgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjX2gKKyNwcmFnbWEgb25jZQogCiAjaWYgUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAKICNpbmNsdWRlICJIVE1MTWVk
aWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2luY2x1ZGUgIldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpA
QCAtNDIsMzEgKzQxLDMxIEBAIE9CSkNfQ0xBU1MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjT2JqQzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBGbG9h
dFNpemU7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7Ci1jbGFzcyBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOwogCi1jbGFzcyBX
RUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMKLSAgICA6IHB1Ymxp
YyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgICwgcHJpdmF0ZSBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjPiB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMKKyAgICA6IHB1YmxpYyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAor
ICAgICwgcHJpdmF0ZSBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFJl
ZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiB7CiAKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gY3JlYXRlKFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAgIHN0
YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBjcmVhdGUoUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKICAg
ICB9Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCk7Ci0gICAg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIHdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgY29uc3Qg
eyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQotICAgIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbCopOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiB3ZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciop
OworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpOworICAgIFZpZGVv
RnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJh
Y2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKKyAgICBWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogdmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBj
b25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92
ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
Ym9vbCAgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAgZW5h
YmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBj
b25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOwogCi0gICAgLy8gV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIGZpbmFs
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBG
bG9hdFNpemUmKSBmaW5hbDsKIApAQCAtOTQsMTAgKzkzLDEwIEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDICp2aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDKCk7CiAKIHByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYpOwotICAgIFJlZjxX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsg
bnVsbHB0ciB9OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIgfTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJik7CisgICAgUmVmPFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYz4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgVmlk
ZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Cisg
ICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyIHsgbnVsbHB0ciB9OwogICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lIH07CiAgICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09i
akM+IG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQzsKIH07CkBAIC0xMDYsNCArMTA1
LDMgQEAgcHJpdmF0ZToKIAogI2VuZGlmCiAKLSNlbmRpZiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KaW5kZXggOTJlNjQyYzhl
YzBjYmY5NDc1ZTg0OTZkZjdjODcwMmMyNDg2NTUzYi4uYjUyM2YxMjk5M2Q3ODJjODkwNzY5ZDU2
MDIzYjBjNmZlNTE2MWU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCkBAIC0yNCw3ICsy
NCw3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oIgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpCiAKQEAgLTMzLDExICszMywxMSBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAi
TWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgiCiAjaW1wb3J0ICJQSVBTUEkuaCIKKyNpbXBvcnQgIlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2lt
cG9ydCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmgiCiAjaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgot
I2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW1wb3J0ICJXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KIAogI2ltcG9ydCAi
Q29yZU1lZGlhU29mdExpbmsuaCIKQEAgLTk0LDcgKzk0LDcgQEAgZW51bSBjbGFzcyBQSVBTdGF0
ZSB7CiB9OwogCiBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
OiBOU09iamVjdCA8UElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSwgV2ViVmlkZW9WaWV3Q29udGFp
bmVyRGVsZWdhdGU+IHsKLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMqIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7CisgICAgV2ViQ29yZTo6VmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjKiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwogICAg
IE5TU2l6ZSBfdmlkZW9EaW1lbnNpb25zOwogICAgIFJldGFpblB0cjxQSVBWaWV3Q29udHJvbGxl
cj4gX3BpcFZpZXdDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxOU1ZpZXdDb250cm9sbGVyPiBf
dmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcjsKQEAgLTEwNyw3ICsxMDcsNyBAQCBAaW50ZXJm
YWNlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgOiBOU09iamVjdCA8UElQVmll
d0NvbnRyb2xsZXJEZWxlZwogICAgIEJPT0wgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsK
IH0KIAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOihXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzooV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil2
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7CiAtICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVu
U3RhdGU7CiAtICh2b2lkKWludmFsaWRhdGU7CiAKQEAgLTEzNCwxMiArMTM0LDEyIEBAIEBzeW50
aGVzaXplIHZpZGVvRGltZW5zaW9ucz1fdmlkZW9EaW1lbnNpb25zOwogQHN5bnRoZXNpemUgZGlk
UmVxdWVzdEV4aXRpbmdQSVA9X2RpZFJlcXVlc3RFeGl0aW5nUElQOwogQHN5bnRoZXNpemUgZXhp
dGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuPV9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47CiAK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzoo
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil3ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzooV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil2aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMKIHsKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMgPSB3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7CisgICAgX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyA9IHZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKICAgICBfcGlwU3Rh
dGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7CiAKICAgICByZXR1cm4gc2VsZjsKQEAgLTE2Myw3ICsx
NjMsNyBAQCAtICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGUKIC0gKHZvaWQpaW52YWxp
ZGF0ZQogewogICAgIFtzZWxmIGludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGVdOwotICAgIF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSBudWxscHRyOworICAgIF92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMgPSBudWxscHRyOwogICAgIF92aWRlb0RpbWVuc2lvbnMgPSBOU1plcm9T
aXplOwogfQogCkBAIC0xOTIsOCArMTkyLDggQEAgLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmll
dzooTlNWaWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG8KICAg
ICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFVzZXJDYW5SZXNpemU6WUVTXTsKICAgICBbX3BpcFZp
ZXdDb250cm9sbGVyIHNldFBsYXlpbmc6X3BsYXlpbmddOwogICAgIFtzZWxmIHNldFZpZGVvRGlt
ZW5zaW9uczpOU0VxdWFsU2l6ZXMoX3ZpZGVvRGltZW5zaW9ucywgTlNaZXJvU2l6ZSkgPyBmcmFt
ZS5zaXplIDogX3ZpZGVvRGltZW5zaW9uc107Ci0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpOworICAgIGlm
IChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5
KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKTsKIAog
ICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBhZG9wdE5TKFtbV2ViVmlkZW9WaWV3Q29udGFpbmVy
IGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXSk7CiAgICAgW192aWRlb1ZpZXdDb250YWluZXIg
c2V0VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU6c2VsZl07CkBAIC0yNDcsOCArMjQ3LDggQEAg
LSAodm9pZClib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmll
d0NvbnRhaW5lciAqKXZpZGVvVmlld0MKIAogICAgIEFTU0VSVF9VTlVTRUQodmlkZW9WaWV3Q29u
dGFpbmVyLCB2aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7CiAKLSAg
ICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAgICAgICBfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5z
ZXRWaWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7CisgICAgaWYg
KF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtf
dmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOwogfQogCiAtICh2b2lkKXN1cGVydmlld0RpZENo
YW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9W
aWV3Q29udGFpbmVyCkBAIC0yNzIsMTEgKzI3MiwxMSBAQCAtIChCT09MKXBpcFNob3VsZENsb3Nl
OihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAogewogICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAg
PT0gX3BpcFZpZXdDb250cm9sbGVyKTsKIAotICAgIGlmICghX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYyB8fCAhX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKKyAgICBpZiAoIV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMgfHwgIV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKCkpCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBfZGlkUmVxdWVz
dEV4aXRpbmdQSVAgPSBZRVM7Ci0gICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+
d2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKS0+ZnVsbHNjcmVlbk1heVJldHVyblRv
SW5saW5lKCk7CisgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIoKS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7CiAKICAg
ICByZXR1cm4gTk87CiB9CkBAIC0yODUsMjggKzI4NSwyOCBAQCAtICh2b2lkKXBpcERpZENsb3Nl
OihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAogewogICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAg
PT0gX3BpcFZpZXdDb250cm9sbGVyKTsKIAotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKCkgJiYgX3ZpZGVvVmlld0NvbnRhaW5lciAmJiBfcmV0dXJuaW5nV2luZG93
ICYmICFOU0VxdWFsUmVjdHMoX3JldHVybmluZ1JlY3QsIE5TWmVyb1JlY3QpKSB7CisgICAgaWYg
KF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSAmJiBfdmlkZW9WaWV3Q29udGFpbmVyICYmIF9y
ZXR1cm5pbmdXaW5kb3cgJiYgIU5TRXF1YWxSZWN0cyhfcmV0dXJuaW5nUmVjdCwgTlNaZXJvUmVj
dCkpIHsKICAgICAgICAgW05TQW5pbWF0aW9uQ29udGV4dCBydW5BbmltYXRpb25Hcm91cDpeKE5T
QW5pbWF0aW9uQ29udGV4dCAqY29udGV4dCkgewogICAgICAgICAgICAgY29udGV4dC5hbGxvd3NJ
bXBsaWNpdEFuaW1hdGlvbiA9IE5POwogICAgICAgICAgICAgW192aWRlb1ZpZXdDb250YWluZXIg
c2V0RnJhbWU6X3JldHVybmluZ1JlY3RdOwotICAgICAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZy
YW1lKFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOwotICAgICAgICAgICAgX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0Vmlk
ZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6
ZUFzcGVjdCk7CisgICAgICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRl
b0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWlu
ZXIgYm91bmRzXSk7CisgICAgICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52
aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKIAogICAgICAgICAgICAgW1tfcmV0
dXJuaW5nV2luZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIu
Z2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsKICAgICAgICAg
fSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOwogICAgIH0KIAotICAgIGlmIChfd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjKSB7CisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMpIHsKICAgICAgICAgaWYgKCFzZWxmLmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSB7
Ci0gICAgICAgICAgICBpZiAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIHZpZGVvRnVsbHNjcmVl
bk1vZGVsID0gX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwoKSkgeworICAgICAgICAgICAgaWYgKFZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRl
b0Z1bGxzY3JlZW5Nb2RlbCA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVs
bHNjcmVlbk1vZGVsKCkpIHsKICAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU5vbmUpOwotICAgICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5zZXRW
aWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0KTsKKyAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+c2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFz
cGVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBfd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgICAgIF92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKIAotICAgICAgICBpZiAoV2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IF93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KCkpCisgICAgICAgIGlmIChWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyID0gX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKICAgICAgICAgICAgIGZ1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKICAgICB9CiB9CkBAIC0zMTUsMjYgKzMxNSwyNyBA
QCAtICh2b2lkKXBpcEFjdGlvblBsYXk6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCiB7CiAgICAg
QVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwogCi0gICAgaWYg
KF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgp
OworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKIH0K
IAogLSAodm9pZClwaXBBY3Rpb25QYXVzZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKIHsKICAg
ICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CiAKLSAgICBp
ZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVz
ZSgpOworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF92aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7
CiB9CiAKIC0gKHZvaWQpcGlwQWN0aW9uU3RvcDooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CiAKLSAg
ICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpCisgICAgaWYgKCFfdmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsID0gX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICBQbGF5YmFj
a1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBfdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOworICAgIGlmIChwbGF5YmFja1Nlc3Np
b25Nb2RlbCkKICAgICAgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBhdXNlKCk7CiAKICAgICAv
LyBGSVhNRSAyNTA5NjE3MDogU2hvdWxkIGFuaW1hdGUgb25seSBpZiB0aGUgcGFnZSB3aXRoIHRo
ZSB2aWRlbyBpcyB1bm9ic2N1cmVkLiBGb3Igbm93LCBhbHdheXMgY2xvc2Ugd2l0aG91dCBhbmlt
YXRpb24uCkBAIC0zNDUsMjQgKzM0NiwyNCBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UpCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSkKICAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZSkKIHsKLSAgICBBU1NFUlQobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpOwotICAgIGF1dG8gbW9kZWwgPSBtX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKKyAgICBBU1NFUlQobV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpOworICAgIGF1
dG8gbW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9k
ZWwoKTsKICAgICBtb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBbdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzptb2RlbC0+aXNQbGF5aW5nKCkgbmV3UGxh
eWJhY2tSYXRlOm1vZGVsLT5wbGF5YmFja1JhdGUoKV07CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpCitWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKQogewot
ICAgIGlmIChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSkKLSAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCktPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgaWYgKG1fcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICBtX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0
aGlzKTsKICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCiB7
CiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CkBAIC0zNzEsMTIgKzM3MiwxMiBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwoV2ViVmlkZW9GdWxsc2NyZQogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRD
bGllbnQoKnRoaXMpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKiBvYnNlcnZlcikKIHsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9i
c2VydmVyOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0TW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKICAgICBpZiAo
bV9tb2RlID09IG5ld01vZGUpCkBAIC0zODcsNyArMzg4LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3IKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKG1fbW9kZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7
CiAgICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQpAQCAtMzk4LDI3ICszOTksMjcgQEAgdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHMKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRl
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMoKSB1cGRhdGVJc1BsYXlpbmc6aXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTpwbGF5
YmFja1JhdGVdOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW5z
dXJlQ29udHJvbHNNYW5hZ2VyKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
bnN1cmVDb250cm9sc01hbmFnZXIoKQogewogICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LT5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjT2JqQyAqV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDKCkKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygp
CiB7CiAgICAgaWYgKCFtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMpCi0gICAgICAg
IG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyA9IGFkb3B0TlMoW1tXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIGFsbG9jXSBpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzp0aGlzXSk7CisgICAgICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQyA9IGFkb3B0TlMoW1tXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIGFs
bG9jXSBpbml0V2l0aFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzp0aGlzXSk7CiAKICAgICBy
ZXR1cm4gbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDLmdldCgpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKE5TVmlldyYg
bGF5ZXJIb3N0ZWRWaWV3LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgTlNXaW5kb3cgKnBh
cmVudFdpbmRvdywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmll
dywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93
c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5pdGlhbFJl
Y3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhpcywgaW5p
dGlhbFJlY3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRp
YWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUpOworICAgIExPRyhGdWxsc2NyZWVu
LCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oJXApLCBpbml0
aWFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAsIG1vZGU6JWQiLCB0aGlz
LCBpbml0aWFsUmVjdC54KCksIGluaXRpYWxSZWN0LnkoKSwgaW5pdGlhbFJlY3Qud2lkdGgoKSwg
aW5pdGlhbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdywgbW9kZSk7CiAKICAgICBVTlVTRURf
UEFSQU0oYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKICAgICBBU1NFUlQobW9kZSA9
PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0
dXJlKTsKQEAgLTQyNywxNiArNDI4LDE2IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvCiAKICAg
ICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHNldFVwUElQRm9yVmlkZW9WaWV3OiZs
YXllckhvc3RlZFZpZXcgd2l0aEZyYW1lOihOU1JlY3QpaW5pdGlhbFJlY3QgaW5XaW5kb3c6cGFy
ZW50V2luZG93XTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbigpCiB7Ci0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbigl
cCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogCiAgICAgaWYgKG1vZGUoKSA9PSBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJl
KSB7CiAgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZW50ZXJQSVBd
OwpAQCAtNDUwLDkgKzQ1MSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjplbnRlckZ1bGxzY3JlZW4oKQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCwgTlNX
aW5kb3cgKnBhcmVudFdpbmRvdykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
eGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRX
aW5kb3cpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OmV4aXRGdWxsc2NyZWVuKCVwKSwgZmluYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBh
cmVudFdpbmRvdzolcCIsIHRoaXMsIGZpbmFsUmVjdC54KCksIGZpbmFsUmVjdC55KCksIGZpbmFs
UmVjdC53aWR0aCgpLCBmaW5hbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVu
KCVwKSwgZmluYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMs
IGZpbmFsUmVjdC54KCksIGZpbmFsUmVjdC55KCksIGZpbmFsUmVjdC53aWR0aCgpLCBmaW5hbFJl
Y3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7CiAKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCiAgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOwpAQCAtNDY3
LDkgKzQ2OCw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVs
bHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TCiAgICAgICAgIFttX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDpmaW5hbFJlY3Qg
aW5XaW5kb3c6cGFyZW50V2luZG93XTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2Ny
ZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSglcCksIG1vZGU6JWQiLCB0aGlzLCBtb2RlKTsKKyAg
ICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxz
Y3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKCVwKSwgbW9kZTolZCIsIHRoaXMsIG1vZGUpOwog
CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIFttX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJl
SW5QaWN0dXJlQWN0aXZlOk5PXTsKQEAgLTQ3OSw3ICs0ODAsNyBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KEhUTUxNZQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGlzRXhpdGluZ1RvU3RhbmRhcmRG
dWxsc2NyZWVuID0gbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVTdGFuZGFyZDsKLSAgICAvLyBPbiBNYWMsIHN0YW5kYXJkIGZ1bGxzY3JlZW4gaXMgaGFu
ZGxlZCBieSB0aGUgRnVsbHNjcmVlbiBBUEkgYW5kIG5vdCBieSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLgorICAgIC8vIE9uIE1hYywgc3RhbmRhcmQgZnVsbHNjcmVlbiBpcyBoYW5kbGVkIGJ5
IHRoZSBGdWxsc2NyZWVuIEFQSSBhbmQgbm90IGJ5IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuCiAg
ICAgLy8gSnVzdCB1cGRhdGUgbV9tb2RlIGRpcmVjdGx5IHRvIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIGluIHRoYXQgY2FzZSB0byBrZWVwCiAgICAg
Ly8gbV9tb2RlIGluIHN5bmMgd2l0aCB0aGUgZnVsbHNjcmVlbiBtb2RlIGluIEhUTUxNZWRpYUVs
ZW1lbnQuCiAgICAgaWYgKGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKQpAQCAtNDg5LDkg
KzQ5MCw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNj
cmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lCiAgICAgW21fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbigpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRo
aXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpj
bGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAogICAgIFttX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgZXhpdFBJUF07CiAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQyBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKQEAgLTUwMCw5ICs1MDEsOSBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQog
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4o
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUo
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQogewotICAg
IExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlk
YXRlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCVwKSIsIHRoaXMpOwogCiAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCA9IG5pbDsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKQEAg
LTUyMCw5ICs1MjEsOSBAQCBzdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkK
IH0KICNlbmRpZgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFy
ZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVj
dCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0
JiBpbmxpbmVSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQogewotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9J
bmxpbmUoJXApLCB2aXNpYmxlOiVzLCBpbmxpbmVSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVu
dFdpbmRvdzolcCIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSksIGlubGluZVJlY3QueCgpLCBp
bmxpbmVSZWN0LnkoKSwgaW5saW5lUmVjdC53aWR0aCgpLCBpbmxpbmVSZWN0LmhlaWdodCgpLCBw
YXJlbnRXaW5kb3cpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApLCB2aXNpYmxlOiVzLCBpbmxpbmVS
ZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGJvb2xTdHJpbmco
dmlzaWJsZSksIGlubGluZVJlY3QueCgpLCBpbmxpbmVSZWN0LnkoKSwgaW5saW5lUmVjdC53aWR0
aCgpLCBpbmxpbmVSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOwogCiAgICAgaWYgKCF2aXNp
YmxlKSB7CiAgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJ
UF07CkBAIC01MzMsMzIgKzUzNCwzMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29ucwogICAgIFtt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDoo
TlNSZWN0KWlubGluZVJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wg
ZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlLCBjb25zdCBTdHJpbmcmKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQogewotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZCglcCksIGVuYWJsZWQ6JXMiLCB0aGlzLCBib29sU3RyaW5nKGVuYWJsZWQpKTsK
KyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoJXApLCBlbmFibGVkOiVzIiwgdGhpcywgYm9vbFN0cmluZyhlbmFi
bGVkKSk7CiAKICAgICBpZiAoZW5hYmxlZCAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKICAgICAgICAgZXhpdEZ1
bGxzY3JlZW4oSW50UmVjdCgpLCBuaWwpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCiB7Ci0g
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1Zp
ZGVvQ2hhbmdlZCglcCk6JXMiLCB0aGlzLCBib29sU3RyaW5nKGhhc1ZpZGVvKSk7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdl
ZCglcCk6JXMiLCB0aGlzLCBib29sU3RyaW5nKGhhc1ZpZGVvKSk7CiAKICAgICBpZiAoIWhhc1Zp
ZGVvKQogICAgICAgICBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0
IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVu
c2lvbnMpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoJXApLCB3aWR0aDolLjBmLCBoZWlnaHQ6JS4w
ZiIsIHRoaXMsIHZpZGVvRGltZW5zaW9ucy53aWR0aCgpLCB2aWRlb0RpbWVuc2lvbnMuaGVpZ2h0
KCkpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6JS4wZiwgaGVpZ2h0OiUuMGYiLCB0aGlz
LCB2aWRlb0RpbWVuc2lvbnMud2lkdGgoKSwgdmlkZW9EaW1lbnNpb25zLmhlaWdodCgpKTsKIAog
ICAgIC8vIFdpZHRoIGFuZCBoZWlnaHQgY2FuIGJlIHplcm8gd2hlbiB3ZSBhcmUgdHJhbnNpdGlv
bmluZyBmcm9tIG9uZSB2aWRlbyB0byBhbm90aGVyLiBJZ25vcmUgemVybyB2YWx1ZXMuCiAgICAg
aWYgKCF2aWRlb0RpbWVuc2lvbnMuaXNaZXJvKCkpCiAgICAgICAgIFttX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakMgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107CiB9
CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppc1BsYXlpbmdWaWRlb0lu
RW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gaGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSAmJiBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDIGlzUGxheWluZ107CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5k
ZXggNGExNzBhMzY3NmExOTAzZDQ3NGI5MDkxY2NjOTEyMTQ2YzdmMTg4MS4uODg2OWMwMTdjYjdk
Y2YzMWYzNjQ3ZTNkYTQ2MGZhOWE3MDQyNmNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQpAQCAtMzE5LDggKzMxOSw4IEBACiAKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpAQCAt
OTI2MiwxMSArOTI2MiwxMSBAQCAtICh2b2lkKV9zZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
Rm9yTWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JgogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAgICAg
X3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOworICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9u
TW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CiAgICAg
X3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxl
bWVudCk7CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0g
ICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KTsKKyAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKCpfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9k
ZWwpOwogCiAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3RGF0YS5oCmluZGV4IGE3OGIwOTBlMDdiZTQzNjE5NmE2OTVjYTEyODdlODc4
ZDI2NjYxY2MuLmJkZWRmNzczZGRmZGUwNjZmYTUyZTE3NTZjYjY4MjIyNzQ2Y2Y0Y2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKQEAgLTU0LDggKzU0LDggQEAgY2xh
c3MgUGFnZTsKIGNsYXNzIFRleHRJbmRpY2F0b3JXaW5kb3c7CiBjbGFzcyBWYWxpZGF0aW9uQnVi
YmxlOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwotY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDsKICNlbmRpZgog
fQogCkBAIC0zMzgsOCArMzM4LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgUmVmUHRyPFdlYkNv
cmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBwbGF5YmFja1Nlc3Npb25N
b2RlbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
PiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBwbGF5YmFja1Nlc3Npb25Nb2RlbDsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2U7CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQppbmRleCA3Nzk3MzZhMTZhZmY2MGUz
ZmE1YTBhYzdlYTM2NDA2ZGMzNjRmMmU0Li5mOTMwZmE5NmM4ODViYmZmNzQwNGYwNzIzNTk2NzU5
NTVmYzRiODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KQEAg
LTUxLDggKzUxLDggQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpCi0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaD4KICNlbmRpZgogCiBCT09MIGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZyA9IE5POwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJL
aXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggODNhZDBlOGE1NzhlMTJkNjg3NTU2MGIwODc4
MWE3NzQ3MTg0NDYxNS4uZTI0ZTMwNThiNjcyYjc4MGVjZDQ5NzdlNjcyNjI0YmM4NGQxMzBjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xNTQsOCArMTU0LDggQEAgTUVTU0FH
RV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViUGFzdGVib2FyZFByb3h5IFwKICAgICBXZWJQYXltZW50
Q29vcmRpbmF0b3IgXAogICAgIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5IFwKLSAgICBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyIFwKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkgXAorICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgXAorICAgIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSBcCiAgICAgV2ViUHJvY2VzcyBcCiAgICAgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24g
XAogICAgIFdlYlByb2Nlc3NQb29sIFwKQEAgLTE2OCw4ICsxNjgsOCBAQCBNRVNTQUdFX1JFQ0VJ
VkVSUyA9IFwKICAgICBXZWJTb2NrZXRTdHJlYW0gXAogICAgIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlciBcCiAgICAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkgXAotICAgIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIgXAotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSBc
CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBcCisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5IFwKICMKIAogU0NSSVBUUyA9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggNjQwNzFjYmYxMDFmMDE3ZGRlOGNhYTUzODEy
N2YzZWEzOWJiNzdjNC4uOWIyZDU5YThhNTZhYTk2YWE0ZGRiMjQ1ZmIxZDU2NzcxZDgyNGY3NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0K
QEAgLTEyNiwxMiArMTI2LDEyIEBACiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCiAj
aW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
LmgiCiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCIKICNpbXBvcnQgIldLUERG
Vmlldy5oIgogI2ltcG9ydCAiV0tQYXNzd29yZFZpZXcuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmll
dy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiX1dLRHJhZ2dh
YmxlRWxlbWVudEluZm9JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0
dGVyLmgiCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5LmgKaW5kZXggNmMzM2JlNjVhOThjMjE5YzBkYjkxZDAzMjg0Mjk1ZWNlNWY1NDcz
ZC4uMTU4MGY5NTc3ZjA0NDMwY2NjNjRjZjMzY2VlN2U3YTg5Yjk1M2Y2OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkuaApAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTZWxlY3Rpb25PcHRpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxheWJhY2tTZXNzaW9uTW9kZWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgpAQCAtNDAsMzUgKzQwLDM1IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0Lmg+CiAjZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotdHlwZWRlZiBXZWJD
b3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZTsKK3R5cGVkZWYgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAjZWxzZQotdHlwZWRl
ZiBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2U7Cit0eXBlZGVmIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYyBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OwogCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBXZWJDb3Jl
OjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCAgeworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0IGZpbmFsOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ+LCBwdWJsaWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWwgIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gY3JlYXRlKFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQor
ICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBjcmVhdGUoUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKICAgICB9
Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KCkgeyB9CisgICAg
dmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KCkgeyB9CiAKICAgICB2b2lkIGlu
dmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KIAotICAgIC8vIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpZmluYWw7CisgICAgLy8gUGxheWJhY2tTZXNz
aW9uTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50JilmaW5hbDsKIAogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRv
dWJsZSk7CiAgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlKTsKQEAgLTgxLDIwICs4
MSwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25z
LCB1aW50NjRfdCBpbmRleCk7CiAgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwogICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKGJvb2wsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZENoYW5nZWQoYm9vbCk7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCk7CiAK
IHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OwogCi0gICAg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dChQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90
IGNvbnRleHRJZCkKICAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCiAgICAgICAgICwgbV9j
b250ZXh0SWQoY29udGV4dElkKQogICAgIHsKICAgICB9CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbAorICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsCiAgICAgdm9pZCBwbGF5KCkg
ZmluYWw7CiAgICAgdm9pZCBwYXVzZSgpIGZpbmFsOwogICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRl
KCkgZmluYWw7CkBAIC0xMjcsMTQgKzEyNywxNCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJD
b3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQog
ICAgIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7IH0KICAgICBib29sIGV4dGVybmFsUGxh
eWJhY2tFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrRW5h
YmxlZDsgfQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU7IH0KKyAgICBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlOyB9CiAg
ICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsgfQogICAg
IGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOyB9CiAgICAgYm9vbCBpc011dGVkKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRlZDsgfQogCi0gICAgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
KiBtX21hbmFnZXI7CiAgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAgSGFzaFNldDxXZWJD
b3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKKyAgICBIYXNo
U2V0PFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwogICAg
IGRvdWJsZSBtX3BsYXliYWNrU3RhcnRlZFRpbWUgeyAwIH07CiAgICAgYm9vbCBtX3BsYXliYWNr
U3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fZHVyYXRpb24g
eyAwIH07CkBAIC0xNTIsMzggKzE1MiwzOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3Jl
OjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOwog
ICAgIHVpbnQ2NF90IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKICAgICBib29s
IG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgeyBmYWxzZSB9OwotICAgIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBtX2V4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlIHsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lIH07Cisg
ICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIG1fZXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgeyBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlw
ZU5vbmUgfTsKICAgICBTdHJpbmcgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFt
ZTsKICAgICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CiB9OwogCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBjcmVhdGUoV2Vi
UGFnZVByb3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
KCk7CisgICAgc3RhdGljIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IGNyZWF0
ZShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkoKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCi0gICAgUGxhdGZvcm1XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpOworICAgIFBsYXRm
b3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKTsK
ICAgICB2b2lkIHJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCk7CiAKIHByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKLSAgICBmcmllbmQg
Y2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OworICAgIGZyaWVuZCBjbGFzcyBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTsKIAotICAgIGV4cGxpY2l0IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eShXZWJQYWdlUHJveHkmKTsKKyAgICBleHBsaWNpdCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkoV2ViUGFnZVByb3h5Jik7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKIAotICAgIHR5cGVkZWYgc3RkOjp0
dXBsZTxSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRm
b3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAg
ICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4s
IFJlZlB0cjxQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7CiAgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOwogICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFBsYXRm
b3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVs
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgYWRkQ2xp
ZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisgICAgLy8gTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyCiAgICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElE
KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyKCk7CiAgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKQEAg
LTIwMyw3ICsyMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlQ29udHJvbGxlZEVsZW1l
bnRJRFJlc3BvbnNlKHVpbnQ2NF90LCBTdHJpbmcpIGNvbnN0OwogICAgIHZvaWQgbXV0ZWRDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7CiAKLSAgICAvLyBNZXNzYWdlcyB0
byBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisgICAgLy8gTWVzc2FnZXMgdG8gUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcgogICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZv
aWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1
aW50NjRfdCBjb250ZXh0SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4KaW5kZXggZjYzNmE4MzI3M2ViOGUxNDRhNmExMDM1MDU1Nzg5YzIzZTA5MTI3
ZC4uM2FjOGY3OWQxYjI0NTVhNzgwZjgyMjdhM2VmYTQ5MTY5ZmQwNWVhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMSw3ICsyMSw3IEBA
CiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkgeworbWVzc2FnZXMgLT4gUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5IHsKICAgICBSZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQogICAgIEN1
cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwg
ZG91YmxlIGhvc3RUaW1lKQogICAgIEJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0K
aW5kZXggZGY5ZDMzZjlmYzA4OTNhODIwOTdhNWVlYzhmODZmNWFhODY1M2NmZi4uNDJjMzk5ZThk
Yjg2YTkxNTA1YTJhZGQ2NjQ0ZGQ4OTAzNjIyN2U3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Lm1tCkBAIC0yNCwxMyArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAKKyNpbXBvcnQg
IlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2lt
cG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vz
c1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIApAQCAtMzgsMzkg
KzM4LDM5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0CisjcHJhZ21h
IG1hcmsgLSBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQKIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYgY2xpZW50KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmFkZENsaWVudChQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCghbV9jbGll
bnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwogfQog
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGll
bnQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9j
bGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnBsYXkoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXko
KQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+cGxheShtX2NvbnRl
eHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSgp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGF1c2UoKQogewogICAgIGlmICht
X21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+cGF1c2UobV9jb250ZXh0SWQpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQogewogICAg
IGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGxheVN0YXRlKG1fY29u
dGV4dElkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2lu
U2NydWJiaW5nKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnVi
YmluZygpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNj
cnViYmluZyhtX2NvbnRleHRJZCk7CkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCiAgICAgbV9pc1NjcnViYmluZyA9
IHRydWU7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY3J1
YmJpbmcoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZygp
CiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY3J1YmJpbmco
bV9jb250ZXh0SWQpOwpAQCAtODcsODAgKzg3LDgwIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjplbmRTY3J1YmJpbmcoKQogICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5l
ZWRzVXBkYXRlID0gaXNQbGF5aW5nKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCiB7CiAgICAgaWYgKG1fbWFuYWdl
cikKICAgICAgICAgbV9tYW5hZ2VyLT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKIH0K
IAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0
aW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0
aW1lKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWso
bV9jb250ZXh0SWQsIHRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAg
ICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3
YXJkKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nh
bm5pbmdCYWNrd2FyZChtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjplbmRTY2FubmluZygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6ZW5kU2Nhbm5pbmcoKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFu
YWdlci0+ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25J
ZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0
aW9uKHVpbnQ2NF90IG9wdGlvbklkKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1f
bWFuYWdlci0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKIHsKICAg
ICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCiB7CiAgICAgaWYgKG1f
bWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKG1fY29u
dGV4dElkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2ds
ZU11dGVkKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVNdXRlZCgp
CiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVNdXRlZCht
X2NvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpz
ZXRNdXRlZChib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNl
dE11dGVkKGJvb2wgbXV0ZWQpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5h
Z2VyLT5zZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBs
YXliYWNrU3RhcnRlZFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCiB7CiAg
ICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lID0gcGxheWJhY2tTdGFydGVkVGltZTsKICAgICBtX3Bs
YXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGZhbHNlOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91Ymxl
IGR1cmF0aW9uKQogewogICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKICAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IG1fY2xpZW50cykKICAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVy
YXRpb24pOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVu
dFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lKQogewogICAg
IG1fY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTsKICAgICBhdXRvIGFuY2hvclRpbWUgPSBbW05T
UHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07CkBAIC0xNzEsMTQgKzE3MSwx
NCBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFu
Z2VkKGRvdWJsZSBjdXJyZW50VGltZSkKICAgICAgICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5n
ZWQoY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91
YmxlIGJ1ZmZlcmVkVGltZSkKIHsKICAgICBtX2J1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZTsK
ICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKICAgICAgICAgY2xpZW50LT5idWZm
ZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJh
Y2tSYXRlKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJhdGVDaGFuZ2VkKGJv
b2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAgbV9pc1BsYXlpbmcgPSBp
c1BsYXlpbmc7CiAgICAgbV9wbGF5YmFja1JhdGUgPSBwbGF5YmFja1JhdGU7CkBAIC0xODYsNyAr
MTg2LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJhdGVDaGFuZ2Vk
KGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1IKICAgICAgICAgY2xpZW50LT5yYXRlQ2hh
bmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdl
cyYgc2Vla2FibGVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVw
ZGF0ZUludGVydmFsKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiBzZWVrYWJsZVJhbmdlcywgZG91Ymxl
IGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCiB7CiAgICAgbV9z
ZWVrYWJsZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2VzOwogICAgIG1fc2Vla2FibGVUaW1lUmFuZ2Vz
TGFzdE1vZGlmaWVkVGltZSA9IGxhc3RNb2RpZmllZFRpbWU7CkBAIC0xOTUsMTQgKzE5NSwxNCBA
QCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFu
Z2VkKFdlYkNvcmU6OlRpbWVSYW5nZXMmCiAgICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXND
aGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2
YWwpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZh
c3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxh
eUZhc3RSZXZlcnNlKQogewogICAgIG1fY2FuUGxheUZhc3RSZXZlcnNlID0gY2FuUGxheUZhc3RS
ZXZlcnNlOwogICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQogICAgICAgICBjbGll
bnQtPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBhdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCkKIHsKICAg
ICBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnM7CiAgICAgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4OwpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjCiAgICAgICAg
IGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zLCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zLCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnMsIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpCiB7CiAg
ICAgbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gbGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uczsKICAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggPSBsZWdpYmxlTWVkaWFT
ZWxlY3RlZEluZGV4OwpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
CiAgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucywgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQogewogICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxl
Y3RlZEluZGV4OwogCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2UK
ICAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVk
SW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgbV9sZWdpYmxlTWVkaWFTZWxl
Y3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKIApAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQodWludDY0X3QKICAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBT
dHJpbmcmIGxvY2FsaXplZE5hbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWROYW1lKQogewogICAgIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBlbmFibGVkOwogICAg
IG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgPSB0eXBlOwpAQCAtMjQ1LDQ4ICsyNDUsNDgg
QEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGwKICAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWROYW1lKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
Q2hhbmdlZChib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZChib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQogewogICAgIG1fd2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWQgPSB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsKICAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKICAgICAgICAgY2xpZW50LT53aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFu
Z2VkKGJvb2wgbXV0ZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRD
aGFuZ2VkKGJvb2wgbXV0ZWQpCiB7CiAgICAgbV9tdXRlZCA9IG11dGVkOwogICAgIGZvciAoYXV0
byogY2xpZW50IDogbV9jbGllbnRzKQogICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChtdXRl
ZCk7CiB9CiAKLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQor
I3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5CiAKLVJlZlB0cjxXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkKK1JlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94
eSYgcGFnZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eShwYWdlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkocGFnZSkpOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCitQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShX
ZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgOiBtX3BhZ2UoJnBhZ2UpCiB7Ci0gICAgbV9wYWdlLT5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRo
aXMpOworICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFn
ZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Ojp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCkKK1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6flBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSgpCiB7CiAgICAgaWYgKCFtX3Bh
Z2UpCiAgICAgICAgIHJldHVybjsKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX3BhZ2UtPnByb2Nlc3MoKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKICAgICBtX3BhZ2UgPSBudWxscHRyOwogCiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29u
dGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFBsYXRmb3JtV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2U+IGludGVyZmFjZTsKICAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFj
ZSkgPSB0dXBsZTsKIAogICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKQEAgLTI5Niwx
NSArMjk2LDE1IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjppbnZhbGlk
YXRlKCkKICAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwogfQogCi1XZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCiB7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWwg
PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElk
KTsKLSAgICBSZWY8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFj
ZSA9IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9kZWwpOwor
ICAgIFJlZjxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVsID0gUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7CisgICAgUmVmPFBsYXRm
b3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZTo6Y3JlYXRlKG1vZGVsKTsKIAogICAgIHJldHVybiBzdGQ6Om1ha2Vf
dHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7CiB9CiAKLVdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUm
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFk
ZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CiAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQpAQCAtMzEyLDIyICszMTIsMjIgQEAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHIK
ICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3Vy
ZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK1BsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0
SWQpCiB7CiAgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShj
b250ZXh0SWQpKTsKIH0KIAotUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCkKK1BsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAg
ICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQp
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZv
ckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQogewogICAgIG1f
Y2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgaWYgKCFtX2NsaWVudENvdW50cy5yZW1vdmUo
Y29udGV4dElkKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzM2LDkgKzMzNiw5IEBAIHZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCkKICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7CiB9CiAK
LSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKyNw
cmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFn
ZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4
dElkKQogewogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQgPT0gY29udGV4dElkKQpAQCAtMzU3LDcgKzM1Nyw3IEBAIHZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVp
bnQ2NF90CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQogewogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQpAQCAtMzY5LDIyICsz
NjksMjIgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJh
Y2tDb250cm9sc01hbmFnZXIoKQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250
ZXh0SWQpCiB7CiAgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkucmVzZXRNZWRpYVN0YXRl
KCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjdXJyZW50VGlt
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBo
b3N0VGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjdXJyZW50VGltZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0
VGltZSkKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmN1cnJlbnRUaW1lQ2hhbmdlZChj
dXJyZW50VGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpi
dWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGlt
ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpidWZmZXJlZFRpbWVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKIHsKICAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWthYmxlUmFuZ2VzVmVjdG9y
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3Vi
bGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWthYmxlUmFuZ2Vz
VmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91Ymxl
LCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVw
ZGF0ZUludGVydmFsKQogewogICAgIFJlZjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJh
bmdlczo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdlcykgewpA
QCAtMzk3LDY2ICszOTcsNjYgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OnNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXgKICAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9k
aWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgdmFsdWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCiB7
CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHZh
bHVlKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJ
bmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNl
bGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVj
dGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0
ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBl
bmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpleHRlcm5hbFBsYXliYWNrUHJvcGVy
dGllc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRh
cmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQogewotICAgIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlID0gc3RhdGljX2Nh
c3Q8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlPih0
YXJnZXRUeXBlKTsKLSAgICBBU1NFUlQodHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
VGFyZ2V0VHlwZUFpclBsYXkgfHwgdHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFy
Z2V0VHlwZVRWT3V0IHx8IHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5
cGVOb25lKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7CisgICAgQVNTRVJUKHR5cGUgPT0gUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gUGxheWJhY2tTZXNz
aW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpUYXJnZXRUeXBlTm9uZSk7CiAKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwogfQog
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQogewogICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2Vk
KGRpc2FibGVkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om11
dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBtdXRlZCkKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm11dGVkQ2hhbmdlZChtdXRl
ZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpkdXJhdGlvbkNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIGR1cmF0aW9uKQogewogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZHVyYXRpb25D
aGFuZ2VkKGR1cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IHBsYXliYWNrU3RhcnRlZFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxh
eWJhY2tTdGFydGVkVGltZSkKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXliYWNr
U3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUpOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywg
ZG91YmxlIHJhdGUpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yYXRlQ2hhbmdlZChp
c1BsYXlpbmcsIHJhdGUpOwogfQogCiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElk
LCBTdHJpbmcgaWRlbnRpZmllcikgY29uc3QKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElk
LCBTdHJpbmcgaWRlbnRpZmllcikgY29uc3QKIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYg
KGNvbnRleHRJZCA9PSBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKQEAgLTQ2OCw5MCArNDY4
LDkwIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9s
bGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QKIH0KIAogCi0jcHJhZ21hIG1hcmsgTWVzc2Fn
ZXMgdG8gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgorI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRv
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OlBsYXkoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGF1c2UodWludDY0X3QgY29udGV4
dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6UGF1c2UoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRv
Z2dsZVBsYXlTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZShj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250
ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpCZWdpblNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2Ny
dWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY3J1YmJpbmcodWludDY0X3Qg
Y29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6RW5kU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2Ny
dWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSB0aW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElkLCB0
aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+
cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFz
dFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1l
KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6RmFzdFNlZWsoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpGYXN0U2Vlayhjb250
ZXh0SWQsIHRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2Fy
ZCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdGb3J3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5T
Y2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQog
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
QmVnaW5TY2FubmluZ0JhY2t3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2Fu
bmluZ0JhY2t3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4
dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKHVpbnQ2
NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OkVuZFNjYW5uaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5k
U2Nhbm5pbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6U2VsZWN0QXVkaW9NZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewotICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0
b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJlSW5QaWN0dXJl
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OlRvZ2dsZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlTXV0ZWQoY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4
dElkLCBib29sIG11dGVkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENvbnRyb2xsZWRFbGVt
ZW50SUQoKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlcXVlc3RDb250cm9s
bGVkRWxlbWVudElEKCkKIHsKICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0g
ICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QobV9jb250cm9sc01hbmFnZXJDb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCht
X2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi1QbGF0
Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKQorUGxhdGZvcm1QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UqIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y29udHJvbHNNYW5hZ2Vy
SW50ZXJmYWNlKCkKIHsKICAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaAppbmRleCA3
MzE5MjI4ODE2NzE4OTg4MTI2Nzk3ZWQxZjNlODg5NDRmNTNkZjk1Li5jMTc3MjU2ZTRhZWU4MWVk
NDZjY2FkNmZkZTI2MDliM2ViYzQ5NmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
CkBAIC0yMyw1MCArMjMsNDkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eV9oCi0jZGVmaW5l
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eV9oCisjcHJhZ21hIG9uY2UKIAogI2lmIChQ
TEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQotI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg+CiAjZWxzZQotI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaD4KICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oSU9TKQotdHlwZWRlZiBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdCBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKK3R5cGVkZWYgV2Vi
Q29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2U7CiAjZWxzZQotdHlwZWRlZiBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Cit0eXBlZGVm
IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyBQbGF0Zm9ybVZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2Vi
UGFnZVByb3h5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwotY2xhc3Mg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OworY2xhc3Mg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWwKLSAg
ICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4KLSAg
ICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgICwgcHVibGlj
IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyICB7CitjbGFzcyBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWwKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbAorICAgICwgcHVibGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyICB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFn
ZXIsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWws
IHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dD4gY3JlYXRlKFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3Qg
Y29udGV4dElkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0KG1hbmFnZXIsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250
ZXh0SWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0KG1hbmFnZXIsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpKTsKICAg
ICB9Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCk7CisgICAg
dmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCk7CiAKICAgICB2b2lkIGludmFs
aWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KIApAQCAtNzQsMTEgKzczLDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldExheWVySG9zdFZpZXcoUmV0YWluUHRyPFBsYXRmb3JtVmlldz4m
JiBsYXllckhvc3RWaWV3KSB7IG1fbGF5ZXJIb3N0VmlldyA9IFdURk1vdmUobGF5ZXJIb3N0Vmll
dyk7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0JiwgdWludDY0X3QpOworICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkmLCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmLCB1aW50
NjRfdCk7CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgIHZvaWQgYWRkQ2xp
ZW50KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQmKSBvdmVycmlkZTsKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZvaWQgYWRk
Q2xpZW50KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQm
KSBvdmVycmlkZTsKICAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRo
TWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoV2Vi
Q29yZTo6RmxvYXRSZWN0KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5
KFZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CkBAIC04NywyNiArODYsMjYgQEAgcHJpdmF0ZToKICAg
ICBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQog
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3ZpZGVvRGltZW5zaW9uczsgfQogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgogICAg
IHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRFbnRlckZ1
bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7CiAKLSAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0PiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOworICAgIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ+IG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7CiAgICAgdWludDY0X3QgbV9jb250ZXh0
SWQ7CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtVmlldyAqPiBtX2xheWVySG9zdFZpZXc7Ci0gICAg
SGFzaFNldDxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1fY2xpZW50
czsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9j
bGllbnRzOwogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsKICAgICBi
b29sIG1faGFzVmlkZW8geyBmYWxzZSB9OwogfTsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBh
Z2VQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOwotICAgIHZpcnR1YWwg
fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpOworICAgIHN0YXRpYyBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Jik7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIApAQCAtMTIxLDIwICsxMjAsMjAg
QEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OwogCi0gICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5KFdlYlBhZ2VQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOworICAg
IGV4cGxpY2l0IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmLCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCi0gICAgdHlwZWRlZiBz
dGQ6OnR1cGxlPFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+LCBSZWZQdHI8
UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxl
OworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0PiwgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPj4gTW9kZWxJbnRl
cmZhY2VUdXBsZTsKICAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCYgZW5zdXJl
TW9kZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBh
ZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCByZW1vdmVD
bGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAKLSAgICAvLyBNZXNzYWdlcyBm
cm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIKICAgICB2b2lkIHNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRf
dCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJ
blBpY3R1cmUpOwogICAgIHZvaWQgc2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29s
KTsKICAgICB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwpAQCAtMTQ2LDE5ICsxNDUsMTkgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSk7CiAjZW5kaWYKIAotICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIKKyAgICAvLyBNZXNzYWdlcyB0byBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCiAgICAgdm9pZCBy
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVk
aWEgPSBmYWxzZSk7CiAgICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKTsKICAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAg
ICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lk
IGRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBzZXRW
aWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QpOwot
ICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KTsKKyAgICB2b2lkIHNldFZp
ZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSk7CiAgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpOwogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVp
bnQ2NF90IGNvbnRleHRJZCk7CiAKICAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKLSAgICBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1
cGxlPiBtX2NvbnRleHRNYXA7CiAgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0
SWQgeyAwIH07CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50czsKQEAg
LTE2OCw0ICsxNjcsMyBAQCBwcml2YXRlOgogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCi0jZW5k
aWYgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGYyODE1ZDY3MjM4ZTlkM2FmZmNm
MDFmNGY0ZGJkNDA1MjQwODQ0Y2YuLmVmYzNiNTA0N2VmNDdhYmExOTU3MWU3NjQzYTA3MmVjZTgy
MjBhZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgpAQCAtMjEsNyArMjEsNyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAjaWYgKFBMQVRGT1JNKElPUykg
JiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkg
eworbWVzc2FnZXMgLT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IHsKICAgICBTZXRIYXNW
aWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCiAgICAgU2V0VmlkZW9EaW1l
bnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5z
aW9ucykKICAgICBTZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50
MzJfdCB2aWRlb0xheWVySUQsIFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhv
c3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGlj
dHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCmluZGV4IDYxMjlhZDlhMTQxZDQx
NmIxYjliZWQyZTMzN2FlNmFhZTFkYWUxYzUuLmVjY2I5YjI5MjE5NjgyNjg2NGYwMDkxMDA4Zjkz
MDg5ODg4YTE4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpAQCAtMjQsMTcg
KzI0LDE3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oIgogCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCiAjaW1wb3J0ICJBUElV
SUNsaWVudC5oIgogI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW1wb3J0ICJX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVB
bmltYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFjaFNlbmRSaWdodC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9NZWRpYVBsYXllckVudW1zLmg+CkBAIC04NCwxNDkgKzg0LDE0OSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogI2lmIFBMQVRGT1JNKElPUykgJiYgIUhBVkUoQVZLSVQpCiAKLVJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYpCitSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5PiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJv
eHkmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6aW52YWxpZGF0ZSgpCiB7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3QKIHsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlB
dXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Citib29sIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJ
blBpY3R1cmUoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxz
Y3JlZW4oKQogewogCiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojph
cHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQogewogCiB9CiAjZWxzZQogCi0jcHJh
Z21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQKKyNwcmFnbWEgbWFyayAt
IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAogCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxh
eWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKK1ZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eSYgbWFuYWdlciwgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFj
a1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQogICAgIDogbV9tYW5hZ2VyKCZtYW5h
Z2VyKQogICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbChwbGF5YmFja1Nlc3Npb25Nb2RlbCkK
ICAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKIHsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCkKK1ZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpCiB7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQoV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjphZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkK
IHsKICAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGll
bnRzLmFkZCgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFp
bnMoJmNsaWVudCkpOwogICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAg
ICAgIG1fbWFuYWdlci0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1fY29udGV4dElkLCBtb2RlLCBm
aW5pc2hlZFdpdGhNZWRpYSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpG
bG9hdFJlY3QgZnJhbWUpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2Vy
LT5zZXRWaWRlb0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6
OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCiB7CiAgICAgaWYgKG1f
bWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0xheWVyR3Jhdml0eShtX2NvbnRl
eHRJZCwgZ3Jhdml0eSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAg
IG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fY29udGV4dElkLCBtb2RlKTsKIH0K
IAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0
Citib29sIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6aXNWaXNpYmxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9tYW5hZ2VyID8gbV9tYW5hZ2VyLT5pc1Zpc2libGUoKSA6IGZhbHNlOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2Ny
ZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3Jl
ZW4oKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZGlkU2V0dXBG
dWxsc2NyZWVuKG1fY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAg
ICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQogewog
ICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZGlkRXhpdEZ1bGxzY3JlZW4o
bV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBt
X21hbmFnZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShtX2NvbnRleHRJZCk7CiB9CiAKLSNwcmFnbWEgbWFy
ayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQorI3ByYWdtYSBtYXJrIC0gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5CiAKLVJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94
eSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkpCitSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KHBhZ2Us
IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSkpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQorVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5
JiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSkKICAgICA6IG1fcGFnZSgmcGFnZSkKICAgICAsIG1fcGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5KHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkKIHsKLSAgICBtX3BhZ2UtPnBy
b2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCAqdGhp
cyk7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdl
LT5wYWdlSUQoKSwgKnRoaXMpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Ojp+VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCkKIHsKICAgICBpZiAoIW1fcGFn
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1fcGFnZS0+cHJvY2VzcygpLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogICAgIG1fcGFnZSA9IG51bGxwdHI7CiAKICAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250
ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZT4gaW50ZXJmYWNlOwogICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IHR1cGxlOwogCiAgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwpAQCAtMjM4LDEz
ICsyMzgsMTMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRh
dGUoKQogICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVu
KCkKIHsKICAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQogICAg
ICAgICBzdGQ6OmdldDwxPih0dXBsZSktPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsK
IH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Citib29sIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBs
ZSktPmhhc01vZGUobW9kZSkpCkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNv
bnN0Citib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNo
b3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAogewogICAgIGZvciAoYXV0byYgdHVwbGUg
OiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxl
KS0+bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSkKQEAgLTI2Myw3
ICsyNjMsNyBAQCBib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21h
dGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKQogfQogCiAjaWYgUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi1ib29sIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNv
bnN0Citib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVu
aGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29u
dGV4dE1hcC52YWx1ZXMoKSkgewogICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5pc1Bs
YXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkpCkBAIC0yNzQsMjcgKzI3NCwyNyBAQCBi
b29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFu
Y2VkRnVsbHNjcmVlbigpIGNvbnN0CiB9CiAjZW5kaWYKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCiB7CiAg
ICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKICAgICAgICAgc3Rk
OjpnZXQ8MT4odHVwbGUpLT5hcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwogfQogCi1XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVw
bGUgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgYXV0byYgcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBt
X3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJlTW9kZWwoY29udGV4dElkKTsKLSAg
ICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbCA9IFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwg
Y29udGV4dElkKTsKKyAgICBSZWY8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbCA9
IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Np
b25Nb2RlbCwgY29udGV4dElkKTsKICAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Ug
PSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJ
ZCk7Ci0gICAgUmVmPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZh
Y2UgPSBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6Y3JlYXRlKHBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZSk7CisgICAgUmVmPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6Y3JlYXRl
KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7CiAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHktPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKIAotICAgIGludGVyZmFjZS0+
c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsKLSAgICBpbnRlcmZhY2Ut
PnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7CisgICAg
aW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkpOworICAgIGlu
dGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsK
IAogICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50
ZXJmYWNlKSk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRl
cmZhY2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFu
ZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUo
KSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpAQCAtMzAyLDI0ICszMDIsMjQgQEAg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHIKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK1ZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dCYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1
cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgcmV0dXJuICpzdGQ6OmdldDwwPihl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKIH0KIAotUGxhdGZvcm1XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2UmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5z
dXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK1BsYXRmb3JtVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlJiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRk
KGNvbnRleHRJZCwgMSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRh
aW5zKGNvbnRleHRJZCkpOwogCkBAIC0zMzcsMTMgKzMzNywxMyBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpCiAgICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOwog
fQogCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
CisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQo
dWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5N
b2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6c2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwg
ZmxvYXQgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJl
SW5QaWN0dXJlKQogewogICAgIEFTU0VSVCh2aWRlb0xheWVySUQpOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgIFJlZlB0cjxQbGF0Zm9ybVdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOwogCiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVy
ZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogICAgIGFkZENsaWVu
dEZvckNvbnRleHQoY29udGV4dElkKTsKQEAgLTM3NCwxNyArMzc0LDE3IEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3Qg
Y29udGV4dElkLCB1CiAgICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJlSW5Q
aWN0dXJlRGlkQ2hhbmdlKG1fcGFnZSwgdmlkZW9GdWxsc2NyZWVuTW9kZSAmIE1lZGlhUGxheWVy
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBoYXNWaWRlbykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCiB7CiAgICAgZW5z
dXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuaGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9ucyh1
aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRf
dCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQogewogICAgIGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpLnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1l
bnNpb25zKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVy
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRv
JiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKICAgICBpbnRlcmZhY2Uu
ZW50ZXJGdWxsc2NyZWVuKCk7CkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiAg
ICAgfQogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQogewogI2lmIFBMQVRGT1JNKElP
UykKICAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbihmaW5hbFJl
Y3QpOwpAQCAtNDEzLDE4ICs0MTMsMTggQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZToKIH0KIAog
I2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFu
aW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQogewogICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0
SWQpLmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh0YXJnZXRNb2RlKTsKIH0K
ICNlbmRpZgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBlbnN1
cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVwRnVsbHNjcmVlbigpOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJl
Y3QpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0
IGlubGluZVJlY3QpCiB7CiAgICAgbV9wYWdlLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
KTsKIApAQCAtNDM3LDQ3ICs0MzcsNDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQKICNlbmRp
ZgogfQogCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cgorI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKGNv
bnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlJlcXVlc3RG
dWxsc2NyZWVuTW9kZShjb250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpk
aWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpE
aWRTZXR1cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxz
Y3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRXhpdEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
ICAgICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFbnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpEaWRFbnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CiAgICAgbV9wYWdlLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dD4gbW9kZWw7CisgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlPiBpbnRlcmZhY2U7CiAKICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CiAKICAgICBbQ0FUcmFuc2FjdGlvbiBmbHVz
aF07CiAgICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107CiAg
ICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbihj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOwogCiAgICAgaW50ZXJmYWNlLT5zZXRNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogICAgIHJlbW92ZUNsaWVudEZv
ckNvbnRleHQoY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZs
b2F0UmVjdCBmcmFtZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRl
b0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUp
CiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtNDg5LDMw
ICs0ODksMzAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVv
TGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkMKICAgICAgICAgbWFjaF9wb3J0X25h
bWVfdCBmZW5jZVBvcnQgPSBmZW5jZVNlbmRSaWdodC5sZWFrU2VuZFJpZ2h0KCk7CiAjZW5kaWYK
IAotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250ZXh0SWQsIGZyYW1lLCBJUEM6OkF0dGFj
aG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRh
Y2htZW50KGZlbmNlUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CiAgICAgfQogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpT
ZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElkLCAodW5zaWduZWQpZ3Jhdml0eSksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKGNvbnRleHRJZCwgKHVuc2lnbmVk
KWdyYXZpdHkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIG1fcGFnZS0+dWlDbGllbnQoKS5oYXNWaWRl
b0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIG1vZGUgJiBNZWRpYVBsYXllckVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTW9kZUNo
YW5nZWQoY29udGV4dElkLCBtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTW9kZUNoYW5n
ZWQoY29udGV4dElkLCBtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLWJvb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUoKSBjb25zdAorYm9vbCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzVmlzaWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
cGFnZS0+aXNWaWV3VmlzaWJsZSgpICYmIG1fcGFnZS0+aXNJbldpbmRvdygpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKQogewogICAg
IGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpOwotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNWaWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNWaWV3VmlzaWJsZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJWaWV3SW1wbC5tbQppbmRleCA3ZjFlOTg1OTg2ZTUzNThjNDU0OGNhNTk5M2Vh
YTYzZWMxYmE5YzAzLi45YWVkZTcwYWUxNzEzN2ZhYTEyM2NiNTBlOGU2Mzg0OWE1ZTIyZDg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCkBAIC00
MSw2ICs0MSw3IEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50
SW1wbC5oIgogI2ltcG9ydCAiUGFzdGVib2FyZFR5cGVzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkuaCIKICNpbXBvcnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJSZW1v
dGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgiCkBAIC02Miw3ICs2Myw2IEBACiAjaW1wb3J0ICJX
ZWJFdmVudEZhY3RvcnkuaCIKICNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCiAjaW1wb3J0
ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94
eS5oIgogI2ltcG9ydCAiX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJbnRlcm5hbC5oIgpAQCAtMTE3
MCw4ICsxMTcwLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJhcigpCiAg
ICAgICAgIFttX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldENhblRvZ2dsZVBpY3R1cmVJblBp
Y3R1cmU6WUVTXTsKICAgICB9CiAKLSAgICBpZiAoUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UqIGludGVyZmFjZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5j
b250cm9sc01hbmFnZXJJbnRlcmZhY2UoKSkKLSAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01h
bmFnZXIgc2V0V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CisgICAg
aWYgKFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBpbnRlcmZhY2UgPSBtX3BhZ2Ut
PnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKS0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkpCisg
ICAgICAgIFttX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzppbnRlcmZhY2VdOwogCiAgICAgW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBs
YXliYWNrQ29udHJvbHNDb250cm9sbGVyOm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCld
OwogICAgIFttX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0Nv
bnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDQwNzVlYTIzODQ1MTNkYmI5ZDBmN2Uz
ODY1NDg4MWRlYTk1OTBjOWIuLmU4ZjEyOWE3OTkwOWVlMzBjOThjZmM5ZTI1YTgzMGRhOGQ0MjEw
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNTIs
OSArMTUyLDkgQEAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5n
UGVyZm9ybWFuY2VEYXRhLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
LmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNp
bmNsdWRlICJWaWV3U25hcHNob3RTdG9yZS5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SdW5Mb29wT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRJbmRp
Y2F0b3JXaW5kb3cuaD4KQEAgLTE4MCw3ICsxODAsNyBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCkBAIC0zOTQsOCArMzk0LDggQEAgV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJv
eHkoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCB1aW4K
ICAgICBtX2Z1bGxTY3JlZW5NYW5hZ2VyID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzLCBtX3BhZ2VDbGllbnQuZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpKTsK
ICNlbmRpZgogI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIgPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhp
cyk7Ci0gICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpjcmVhdGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOworICAg
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
Y3JlYXRlKCp0aGlzKTsKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
cik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCkBAIC02MzYsOCArNjM2LDggQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnJlYXR0YWNoVG9XZWJQcm9jZXNzKCkKICAgICBtX2Z1bGxTY3Jl
ZW5NYW5hZ2VyID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCBtX3Bh
Z2VDbGllbnQuZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpKTsKICNlbmRpZgogI2lmIFBM
QVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgbV92aWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVh
dGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOworICAgIG1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlciA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsK
KyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShBUFBMRV9QQVkpCkBAIC00Mjk1LDEyICs0Mjk1LDEyIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZ1bGxzY3Jl
ZW5DbGllbnQ+JiYKICNlbmRpZgogICAgIAogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZL
SVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBXZWJQYWdlUHJveHk6OnBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIoKQorUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBXZWJQYWdlUHJv
eHk6OnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQogewogICAgIHJldHVybiBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIuZ2V0KCk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSog
V2ViUGFnZVByb3h5Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eSogV2ViUGFnZVByb3h5Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAg
ICByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGE5MDg4MDNmZDVlMjI4MThjYjA0ZTE2NzNj
NTdlOGJmODcyMDE3ZjEuLmZkMGZkN2VkZmU2ZWRjMjU3ZTg4YjQzZDQ3MGM4YmYyYmVmYTYyNmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTIwMCw5ICsyMDAs
OSBAQCBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOwogY2xhc3MgV2ViQ29udGV4dE1lbnVQ
cm94eTsKIGNsYXNzIFdlYkVkaXRDb21tYW5kUHJveHk7CiBjbGFzcyBXZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OworY2xhc3Mg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwogY2xhc3MgV2ViTmF2aWdhdGlvblN0YXRlOwot
Y2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OworY2xhc3MgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OwogY2xhc3MgV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYlVSTFNj
aGVtZUhhbmRsZXI7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwpAQCAtMzQyLDggKzM0Miw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEZ1bGxzY3JlZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
RnVsbHNjcmVlbkNsaWVudD4mJik7CiAjZW5kaWYKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZF
KEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIHBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIoKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIHZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIHBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIoKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIHZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQpAQCAt
MTY3OCw4ICsxNjc4LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgKFBMQVRGT1JNKElPUykg
JiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4g
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKKyAgICBSZWZQdHI8UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IGMxYmE3NjRmMDE1NDI3MTFlMjlhZDVm
OWEwNzM0Mjc3NjgyOGFiYmEuLmM5MmVhOWY0YzNiMzNmM2E4ZmNjOWEyMGRkZjI2MjgwNWU0OWM5
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCkBAIC00MSwxMSArNDEsMTEgQEAKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uLmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgogI2ltcG9ydCAiVXNlckRhdGEuaCIKKyNpbXBv
cnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiVmlld1VwZGF0ZURp
c3BhdGNoZXJNZXNzYWdlcy5oIgogI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIK
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmZlMmEy
NDUxYWVhOGZiODIzNGNiM2YyZjdiYWZiNjU4NmIzN2Q0ZS4uYjllMTc3MTg2MGI4ZGVmMzVmYzY5
ZGJiOTMyMzVjNGU4Y2IzNGI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODcxLDggKzg3MSw4IEBACiAJCTM3RkMxOTQ3MTg1
MEZCRjIwMDhDRkE0NyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMxOTQ2MTg1
MEZCRjIwMDhDRkE0NyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0ZDMTk0
QTE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5NDgxODUx
MEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbSAqLzsgfTsK
IAkJMzdGQzE5NEIxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdG
QzE5NDkxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5o
ICovOyB9OwotCQkzRjQxOEVGOTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTNGNDE4RUZCMTg4N0JE
OTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0
MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAv
KiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJM0Y0
MThFRkIxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJM0Y4N0I5QkQxNTg5NDAxMjAwOTBGRjYy
IC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRjg3QjlCQTE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2Vy
LmNwcCAqLzsgfTsKIAkJM0Y4N0I5QkUxNTg5NDAxOTAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4N0I5
QkIxNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5oICovOyB9OwogCQkzRjg3QjlD
MDE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQaWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBX
ZWJDb2xvclBpY2tlci5oICovOyB9OwpAQCAtMTExNCw5ICsxMTE0LDkgQEAKIAkJNTI3MkQ0Qzkx
RTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJENEM3MUU3MzVGMDkwMEVCNDI5MCAv
KiBXS1Byb3RlY3Rpb25TcGFjZU5TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTI3MkQ0Q0ExRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlv
blNwYWNlTlMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MjcyRDRDODFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5tbSAqLzsg
fTsKIAkJNTI4QzM3QzExOTVDQkIxQTAwRDhCOUNDIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5RjI4
MTAxOTU4RjQ3ODAwOENBQzcyIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyRDVBMUIwMUM1NzQ5
NUEwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFBMUM1NzQ5NEUwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLzsgfTsKLQkJNTJENUEx
QjExQzU3NDk2MjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFDMUM1
NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi87IH07
Ci0JCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUEx
QjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi87IH07
CisJCTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVB
MUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLzsg
fTsKKwkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
RDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0g
Ki87IH07CisJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJE
NUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi87IH07
CiAJCTUzMDI1ODNCMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODJF
MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcCAqLzsgfTsKIAkJ
NTMwMjU4M0MxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODJGMURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggKi87IH07CiAJCTUzMDI1ODNE
MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMwMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLzsgfTsKQEAgLTE5MjUsMTQgKzE5MjUsMTQg
QEAKIAkJQ0Q3OEUxMTcxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzhFMTE2MURC
N0RDMEEwMDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50LmggKi87IH07CiAJCUNENzhFMTE5
MURCN0U1QUQwMDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzhFMTE4MURCN0U1QUQwMDE0QTJE
RSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDREEwNDFGNDFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0Jv
YXJkU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTA0MUYzMUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5o
ICovOyB9OwotCQlDREEyOUExQTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1t
ICovOyB9OwotCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAq
LzsgfTsKLQkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oICovOyB9OwotCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKLQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9Owot
CQlDREEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmggKi87IH07Ci0JCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0J
CUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmggKi87IH07CisJCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubW0gKi87IH07CisJCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5o
ICovOyB9OworCQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggKi87IH07CisJCUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1tICovOyB9OworCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCUNEQTI5QTI5MUNCRUI2
N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI1MUNCRUI2N0EwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKKwkJQ0RBMjlB
MkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJQ0RDMzgyRkUx
NzIxMTc5OTAwOEEyRkMzIC8qIFNlY0l0ZW1TaGltTGlicmFyeS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUY4QTc4MTM4QjQ2MDkwMEE5NUY0NCAv
KiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gKi87IH07CiAJCUNEQzM4MzA3MTcyMTE3REQwMDhBMkZD
MyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8qIENvb2tp
ZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgKi87IH07CiAJCUNEQzM4MzBDMTcyMTIyODIwMDhBMkZD
MyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MzBCMTcyMTIxQ0UwMDhBMkZDMyAvKiBDb29raWVT
dG9yYWdlU2hpbUxpYnJhcnkuaCAqLzsgfTsKQEAgLTMwOTQsMTAgKzMwOTQsMTAgQEAKIAkJMzdG
QzE5NDYxODUwRkJGMjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4
dExvYWREZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdG
QzE5NDgxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLTlNVUkxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzE5
NDkxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05TVVJMQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjUxODg3QkQ5NzAw
Mjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNG
NDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2Fn
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGNDE4RUY3
MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQg
LyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY4MTg4N0JEOTcw
MDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNz
YWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjg3QjlCQTE1ODkzRjYzMDA5
MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTNGODdCOUJCMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JDaG9vc2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBp
Y2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM4MSwxMiArMzM4MSwxMiBAQAogCQk1
MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTI3MkQ0QzcxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNl
TlMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQcm90ZWN0aW9uU3BhY2VO
Uy5oOyBwYXRoID0gbWFjL1dLUHJvdGVjdGlvblNwYWNlTlMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTI3MkQ0QzgxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNl
TlMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1Byb3RlY3Rp
b25TcGFjZU5TLm1tOyBwYXRoID0gbWFjL1dLUHJvdGVjdGlvblNwYWNlTlMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUyRDVBMUFCMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUIzMUM1NzQ5RjIw
MERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW47IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
NUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUFDMUM1
NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUIyMUM1NzQ5RjIwMERF
MzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQjQx
QzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNz
L2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzMDI1ODJGMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291
cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlUmVz
b3VyY2UuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzAyNTgzMDFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00MjY0LDE2ICs0MjY0LDE2IEBACiAJCUNENzhFMTE2MURCN0RDMEEwMDE0QTJE
RSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSUZ1bGxzY3JlZW5DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0Q3OEUxMTgxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMDQxRjMxQUNFMjEwNTAwNEExM0VDIC8qIEJh
Y2tCb2FyZFNlcnZpY2VzU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJh
Y2tCb2FyZFNlcnZpY2VzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5
QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMTkxQ0JEQkY0MTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDREEyOUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEx
RjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyMjFD
QkVCNjFBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjQxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNE
QTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExQzFDQkRCRjVCMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEy
MjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjQxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdl
ck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5
QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlck1l
c3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI2MUNCRUI2N0Ew
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNEQzM4MkY3MTcyMTE1MDYwMDhBMkZDMyAvKiBDRk5ldHdvcmsuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IG5hbWUgPSBDRk5ldHdvcmsuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvQ0ZOZXR3b3JrLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+Ijsg
fTsKIAkJQ0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFy
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODMwNjE3MjExNzk5MDA4QTJGQzMgLyog
V2ViUHJvY2Vzc1NoaW0uZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSBXZWJQcm9jZXNzU2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKQEAgLTUyMDcsMTcgKzUyMDcsMTcgQEAKIAkJCQkyRDFCNUQ1QTE4NTg2NTk5MDA2
QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluICovLAogCQkJCTFBQzAy
NzNFMTk2NjIyRDYwMEMxMkI3NSAvKiBXZWJQYWdlUHJveHlDb2NvYS5tbSAqLywKIAkJCQk3QzQ2
OTRDQjFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0gKi8sCi0J
CQkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oICovLAotCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMUYxQ0JFQjVGQjAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywKKwkJCQlDREEy
OUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi8s
CisJCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAogCQkJCTdDRTREMjE1MUE0OTE0ODQwMEM3
RjE1MiAvKiBXZWJQcm9jZXNzUG9vbENvY29hLm1tICovLAogCQkJCTFBMDRGNjE3MUE0QTNBN0Ew
MEEyMUI2RSAvKiBXZWJQcm9jZXNzUHJveHlDb2NvYS5tbSAqLywKIAkJCQk3QUFEMTc1RTFFQTZB
RjM3MDAzQjA4OTQgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gKi8s
CiAJCQkJNTFEMTI0MzExRTZERTUyMTAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXJDb2Nv
YS5oICovLAogCQkJCTUxRDEyNDMyMUU2REU1MjEwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5k
bGVyQ29jb2EubW0gKi8sCi0JCQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovLAotCQkJCTUyRDVBMUFCMUM1NzQ5NEUwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJ
NTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbSAqLywKKwkJCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5LmggKi8sCisJCQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MkQ1QTFBQzFDNTc0
OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovLAogCQkJCTJE
RkM3REI5MUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1wbC5oICovLAogCQkJCTJERkM3REJB
MUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1wbC5tbSAqLywKIAkJCQkxQUQwMUJDQjE5MDVE
NTQ5MDBDOUM0NUYgLyogV0tSZWxvYWRGcmFtZUVycm9yUmVjb3ZlcnlBdHRlbXB0ZXIuaCAqLywK
QEAgLTYzOTksMTQgKzYzOTksMTQgQEAKIAkJCQlDRDQ5MUIwNTFFNzBEMDVGMDAwMDkwNjYgLyog
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3BwICovLAogCQkJCUNENDkxQjA2MUU3MEQwNUYwMDAw
OTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oICovLAogCQkJCUNENDkxQjBBMUU3MzJE
MTIwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKLQkJ
CQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5o
ICovLAotCQkJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCUNEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovLAorCQkJCUNEQTI5QTE5MUNCREJGNDEwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8sCisJCQkJQ0RBMjlBMUMxQ0JEQkY1
QjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJ
Q0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8s
CiAJCQkJRUNBNjgwRDcxRTY5MERGODAwNzMxRDIwIC8qIFdlYlByb2Nlc3NDb2NvYS5oICovLAog
CQkJCTdDNkU3MEY5MThCMkQ0QTAwMEYyNEUyRSAvKiBXZWJQcm9jZXNzQ29jb2EubW0gKi8sCi0J
CQkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
aCAqLywKLQkJCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tZXNzYWdlcy5pbiAqLywKLQkJCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLywKKwkJCQk1MkQ1QTFCMjFDNTc0OUYyMDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovLAorCQkJCTUyRDVBMUIzMUM1NzQ5
RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAorCQkJ
CTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICov
LAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC03ODkxLDEwICs3ODkxLDEwIEBACiAJCQkJMUFCMUY3OTMxRDFCMzYxMzAwN0M5QkQxIC8qIFdl
YlBheW1lbnRDb29yZGluYXRvck1lc3NhZ2VzLmggKi8sCiAJCQkJMUFCMUY3OTQxRDFCMzYxMzAw
N0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LywKIAkJCQkxQUIxRjc5NTFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHlNZXNzYWdlcy5oICovLAotCQkJCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlDREEyOUEy
NTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgg
Ki8sCi0JCQkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJQ0RBMjlBMjcxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCisJ
CQkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLywKKwkJCQlDREEyOUEyNjFDQkVCNjdBMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LywKKwkJCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQkxQTA0M0Y2NzEyNTE0RDhCMDBGRkJGQjUgLyogV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFBMDQzRjY4MTI1
MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8sCiAJCQkJ
QkMzMDY2QkMxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovLApAQCAtNzkxNiwxMCArNzkxNiwxMCBAQAogCQkJCTFBQUYwOEI2MTkyNjlFNkQwMEI2Mzkw
QyAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJNZXNzYWdlcy5oICovLAogCQkJCTdDMzYxRDc2
MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8sCiAJCQkJN0MzNjFENzcxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCAqLywKLQkJCQkzRjQxOEVGNTE4ODdCRDk3
MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCi0JCQkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJNZXNzYWdlcy5oICovLAotCQkJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTNG
NDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oICovLAorCQkJCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQkzRjQxOEVGNjE4ODdCRDk3
MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8sCisJCQkJM0Y0
MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8sCisJCQkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJE
ZXJpdmVkIFNvdXJjZXMiOwogCQkJcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDI7CkBAIC04
NzU5LDEwICs4NzU5LDEwIEBACiAJCQkJMUFCMUY3OTkxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODUw
RkU3MUVEN0MzOUYwMEZCNzdBNyAvKiBXZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBM0U3MzYxMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEy
OTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEyQjFDQkVC
NjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRDU5
MjlGMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNTc0NEYwMTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQb3B1cEl0ZW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUQzQjk0ODQ3MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCBpbiBI
ZWFkZXJzICovLApAQCAtODgxNSw3ICs4ODE1LDcgQEAKIAkJCQk3QzM2MUQ3OTE5MjgwM0JEMDAz
NkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTU3MzlCQkQxQjQyMDQyRDAwRDI1OEMxIC8qIFdlYlVzZXJNZWRpYUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNFRTU3NUMxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZh
bGlkYXRpb25NZXNzYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFCMDFDNTc0
OTVBMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREZDN0RCQjFCQ0NDMTk1MDBDMTU0OEMg
LyogV2ViVmlld0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5Q0Q1NUFBMTI4RTI5NEYwMDEz
M0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjkyMzJERjQxOEIyOUQ2ODAwRDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VP
YmplY3RNYWMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNjksMTAgKzEwMzY5LDEwIEBACiAJCQkJ
MUEzRTczNjIxMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMDMzN0RERDEyN0E1MjFDMDA4RkY0RjQgLyogV2ViUGxhdGZvcm1U
b3VjaFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0NEEyMTg4NEU0RjAwMEVEODZE
QiAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnRJT1MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RB
MjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4g
U291cmNlcyAqLywKLQkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDREEy
OUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDREEyOUExQTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5t
bSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNE
QTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0g
aW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxRDU5MjlFMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUEwOEZFRTQxRDU5M0UyQTAwOEJBOENCIC8qIFdlYlBsdWdpbkluZm9Qcm92
aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU3NDRFRjEyNjM4RkIzMDA2RjBGMTIgLyog
V2ViUG9wdXBJdGVtLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA0NDUsMTAgKzEwNDQ1LDEwIEBA
CiAJCQkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1NzM5QkJFMUI0
MjA0NjYwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODNFRTU3NUIxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJM0Y0MThFRjkxODg3
QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTNGNDE4RUZC
MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRjQxOEVG
OTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0Y0MThFRkIx
ODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREZDN0RCQzFCQ0NDMTk1MDBDMTU0OEMgLyog
V2ViVmlld0ltcGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0REMTEyN0EyOTgwMDA4RkY0
RjQgLyogV2ViV2hlZWxFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjgxNjBEMDE4NzY0
NTU3MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDRkMjJhZmYxMjg5ZjcwMmU4ZTU4NGE2NzIzYjVj
NmFlOWVkZDliOGYuLmZlZTBkMjg2NzdkMDAwYTVhNzk3MGRhZDQ5YTUxOTBmNGQyOGFkYTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTc4LDggKzc4LDggQEAKICNpbmNsdWRlIDxXZWJD
b3JlL1NldHRpbmdzLmg+CiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIK
KyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDA4
NTlmNjY1ZjcwZWU2MWJlNTIwN2Q1MmE1ODM5YmJlZGNhMTM3NDYuLjg4M2Y2MWJhZTNmMWQ3YzJk
MGFjZTM4ZTg1N2I3MGMyZDU0MzNlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTIxOCwxMCArMjE4LDEwIEBACiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICNpbmNsdWRlICJQREZQbHVnaW4uaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKKyNp
bmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmdDRi5o
IgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9MZWdhY3lXZWJBcmNo
aXZlLmg+CiAjZW5kaWYKIApAQCAtMzQ3MCwxNyArMzQ3MCwxNyBAQCBSZW1vdGVXZWJJbnNwZWN0
b3JVSSogV2ViUGFnZTo6cmVtb3RlSW5zcGVjdG9yVUkoKQogfQogCiAjaWYgKFBMQVRGT1JNKElP
UykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBXZWJQYWdlOjpwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKCkKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXImIFdlYlBhZ2U6OnBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIoKQogewogICAgIGlmICghbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKQotICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpjcmVhdGUoKnRoaXMpOworICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIgPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUoKnRoaXMpOwogICAgIHJldHVybiAq
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
JiBXZWJQYWdlOjp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXImIFdlYlBhZ2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewogICAgIGlmICghbV92aWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIoKSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmNyZWF0ZSgqdGhpcywgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpKTsKICAg
ICByZXR1cm4gKm1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMTQyZjU3ZDU3NWE2YTZm
MTMxNDZhOWJmNDIyNDJlOTJjNzE4NGM2MS4uYjdlYmJlODFhZDhiYmM1MWYyZWYyOGE1ZjhhZmY3
YjA1MGY0ZTQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCkBAIC0xODYsMTEgKzE4NiwxMSBAQCBjbGFzcyBXZWJOb3RpZmljYXRpb25DbGllbnQ7CiBj
bGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKIGNsYXNzIFdlYlBhZ2VHcm91cFByb3h5
OwogY2xhc3MgV2ViUGFnZU92ZXJsYXk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKIGNsYXNzIFdlYlBvcHVwTWVudTsKIGNs
YXNzIFdlYlVuZG9TdGVwOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOwotY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7
CiBjbGFzcyBXZWJXaGVlbEV2ZW50OwogZW51bSBGaW5kT3B0aW9ucyA6IHVpbnQxNl90Owogc3Ry
dWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOwpAQCAtMjY2LDggKzI2Niw4IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzSW5zcGVjdG9yUGFnZSgpIHsgcmV0dXJuICEhbV9pbnNwZWN0b3JVSSB8fCAh
IW1fcmVtb3RlSW5zcGVjdG9yVUk7IH0KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7Ci0gICAgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlciYgdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOworICAgIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKyAgICBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyJiB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAjZW5kaWYKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgdm9pZCBzZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2so
Ym9vbCk7CkBAIC0xNDAwLDggKzE0MDAsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxSZW1vdGVX
ZWJJbnNwZWN0b3JVST4gbV9yZW1vdGVJbnNwZWN0b3JVSTsKIAogI2lmIChQTEFURk9STShJT1Mp
ICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9u
TWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiAjZW5kaWYKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgYm9vbCBtX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayB7
IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCmluZGV4IDc1M2NiMTY5OGJkYjE1NWY5NjY5
ODExMWYwNTE1ZjIzODg3ZjVkYTIuLjIzNmEyODE3YjkwMmRkYTI5NmJhMzZiYjFjZThhY2U2Mjc5
MDEzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFF
bGVtZW50RW51bXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291
bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KQEAgLTUyLDI4ICs1MiwyOCBAQCBjbGFzcyBOb2RlOwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwor
Y2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dCBmaW5hbAotICAgIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4KLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCB7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
IGZpbmFsCisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0PgorICAgICwgcHVibGljIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQor
ICAgICwgcHVibGljIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGNy
ZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0
SWQpCisgICAgc3RhdGljIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBjcmVh
dGUoUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0
SWQpKTsKICAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29u
dGV4dCgpOworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoKTsK
IAogICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQogCiBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
OworICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OwogCi0g
ICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgLy8gUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlCiAgICAgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbDsKIAotICAgIC8vIFdl
YlBsYXliYWNrTW9kZWxDbGllbnQKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAog
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgZmluYWw7CiAgICAgdm9pZCBjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgZmluYWw7
CiAgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgZmluYWw7CkBAIC04NSwyMCAr
ODUsMjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIGZpbmFsOwogICAgIHZvaWQgYXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CiAgICAgdm9pZCBsZWdpYmxlTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQgZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkRGV2aWNlTmFtZSkgZmluYWw7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChi
b29sIGVuYWJsZWQsIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsK
ICAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBmaW5h
bDsKICAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBmaW5hbDsKIAotICAgIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKIAotICAgIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIqIG1fbWFuYWdlcjsKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KiBtX21hbmFnZXI7CiAgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7CiB9OwogCi1jbGFzcyBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJik7Ci0gICAgdmly
dHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOworICAgIHN0YXRpYyBSZWY8UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2UmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKCk7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwogCkBAIC0xMDcsMjEgKzEwNywyMSBAQCBw
dWJsaWM6CiAgICAgdWludDY0X3QgY29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQmKTsKIAogcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOworICAgIGZyaWVuZCBjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogCi0g
ICAgZXhwbGljaXQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJik7CisgICAgZXhw
bGljaXQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJik7CiAKLSAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50PiwgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+PiBNb2RlbElu
dGVyZmFjZVR1cGxlOworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+LCBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CiAgICAgTW9kZWxJbnRlcmZhY2VU
dXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIE1v
ZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRl
eHRJZCk7Ci0gICAgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQm
IGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Cisg
ICAgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIGVuc3VyZU1vZGVs
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCByZW1vdmVD
b250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVp
bnQ2NF90IGNvbnRleHRJZCk7CiAKLSAgICAvLyBJbnRlcmZhY2UgdG8gV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dAorICAgIC8vIEludGVyZmFjZSB0byBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0CiAgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4
dElkKTsKICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSk7CiAgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKTsKQEAgLTEzNCwxMSArMTM0LDExIEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CiAgICAgdm9pZCBhdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCk7CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lk
IGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVk
LCBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB2b2lkIGV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBs
b2NhbGl6ZWREZXZpY2VOYW1lKTsKICAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwogICAgIHZvaWQgbXV0ZWRDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CiAKLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQorICAgIC8vIE1lc3NhZ2VzIGZyb20gUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5CiAgICAgdm9pZCBwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7
CiAgICAgdm9pZCBwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgdG9nZ2xlUGxh
eVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bWVzc2FnZXMuaW4KaW5kZXggOTU2NjZhNzE1NGNjNGE5NDRkMDRlY2E4NmNiMzAzMDA2YmQ3Nzhh
MS4uMmU1OGRjOTg0N2NlZGM5MjI5YjdhM2RlMjMyMTdjNDdmZWNjZjMxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAt
PiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIHsKK21lc3NhZ2VzIC0+IFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIgewogICAgIFBsYXkodWludDY0X3QgY29udGV4dElkKQogICAgIFBhdXNlKHVpbnQ2
NF90IGNvbnRleHRJZCkKICAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLm1tCmluZGV4IDI4NWEyN2U0OGIyYTQyODI5ZmI0NDIyNGMxNzRk
OWIyMzgzNTViNWYuLjkxNDFlMzhmNTQ0NTNkYjE1MmIzMWQyYWJlMWY0Y2JiMDYwMzhiYWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KQEAgLTI0LDE1ICsyNCwxNSBAQAogICovCiAKICNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorI2lt
cG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCiAjaW1w
b3J0ICJBdHRhY2htZW50LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2Fn
ZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAj
aW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgIldlYlBhZ2UuaCIKLSNp
bXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nl
c3MuaCIKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnQu
aD4KQEAgLTUzLDEyNiArNTMsMTI2IEBAIHN0YXRpYyB1aW50NjRfdCBuZXh0Q29udGV4dElkKCkK
ICAgICByZXR1cm4gKytjb250ZXh0SWQ7CiB9CiAKLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQKIAotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6V2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICA6IG1fbWFuYWdlcigmbWFu
YWdlcikKICAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKIHsKIH0KIAotV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQoKQorUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6flBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQoKQogewogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAg
ICAgbV9tYW5hZ2VyLT5yZXNldE1lZGlhU3RhdGUobV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUg
ZHVyYXRpb24pCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmR1cmF0aW9u
Q2hhbmdlZChkb3VibGUgZHVyYXRpb24pCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAg
bV9tYW5hZ2VyLT5kdXJhdGlvbkNoYW5nZWQobV9jb250ZXh0SWQsIGR1cmF0aW9uKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjdXJyZW50VGltZUNoYW5n
ZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50
VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAg
bV9tYW5hZ2VyLT5jdXJyZW50VGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBh
bmNob3JUaW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZl
cmVkVGltZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmJ1ZmZl
cmVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSk7CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlp
bmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29u
dGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKIHsK
ICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnJhdGVDaGFuZ2VkKG1fY29u
dGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91Ymxl
IHBsYXliYWNrU3RhcnRlZFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1l
KQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+cGxheWJhY2tTdGFy
dGVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZp
ZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGlt
ZVJhbmdlcyYgcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRh
dGVJbnRlcnZhbCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnNl
ZWthYmxlUmFuZ2VzQ2hhbmdlZChtX2NvbnRleHRJZCwgcmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1l
LCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZChib29sIHZhbHVlKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtX2NvbnRleHRJZCwgdmFsdWUpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsK
ICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxl
Y3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBpZiAobV9tYW5h
Z2VyKQogICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
bV9jb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1l
KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCiB7
CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5leHRlcm5hbFBsYXliYWNr
Q2hhbmdlZChtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7
CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChib29sIGRpc2FibGVkKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFu
YWdlci0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKG1fY29udGV4dElkLCBk
aXNhYmxlZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQogewogICAgIGlmIChtX21hbmFnZXIpCiAg
ICAgICAgIG1fbWFuYWdlci0+bXV0ZWRDaGFuZ2VkKG1fY29udGV4dElkLCBtdXRlZCk7CiB9CiAK
LSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKyNwcmFnbWEgbWFyayAt
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKIAotUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQorUmVmPFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZShXZWJQ
YWdlJiBwYWdlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIocGFnZSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIocGFnZSkpOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UpCiAgICAgOiBtX3BhZ2UoJnBh
Z2UpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IHBhZ2UucGFnZUlEKCksICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOwogfQogCi1XZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCitQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp+UGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCiB7CiAgICAgZm9yIChhdXRvJiB0
dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgICAgICBSZWZQdHI8
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwogICAgICAgICBzdGQ6
OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwogICAgICAgICBtb2RlbC0+cmVtb3ZlQ2xp
ZW50KCppbnRlcmZhY2UpOwogICAgICAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIp
OwpAQCAtMTg0LDE5ICsxODQsMTkgQEAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6fldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIoKQogICAgIG1fbWVkaWFFbGVtZW50cy5jbGVhcigpOwogICAg
IG1fY2xpZW50Q291bnRzLmNsZWFyKCk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCkKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKQogewotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dD4gbW9kZWwgPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZSA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29u
dGV4dElkKTsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1v
ZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7CiAgICAg
bW9kZWwtPmFkZENsaWVudCgqaW50ZXJmYWNlKTsKIAogICAgIHJldHVybiBzdGQ6Om1ha2VfdHVw
bGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7CiB9CiAKLVdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK1BsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVy
ZmFjZVR1cGxlKCkpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTIwNCwyMCAr
MjA0LDIwIEBAIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUm
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiB9CiAKLVdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpCitXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQog
ewogICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4
dElkKSk7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpl
bnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIHJldHVybiAqc3RkOjpn
ZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKQogewotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+
IGludGVyZmFjZTsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+
IG1vZGVsOworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRl
cmZhY2U7CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpOwogCiAgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1lZGlh
RWxlbWVudCA9IG1vZGVsLT5tZWRpYUVsZW1lbnQoKTsKQEAgLTIyOCwxOSArMjI4LDE5IEBAIHZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpCiAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElk
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JD
b250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgQVNTRVJU
KG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwogICAgIGlmIChtX2NsaWVudENv
dW50cy5yZW1vdmUoY29udGV4dElkKSkKICAgICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldFVwUGxheWJhY2tDb250
cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKIHsKICNpZiBQTEFURk9STShN
QUMpCiAgICAgYXV0byBmb3VuZEl0ZXJhdG9yID0gbV9tZWRpYUVsZW1lbnRzLmZpbmQoJm1lZGlh
RWxlbWVudCk7CkBAIC0yNjIsMTEgKzI2MiwxMSBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRQog
ICAgIH0KIAogICAgIGFkZENsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0
SWQpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKG1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNldFVwUGxheWJhY2tDb250cm9sc01h
bmFnZXJXaXRoSUQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxh
eWJhY2tDb250cm9sc01hbmFnZXIoKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjbGVh
clBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYg
KCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKQEAgLTI3NCwxMSArMjc0LDExIEBAIHZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigp
CiAKICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KTsKICAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNsZWFyUGxheWJhY2tD
b250cm9sc01hbmFnZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNsZWFyUGxheWJhY2tDb250cm9s
c01hbmFnZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAjZW5kaWYKIH0KIAotdWludDY0X3QgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKK3VpbnQ2NF90IFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50JiBtZWRpYUVsZW1lbnQpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVu
dHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0p
OwogICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CkBA
IC0yODYsMzkgKzI4NiwzOSBAQCB1aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpj
b250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRQogICAgIHJldHVybiBj
b250ZXh0SWQ7CiB9CiAKLSNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDoKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dDoKIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSZXNl
dE1lZGlhU3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0
ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
ZHVyYXRpb24pCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmR1cmF0aW9uQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RHVyYXRpb25DaGFuZ2Vk
KGNvbnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RHVyYXRpb25DaGFuZ2Vk
KGNvbnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQogewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDdXJyZW50VGltZUNo
YW5nZWQoY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpDdXJyZW50VGltZUNoYW5nZWQoY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGlt
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVy
ZWRUaW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRpbWVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKIHsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QnVmZmVyZWRU
aW1lQ2hhbmdlZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpC
dWZmZXJlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgYnVmZmVyZWRUaW1lKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tTdGFy
dGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVk
VGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tTdGFydGVkVGltZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6UGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRU
aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNvbnRl
eHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSYXRlQ2hhbmdlZChjb250ZXh0SWQsIGlzUGxh
eWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJhdGVDaGFuZ2VkKGNvbnRl
eHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBk
b3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxh
c3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCiB7CiAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlc1ZlY3RvcjsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7CkBAIC0zMjYsMTQzICsz
MjYsMTQzIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QKICAgICAgICAgZG91YmxlIGVuZCA9IHRp
bWVSYW5nZXMucmFuZ2VzKCkuZW5kKGkpLnRvRG91YmxlKCk7CiAgICAgICAgIHJhbmdlc1ZlY3Rv
ci5hcHBlbmQoeyBzdGFydCwgZW5kIH0pOwogICAgIH0KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6U2Vla2FibGVSYW5nZXNWZWN0b3JD
aGFuZ2VkKGNvbnRleHRJZCwgV1RGTW92ZShyYW5nZXNWZWN0b3IpLCBsYXN0TW9kaWZpZWRUaW1l
LCBsaXZlVXBkYXRlSW50ZXJ2YWwpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6U2Vla2FibGVSYW5nZXNW
ZWN0b3JDaGFuZ2VkKGNvbnRleHRJZCwgV1RGTW92ZShyYW5nZXNWZWN0b3IpLCBsYXN0TW9kaWZp
ZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFs
dWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OkNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY29udGV4dElkLCB2YWx1ZSksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNvbnRleHRJZCwgdmFs
dWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBz
ZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxv
Y2FsaXplZERldmljZU5hbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVz
Q2hhbmdlZChjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0YXJnZXRU
eXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpFeHRlcm5hbFBs
YXliYWNrUHJvcGVydGllc0NoYW5nZWQoY29udGV4dElkLCBlbmFibGVkLCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4odGFyZ2V0VHlwZSksIGxvY2FsaXplZERldmljZU5hbWUpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxlY3RlZElu
ZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
Y29udGV4dElkLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElk
LCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBkaXNhYmxlZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRD
aGFuZ2VkKGNvbnRleHRJZCwgZGlzYWJsZWQpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRDaGFuZ2VkKGNvbnRleHRJZCwgZGlzYWJsZWQpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVk
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptdXRlZENoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIG11dGVkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNdXRlZENoYW5nZWQoY29udGV4dElkLCBtdXRlZCkp
OworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpNdXRlZENoYW5nZWQoY29udGV4dElkLCBtdXRlZCkpOwogfQogCi0jcHJhZ21hIG1hcmsgTWVz
c2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6CisjcHJhZ21hIG1hcmsg
TWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXkodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkucGxheSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkucGF1c2UoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Ojp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGxheVN0YXRlKCk7CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElk
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBj
b250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjcnViYmlu
ZygpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjcnViYmluZyh1
aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjcnVi
YmluZyh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5lbmRTY3J1YmJpbmcoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpz
ZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGlt
ZSkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWtUb1RpbWUodGltZSk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWsodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgdGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNl
ZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKIHsKICAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLmZhc3RTZWVrKHRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29u
dGV4dElkKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5n
VXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0Zv
cndhcmQoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5u
aW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7CiB9CiAKLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4
dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyh1aW50NjRfdCBj
b250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY2FubmluZygp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQ2NF90IGluZGV4KQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRp
YU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewogICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKIH0K
IAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxlbWVu
dElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCkK
IHsKICAgICBhdXRvIGVsZW1lbnQgPSBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm1lZGlhRWxlbWVu
dCgpOwogICAgIGlmIChlbGVtZW50KQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJl
c3BvbnNlKGNvbnRleHRJZCwgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSkpOworICAgICAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6SGFuZGxl
Q29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNvbnRleHRJZCwgZWxlbWVudC0+Z2V0SWRBdHRy
aWJ1dGUoKSkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBp
Y3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
ICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKIH0K
IAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVNdXRlZCh1aW50NjRfdCBj
b250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZU11dGVkKHVpbnQ2
NF90IGNvbnRleHRJZCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZU11
dGVkKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0ZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCiB7CiAgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5zZXRNdXRlZChtdXRlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
CmluZGV4IDlhOGU0N2MwZWQxYWEyZTYzNmIyNmY2ODY5YThiMjUxY2U4MWQ5YzUuLmY4ZDNjMjQ5
MjU1MTJiYTMzOGRiMDljMmMxMmY3NWM3NTI5MjNjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
CkBAIC0yMiw4ICsyMiw4IEBACiAgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcl9o
Ci0jZGVmaW5lIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJfaAorCisjcHJhZ21hIG9uY2UKIAog
I2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCkBAIC0zMSw3ICszMSw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVk
aWFFbGVtZW50RW51bXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTUyLDE5ICs1MiwxOSBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKIGNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OwotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CitjbGFzcyBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQKLSAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQgeworY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0PiBjcmVhdGUoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3Qg
Y29udGV4dElkKQorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gY3JlYXRlKFZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRl
eHRJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwg
Y29udGV4dElkKSk7CiAgICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0K
IApAQCAtODQsMTMgKzg0LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzRnVsbHNjcmVlbihi
b29sIGZsYWcpIHsgbV9pc0Z1bGxzY3JlZW4gPSBmbGFnOyB9CiAKIHByaXZhdGU6Ci0gICAgLy8g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudAogICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZv
aWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVy
cmlkZTsKIAotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiwgdWludDY0X3QgY29u
dGV4dElkKTsKIAotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIqIG1fbWFuYWdlcjsKKyAg
ICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7CiAgICAgdWludDY0X3QgbV9jb250
ZXh0SWQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJI
b3N0aW5nQ29udGV4dDsKICAgICBib29sIG1faXNBbmltYXRpbmcgeyBmYWxzZSB9OwpAQCAtOTks
MTAgKzk5LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzRnVsbHNjcmVlbiB7IGZhbHNlIH07
CiB9OwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgeworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IGNyZWF0ZShX
ZWJQYWdlJiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOwotICAgIHZpcnR1YWwgfldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI+IGNyZWF0ZShXZWJQYWdlJiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOworICAgIHZp
cnR1YWwgflZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKICAgICAKICAgICB2b2lkIGludmFsaWRh
dGUoKTsKICAgICAKQEAgLTExNSwyNCArMTE1LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4aXRW
aWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ7CiAKLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBh
Z2UmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7CisgICAgZXhwbGljaXQgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcihXZWJQYWdlJiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOwogCi0gICAg
dHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudD4sIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdl
YkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiwgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1cGxlOwogICAgIE1vZGVs
SW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KTsKICAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBl
bnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZv
aWQgcmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgYWRkQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKKyAgICAvLyBJbnRlcmZhY2UgdG8gVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAogICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbyk7CiAgICAgdm9pZCB2aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAK
LSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQorICAg
IC8vIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CiAgICAgdm9pZCBy
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVk
aWEpOwogICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAg
ICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwpAQCAtMTQ0LDcg
KzE0NCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSk7CiAgICAgCiAgICAgV2Vi
UGFnZSogbV9wYWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXI7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjsKICAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQqLCB1aW50NjRfdD4gbV92aWRlb0VsZW1lbnRzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIE1v
ZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKICAgICB1aW50NjRfdCBtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCB7IDAgfTsKQEAgLTE1NSw0ICsxNTUsMyBAQCBwcm90ZWN0ZWQ6CiAK
ICNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCiAKLSNlbmRpZiAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCAxMzU5
YzI1YWFlN2IwMTVlMzAxM2Q5YTFiMTUwN2I2MTBhMmZiY2E1Li41YzRiNTY4OTU1OWVlNzVkOTk0
MTZlODA0YzdmY2Y2OTdiYjAyNTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1l
c3NhZ2VzLmluCkBAIC0yMSw3ICsyMSw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICNpZiAoUExBVEZP
Uk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIgeworbWVzc2FnZXMgLT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlciB7CiAgICAgUmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmlu
aXNoZWRXaXRoTWVkaWEpCiAgICAgRGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKICAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW0KaW5kZXggZGY0NjE3NGVmM2FkODNlMDhmNDNhZDhlMzdhYmZiNTEyODlhODA2
OC4uZWY2ODBiOWRhYjQ2YjJmYzY1NWY3MzIwZTdhNTVkMDkyMTE4MjE0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbQpAQCAtMjMsMTcgKzIzLDE3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgog
CiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAKICNpbXBvcnQgIkF0dGFjaG1lbnQu
aCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2lt
cG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgog
I2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNz
YWdlcy5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CkBAIC02NCw1NCArNjQs
NTQgQEAgc3RhdGljIEludFJlY3QgaW5saW5lVmlkZW9GcmFtZShIVE1MVmlkZW9FbGVtZW50JiBl
bGVtZW50KQogICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1Rv
Um9vdFZpZXcocmVjdCk7CiB9CiAKLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQKIAotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2Vy
LCB1aW50NjRfdCBjb250ZXh0SWQpCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1h
bmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKICAg
ICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKIHsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKQorVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6flZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQoKQogewogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRl
eHQ+JiYgY29udGV4dCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0
TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4m
JiBjb250ZXh0KQogewogICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdURk1vdmUoY29udGV4
dCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6aGFzVmlk
ZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewogICAgIGlmIChtX21hbmFn
ZXIpCiAgICAgICAgIG1fbWFuYWdlci0+aGFzVmlkZW9DaGFuZ2VkKG1fY29udGV4dElkLCBoYXNW
aWRlbyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlk
ZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBpZiAobV9tYW5hZ2Vy
KQogICAgICAgICBtX21hbmFnZXItPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV9jb250ZXh0SWQs
IHZpZGVvRGltZW5zaW9ucyk7CiB9CiAKLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKIAotUmVmPFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0
ZShXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKQorUmVmPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIocGFnZSwgcGxheWJhY2tT
ZXNzaW9uTWFuYWdlcikpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIm
IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCiAgICAgOiBtX3BhZ2UoJnBhZ2UpCiAgICAgLCBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXIocGxheWJhY2tTZXNzaW9uTWFuYWdlcikKIHsKLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwg
KnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBw
YWdlLnBhZ2VJRCgpLCAqdGhpcyk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0
TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CiAgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gdHVwbGU7CiAKICAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRy
KTsKQEAgLTEyNSwyMCArMTI1LDIwIEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKICAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwogICAg
IAogICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmludmFsaWRhdGUoKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKIHsKICAgICBBU1NFUlQobV9wYWdl
KTsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogICAgIG1fcGFnZSA9IG51bGxwdHI7CiB9
CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNl
ID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250
ZXh0SWQpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWwgPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKICAgICBt
X3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsK
IAogICAgIGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250
ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOwpAQCAtMTQ3LDcgKzE0Nyw3
IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShX
VEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKIH0KIAotV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNl
VHVwbGUoKSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpAQCAtMTU1LDIwICsxNTUs
MjAgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXIKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKIH0KIAotV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNv
bnRleHRJZCkKK1dlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAg
ICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQp
KTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK1ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3Vy
ZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgcmV0dXJuICpzdGQ6OmdldDwx
PihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBt
b2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZTsKICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKGNvbnRleHRJZCk7CiAKICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPnJlbW92ZUNs
aWVudEZvckNvbnRleHQoY29udGV4dElkKTsKQEAgLTE4MSwxNCArMTgxLDE0IEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
CiAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElk
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFk
ZChjb250ZXh0SWQsIDEpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRf
dCBjb250ZXh0SWQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRl
eHRJZCkpOwogCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKIAogI3ByYWdt
YSBtYXJrIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQ6CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Citib29sIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAogewogI2lmIFBM
QVRGT1JNKElPUykKICAgICBVTlVTRURfUEFSQU0obW9kZSk7CkBAIC0yMTcsNyArMjE3LDcgQEAg
Ym9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW4KICNlbmRpZgogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRl
b0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7CiAgICAg
QVNTRVJUKG1fcGFnZSk7CiAgICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CkBAIC0yMjcsOCArMjI3LDggQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVu
dChIVE1MVmlkZW9FbGUKICAgICBVTlVTRURfUEFSQU0oYWRkUmVzdWx0KTsKICAgICBBU1NFUlQo
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9PSBjb250ZXh0SWQpOwogCi0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKICAgICBzdGQ6OnRpZShtb2Rl
bCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CiAgICAg
YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwogICAgIGlmICghaW50ZXJmYWNlLT5sYXll
ckhvc3RpbmdDb250ZXh0KCkpCkBAIC0yNTAsMTAgKzI1MCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxW
aWRlb0VsZQogCiAgICAgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlID0gdmlkZW9FbGVtZW50
LndlYmtpdFN1cHBvcnRzUHJlc2VudGF0aW9uTW9kZShIVE1MVmlkZW9FbGVtZW50OjpWaWRlb1By
ZXNlbnRhdGlvbk1vZGU6OlBpY3R1cmVJblBpY3R1cmUpOwogICAgIAotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3Jl
ZW5XaXRoSUQoY29udGV4dElkLCBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+Y29u
dGV4dElEKCksIHZpZGVvUmVjdCwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBpbnRlcmZh
Y2UtPmZ1bGxzY3JlZW5Nb2RlKCksIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXll
ckhvc3RpbmdDb250ZXh0KCktPmNvbnRleHRJRCgpLCB2aWRlb1JlY3QsIG1fcGFnZS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSwgaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpLCBhbGxvd3NQaWN0dXJl
SW5QaWN0dXJlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVv
RWxlbWVudCYgdmlkZW9FbGVtZW50KQogewogICAgIEFTU0VSVChtX3BhZ2UpOwogICAgIEFTU0VS
VChtX3ZpZGVvRWxlbWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOwpAQCAtMjY3LDEwICsy
NjcsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUwKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aW50ZXJmYWNlLnNldElzQW5pbWF0aW5nKHRydWUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjb250ZXh0
SWQsIGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpF
eGl0RnVsbHNjcmVlbihjb250ZXh0SWQsIGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KSks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxW
aWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCiB7CiAjaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAgICAgQVNTRVJUKG1fcGFn
ZSk7CkBAIC0yODEsNDAgKzI4MSw0MCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcgogCiAgICAg
aW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7CiAKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3Jl
ZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9kZSksIG1fcGFnZS0+
cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoY29udGV4dElk
LCB0YXJnZXRNb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TSh2aWRlb0VsZW1lbnQpOwogICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRNb2RlKTsKICNlbmRpZgog
fQogCi0jcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6CisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aGFzVmlkZW9D
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6aGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBo
YXNWaWRlbykKIHsKICAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0SGFzVmlkZW8oY29udGV4dElk
LCBoYXNWaWRlbyksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgICAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0SGFzVmlkZW8oY29udGV4dElk
LCBoYXNWaWRlbyksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBj
b25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZs
b2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQogewogICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRW
aWRlb0RpbWVuc2lvbnMoY29udGV4dElkLCB2aWRlb0RpbWVuc2lvbnMpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldFZpZGVvRGltZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6CisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmlu
aXNoZWRXaXRoTWVkaWEpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlcXVlc3RGdWxs
c2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQog
ewogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1vZGUs
IGZpbmlzaGVkV2l0aE1lZGlhKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9k
ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBBU1NFUlQobV9wYWdlKTsKICAgICBQ
bGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOwpAQCAtMzMzLDI4ICsz
MzMsMjggQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKQogICAgIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciA9IG1f
cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBbdmlkZW9MYXllciBzZXRUcmFuc2Zvcm06
Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0b3IsIGhvc3RpbmdTY2FsZUZh
Y3RvciwgMSldOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGlu
dGVyZmFjZTsKICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKGNvbnRleHRJZCk7CiAKICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRl
eHQoKS0+c2V0Um9vdExheWVyKHZpZGVvTGF5ZXIpOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgCi0gICAgbW9kZWwtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKHZpZGVvTGF5ZXIsIFtzdHJvbmdUaGlzLCB0aGlzLCBjb250ZXh0
SWRdIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3N0cm9uZ1RoaXMsIHRoaXMsIGNvbnRleHRJZF0gewotICAgICAgICAgICAgaWYgKHN0cm9uZ1Ro
aXMtPm1fcGFnZSkKLSAgICAgICAgICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIHN0
cm9uZ1RoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcih2aWRlb0xheWVyLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7Cisg
ICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0
ZWRUaGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKKyAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlz
LT5tX3BhZ2UpCisgICAgICAgICAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0
ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiAgICAgCiAg
ICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBt
b2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlOwogICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKTsKIAogICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcoZmFsc2Up
OwpAQCAtMzY4LDQwICszNjgsNDAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpk
aWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3Rl
ZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyPiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB2aWRlb0VsZW1lbnRdIHsKLSAgICAgICAgaWYgKHN0
cm9uZ1RoaXMtPm1fcGFnZSkKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPmV4aXRWaWRlb0Z1bGxz
Y3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCk7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudF0g
eworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50
KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwogICAgIHN0ZDo6dGllKG1v
ZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICAKLSAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihbc3Ryb25nVGhpcywg
Y29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBjb250ZXh0SWQsIGludGVyZmFj
ZSwgbW9kZWxdIHsKLSAgICAgICAgICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihu
aWwsIFtzdHJvbmdUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0gewotICAgICAgICAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBj
b250ZXh0SWQsIGludGVyZmFjZV0geworICAgIG1vZGVsLT53YWl0Rm9yUHJlcGFyZWRGb3JJbmxp
bmVUaGVuKFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKKyAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3Rl
ZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0geworICAgICAgICAgICAgbW9kZWwt
PnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCwgW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwg
aW50ZXJmYWNlXSB7CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlXSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0
KCktPnNldFJvb3RMYXllcihudWxscHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGludGVy
ZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChudWxscHRyKTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9wYWdlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkNsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCks
IHN0cm9uZ1RoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVk
VGhpcy0+bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OkNsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+cGFn
ZUlEKCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0p
OwogICAgIH0pOwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRD
bGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwogICAgIHN0
ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4
dElkKTsKIAogICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcoZmFsc2UpOwpAQCAtNDE4LDE5
ICs0MTgsMTkgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgaWYgKCF2aWRlb0VsZW1lbnQgfHwgIXRh
cmdldElzRnVsbHNjcmVlbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHZpZGVvRWxlbWVudCwgbW9k
ZV0gewotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgc3Ryb25n
VGhpcy0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCwg
bW9kZSk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3By
b3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudCwgbW9kZV0geworICAgICAgICBpZiAocHJvdGVjdGVk
VGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZW50ZXJWaWRlb0Z1bGxz
Y3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCwgbW9kZSk7CiAgICAgfSk7CiB9CiAg
ICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5
RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0
SWQsIHVuc2lnbmVkIGdyYXZpdHkpCiB7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRW
aWRlb0xheWVyR3Jhdml0eSgoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSln
cmF2aXR5KTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldFZpZGVvTGF5ZXJHcmF2aXR5
KChWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KWdyYXZpdHkpOwogfQogICAgIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDM5LDEzICs0MzksMTMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLAogCiAg
ICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQogICAgICAgICBtb2RlbC52aWRlb0VsZW1lbnQoKS0+c2Ny
b2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2UpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpQcmVwYXJlZFRvUmV0dXJuVG9Jbmxp
bmUoY29udGV4dElkLCB0cnVlLCBpbmxpbmVWaWRlb0ZyYW1lKCptb2RlbC52aWRlb0VsZW1lbnQo
KSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGNvbnRleHRJ
ZCwgdHJ1ZSwgaW5saW5lVmlkZW9GcmFtZSgqbW9kZWwudmlkZW9FbGVtZW50KCkpKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNl
dFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0
UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQs
IFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCiB7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNl
OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKICAg
ICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNv
bnRleHRJZCk7CiAKICAgICBpZiAoc3RkOjppc25hbihib3VuZHMueCgpKSB8fCBzdGQ6OmlzbmFu
KGJvdW5kcy55KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLndpZHRoKCkpIHx8IHN0ZDo6aXNuYW4o
Ym91bmRzLmhlaWdodCgpKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315367</attachid>
            <date>2017-07-13 12:20:27 -0700</date>
            <delta_ts>2017-07-13 18:19:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174437-20170713122027.patch</filename>
            <type>text/plain</type>
            <size>729146</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzEzM2RmMjEzZGVlMTNk
OTE5MTFjYWUxYTQwMzUzNzRhMjliODdlOC4uYTJhODMxNThhNmQ0ZWNiZDRjZmE4YWY0MmRhMzNh
Yjc2OTIyM2FmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1MCBAQAorMjAxNy0wNy0xMiAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVm
aXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50
ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFj
a1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVu
ZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFt
ZXNwYWNlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmguCisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6flBsYXliYWNrU2Vzc2lvbk1v
ZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojp+UGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlh
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpi
ZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0
b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5Q
bGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI6On5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgu
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6flZpZGVvRnVsbHNjcmVl
bk1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
LgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbS4KKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcyk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENs
aWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3Zl
Q2xpZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zp
c2libGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhh
c1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmguCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
LgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJh
bmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICgtW1dlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSBmdWxsc2NyZWVuSW50ZXJmYWNlXSk6CisgICAgICAgICgtW1dl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0p
OgorICAgICAgICAoY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckxheWVyIGZ1bGxzY3JlZW5JbnRlcmZhY2VdKToKKyAgICAgICAgKC1bV2ViQVZQ
bGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0pOgorICAgICAgICAoLVtXZWJBVlBs
YXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpdKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpjcmVhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIp
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNj
cmVlbk1vZGVsKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVs
bHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRU
b1N0YXJ0UGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVT
dG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dl
YkFWUGxheWVyQ29udHJvbGxlci5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZCk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnBhdXNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKToK
KyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmR1cmF0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpjdXJyZW50VGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRl
cnZhbCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxh
eUZhc3RSZXZlcnNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxz
Y3JlZW46bW9kZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRGaW5pc2hGdWxsc2NyZWVuOl0pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENs
ZWFudXBGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hh
bmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdl
c0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
Om11dGVkQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVu
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnBsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnBhdXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YmVnaW5TY3J1YmJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2Fi
bGVSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJ
bnRlcnZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxs
c2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJiaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjph
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0uCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6XSk6Cisg
ICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgaW52YWxpZGF0ZV0p
OgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIHNldFVwUElQ
Rm9yVmlkZW9WaWV3OndpdGhGcmFtZTppbldpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250
YWluZXI6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
cGlwU2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakMgcGlwRGlkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgcGlwQWN0aW9uUGxheTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25QYXVzZTpdKToKKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25TdG9wOl0pOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhck1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlk
ZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZWVrVG9UaW1lOnRvbGVyYW5jZUJlZm9yZTp0b2xl
cmFuY2VBZnRlcjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgYmVn
aW5Ub3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlciBlbmRUb3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOl0p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDdXJyZW50TGVnaWJs
ZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hY10pOgorICAgICAgICAo
LVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHRvZ2dsZVBsYXli
YWNrXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6
XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGlzUGxheWluZ10pOgor
ICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciB0b2dnbGVQaWN0dXJlSW5QaWN0
dXJlXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hY10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6XSk6IERlbGV0
ZWQuCisKIDIwMTctMDctMTMgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBzdHlsZS4gVXNlICNwcmFnbWEgb25jZSBpbiBWaWRlb0Z1bGxzY3JlZW4gYW5k
IFBsYXliYWNrU2Vzc2lvbiBoZWFkZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDViOGVjMjFjZmQ3
OGRlMDlkODc5MjlmNWJhNjk4ZjA4OWU1ZGRlYWYuLmNkNDY1Y2Y0NjUwYWZiMmIzZGMwODA0YTdk
ODdmZmFkMTNlYWU5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNy0w
Ny0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lv
biBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0
aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFu
ZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAgIFRoaXMgcHJl
Zml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9y
IFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxl
bWVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAgICogV2Vi
Vmlldy9XZWJWaWV3RGF0YS5tbToKKwogMjAxNy0wNy0xMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFzeW5jIGltYWdlIGRlY29kaW5nIGZv
ciBsYXJnZSBpbWFnZXMgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCAyMDNlNTE1YTJmYTY0N2I4MWE4NzM0Nzk3ODUxMGJlNjEyNGE0ZmJiLi4zMjUyNzc1NzVmYWVj
ZmZiYjU5NjNlYTRhNDRkMjUwNDA2ZTE1NzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYzIEBA
CisyMDE3LTA3LTEyICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgV2ViIHByZWZpeCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJh
Y2tTZXNzaW9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQ0MzcKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMzMyMjc0MjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBy
ZW1vdmVzIHRoZSByZWR1bmRhbnQgIldlYiIgcHJlZml4IGZyb20gdGhlIFdlYlZpZGVvRnVsbHNj
cmVlbiogYW5kIFdlYlBsYXliYWNrU2VzaW9uKiBmYW1pbHkgb2YgY2xhc3Nlcy4KKyAgICAgICAg
VGhpcyBwcmVmaXggaXMgcmVkdW5kYW50IHNpbmNlIHRoZXNlIGFyZSBhbHJlYWR5IGluIHRoZSBX
ZWJLaXQgb3IgV2ViQ29yZSBuYW1lc3BhY2VzLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMu
bWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5LmguCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4u
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5t
bTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWtUb1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAg
IChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3
YXJkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRT
Y2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVNdXRl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0TXV0
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjptdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjppbnZhbGlkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVN
b2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92ZUNs
aWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJl
c2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
ZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om11
dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6cGxheSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
cGF1c2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRv
Z2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjYW5u
aW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRNdXRlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENv
bnRyb2xsZWRFbGVtZW50SUQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
LgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW06IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1tLgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6aGFzTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6aXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZENsZWFudXBGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6flZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5X
aXRoSUQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNl
dEhhc1ZpZGVvKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4
aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2
aXR5KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxs
c2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmlzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOiBSZW1vdmVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnVwZGF0ZU1lZGlhVG91Y2hCYXIpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjptX3dlYWtQdHJGYWN0b3J5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29h
L1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oLgorICAgICAgICAqIFdl
YlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpuZXh0Q29udGV4dElk
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmVz
ZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJhdGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJl
dmVyc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjptdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6flBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9k
ZWwpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVJbnRl
cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xp
ZW50Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnJlbW92ZUNsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1l
ZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJl
c2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1l
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWspOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9y
d2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUlu
UGljdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2ds
ZU11dGVkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0
ZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLmguCisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbS4KKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0No
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6flZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNW
aWRlb0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1l
bnQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1
cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpk
aWRFbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXll
ckZyYW1lRmVuY2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW06IFJlbW92ZWQuCisKIDIwMTctMDctMTMgIEplcmVteSBKb25lcyAgPGpl
cmVteWpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBzdHlsZS4gVXNlICNwcmFnbWEgb25jZSBp
biBWaWRlb0Z1bGxzY3JlZW4gYW5kIFBsYXliYWNrU2Vzc2lvbiBoZWFkZXJzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI4NDNj
MTc0MmZhNWEzMmNlNTkzYjQzYzJjZTllYjI5MDViNmIxZDguLmM5ZDY3Mzk0ODMyYzg1ZDA3YTRk
NjJkNDFiYTk0NmMwNmJlYjgyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2ODUsOCArMTY4NSw4IEBACiAJCTNGODAyMDM2
MUU5RTQ3QzMwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODAyMDMxMUU5RTM4MUQwMERF
QzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmNwcCAqLzsgfTsKIAkJM0Y4MDIwMzcxRTlF
NDdDNTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjgwMjAzNDFFOUUzODFEMDBE
RUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKIAkJM0Y4MDIw
MzgxRTlFNDdDOTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODAyMDMzMUU5
RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi87IH07
Ci0JCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5tbSAqLzsgfTsKLQkJM0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW0gKi87IH07CisJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJM0ZGMUZBNjYxRTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0YzQkI1ODIxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwICov
OyB9OwogCQkzRkY4MTNBNzFEQkE4NjQwMDA5QkYwMDEgLyogUG9pbnRlckxvY2tDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0
RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZGRkY5QTgxNTlEOUE1NTAw
MjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlLmNwcCAqLzsgfTsKQEAgLTI0NzUsMTEgKzI0NzUsMTEgQEAKIAkJ
NTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjEx
NzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLzsgfTsKIAkJNTFGQjY3REIxQUU2QjgyQjAwRDA2QzVB
IC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250
ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi87IH07CiAJCTUxRkI2N0RDMUFFNkI4MkYwMEQw
NkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENv
bnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMubW0gKi87IH07CisJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovOyB9OwogCQk1MjY3MjRGMzFDQjJGRUFEMDA3NTk3
NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovOyB9OwogCQk1MkIwRDRCRTFDNTdGRDFF
MDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJC
MEQ0QzAxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRC
RjFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkIwRDRD
MjFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdG
RjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJCMEQ0QzAxQzU3RkQ2
NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRjFDNTdGRDY2MDA3N0NF
NTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMg
LyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJCNkM5QzIxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJCNkM5QkQxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24u
Y3BwICovOyB9OwogCQk1MkI2QzlDMzE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29s
bGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCNkM5QkUxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsg
fTsKIAkJNTJCNkM5QzUxNUUzRjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QzAx
NUUzRjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwpAQCAtMjQ4
Nyw5ICsyNDg3LDkgQEAKIAkJNTJDQ0E5RTIxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkNDQTlFMDE1RTNGNjJDMDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0
aW9uLmNwcCAqLzsgfTsKIAkJNTJDQ0E5RTMxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJDQ0E5RTExNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlv
bi5oICovOyB9OwogCQk1MkQ1QTE4RjFDNTQ1OTIzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TGF5ZXJNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFu
YWdlci5tbSAqLzsgfTsKLQkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1
QTFBODFDNTc0OEEzMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVB
MUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUy
RDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
RDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSAqLzsgfTsKKwkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkQ1QTFBODFD
NTc0OEEzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE1MUM1NzQ4
ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyRDVBMUE5MUM1NzQ4
QTkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE2MUM1NzQ4ODkw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLzsgfTsKIAkJ
NTJFMkNBRkMxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0
RiAvKiBNZWRpYVByb2R1Y2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTJGMTA4NjUxNjJCNkRBNDAwOUFDODFFIC8qIE1peGVkQ29udGVudENo
ZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJGMTA4NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovOyB9
OwogCQk1MkYxMDg2NjE2MkI2REE4MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjMxNjJC
NkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjIwMCwxNSArNjIwMCwxNSBAQAogCQlD
REEwN0ZCRTE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQkMxOEUwQTE2QTAw
NDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREEwN0ZDMTE4RTBBMjJCMDA0Njk5RkEgLyogU3lz
dGVtU2xlZXBMaXN0ZW5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTA3RkJGMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3Rl
bmVyTWFjLm1tICovOyB9OwogCQlDREEwN0ZDMjE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xl
ZXBMaXN0ZW5lck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMDdGQzAxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMu
aCAqLzsgfTsKLQkJQ0RBMjlBMDkxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNE
QTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEExQ0JEOUE3
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9OwotCQlDREEy
OUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNE
QTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
NDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICov
OyB9OwotCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RB
MjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lm1tICovOyB9OworCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlB
MEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwQTFDQkQ5QTc0MDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87IH07CisJCUNEQTI5QTBGMUNCRDlDRkUwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi87IH07CisJCUNEQTI5QTE3MUNCREE1NkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQubW0gKi87IH07CiAJCUNEQTI5QTMxMUNCRjc0REEwMDkwMUNDRiAv
KiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRDFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJD
b250cm9sbGVyLm1tICovOyB9OwotCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNEQTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0RBNzk4MjQxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMzE3MEEy
NTgzMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmNwcCAqLzsgfTsKIAkJQ0RBNzk4MjcxNzBBMjc5
MTAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTc5ODI1MTcwQTI3OTAwMEQ0NUM1NSAvKiBBdWRpb1Nl
c3Npb25JT1MubW0gKi87IH07CiAJCUNEQTc5ODJBMTcwQTNEMDAwMEQ0NUM1NSAvKiBBdWRpb1Nl
c3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTc5ODIxMTcwQTIyREMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTMyNiw4ICs5MzI2LDggQEAKIAkJ
M0Y4MDIwMzIxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyog
Q29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1
ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZC
QzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUw
MDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QTcxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1Zp
ZXdwb3J0UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QUIxNTlE
OUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAyMjksMTIgKzEwMjI5LDEyIEBACiAJCTUxRkI1NTAz
MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNDbG9zZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFGQjY3RDkxQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHls
ZVNoZWV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRF
eHRlbnNpb25TdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFG
QjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgw
MiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjIxQ0IyRkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJl
c2VudGF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMEQ0QkYxQzU3
RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyQjZDOUJEMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlC
RTE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjZDOUJGMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1l
ZEZsb3dDb2xsZWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01OYW1lZEZsb3dD
b2xsZWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjQ0LDkgKzEw
MjQ0LDkgQEAKIAkJNTJDQ0E5RTExNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29s
bGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEQxQzU0
NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEUxQzU0NTkwMzAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE1
MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBNjFD
NTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
NUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQcm9kdWNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4
ZWRDb250ZW50Q2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNaXhlZENvbnRlbnRDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJGMTA4NjMxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWl4ZWRDb250ZW50Q2hlY2tlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ3MzcsMTYgKzE0NzM3LDE2IEBACiAJCUNEQTA3RkJD
MThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVNsZWVwTGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQkYxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlz
dGVuZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeXN0
ZW1TbGVlcExpc3RlbmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEw
N0ZDMDE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEQxQ0JE
OUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE0MUNCREE1
NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE1MUNCREE1NkMw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5
QTJDMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5QTJEMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBs
YXllckNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJBVlBsYXllckNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEy
RjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlB
MkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJGMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUg
LyogQXVkaW9TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREE3OTgyMzE3MEEyNTgzMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2Vz
c2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTc5ODI1MTcwQTI3OTAw
MEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBBdWRpb1Nlc3Npb25JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTEzNywxNCArMTkxMzcsMTQgQEAKIAkJCQlFMUEzMTYyQzEzNEJDMzJEMDA3QzlB
NEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tICovLAogCQkJCUNENTg5NkUwMUNE
MkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oICovLAogCQkJCUNE
NTg5NkRGMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSAq
LywKLQkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggKi8sCi0JCQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLywKKwkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8sCisJCQkJQ0RBMjlBMTQxQ0JE
QTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLywKIAkJCQlD
RDgyMDMwNjEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
ICovLAogCQkJCUNEODIwMzA3MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tICovLAogCQkJCUNEODIwMzA4MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8sCiAJCQkJQ0Q4MjAzMDkxMzk1QUI2
QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8s
Ci0JCQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5oICovLAotCQkJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8sCisJCQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUz
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovLAorCQkJCTUyMTMxRTVBMUM0RjE1
NjEwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4
MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovLAogCQkJCUNE
ODIwMzBGMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gKi8sCiAJCQkJ
OTM4MEY0NzcwOUExMUFDQzAwMUZEQjM0IC8qIFdpZGdldE1hYy5tbSAqLywKQEAgLTIxMTQ5LDE0
ICsyMTE0OSwxNCBAQAogCQkJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5t
bSAqLywKIAkJCQlGNDgyMjMwRjFFMzg2OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFz
dGVib2FyZC5oICovLAogCQkJCUY0ODIyMzBFMUUzODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJv
dmlkZXJQYXN0ZWJvYXJkLm1tICovLAotCQkJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovLAotCQkJCUNEQTI5QTJGMUNCRjcz
RkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJ
CQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaCAqLywKKwkJCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJMUY4NzU2QjExRTIyQkVFRjAwNDJDNDBEIC8qIFdl
YlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oICovLAogCQkJCTFGODc1NkIwMUUyMkJFRUYw
MDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0gKi8sCiAJCQkJM0Y0
MkIzMUIxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktp
dC5oICovLAogCQkJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQVZLaXQubW0gKi8sCi0JCQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8sCi0JCQkJM0ZCQzRBRjExODk4
ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovLAor
CQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oICovLAorCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyog
V2lkZ2V0SU9TLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBpb3M7CkBAIC0yMTIwMywxNCArMjEy
MDMsMTQgQEAKIAkJCQlDREM5NzlGMzFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJyb3JF
eHRyYXMuaCAqLywKIAkJCQlDREM5NzlGMjFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJy
b3JFeHRyYXMubW0gKi8sCiAJCQkJNURGRUJBQjYxODU5MkI2RDAwQzc1QkVCIC8qIFdlYktpdEF2
YWlsYWJpbGl0eS5oICovLAotCQkJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLywKLQkJCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLywKLQkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKLQkJCQlD
REEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi8sCi0JCQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8sCi0JCQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8sCi0JCQkJNTJENUExQTUxQzU3NDg4OTAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCi0JCQkJ
NTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50Lm1tICovLAorCQkJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UuaCAqLywKKwkJCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCAqLywKKwkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKKwkJCQlDREEyOUEwQzFDQkQ5
Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJ
CQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmggKi8sCisJCQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsLmggKi8sCisJCQkJNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCisJCQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDExNiwxMSArMzAx
MTYsMTEgQEAKIAkJCQkwNzA5RDc5MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBMzE2MkQxMzRCQzMyRDAwN0M5QTRG
IC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1
ODk2RTIxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEzMjFDQzAxQTk1MDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMEYx
Q0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEzMjFDQzAxQTk1MDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMEYxQ0JEOUNGRTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQ0FGMzQ4MTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQ0FGMzQ4MzBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMUIwRDdFMkI4MjAwN0MzOTgz
IC8qIFdlYlNjcmlwdE9iamVjdFByb3RvY29sLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMTM3LDE0
ICszMDEzNywxNCBAQAogCQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJCMEQ0QzAxQzU3RkQ2
NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRDgyMDMwQTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0Y0MkIzMUQxODgxMTkxQjAwMjc4QUFDIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q4MjAzMEMxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFBODFDNTc0OEEz
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdD
RTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIw
MDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEz
RUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBC
Njk4MDE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAt
MzM4MzQsOSArMzM4MzQsOSBAQAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTMxNjJFMTM0
QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlDRDU4OTZFMTFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTBFMUNC
RDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFDQUYzNDgyMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmpl
Y3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk5N0FBQkQxQTE0RkEwOUQ1MDA3NDU3QUUgLyogV2Vi
U29ja2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QUFCRDFEMTRGQTA5RDUwMDc0NTdBRSAv
KiBXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM4NTIsOSArMzM4NTIs
OSBAQAogCQkJCUNEODIwMzBCMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJM0Y0MkIzMUUxODgxMTkxQjAwMjc4QUFD
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUNEODIwMzBEMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZF
RTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAvKiBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFB
OTFDNTc0OEE5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQlGMTIxNzFGNTE2QThDRUQyMDAwMDUzQ0EgLyogV2ViVlRURWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RDIxQTgwMjEzRUNFNURGMDBCQjcwNjQgLyog
V2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIxMEI2OTgxMTQwQzE3NDAwMEJD
MUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAyNjYwMjY5MjhmMzY1YjNjZjY4ODUzYzM1
NDhjMDg0MDRiMWJmYjA1Li4wZDQ2MTFjNTA5NjJlYjg4MTBhMjFjMjRmOWRjZTkxZjIzMzZhYmQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTExNyw3ICsx
MTcsNyBAQAogCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmgi
CisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKQEAgLTE1Niw3ICsxNTYsNyBAQAog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKICNkZWZp
bmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoZG9jdW1l
bnQoKS5wYWdlKCkgJiYgZG9jdW1lbnQoKS5wYWdlKCktPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dl
ZCgpLCBNZWRpYSwgIiVwIC0gSFRNTE1lZGlhRWxlbWVudDo6IiBmbXQsIHRoaXMsICMjX19WQV9B
UkdTX18pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAppbmRleCAzNmNm
NDk3Yjk5Yjg5N2E4YWFkZGVhZjYyNmI5YWFiMzhmZmMyYmExLi42NTg5NWY5Mzg5N2YwNjg0MTQ3
YjlkMGNjZjE1NzBjYjc5Njg3Y2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogI2lmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSNpbmNsdWRlICJXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgi
CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40MTA1ZWY2ZGIzMjcwZjMxNWI3NzVjNzQyZjM1MTVjZTAxODY3MDVkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsK
K2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaW1lUmFu
Z2VzOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgeworcHVibGljOgorICAgIHZp
cnR1YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzZXRNZWRpYVN0YXRlKCkgPSAwOworfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9T
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Np
b25Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9u
TW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hODc0NDE1NzQ2OWEyYTdiMmU3NjM5ZTFmOWEzYWU3MTRkZjI4
NjQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGltZVJhbmdlczsKK2NsYXNzIFBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50Oworc3RydWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9uOworCitjbGFzcyBQbGF5
YmFja1Nlc3Npb25Nb2RlbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9u
TW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQ
bGF5U3RhdGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
ZWtUb1RpbWUoZG91YmxlIHRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmFzdFNlZWsoZG91
YmxlIHRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vs
ZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRvZ2ds
ZU11dGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNdXRlZChib29sKSA9IDA7CisKKyAg
ICBlbnVtIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgVGFyZ2V0VHlwZU5vbmUsIFRhcmdl
dFR5cGVBaXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQgfTsKKworICAgIHZpcnR1YWwgZG91YmxlIHBs
YXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRp
b24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBkb3VibGUgYnVmZmVyZWRUaW1lKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2Ny
dWJiaW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmPFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmll
ZFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFs
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdWludDY0X3QgYXVk
aW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGV4dGVybmFs
UGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9v
bCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNNdXRlZCgpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLyogY3VycmVudFRp
bWUgKi8sIGRvdWJsZSAvKiBhbmNob3JUaW1lICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYnVm
ZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0
YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgLyogcGxheWJhY2tTdGFydGVkVGltZSAqLykgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyogaXNQbGF5aW5nICovLCBmbG9hdCAv
KiBwbGF5YmFja1JhdGUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWVrYWJsZVJhbmdlc0No
YW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSAvKiBsYXN0TW9kaWZpZWQgKi8sIGRvdWJs
ZSAvKiBsaXZlSW50ZXJ2YWwgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjYW5QbGF5RmFzdFJl
dmVyc2VDaGFuZ2VkKGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyog
b3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9CisgICAgdmlydHVh
bCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlvbnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVjdGVk
SW5kZXggKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2
aWNlTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkQ2hhbmdlZChib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbXV0ZWRDaGFuZ2VkKGJv
b2wpIHsgfQorfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E3MzE0M2I0YmY5YmRlZTM3MzgyNjlkMTgyMDFi
ODlkMzBkMmIxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5j
bHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5o
IgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvVHJhY2s7CitjbGFzcyBIVE1MTWVk
aWFFbGVtZW50OworY2xhc3MgVGV4dFRyYWNrOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCBmaW5hbCA6IHB1
YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudCgpKTsKKyAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7
IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KikgZmluYWw7CisgICAgdm9pZCB1cGRh
dGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQor
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxheSgpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGF1c2UoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNj
cnViYmluZygpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla1RvVGltZShkb3Vi
bGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmYXN0U2Vlayhkb3VibGUg
dGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2Fy
ZCgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJk
KCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY2FubmluZygpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBp
bmRleCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFP
cHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9n
Z2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9n
Z2xlTXV0ZWQoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE11dGVkKGJvb2wp
IGZpbmFsOworCisgICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgZmluYWw7CisgICAgZG91Ymxl
IGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgZmxvYXQgcGxh
eWJhY2tSYXRlKCkgY29uc3QgZmluYWw7CisgICAgUmVmPFRpbWVSYW5nZXM+IHNlZWthYmxlUmFu
Z2VzKCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2Rp
ZmllZFRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCBmaW5hbDsK
KyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zKCkgY29uc3QgZmluYWw7CisgICAgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgo
KSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICB1aW50NjRfdCBsZWdpYmxl
TWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBleHRlcm5hbFBsYXli
YWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
IGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGV4
dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmluYWw7CisgICAgYm9v
bCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
aXNNdXRlZCgpIGNvbnN0IGZpbmFsOworCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQg
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7CisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6
OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOworICAgIGNvbnN0IFdURjo6QXRv
bWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKKworICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50
PiBtX21lZGlhRWxlbWVudDsKKyAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OworICAg
IEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgVmVj
dG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51OworICAgIFZlY3Rv
cjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51OworCisgICAgZG91Ymxl
IHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucygpOworICAgIHZvaWQgdXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCk7Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44NzRkZmY3MDEwMjRiM2JkOGIyYTA5MWY2ZjY1NjdjYWU4NGUzMWMzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQubW0KQEAgLTAsMCArMSw1MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAiQXVkaW9UcmFja0xpc3QuaCIKKyNp
bXBvcnQgIkV2ZW50LmgiCisjaW1wb3J0ICJFdmVudExpc3RlbmVyLmgiCisjaW1wb3J0ICJFdmVu
dE5hbWVzLmgiCisjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTE1lZGlhRWxl
bWVudC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFDb250cm9sc0hvc3Qu
aCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisjaW1wb3J0ICJQYWdlLmgiCisj
aW1wb3J0ICJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIlRleHRUcmFja0xpc3QuaCIKKyNpbXBvcnQg
IlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2lt
cG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKQorICAgIDogRXZlbnRMaXN0ZW5l
cihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKK3sKK30KKworUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dCgpCit7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1l
ZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCit7CisgICAgaWYgKG1f
bWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fbWVkaWFFbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKKyAgICAgICAgZm9yIChhdXRvJiBl
dmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVt
ZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKKyAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdl
RXZlbnQsICp0aGlzLCBmYWxzZSk7CisgICAgfQorICAgIG1faXNMaXN0ZW5pbmcgPSBmYWxzZTsK
KworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlc2V0
UGxheWJhY2tTZXNzaW9uU3RhdGUoKTsKKworICAgIG1fbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVt
ZW50OworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50KSB7CisgICAgICAgIGZvciAoYXV0byYgZXZl
bnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAgICBtX21lZGlhRWxlbWVu
dC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7CisgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+dGV4
dFRyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhp
cywgZmFsc2UpOworICAgICAgICBtX2lzTGlzdGVuaW5nID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1
cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQoreworICAgIHVwZGF0ZUZvckV2ZW50
TmFtZShldmVudC0+dHlwZSgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVu
dE5hbWUpCit7CisgICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGJvb2wgYWxsID0gZXZlbnROYW1lID09IGV2ZW50TmFtZUFsbCgpOworCisgICAgaWYg
KGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdl
RXZlbnQpIHsKKyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gdGhpcy0+ZHVyYXRpb24oKTsKKyAg
ICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+
ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKKyAgICAgICAgLy8gVGhlc2UgaXMgbm8gc3RhbmRh
cmQgZXZlbnQgZm9yIG1pbkZhc3RSZXZlcnNlUmF0ZUNoYW5nZTsgZHVyYXRpb24gY2hhbmdlIGlz
IGEgcmVhc29uYWJsZSBwcm94eSBmb3IgaXQuCisgICAgICAgIC8vIEl0IGhhcHBlbnMgZXZlcnkg
dGltZSBhIG5ldyBpdGVtIGJlY29tZXMgcmVhZHkgdG8gcGxheS4KKyAgICAgICAgYm9vbCBjYW5Q
bGF5RmFzdFJldmVyc2UgPSB0aGlzLT5jYW5QbGF5RmFzdFJldmVyc2UoKTsKKyAgICAgICAgZm9y
IChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+Y2FuUGxheUZh
c3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOworICAgIH0KKworICAgIGlmIChh
bGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAg
ICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5aW5nRXZlbnQpIHsKKyAgICAgICAg
Zm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+cGxheWJh
Y2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGltZSgpKTsKKyAgICB9CisKKyAg
ICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVu
dAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBsYXlFdmVudAorICAgICAg
ICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCkgeworICAgICAg
ICBib29sIGlzUGxheWluZyA9IHRoaXMtPmlzUGxheWluZygpOworICAgICAgICBmbG9hdCBwbGF5
YmFja1JhdGUgPSB0aGlzLT5wbGF5YmFja1JhdGUoKTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVu
dCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5n
LCBwbGF5YmFja1JhdGUpOworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnRO
YW1lID09IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQpIHsKKyAgICAgICAgYXV0byBjdXJy
ZW50VGltZSA9IHRoaXMtPmN1cnJlbnRUaW1lKCk7CisgICAgICAgIGF1dG8gYW5jaG9yVGltZSA9
IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKKyAgICAgICAgZm9y
IChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+Y3VycmVudFRp
bWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKKyAgICB9CisKKyAgICBpZiAoYWxs
CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCkgewor
ICAgICAgICBhdXRvIGJ1ZmZlcmVkVGltZSA9IHRoaXMtPmJ1ZmZlcmVkVGltZSgpOworICAgICAg
ICBhdXRvIHNlZWthYmxlUmFuZ2VzID0gdGhpcy0+c2Vla2FibGVSYW5nZXMoKTsKKyAgICAgICAg
YXV0byBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lID0gdGhpcy0+c2Vla2FibGVU
aW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpOworICAgICAgICBhdXRvIGxpdmVVcGRhdGVJbnRl
cnZhbCA9IHRoaXMtPmxpdmVVcGRhdGVJbnRlcnZhbCgpOworICAgICAgICBmb3IgKGF1dG8gY2xp
ZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgICAgICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5n
ZWQoYnVmZmVyZWRUaW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFu
Z2VkKHNlZWthYmxlUmFuZ2VzLCBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lLCBs
aXZlVXBkYXRlSW50ZXJ2YWwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFsbAorICAg
ICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQKKyAgICAgICAg
fHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2ZW50KQorICAgICAgICB1
cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKKworICAgIGlmIChhbGwKKyAgICAgICAgfHwg
ZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dp
cmVsZXNzY2hhbmdlZEV2ZW50KSB7CisgICAgICAgIGJvb2wgZW5hYmxlZCA9IGV4dGVybmFsUGxh
eWJhY2tFbmFibGVkKCk7CisgICAgICAgIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdl
dFR5cGUgPSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpOworICAgICAgICBTdHJpbmcgbG9j
YWxpemVkRGV2aWNlTmFtZSA9IGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCk7
CisKKyAgICAgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCA9IHRoaXMtPndp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCk7CisKKyAgICAgICAgZm9yIChhdXRvIGNsaWVu
dCA6IG1fY2xpZW50cykgeworICAgICAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICAgICAg
ICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIGRv
bid0IGNhbGwgdXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkgaW4gdGhlIGFsbCBjYXNlLCBz
aW5jZQorICAgIC8vIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpbGwgYWxzbyB1cGRh
dGUgdGhlIHNlbGVjdGlvbiBpbmRpY2VzLgorICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLmNoYW5nZUV2ZW50KQorICAgICAgICB1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKTsK
KworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS52b2x1
bWVjaGFuZ2VFdmVudCkgeworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQor
ICAgICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQoaXNNdXRlZCgpKTsKKyAgICB9Cit9Cit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphZGRDbGllbnQoUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250
YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlu
cygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheSgpCit7CisgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxheSgpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5
U3RhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVn
aW5TY3J1YmJpbmcoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7
CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3Vy
cmVudFRpbWUodGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit7CisgICAg
aWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2Fubmlu
ZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQoreworICAg
IGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5p
bmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpCYWNrd2FyZCk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjYW5uaW5nKCkKK3sKKyAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY2FubmluZygpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKHVpbnQ2NF90IHNlbGVjdGVkQXVkaW9JbmRleCkKK3sKKyAgICBpZiAoIW1fbWVkaWFF
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9
IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9h
dWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJsZWQoaSA9PSBzZWxlY3RlZEF1ZGlvSW5kZXgp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2s7CisgICAgaWYg
KGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5zaXplKCkpCisgICAgICAgIHRleHRUcmFj
ayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnVbc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCldLmdl
dCgpOworICAgIGVsc2UKKyAgICAgICAgdGV4dFRyYWNrID0gVGV4dFRyYWNrOjpjYXB0aW9uTWVu
dU9mZkl0ZW0oKTsKKworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0
ZXh0VHJhY2spOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0
b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQtPmZ1bGxz
Y3JlZW5Nb2RlKCkgPT0gTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVudGVyRnVsbHNjcmVlbihNZWRpYVBs
YXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZU11dGVkKCkKK3sKKyAg
ICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRNdXRlZChtdXRlZCk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0
aW9ucygpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1
bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKyAgICBhdXRvJiB0
ZXh0VHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKTsKKyAgICBpZiAodGV4dFRy
YWNrcy5sZW5ndGgoKSkKKyAgICAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25Q
cmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZ0ZXh0VHJhY2tzKTsKKyAgICBlbHNl
CisgICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuY2xlYXIoKTsKKworICAgIGF1dG8mIGF1
ZGlvVHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCk7CisgICAgaWYgKGF1ZGlv
VHJhY2tzLmxlbmd0aCgpID4gMSkKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUgPSBjYXB0
aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSgmYXVkaW9UcmFja3MpOworICAg
IGVsc2UKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUuY2xlYXIoKTsKKworICAgIGF1dG8g
YXVkaW9PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKKyAgICBhdXRvIGF1
ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpOworICAgIGF1dG8gbGVnaWJsZU9w
dGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7CisgICAgYXV0byBsZWdpYmxl
SW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CisKKyAgICBmb3IgKGF1dG8gY2xp
ZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGF1ZGlvT3B0aW9ucywgYXVkaW9JbmRleCk7CisgICAgICAgIGNsaWVudC0+
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobGVnaWJsZU9wdGlvbnMsIGxlZ2li
bGVJbmRleCk7CisgICAgfQorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKQoreworICAgIGF1dG8gYXVkaW9JbmRl
eCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7CisgICAgYXV0byBsZWdpYmxlSW5kZXggPSBs
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CisKKyAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9j
bGllbnRzKSB7CisgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdl
ZChhdWRpb0luZGV4KTsKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQobGVnaWJsZUluZGV4KTsKKyAgICB9Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQtPnBsYXliYWNrU3RhcnRlZFRpbWUoKTsKK30KKworY29uc3QgVmVjdG9yPEF0
b21pY1N0cmluZz4mIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2
ZW50TmFtZXMoKQoreworICAgIC8vIEZJWE1FKDE1NzQ1Mik6IFJlbW92ZSB0aGUgcmlnaHQtaGFu
ZCBjb25zdHJ1Y3RvciBub3RhdGlvbiBvbmNlIE5ldmVyRGVzdHJveWVkIHN1cHBvcnRzIGluaXRp
YWxpemVyX2xpc3RzLgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3Ry
aW5nPj4gbmFtZXMgPSBWZWN0b3I8QXRvbWljU3RyaW5nPih7CisgICAgICAgIGV2ZW50TmFtZXMo
KS5kdXJhdGlvbmNoYW5nZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucGF1c2VFdmVudCwK
KyAgICAgICAgZXZlbnROYW1lcygpLnBsYXlFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnJh
dGVjaGFuZ2VFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwKKyAg
ICAgICAgZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5h
ZGR0cmFja0V2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwKKyAg
ICAgICAgZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50LAorICAgICAgICBldmVudE5hbWVz
KCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCwKKyAg
ICB9KTsKKyAgICByZXR1cm4gbmFtZXMuZ2V0KCk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYg
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGV2ZW50TmFtZUFsbCgiYWxsRXZl
bnRzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIGV2
ZW50TmFtZUFsbDsKK30KKworZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/
IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKK30KKworZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpjdXJyZW50VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8g
bV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkgOiAwOworfQorCitkb3VibGUgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1heEJ1ZmZlcmVkVGltZSgpIDog
MDsKK30KKworYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNQbGF5aW5n
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyAhbV9tZWRpYUVsZW1lbnQt
PnBhdXNlZCgpIDogZmFsc2U7Cit9CisKK2Zsb2F0IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dCA/IG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSA6IDA7Cit9CisKK1JlZjxUaW1lUmFu
Z2VzPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVSYW5nZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVr
YWJsZSgpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnNl
ZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7Cit9CisKK2RvdWJsZSBQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bGl2ZVVwZGF0
ZUludGVydmFsKCkgOiAwOworfQorICAgIAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAgOiBm
YWxzZTsKK30KKworVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAorewor
ICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9PcHRpb25zOworCisgICAgaWYg
KCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQor
ICAgICAgICByZXR1cm4gYXVkaW9PcHRpb25zOworCisgICAgYXV0byYgY2FwdGlvblByZWZlcmVu
Y2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25Q
cmVmZXJlbmNlcygpOworCisgICAgYXVkaW9PcHRpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sg
OiBtX2F1ZGlvVHJhY2tzRm9yTWVudSkKKyAgICAgICAgYXVkaW9PcHRpb25zLnVuY2hlY2tlZEFw
cGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayhhdWRp
b1RyYWNrLmdldCgpKSk7CisKKyAgICByZXR1cm4gYXVkaW9PcHRpb25zOworfQorCit1aW50NjRf
dCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX2F1ZGlv
VHJhY2tzRm9yTWVudS5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKG1fYXVkaW9UcmFj
a3NGb3JNZW51W2luZGV4XS0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgIH0KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOwor
fQorCitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK3sKKyAgICBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVPcHRpb25zOworCisgICAgaWYgKCFt
X21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAg
ICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7CisKKyAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5j
ZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblBy
ZWZlcmVuY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9y
TWVudSkKKyAgICAgICAgbGVnaWJsZU9wdGlvbnMuYXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5t
ZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKSk7CisKKyAgICByZXR1cm4g
bGVnaWJsZU9wdGlvbnM7Cit9CisKK3VpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKK3sKKyAgICB1aW50NjRf
dCBzZWxlY3RlZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOwor
ICAgIHVpbnQ2NF90IG9mZkluZGV4ID0gMDsKKyAgICBib29sIHRyYWNrTWVudUl0ZW1TZWxlY3Rl
ZCA9IGZhbHNlOworCisgICAgYXV0byBob3N0ID0gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxl
bWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWhvc3QpCisg
ICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4OworCisgICAgQXRvbWljU3RyaW5nIGRpc3BsYXlN
b2RlID0gaG9zdC0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7CisgICAgVGV4dFRyYWNrKiBvZmZJdGVt
ID0gaG9zdC0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJ
dGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisKKyAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5zaXplKCk7IGluZGV4
KyspIHsKKyAgICAgICAgYXV0byYgdHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W2luZGV4
XTsKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCisgICAgICAgICAgICBvZmZJbmRleCA9
IGluZGV4OworCisgICAgICAgIGlmICh0cmFjayA9PSBhdXRvbWF0aWNJdGVtICYmIGRpc3BsYXlN
b2RlID09IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkpIHsKKyAgICAgICAg
ICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxl
Y3RlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlzcGxheU1vZGUgIT0gTWVk
aWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSAmJiB0cmFjay0+bW9kZSgpID09IFRl
eHRUcmFjazo6TW9kZTo6U2hvd2luZykgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGlu
ZGV4OworICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChvZmZJdGVtICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYg
ZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpCisg
ICAgICAgIHNlbGVjdGVkSW5kZXggPSBvZmZJbmRleDsKKworICAgIHJldHVybiBzZWxlY3RlZElu
ZGV4OworfQorCitib29sIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5h
bFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYm
IG1fbWVkaWFFbGVtZW50LT53ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7
Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50
LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQorICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7CisK
KyAgICBzd2l0Y2ggKG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5h
bERldmljZVR5cGUoKSkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7CisgICAgY2FzZSBNZWRpYUNvbnRy
b2xzSG9zdDo6RGV2aWNlVHlwZTo6Tm9uZToKKyAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25l
OworICAgIGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6OkFpcnBsYXk6CisgICAg
ICAgIHJldHVybiBUYXJnZXRUeXBlQWlyUGxheTsKKyAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0
OjpEZXZpY2VUeXBlOjpUdm91dDoKKyAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVUVk91dDsKKyAg
ICB9Cit9CisKK1N0cmluZyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJu
YWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdAoreworICAgIGlmIChtX21lZGlh
RWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKKyAgICAgICAg
cmV0dXJuIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmlj
ZURpc3BsYXlOYW1lKCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK2Jvb2wgUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1l
bnQtPm1lZGlhU2Vzc2lvbigpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlh
RWxlbWVudCk7Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6Omlz
TXV0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVt
ZW50LT5tdXRlZCgpIDogZmFsc2U7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNWMxNWIxMTk4NzIxMTNmNDgwYzk4MzFhYmE4NjhkOGVmZWIw
OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjcHJhZ21hIG9uY2UKKworI2lm
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVl
bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSgpID0gMDsKK307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFjODQ5ZmMyMGRhMGNiNDJiZDkyNzYxN2YxNDE4ZjliNzczMGMyNzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5N
b2RlbC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5j
bHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudDsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVu
TW9kZWwgeworcHVibGljOgorICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgeyB9
OworICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCYpPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRX
aXRoTWVkaWEgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyRnJh
bWUoRmxvYXRSZWN0KSA9IDA7CisgICAgZW51bSBWaWRlb0dyYXZpdHkgeyBWaWRlb0dyYXZpdHlS
ZXNpemUsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
RmlsbCB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZp
dHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgPSAwOworCisgICAgdmlydHVhbCBi
b29sIGlzVmlzaWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWRlb0Rp
bWVuc2lvbnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3Qg
PSAwOworfTsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpZGVv
RGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAwOworfTsKKworV0VCQ09SRV9F
WFBPUlQgYm9vbCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKKyAgICAKK30KKworI2VuZGlm
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9W
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlZmJjMTlhODdj
NzRmZTlhNWM2MmEzZWNkMWQxYzQxNGZhZGY5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
CkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIEF1ZGlvVHJhY2s7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50OworY2xhc3Mg
VGV4dFRyYWNrOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CisKK2Ns
YXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IDogcHVibGljIFZpZGVvRnVsbHNj
cmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50KCkpOworICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9F
bGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0Vs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRWxlbWVudC5nZXQoKTsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciosIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyID0gW10geyB9KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHdhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIgPSBbXSB7IH0pOworICAgIAorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYkNvcmU6OkV2ZW50Kikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVu
dE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQorCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQm
KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRl
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2
aXR5KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hh
bmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRl
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0KKworCitw
cm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldEhhc1ZpZGVvKGJvb2wpOworICAgIHZv
aWQgc2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYpOworCisgICAgc3RhdGljIGNv
bnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOworICAg
IGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKKworICAgIFJlZlB0cjxI
VE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1M
YXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKKyAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBm
YWxzZSB9OworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVu
dHM7CisgICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKKyAgICBGbG9hdFNpemUgbV92aWRl
b0RpbWVuc2lvbnM7CisgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKKyAgICBWZWN0b3I8UmVm
UHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7CisgICAgVmVjdG9yPFJlZlB0
cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7Cit9OworCit9CisKKyNlbmRpZgor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4MTZlYTljYmYx
NzU2NTE4NWIwZWM2OWViMWM1YWM2ZWQ4MzJhODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bQpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorI2ltcG9ydCAi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKKworI2ltcG9ydCAiRE9NV2luZG93
LmgiCisjaW1wb3J0ICJIaXN0b3J5LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJN
ZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8
V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRUcmFja0xpc3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGltZVJhbmdlcy5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1w
b3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudCgpCisgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlz
dGVuZXJUeXBlKQoreworfQorCitWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKK3sKK30KKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCkKK3sKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0Vs
ZW1lbnQtPnZpZGVvRnVsbHNjcmVlbkxheWVyKCkpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5z
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihudWxscHRyKTsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2Jz
ZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7CisgICAgfQorICAgIG1faXNMaXN0
ZW5pbmcgPSBmYWxzZTsKKworICAgIG1fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCisg
ICAgaWYgKG1fdmlkZW9FbGVtZW50KSB7CisgICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDog
b2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7CisgICAgICAgIG1faXNMaXN0ZW5p
bmcgPSB0cnVlOworICAgIH0KKworICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudE5hbWVBbGwo
KSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2
ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZl
bnQpCit7CisgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LT50eXBlKCkpOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29u
c3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKK3sKKyAgICBpZiAobV9jbGllbnRzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJvb2wgYWxsID0gZXZlbnROYW1l
ID09IGV2ZW50TmFtZUFsbCgpOworCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUg
PT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KSB7CisgICAgICAgIHNldEhhc1ZpZGVvKG1fdmlk
ZW9FbGVtZW50KTsKKyAgICAgICAgc2V0VmlkZW9EaW1lbnNpb25zKG1fdmlkZW9FbGVtZW50ID8g
RmxvYXRTaXplKG1fdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIG1fdmlkZW9FbGVtZW50LT52
aWRlb0hlaWdodCgpKSA6IEZsb2F0U2l6ZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3Jt
TGF5ZXIqIHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZpZGVvTGF5ZXIpIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gdmlkZW9MYXllcjsKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2lu
dE1ha2UoMCwgMCldOworI2Vsc2UKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRBbmNo
b3JQb2ludDpDR1BvaW50TWFrZSgwLjUsIDAuNSldOworI2VuZGlmCisgICAgW21fdmlkZW9GdWxs
c2NyZWVuTGF5ZXIgc2V0Qm91bmRzOm1fdmlkZW9GcmFtZV07CisgICAgCisgICAgaWYgKCFtX3Zp
ZGVvRWxlbWVudCkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6d2FpdEZvclBy
ZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50KSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3ZpZGVvRWxlbWVudC0+
d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJlcXVlc3RGdWxs
c2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3sKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYg
bV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgIT0gbW9kZSkKKyAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOworCisgICAgaWYgKG1fdmlkZW9FbGVt
ZW50ICYmIGZpbmlzaGVkV2l0aE1lZGlhICYmIG1vZGUgPT0gTWVkaWFQbGF5ZXJFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUpIHsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50LT5kb2N1
bWVudCgpLmlzTWVkaWFEb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAoRE9NV2luZG93KiB3
aW5kb3cgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5kb21XaW5kb3coKSkgeworICAgICAg
ICAgICAgICAgIGlmIChIaXN0b3J5KiBoaXN0b3J5ID0gd2luZG93LT5oaXN0b3J5KCkpCisgICAg
ICAgICAgICAgICAgICAgIGhpc3RvcnktPmJhY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0
VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0KQoreworICAgIG1fdmlkZW9GcmFtZSA9IHJl
Y3Q7CisgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOkNHUmVjdChyZWN0KV07
CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0Vmlk
ZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5IHZp
ZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAg
aWYgKGdyYXZpdHkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZSkK
KyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZTsK
KyAgICBlbHNlIGlmIChncmF2aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZp
dHlSZXNpemVBc3BlY3QpCisgICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCkKKyAgICAgICAgdmlkZW9H
cmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7CisgICAg
ZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAKKyAgICBtX3ZpZGVvRWxl
bWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eSh2aWRlb0dyYXZpdHkpOworfQorCitjb25z
dCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
Om9ic2VydmVkRXZlbnROYW1lcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3Rv
cjxBdG9taWNTdHJpbmc+PiBzRXZlbnROYW1lczsKKworICAgIGlmICghc0V2ZW50TmFtZXMuZ2V0
KCkuc2l6ZSgpKQorICAgICAgICBzRXZlbnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygp
LnJlc2l6ZUV2ZW50KTsKKyAgICByZXR1cm4gc0V2ZW50TmFtZXMuZ2V0KCk7Cit9CisKK2NvbnN0
IEF0b21pY1N0cmluZyYgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFt
ZUFsbCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc0V2ZW50
TmFtZUFsbCA9ICJhbGxFdmVudHMiOworICAgIHJldHVybiBzRXZlbnROYW1lQWxsOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNj
cmVlbk1vZGUpCit7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxl
bWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjphZGRDbGllbnQoVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250
YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlu
cygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKworYm9vbCBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fdmlkZW9FbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
UGFnZSogcGFnZSA9IG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAg
cmV0dXJuIHBhZ2UtPmlzVmlzaWJsZSgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRIYXNWaWRlbyhib29sIGhhc1Zp
ZGVvKQoreworICAgIGlmIChoYXNWaWRlbyA9PSBtX2hhc1ZpZGVvKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2hhc1ZpZGVvID0gaGFzVmlkZW87CisKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6
IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQobV9oYXNWaWRlbyk7
Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRGlt
ZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAobV92
aWRlb0RpbWVuc2lvbnMgPT0gdmlkZW9EaW1lbnNpb25zKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uczsKKworICAgIGZvciAoYXV0byYg
Y2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPnZpZGVvRGltZW5zaW9uc0NoYW5n
ZWQobV92aWRlb0RpbWVuc2lvbnMpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOWU3OTc0NGI0OTg5YTNhN2I5MzU3MGFh
ZWI3ZTgyZWIwN2U5MzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXVEYgewotY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFRpbWVSYW5nZXM7Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKCkg
eyB9OwotICAgIHZpcnR1YWwgdm9pZCByZXNldE1lZGlhU3RhdGUoKSA9IDA7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwNmQ1M2YwZjc3NjkzNzc1YWQ0ODYxYzIyMzA0YWM5MzgwMDljODIzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgVGltZVJhbmdlczsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Owotc3Ry
dWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9uOwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07
Ci0gICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQbGF5U3Rh
dGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBlbmRTY3J1YmJpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlZWtUb1Rp
bWUoZG91YmxlIHRpbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRp
bWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZW5kU2Nhbm5pbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgaW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRv
Z2dsZVBpY3R1cmVJblBpY3R1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZU11dGVk
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNdXRlZChib29sKSA9IDA7Ci0KLSAgICBlbnVt
IEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgVGFyZ2V0VHlwZU5vbmUsIFRhcmdldFR5cGVB
aXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQgfTsKLQotICAgIHZpcnR1YWwgZG91YmxlIHBsYXliYWNr
U3RhcnRlZFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBkb3VibGUgYnVmZmVyZWRUaW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBpc1BsYXlpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU2NydWJiaW5n
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgUmVmPFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdWludDY0X3QgYXVkaW9NZWRp
YVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGV4dGVybmFsUGxheWJh
Y2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNNdXRlZCgpIGNvbnN0ID0gMDsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLyogY3VycmVudFRp
bWUgKi8sIGRvdWJsZSAvKiBhbmNob3JUaW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYnVm
ZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0
YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgLyogcGxheWJhY2tTdGFydGVkVGltZSAqLykgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyogaXNQbGF5aW5nICovLCBmbG9hdCAv
KiBwbGF5YmFja1JhdGUgKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZWVrYWJsZVJhbmdlc0No
YW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSAvKiBsYXN0TW9kaWZpZWQgKi8sIGRvdWJs
ZSAvKiBsaXZlSW50ZXJ2YWwgKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjYW5QbGF5RmFzdFJl
dmVyc2VDaGFuZ2VkKGJvb2wpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyog
b3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlvbnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVjdGVk
SW5kZXggKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxpemVk
RGV2aWNlTmFtZSAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZChib29sKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbXV0ZWRDaGFuZ2Vk
KGJvb2wpIHsgfQotfTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFk
ODk1MTM3NTg4NGQ2YzgxYTdmMjM4OTZkOGM0ZjY1MzM5MDM4YzUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJIVE1MTWVk
aWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1Ry
YWNrOwotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFRleHRUcmFjazsKLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwsIHB1
YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7Ci0g
ICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCopOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBX
ZWJDb3JlOjpFdmVudCopIGZpbmFsOwotICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0
IFdURjo6QXRvbWljU3RyaW5nJik7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlz
dGVuZXImIHJocykgY29uc3QgZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29y
ZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXkoKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHBhdXNlKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dn
bGVQbGF5U3RhdGUoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2NydWJi
aW5nKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kU2Nhbm5pbmcoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90
IGluZGV4KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBp
Y3R1cmUoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU11dGVkKCkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKLQotICAg
IGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBjdXJyZW50VGltZSgp
IGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbDsKLSAg
ICBib29sIGlzUGxheWluZygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNv
bnN0IGZpbmFsOwotICAgIFJlZjxUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0IGZp
bmFsOwotICAgIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29u
c3QgZmluYWw7Ci0gICAgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IGZpbmFsOwot
ICAgIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgZmluYWw7Ci0gICAgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZp
bmFsOwotICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7
Ci0gICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zKCkgY29uc3QgZmluYWw7Ci0gICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJ
bmRleCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBj
b25zdCBmaW5hbDsKLSAgICBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsOwotICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNr
TG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzTXV0ZWQoKSBjb25z
dCBmaW5hbDsKLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwcm9ncmVzc0V2
ZW50VGltZXJGaXJlZCgpOwotICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJp
bmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKLSAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
ZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVs
ZW1lbnQ7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsKLSAgICBIYXNoU2V0PFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIFZlY3RvcjxSZWZQ
dHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudTsKLSAgICBWZWN0b3I8UmVmUHRy
PEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVudTsKLQotICAgIGRvdWJsZSBwbGF5YmFj
a1N0YXJ0ZWRUaW1lKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMoKTsKLSAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpOwotfTsKLQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmY2RlNDMzZjAzNzAyMWU1MWEwYjQ2ODZlMmZiNTE3ZDdl
OTdmNzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0KKysrIC9kZXYvbnVsbApAQCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBdWRpb1RyYWNrTGlz
dC5oIgotI2ltcG9ydCAiRXZlbnQuaCIKLSNpbXBvcnQgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbXBv
cnQgIkV2ZW50TmFtZXMuaCIKLSNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1M
TWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRy
b2xzSG9zdC5oIgotI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIlBh
Z2UuaCIKLSNpbXBvcnQgIlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiVGV4dFRyYWNrTGlzdC5oIgot
I2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9u
Lmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlu
a2luZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpCi0gICAg
OiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQotewot
fQotCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykg
ewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQot
ICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
LCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKS5y
ZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNl
KTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5yZW1vdmVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICB9Ci0gICAg
bV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAg
ICBtX21lZGlhRWxlbWVudC0+cmVzZXRQbGF5YmFja1Nlc3Npb25TdGF0ZSgpOwotCi0gICAgbV9t
ZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpIHsK
LSAgICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAg
ICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRo
aXMsIGZhbHNlKTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCkuYWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7Ci0gICAg
ICAgIG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1faXNMaXN0ZW5pbmcg
PSB0cnVlOwotICAgIH0KLQotICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudE5hbWVBbGwoKSk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmhhbmRsZUV2
ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZl
bnQpCi17Ci0gICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LT50eXBlKCkpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUo
Y29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKLXsKLSAgICBpZiAobV9jbGllbnRz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUg
PT0gZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewotICAgICAgICBkb3VibGUgZHVy
YXRpb24gPSB0aGlzLT5kdXJhdGlvbigpOwotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9j
bGllbnRzKQotICAgICAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwot
ICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVyc2VS
YXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBpdC4K
LSAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyByZWFk
eSB0byBwbGF5LgotICAgICAgICBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSA9IHRoaXMtPmNhblBs
YXlGYXN0UmV2ZXJzZSgpOwotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQot
ICAgICAgICAgICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0
UmV2ZXJzZSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0g
ZXZlbnROYW1lcygpLnBsYXlFdmVudAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLnBsYXlpbmdFdmVudCkgewotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRz
KQotICAgICAgICAgICAgY2xpZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChwbGF5YmFj
a1N0YXJ0ZWRUaW1lKCkpOwotICAgIH0KLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnRO
YW1lID09IGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50Ci0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkucGxheUV2ZW50Ci0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVz
KCkucmF0ZWNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIGJvb2wgaXNQbGF5aW5nID0gdGhpcy0+aXNQ
bGF5aW5nKCk7Ci0gICAgICAgIGZsb2F0IHBsYXliYWNrUmF0ZSA9IHRoaXMtPnBsYXliYWNrUmF0
ZSgpOwotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICAgICAg
Y2xpZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRh
dGVFdmVudCkgewotICAgICAgICBhdXRvIGN1cnJlbnRUaW1lID0gdGhpcy0+Y3VycmVudFRpbWUo
KTsKLSAgICAgICAgYXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZv
XSBzeXN0ZW1VcHRpbWVdOwotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQot
ICAgICAgICAgICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hv
clRpbWUpOwotICAgIH0KLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2
ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50KSB7Ci0gICAgICAgIGF1dG8gYnVmZmVyZWRUaW1lID0g
dGhpcy0+YnVmZmVyZWRUaW1lKCk7Ci0gICAgICAgIGF1dG8gc2Vla2FibGVSYW5nZXMgPSB0aGlz
LT5zZWVrYWJsZVJhbmdlcygpOwotICAgICAgICBhdXRvIHNlZWthYmxlVGltZVJhbmdlc0xhc3RN
b2RpZmllZFRpbWUgPSB0aGlzLT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCk7
Ci0gICAgICAgIGF1dG8gbGl2ZVVwZGF0ZUludGVydmFsID0gdGhpcy0+bGl2ZVVwZGF0ZUludGVy
dmFsKCk7Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAgICAg
ICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwotICAgICAgICAg
ICAgY2xpZW50LT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQoc2Vla2FibGVSYW5nZXMsIHNlZWthYmxl
VGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVzKCkuYWRkdHJhY2tFdmVudAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygp
LnJlbW92ZXRyYWNrRXZlbnQpCi0gICAgICAgIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygp
OwotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLndl
YmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpIHsKLSAgICAg
ICAgYm9vbCBlbmFibGVkID0gZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKTsKLSAgICAgICAgRXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSA9IGV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlKCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lID0gZXh0ZXJuYWxQ
bGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKTsKLQotICAgICAgICBib29sIHdpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkID0gdGhpcy0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQo
KTsKLQotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAgICAg
ICBjbGllbnQtPmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHRhcmdldFR5cGUsIGxv
Y2FsaXplZERldmljZU5hbWUpOwotICAgICAgICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gV2UgZG9uJ3QgY2FsbCB1cGRhdGVNZWRpYVNlbGVjdGlv
bkluZGljZXMoKSBpbiB0aGUgYWxsIGNhc2UsIHNpbmNlCi0gICAgLy8gdXBkYXRlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCkgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIGluZGljZXMuCi0g
ICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpCi0gICAgICAgIHVw
ZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpOwotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBl
dmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIGZv
ciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPm11dGVkQ2hh
bmdlZChpc011dGVkKCkpOwotICAgIH0KLX0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xp
ZW50KQotewotICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBt
X2NsaWVudHMuYWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpyZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQm
IGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAg
ICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0g
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5wbGF5KCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQp
Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5wYXVzZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5U3RhdGUoKQotewotICAgIGlmICht
X21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNj
cnViYmluZygpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxl
bWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQp
Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkK
LXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRD
dXJyZW50VGltZSh0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50
KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkK
LXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdp
blNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+
YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQot
ewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNj
YW5uaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgc2VsZWN0ZWRBdWRpb0luZGV4KQotewot
ICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gbV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudVtpXS0+c2V0RW5hYmxlZChpID09IHNl
bGVjdGVkQXVkaW9JbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKLXsKLSAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0VHJhY2sq
IHRleHRUcmFjazsKLSAgICBpZiAoaW5kZXggPCBtX2xlZ2libGVUcmFja3NGb3JNZW51LnNpemUo
KSkKLSAgICAgICAgdGV4dFRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtzdGF0aWNfY2Fz
dDxzaXplX3Q+KGluZGV4KV0uZ2V0KCk7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0VHJhY2sgPSBU
ZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOwotCi0gICAgbV9tZWRpYUVsZW1lbnQtPnNl
dFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjayk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIGlm
IChtX21lZGlhRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSA9PSBNZWRpYVBsYXllckVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKLSAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgZWxzZQotICAgICAgICBtX21lZGlhRWxlbWVudC0+
ZW50ZXJGdWxsc2NyZWVuKE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0
dXJlSW5QaWN0dXJlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6dG9nZ2xlTXV0ZWQoKQotewotICAgIHNldE11dGVkKCFpc011dGVkKCkpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNdXRlZChib29sIG11
dGVkKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnNldE11dGVkKG11dGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkKLXsKLSAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50LT5k
b2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgY2FwdGlvblBy
ZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNh
cHRpb25QcmVmZXJlbmNlcygpOwotICAgIGF1dG8mIHRleHRUcmFja3MgPSBtX21lZGlhRWxlbWVu
dC0+dGV4dFRyYWNrcygpOwotICAgIGlmICh0ZXh0VHJhY2tzLmxlbmd0aCgpKQotICAgICAgICBt
X2xlZ2libGVUcmFja3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlz
dEZvck1lbnUoJnRleHRUcmFja3MpOwotICAgIGVsc2UKLSAgICAgICAgbV9sZWdpYmxlVHJhY2tz
Rm9yTWVudS5jbGVhcigpOwotCi0gICAgYXV0byYgYXVkaW9UcmFja3MgPSBtX21lZGlhRWxlbWVu
dC0+YXVkaW9UcmFja3MoKTsKLSAgICBpZiAoYXVkaW9UcmFja3MubGVuZ3RoKCkgPiAxKQotICAg
ICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFj
a0xpc3RGb3JNZW51KCZhdWRpb1RyYWNrcyk7Ci0gICAgZWxzZQotICAgICAgICBtX2F1ZGlvVHJh
Y2tzRm9yTWVudS5jbGVhcigpOwotCi0gICAgYXV0byBhdWRpb09wdGlvbnMgPSBhdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucygpOwotICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxl
Y3RlZEluZGV4KCk7Ci0gICAgYXV0byBsZWdpYmxlT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKTsKLSAgICBhdXRvIGxlZ2libGVJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVj
dGVkSW5kZXgoKTsKLQotICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAg
ICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoYXVkaW9PcHRpb25z
LCBhdWRpb0luZGV4KTsKLSAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChsZWdpYmxlT3B0aW9ucywgbGVnaWJsZUluZGV4KTsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0
aW9uSW5kaWNlcygpCi17Ci0gICAgYXV0byBhdWRpb0luZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVk
SW5kZXgoKTsKLSAgICBhdXRvIGxlZ2libGVJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5k
ZXgoKTsKLQotICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAgICAgY2xp
ZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGF1ZGlvSW5kZXgpOwotICAgICAg
ICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChsZWdpYmxlSW5kZXgp
OwotICAgIH0KLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+cGxheWJh
Y2tTdGFydGVkVGltZSgpOwotfQotCi1jb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcygpCi17Ci0g
ICAgLy8gRklYTUUoMTU3NDUyKTogUmVtb3ZlIHRoZSByaWdodC1oYW5kIGNvbnN0cnVjdG9yIG5v
dGF0aW9uIG9uY2UgTmV2ZXJEZXN0cm95ZWQgc3VwcG9ydHMgaW5pdGlhbGl6ZXJfbGlzdHMuCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxBdG9taWNTdHJpbmc+PiBuYW1lcyA9IFZl
Y3RvcjxBdG9taWNTdHJpbmc+KHsKLSAgICAgICAgZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdl
RXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50LAotICAgICAgICBldmVudE5h
bWVzKCkucGxheUV2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50LAot
ICAgICAgICBldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50LAotICAgICAgICBldmVudE5hbWVz
KCkucHJvZ3Jlc3NFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQsCi0g
ICAgICAgIGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2ZW50LAotICAgICAgICBldmVudE5hbWVz
KCkudm9sdW1lY2hhbmdlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50
cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50LAotICAgIH0pOwotICAgIHJldHVy
biBuYW1lcy5nZXQoKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiAgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gZXZlbnROYW1lQWxsKCJhbGxFdmVudHMiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gZXZlbnROYW1lQWxsOwot
fQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmR1cmF0aW9u
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnN1cHBvcnRzU2Vla2luZygpID8gbV9tZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmN1
cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlh
RWxlbWVudC0+Y3VycmVudFRpbWUoKSA6IDA7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6YnVmZmVyZWRUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWF4QnVmZmVyZWRUaW1lKCkgOiAwOwot
fQotCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojppc1BsYXlpbmco
KSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/ICFtX21lZGlhRWxlbWVudC0+
cGF1c2VkKCkgOiBmYWxzZTsKLX0KLQotZmxvYXQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnBsYXliYWNrUmF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVt
ZW50ID8gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrUmF0ZSgpIDogMDsKLX0KLQotUmVmPFRpbWVS
YW5nZXM+IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJhbmdl
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQt
PnNlZWthYmxlKCkgOiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLX0KLQotZG91YmxlIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZp
ZWRUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxl
bWVudC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDogMDsKLX0KLQotZG91
YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsaXZlVXBkYXRlSW50ZXJ2
YWwoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50
LT5saXZlVXBkYXRlSW50ZXJ2YWwoKSA6IDA7Ci19Ci0gICAgCi1ib29sIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAotewotICAg
IHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJh
dGUoKSA8IDAuMCA6IGZhbHNlOwotfQotCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9ucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb09w
dGlvbnM7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBhdWRpb09wdGlvbnM7Ci0KLSAgICBhdXRv
JiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkt
Pmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICBhdWRpb09wdGlvbnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCkpOwotICAgIGZvciAo
YXV0byYgYXVkaW9UcmFjayA6IG1fYXVkaW9UcmFja3NGb3JNZW51KQotICAgICAgICBhdWRpb09w
dGlvbnMudW5jaGVja2VkQXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9w
dGlvbkZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBhdWRpb09wdGlv
bnM7Ci19Ci0KLXVpbnQ2NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojph
dWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgKytpbmRleCkgewotICAg
ICAgICBpZiAobV9hdWRpb1RyYWNrc0Zvck1lbnVbaW5kZXhdLT5lbmFibGVkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KCk7Ci19Ci0KLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSBjb25zdAotewotICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJs
ZU9wdGlvbnM7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+
ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKLQotICAg
IGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBh
Z2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKLQotICAgIGZvciAoYXV0byYgdHJh
Y2sgOiBtX2xlZ2libGVUcmFja3NGb3JNZW51KQotICAgICAgICBsZWdpYmxlT3B0aW9ucy5hcHBl
bmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sodHJhY2su
Z2V0KCkpKTsKLQotICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKLX0KLQotdWludDY0X3QgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdAotewotICAgIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXggPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7Ci0gICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOwotICAg
IGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7Ci0KLSAgICBhdXRvIGhvc3QgPSBt
X21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpIDogbnVs
bHB0cjsKLQotICAgIGlmICghaG9zdCkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7Ci0K
LSAgICBBdG9taWNTdHJpbmcgZGlzcGxheU1vZGUgPSBob3N0LT5jYXB0aW9uRGlzcGxheU1vZGUo
KTsKLSAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBob3N0LT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsK
LSAgICBUZXh0VHJhY2sqIGF1dG9tYXRpY0l0ZW0gPSBob3N0LT5jYXB0aW9uTWVudUF1dG9tYXRp
Y0l0ZW0oKTsKLQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX2xlZ2libGVU
cmFja3NGb3JNZW51LnNpemUoKTsgaW5kZXgrKykgewotICAgICAgICBhdXRvJiB0cmFjayA9IG1f
bGVnaWJsZVRyYWNrc0Zvck1lbnVbaW5kZXhdOwotICAgICAgICBpZiAodHJhY2sgPT0gb2ZmSXRl
bSkKLSAgICAgICAgICAgIG9mZkluZGV4ID0gaW5kZXg7Ci0KLSAgICAgICAgaWYgKHRyYWNrID09
IGF1dG9tYXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9t
YXRpY0tleXdvcmQoKSkgewotICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAg
ICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChkaXNwbGF5TW9kZSAhPSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29y
ZCgpICYmIHRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7Ci0gICAg
ICAgICAgICBzZWxlY3RlZEluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICB0cmFja01lbnVJdGVt
U2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG9mZkl0ZW0gJiYg
IXRyYWNrTWVudUl0ZW1TZWxlY3RlZCAmJiBkaXNwbGF5TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9z
dDo6Zm9yY2VkT25seUtleXdvcmQoKSkKLSAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9mZkluZGV4
OwotCi0gICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7Ci19Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPndlYmtpdEN1cnJl
bnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkp
Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsKLQotICAgIHN3aXRjaCAobV9tZWRpYUVs
ZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpKSB7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBU
YXJnZXRUeXBlTm9uZTsKLSAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpO
b25lOgotICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7Ci0gICAgY2FzZSBNZWRpYUNvbnRy
b2xzSG9zdDo6RGV2aWNlVHlwZTo6QWlycGxheToKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVB
aXJQbGF5OwotICAgIGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6OlR2b3V0Ogot
ICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZVRWT3V0OwotICAgIH0KLX0KLQotU3RyaW5nIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVk
RGV2aWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFF
bGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQotICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKLSAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAotewot
ICAgIHJldHVybiBtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9u
KCkud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKm1fbWVkaWFFbGVtZW50KTsKLX0KLQot
Ym9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNNdXRlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm11dGVkKCkg
OiBmYWxzZTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjMyYjQzOTM1ZDJiMjgxZDgxNjNmYjE3
NjU4YTFjN2NlNDRhMzZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVs
bHNjcmVlbigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpID0gMDsKLX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTI3MDJkYjg2YjU5MjY0OTIy
YWViNDAxY2RiMjIyMTlkOWZkZTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQ7
Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xp
ZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKT0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCkgPSAwOwot
ICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlkZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlS
ZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwgfTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKLX07Ci0KLWNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBoYXNWaWRl
b0NoYW5nZWQoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFu
Z2VkKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLX07Ci0KLVdFQkNPUkVfRVhQT1JUIGJvb2wgc3Vw
cG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTYyNTI5ZWZhMGQxYjA5MzZjMzdhYmZkZWZkYTAwODExNDhkNDI5OS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJFdmVu
dExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgQXVkaW9UcmFjazsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFz
cyBUZXh0VHJhY2s7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDsK
LQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBjcmVh
dGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQoKSk7Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopOwotICAgIEhUTUxW
aWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50
LmdldCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXll
cihQbGF0Zm9ybUxheWVyKiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIgPSBbXSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2FpdEZvclByZXBhcmVkRm9y
SW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtd
IHsgfSk7Ci0gICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVFdmVudChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOwotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqPih0aGlz
KSA9PSAmcmhzOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlh
ID0gZmFsc2UpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXll
ckZyYW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Zp
c2libGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgdmlk
ZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7
IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9oYXNWaWRlbzsgfQotCi0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOwotCi1wcml2YXRlOgotICAgIHZv
aWQgc2V0SGFzVmlkZW8oYm9vbCk7Ci0gICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoY29uc3Qg
RmxvYXRTaXplJik7Ci0KLSAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5n
PiYgb2JzZXJ2ZWRFdmVudE5hbWVzKCk7Ci0gICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2
ZW50TmFtZUFsbCgpOwotCi0gICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVt
ZW50OwotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVy
OwotICAgIGJvb2wgbV9pc0xpc3RlbmluZyB7IGZhbHNlIH07Ci0gICAgSGFzaFNldDxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKLSAgICBib29sIG1faGFzVmlkZW8g
eyBmYWxzZSB9OwotICAgIEZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsKLSAgICBGbG9hdFJl
Y3QgbV92aWRlb0ZyYW1lOwotICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxl
VHJhY2tzRm9yTWVudTsKLSAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJh
Y2tzRm9yTWVudTsKLX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNGZiZTAxNzAy
Y2M1MGU0YTQzOWY4Njg1ZDY0MmI3OWNkOWE0MDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNDAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2ltcG9ydCAiV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKLQotI2ltcG9ydCAiRE9NV2luZG93LmgiCi0jaW1w
b3J0ICJIaXN0b3J5LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRy
b2xzSG9zdC5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
aCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9FdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0V2ZW50TmFtZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdl
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RleHRUcmFja0xpc3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
VGltZVJhbmdlcy5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW1wb3J0IDx3
dGYvU29mdExpbmtpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudCgpCi0gICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlz
dGVuZXJUeXBlKQotewotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKLXsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRl
b0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKLXsKLSAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlk
ZW9FbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYg
bV92aWRlb0VsZW1lbnQtPnZpZGVvRnVsbHNjcmVlbkxheWVyKCkpCi0gICAgICAgIG1fdmlkZW9F
bGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihudWxscHRyKTsKLQotICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZXZlbnRO
YW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Ci0gICAgfQotICAg
IG1faXNMaXN0ZW5pbmcgPSBmYWxzZTsKLQotICAgIG1fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVt
ZW50OwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50KSB7Ci0gICAgICAgIGZvciAoYXV0byYgZXZl
bnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVu
dC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1f
aXNMaXN0ZW5pbmcgPSB0cnVlOwotICAgIH0KLQotICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVu
dE5hbWVBbGwoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3Jl
OjpFdmVudCogZXZlbnQpCi17Ci0gICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LT50eXBlKCkp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVG
b3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKLXsKLSAgICBp
ZiAobV9jbGllbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wg
YWxsID0gZXZlbnROYW1lID09IGV2ZW50TmFtZUFsbCgpOwotCi0gICAgaWYgKGFsbAotICAgICAg
ICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KSB7Ci0gICAgICAgIHNl
dEhhc1ZpZGVvKG1fdmlkZW9FbGVtZW50KTsKLSAgICAgICAgc2V0VmlkZW9EaW1lbnNpb25zKG1f
dmlkZW9FbGVtZW50ID8gRmxvYXRTaXplKG1fdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIG1f
dmlkZW9FbGVtZW50LT52aWRlb0hlaWdodCgpKSA6IEZsb2F0U2l6ZSgpKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNj
cmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVy
ID09IHZpZGVvTGF5ZXIpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gdmlkZW9M
YXllcjsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0
QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UoMCwgMCldOwotI2Vsc2UKLSAgICBbbV92aWRlb0Z1bGxz
Y3JlZW5MYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLjUsIDAuNSldOwotI2VuZGlm
Ci0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOm1fdmlkZW9GcmFtZV07Ci0g
ICAgCi0gICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92aWRlb0VsZW1lbnQtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fdmlkZW9FbGVtZW50KSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX3ZpZGVvRWxlbWVudC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKLXsKLSAg
ICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkg
IT0gbW9kZSkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUp
OwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIGZpbmlzaGVkV2l0aE1lZGlhICYmIG1vZGUg
PT0gTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpIHsKLSAgICAgICAg
aWYgKG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLmlzTWVkaWFEb2N1bWVudCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQo
KS5kb21XaW5kb3coKSkgewotICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5KiBoaXN0b3J5ID0g
d2luZG93LT5oaXN0b3J5KCkpCi0gICAgICAgICAgICAgICAgICAgIGhpc3RvcnktPmJhY2soKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0
KQotewotICAgIG1fdmlkZW9GcmFtZSA9IHJlY3Q7Ci0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5
ZXIgc2V0Qm91bmRzOkNHUmVjdChyZWN0KV07Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAg
ICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJH
cmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKLXsK
LSAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVy
OjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7Ci0gICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZSkKLSAgICAgICAgdmlkZW9HcmF2aXR5
ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKLSAgICBlbHNlIGlmIChncmF2aXR5
ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpCi0g
ICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3Q7Ci0gICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCkKLSAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQ
bGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7Ci0gICAgZWxzZQotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAKLSAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9G
dWxsc2NyZWVuR3Jhdml0eSh2aWRlb0dyYXZpdHkpOwotfQotCi1jb25zdCBWZWN0b3I8QXRvbWlj
U3RyaW5nPiYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZl
bnROYW1lcygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxBdG9taWNTdHJp
bmc+PiBzRXZlbnROYW1lczsKLQotICAgIGlmICghc0V2ZW50TmFtZXMuZ2V0KCkuc2l6ZSgpKQot
ICAgICAgICBzRXZlbnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50
KTsKLSAgICByZXR1cm4gc0V2ZW50TmFtZXMuZ2V0KCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmlu
ZyYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCi17
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc0V2ZW50TmFtZUFsbCA9
ICJhbGxFdmVudHMiOwotICAgIHJldHVybiBzRXZlbnROYW1lQWxsOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1v
ZGUpCi17Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjphZGRDbGllbnQoV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250
YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5j
b250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLX0KLQot
Ym9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aXNWaXNpYmxlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fdmlkZW9FbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoUGFnZSogcGFnZSA9IG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkK
LSAgICAgICAgcmV0dXJuIHBhZ2UtPmlzVmlzaWJsZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRIYXNWaWRl
byhib29sIGhhc1ZpZGVvKQotewotICAgIGlmIChoYXNWaWRlbyA9PSBtX2hhc1ZpZGVvKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2hhc1ZpZGVvID0gaGFzVmlkZW87Ci0KLSAgICBmb3IgKGF1
dG8mIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQo
bV9oYXNWaWRlbyk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnNldFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykK
LXsKLSAgICBpZiAobV92aWRlb0RpbWVuc2lvbnMgPT0gdmlkZW9EaW1lbnNpb25zKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uczsKLQot
ICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnZpZGVv
RGltZW5zaW9uc0NoYW5nZWQobV92aWRlb0RpbWVuc2lvbnMpOwotfQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZjZDdiNGJjZjE0YmM3NGE2NTI1MjA4Y2JmMzEy
Y2U2MjVkMzYxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjcHJhZ21hIG9uY2UK
KworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxvYmpjL29iamMuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9s
bGVyOworT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBVSVZp
ZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBVSVdpbmRvdzsKK09CSkNfQ0xBU1MgVUlWaWV3Owor
CituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgSW50UmVjdDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsOworY2xhc3MgV2Vi
UGxheWJhY2tTZXNzaW9uQ2hhbmdlT2JzZXJ2ZXI7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0CisgICAgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlCisgICAgLCBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAs
IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiB7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBjcmVh
dGUoUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQobW9kZWwpKTsKKyAgICB9
CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKTsKKyAgICBQbGF5
YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBt
X3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIG92ZXJyaWRlOwor
CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hv
clRpbWUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYnVmZmVyZWRUaW1lQ2hh
bmdlZChkb3VibGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmF0ZUNoYW5n
ZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkgb3ZlcnJpZGU7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYs
IGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKSBvdmVy
cmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQo
Ym9vbCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBv
dmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2Vk
KGJvb2wpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbXV0ZWRDaGFuZ2VkKGJv
b2wpIG92ZXJyaWRlOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRh
dGUoKTsKKworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcigpIGNv
bnN0IHsgcmV0dXJuIG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tT
ZXNzaW9uTW9kZWwmKTsKKworICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1f
cGxheWVyQ29udHJvbGxlcjsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbCB7IG51bGxwdHIgfTsKK307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NWJhOTA1YTcwMTk0OTY1NzczMTdiMTBkNTMwMDI3ZmMx
YzUxNTEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisKKyNp
ZiBQTEFURk9STShJT1MpCisjaWYgSEFWRShBVktJVCkKKworI2ltcG9ydCAiQVZLaXRTUEkuaCIK
KyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisj
aW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgor
I2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24v
QVZUaW1lLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2ltcG9ydCAiQ29y
ZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkK
K1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQorICAgIDog
bV9wbGF5ZXJDb250cm9sbGVyKGFkb3B0TlMoW1tXZWJBVlBsYXllckNvbnRyb2xsZXIgYWxsb2Nd
IGluaXRdKSkKKyAgICAsIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQoreworICAgIG1v
ZGVsLmFkZENsaWVudCgqdGhpcyk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2U6dGhpc107CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXREZWxl
Z2F0ZTombW9kZWxdOworCisgICAgZHVyYXRpb25DaGFuZ2VkKG1vZGVsLmR1cmF0aW9uKCkpOwor
ICAgIGN1cnJlbnRUaW1lQ2hhbmdlZChtb2RlbC5jdXJyZW50VGltZSgpLCBbW05TUHJvY2Vzc0lu
Zm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0pOworICAgIGJ1ZmZlcmVkVGltZUNoYW5nZWQo
bW9kZWwuYnVmZmVyZWRUaW1lKCkpOworICAgIHJhdGVDaGFuZ2VkKG1vZGVsLmlzUGxheWluZygp
LCBtb2RlbC5wbGF5YmFja1JhdGUoKSk7CisgICAgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKG1vZGVs
LnNlZWthYmxlUmFuZ2VzKCksIG1vZGVsLnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRp
bWUoKSwgbW9kZWwubGl2ZVVwZGF0ZUludGVydmFsKCkpOworICAgIGNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQobW9kZWwuY2FuUGxheUZhc3RSZXZlcnNlKCkpOworICAgIGF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChtb2RlbC5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpLCBt
b2RlbC5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpKTsKKyAgICBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChtb2RlbC5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCksIG1v
ZGVsLmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSk7CisgICAgZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQobW9kZWwuZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSwgbW9kZWwuZXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUoKSwgbW9kZWwuZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5h
bWUoKSk7CisgICAgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKG1vZGVsLndp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkpOworfQorCitQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCkKK3sKKyAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTpudWxscHRyXTsKKyAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEV4dGVybmFsUGxheWJhY2tBY3RpdmU6ZmFsc2VdOwor
CisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0OjpyZXNldE1lZGlhU3RhdGUoKQoreworICAgIFttX3BsYXllckNvbnRyb2xsZXIgcmVzZXRN
ZWRpYVN0YXRlXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6ZHVy
YXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBXZWJBVlBsYXllckNvbnRyb2xs
ZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CisKKyAgICBw
bGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIHBsYXllckNv
bnRyb2xsZXIuY29udGVudER1cmF0aW9uV2l0aGluRW5kVGltZXMgPSBkdXJhdGlvbjsKKworICAg
IC8vIEZJWE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlz
IHJlYWR5LgorICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGxheSA9IFlFUzsKKyAgICBwbGF5ZXJD
b250cm9sbGVyLmNhblBhdXNlID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2FuVG9nZ2xl
UGxheWJhY2sgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5oYXNFbmFibGVkQXVkaW8gPSBZ
RVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVTOworICAgIHBsYXllckNvbnRy
b2xsZXIuc3RhdHVzID0gQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzUmVhZHlUb1BsYXk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChk
b3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworICAgIE5TVGltZUludGVy
dmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbbV9wbGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFOIDog
YW5jaG9yVGltZTsKKyAgICBBVlZhbHVlVGltaW5nICp0aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWlu
Z0NsYXNzKCkgdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUKKyAgICAgICAg
YW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOworCisgICAgW21fcGxheWVy
Q29udHJvbGxlciBzZXRUaW1pbmc6dGltaW5nXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQor
eworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVy
Q29udHJvbGxlci5nZXQoKTsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBwbGF5ZXJDb250cm9sbGVy
LmNvbnRlbnREdXJhdGlvbjsKKyAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZTsKKyAg
ICBpZiAoIWR1cmF0aW9uKQorICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gMDsKKyAg
ICBlbHNlCisgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWUgLyBk
dXJhdGlvbjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBA
KG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUpXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJh
Y2tSYXRlIDogMC5dOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojpz
ZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91Ymxl
IGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiBzZWVrYWJsZVJhbmdlcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF0pOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRp
bWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBkb3VibGUgc3RhcnQgPSB0aW1lUmFu
Z2VzLnN0YXJ0KGkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgICAgICBkb3VibGUgZW5kID0g
dGltZVJhbmdlcy5lbmQoaSkucmVsZWFzZVJldHVyblZhbHVlKCk7CisKKyAgICAgICAgQ01UaW1l
UmFuZ2UgcmFuZ2UgPSBDTVRpbWVSYW5nZU1ha2UoQ01UaW1lTWFrZVdpdGhTZWNvbmRzKHN0YXJ0
LCAxMDAwKSwgQ01UaW1lTWFrZVdpdGhTZWNvbmRzKGVuZC1zdGFydCwgMTAwMCkpOworICAgICAg
ICBbc2Vla2FibGVSYW5nZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdl
OnJhbmdlXV07CisgICAgfQorCisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRp
bWVSYW5nZXM6c2Vla2FibGVSYW5nZXMuZ2V0KCldOworICAgIFttX3BsYXllckNvbnRyb2xsZXIg
c2V0U2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZTogbGFzdE1vZGlmaWVkVGltZV07
CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRMaXZlVXBkYXRlSW50ZXJ2YWw6bGl2ZVVwZGF0
ZUludGVydmFsXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKK3sKKyAgICBb
bV9wbGF5ZXJDb250cm9sbGVyIHNldENhblNjYW5CYWNrd2FyZDpjYW5QbGF5RmFzdFJldmVyc2Vd
OworfQorCitzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9w
dGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucykKK3sKKyAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3B0aW9ucy5zaXplKCldKTsKKyAgICBm
b3IgKGF1dG8mIG9wdGlvbiA6IG9wdGlvbnMpIHsKKyAgICAgICAgUmV0YWluUHRyPFdlYkFWTWVk
aWFTZWxlY3Rpb25PcHRpb24+IHdlYk9wdGlvbiA9IGFkb3B0TlMoW1tXZWJBVk1lZGlhU2VsZWN0
aW9uT3B0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFt3ZWJPcHRpb24gc2V0TG9jYWxpemVk
RGlzcGxheU5hbWU6b3B0aW9uLmRpc3BsYXlOYW1lXTsKKyAgICAgICAgW3dlYk9wdGlvbnMgYWRk
T2JqZWN0OndlYk9wdGlvbi5nZXQoKV07CisgICAgfQorICAgIHJldHVybiB3ZWJPcHRpb25zOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CisgICAg
W21fcGxheWVyQ29udHJvbGxlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRp
b25zLmdldCgpXTsKKyAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkK
KyAgICAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50QXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+
KHNlbGVjdGVkSW5kZXgpXV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7Cisg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25P
cHRpb25zKG9wdGlvbnMpOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0TGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRpb25zLmdldCgpXTsKKyAgICBpZiAoc2VsZWN0ZWRJbmRl
eCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKKyAgICAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRD
dXJyZW50TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5k
ZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9v
bCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUgdGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKQoreworICAg
IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlIGV4dGVybmFsUGxheWJhY2tU
eXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVOb25lOworICAgIGlm
ICh0YXJnZXRUeXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSkK
KyAgICAgICAgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5h
bFBsYXliYWNrVHlwZUFpclBsYXk7CisgICAgZWxzZSBpZiAodGFyZ2V0VHlwZSA9PSBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZVRWT3V0KQorICAgICAgICBleHRlcm5hbFBsYXliYWNr
VHlwZSA9IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlVFZPdXQ7CisKKyAg
ICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRy
b2xsZXIuZ2V0KCk7CisgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWlyUGxh
eURldmljZUxvY2FsaXplZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lOworICAgIHBsYXllckNv
bnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXliYWNrVHlwZTsKKyAg
ICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldEFsbG93c0V4dGVybmFsUGxheWJhY2s6IWRpc2FibGVkXTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit7Cisg
ICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRNdXRlZDptdXRlZF07Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQoreworICAgIGlmICghbV9wbGF5
YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXREZWxlZ2F0ZTpudWxscHRyXTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5y
ZW1vdmVDbGllbnQoKnRoaXMpOworICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRy
OworfQorCit9CisKKyNlbmRpZiAvLyBIQVZFKEFWS0lUKQorI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI3NzEwM2MzNDExYTkzMDljOGZj
NTI0OTM2NWJmMDU4NTE0NjViOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCkBAIC0wLDAgKzEsMTU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjcHJh
Z21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKKyNp
bmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgPG9iamMvb2JqYy5oPgor
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgorCitPQkpDX0NMQVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7
CitPQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFVJV2luZG93OworT0JK
Q19DTEFTUyBVSVZpZXc7CitPQkpDX0NMQVNTIENBTGF5ZXI7CitPQkpDX0NMQVNTIFdlYkFWUGxh
eWVyQ29udHJvbGxlcjsKK09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJMYXllclZpZXc7CitPQkpDX0NM
QVNTIFdlYkFWUGxheWVyTGF5ZXI7CitPQkpDX0NMQVNTIFdlYkFWUGxheWVyVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZTsKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
OworICAgIAorY2xhc3MgV0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQgZmluYWwKKyAgICA6IHB1YmxpYyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgICwg
cHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsKKworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbChWaWRlb0Z1bGxzY3JlZW5Nb2RlbCopOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIqKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tT
ZXNzaW9uTW9kZWwoKTsgfQorCisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXpl
JikgZmluYWw7CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgZmluYWw7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFVJVmlldyYsIGNvbnN0IEludFJlY3QmIGluaXRpYWxS
ZWN0LCBVSVZpZXcgKiwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbigpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlz
aWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCk7CisKKyAgICBlbnVtIGNsYXNzIEV4aXRG
dWxsU2NyZWVuUmVhc29uIHsKKyAgICAgICAgRG9uZUJ1dHRvblRhcHBlZCwKKyAgICAgICAgRnVs
bFNjcmVlbkJ1dHRvblRhcHBlZCwKKyAgICAgICAgUGluY2hHZXN0dXJlSGFuZGxlZCwKKyAgICAg
ICAgUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkLAorICAgICAgICBQaWN0dXJlSW5QaWN0
dXJlU3RhcnRlZAorICAgIH07CisKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwoKSBj
b25zdCB7IHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9CisgICAgYm9vbCBzaG91bGRF
eGl0RnVsbHNjcmVlbldpdGhSZWFzb24oRXhpdEZ1bGxTY3JlZW5SZWFzb24pOworICAgIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlOyB9CisgICAgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2soKSBj
b25zdCB7IHJldHVybiBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsgfQorICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1
cmUoKSBjb25zdDsKKyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6OkZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOworICAgIGJvb2wgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0
aXZlKCk7CisKKyAgICB2b2lkIHdpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lk
IGRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOworICAgIHZvaWQgZmFpbGVkVG9TdGFydFBpY3R1
cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIHdpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpOworICAg
IHZvaWQgZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JQaWN0
dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7CisK
KyAgICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKTsKKyAgICB2b2lkIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUpOworICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQor
ICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgV0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKKyAgICB2b2lkIGJlZ2luU2Vzc2lvbigpOworICAgIHZv
aWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5TdGFu
ZGFyZCgpOworICAgIHZvaWQgd2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgV2ViQVZQbGF5ZXJD
b250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3Q7CisKKyAgICBSZWY8UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworICAgIFJl
dGFpblB0cjxXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IG1fcGxheWVyVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4g
bV9wbGF5ZXJWaWV3Q29udHJvbGxlcjsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlciogbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CisKKyAgICAv
LyBUaGVzZSBhcmUgb25seSB1c2VkIHdoZW4gZnVsbHNjcmVlbiBpcyBwcmVzZW50ZWQgaW4gYSBz
ZXBhcmF0ZSB3aW5kb3cuCisgICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3dpbmRvdzsKKyAgICBS
ZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gbV92aWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5Q
dHI8VUlWaWV3PiBtX3BhcmVudFZpZXc7CisgICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3BhcmVu
dFdpbmRvdzsKKyAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJMYXllclZpZXc+IG1fcGxheWVyTGF5
ZXJWaWV3OworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
X21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07
CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiBtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNr
OworICAgIFJ1bkxvb3A6OlRpbWVyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBtX3dh
dGNoZG9nVGltZXI7CisgICAgYm9vbCBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2V4aXRSZXF1ZXN0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9leGl0Q29tcGxldGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZW50ZXJSZXF1ZXN0ZWQgeyBm
YWxzZSB9OworICAgIGJvb2wgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCB7IHRydWUg
fTsKKyAgICBib29sIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmlu
Z0ZvcmVncm91bmQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9y
UGljdHVyZUluUGljdHVyZVN0b3AgeyBmYWxzZSB9OworCisgICAgdm9pZCBkb0VudGVyRnVsbHNj
cmVlbigpOworfTsKKworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI1ZWNlNjM2NjA4ZTE0YWI2OWI2MzA2MTVmZmYwYjU2MDBiMGFmNTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW0KQEAgLTAsMCArMSwxMDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQ
TEFURk9STShJT1MpCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgor
CisjaWYgSEFWRShBVktJVCkKKworI2ltcG9ydCAiQVZLaXRTUEkuaCIKKyNpbXBvcnQgIkdlb21l
dHJ5VXRpbGl0aWVzLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oIgorI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
LmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbXBvcnQg
IldlYkFWUGxheWVyQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlL
aXQuaD4KKyNpbXBvcnQgPG9iamMvbWVzc2FnZS5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKKy8vIFNvZnQtbGlua2luZyBoZWFkZXJzIG11c3QgYmUgaW5jbHVkZWQgbGFzdCBzaW5j
ZSB0aGV5ICNkZWZpbmUgZnVuY3Rpb25zLCBjb25zdGFudHMsIGV0Yy4KKyNpbXBvcnQgIkNvcmVN
ZWRpYVNvZnRMaW5rLmgiCisKK1NPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQorU09G
VF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikKK1NPRlRfTElOS19DT05T
VEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUsIE5TU3RyaW5nICop
CitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0LCBOU1N0cmluZyAqKQorU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwg
QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwsIE5TU3RyaW5nICopCisKK1NPRlRf
TElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwo
QVZLaXQsIEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BU
SU9OQUwoQVZLaXQsIEFWUGxheWVyVmlld0NvbnRyb2xsZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BU
SU9OQUwoQVZLaXQsIF9fQVZQbGF5ZXJMYXllclZpZXcpCisKK1NPRlRfTElOS19GUkFNRVdPUkso
VUlLaXQpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJQXBwbGljYXRpb24pCitTT0ZUX0xJTktf
Q0xBU1MoVUlLaXQsIFVJU2NyZWVuKQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVdpbmRvdykK
K1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBV
SVZpZXdDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUNvbG9yKQorU09GVF9M
SU5LX0NPTlNUQU5UKFVJS2l0LCBVSVRleHRFZmZlY3RzQmVuZWF0aFN0YXR1c0JhcldpbmRvd0xl
dmVsLCBVSVdpbmRvd0xldmVsKQorCitzdGF0aWMgVUlDb2xvciAqY2xlYXJVSUNvbG9yKCkKK3sK
KyAgICByZXR1cm4gKFVJQ29sb3IgKilbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl07Cit9
CisKKyNpZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29s
IHZhbCkKK3sKKyAgICByZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKK30KKyNlbmRpZgor
CitzdGF0aWMgY29uc3QgU2Vjb25kcyBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsIHsgMV9z
IH07CisKK0BjbGFzcyBXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uOworCitAaW50ZXJmYWNlIFdl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxBVlBsYXllclZpZXdD
b250cm9sbGVyRGVsZWdhdGVfV2ViS2l0T25seT4geworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7Cit9CitAcHJvcGVydHkgKGFz
c2lnbikgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7
CistIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICop
cGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBs
YXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVhc29uOworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlCistIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQoreworICAgIHJl
dHVybiBfZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKTsKK30KKworLSAodm9pZClzZXRGdWxsc2Ny
ZWVuSW50ZXJmYWNlOihWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbklu
dGVyZmFjZQoreworICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFj
ZTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdGFydFBpY3R1cmVJblBp
Y3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgorewor
ICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgc2VsZi5mdWxsc2Ny
ZWVuSW50ZXJmYWNlLT53aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQp
cGxheWVyVmlld0NvbnRyb2xsZXJEaWRTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmll
d0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVOVVNFRF9QQVJBTShw
bGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRT
dGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxl
ckZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICop
cGxheWVyVmlld0NvbnRyb2xsZXIgd2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sKKyAgICBV
TlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIFVOVVNFRF9QQVJBTShlcnJv
cik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5mYWlsZWRUb1N0YXJ0UGljdHVyZUlu
UGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0b3BQaWN0
dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xs
ZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYu
ZnVsbHNjcmVlbkludGVyZmFjZS0+d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0g
KHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJEaWRTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5
ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VEX1BB
UkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2Ut
PmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKK3N0YXRpYyBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gY29udmVydFRvRXhpdEZ1bGxTY3Jl
ZW5SZWFzb24oQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNv
bikKK3sKKyAgICBzd2l0Y2ggKHJlYXNvbikgeworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJv
bGxlckV4aXRGdWxsU2NyZWVuUmVhc29uRG9uZUJ1dHRvblRhcHBlZDoKKyAgICAgICAgcmV0dXJu
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9u
ZUJ1dHRvblRhcHBlZDsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNj
cmVlblJlYXNvbkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkZ1bGxTY3JlZW5C
dXR0b25UYXBwZWQ7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3Jl
ZW5SZWFzb25QaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGlj
dHVyZVN0YXJ0ZWQ7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3Jl
ZW5SZWFzb25QaW5jaEdlc3R1cmVIYW5kbGVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1cmVIYW5k
bGVkOworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29u
UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9s
U3RvcEV2ZW50UmVjZWl2ZWQ7CisgICAgfQorfQorCistIChCT09MKXBsYXllclZpZXdDb250cm9s
bGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxk
RXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxT
Y3JlZW5SZWFzb24pcmVhc29uCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9s
bGVyKTsKKyAgICByZXR1cm4gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5zaG91bGRFeGl0RnVs
bHNjcmVlbldpdGhSZWFzb24oY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24ocmVhc29uKSk7
Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xs
ZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciByZXN0b3JlVXNlckludGVyZmFjZUZvclBpY3R1cmVJ
blBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIHJlc3RvcmVk
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJv
bGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5wcmVwYXJlRm9yUGljdHVyZUlu
UGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXIpOworfQor
QGVuZAorCitAaW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXIgOiBDQUxheWVyCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluKSBOU1N0cmluZyAqdmlkZW9HcmF2aXR5OworQHByb3BlcnR5IChu
b25hdG9taWMsIGdldHRlcj1pc1JlYWR5Rm9yRGlzcGxheSkgQk9PTCByZWFkeUZvckRpc3BsYXk7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4p
IEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4pIENBTGF5ZXIgKnZpZGVvU3VibGF5ZXI7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSwgbnVsbGFibGUpIE5TRGljdGlvbmFyeSAqcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOwor
QHByb3BlcnR5IENHU2l6ZSB2aWRlb0RpbWVuc2lvbnM7CitAcHJvcGVydHkgQ0dSZWN0IG1vZGVs
VmlkZW9MYXllckZyYW1lOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJMYXll
ciB7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVl
bkludGVyZmFjZTsKKyAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBfYXZQbGF5
ZXJDb250cm9sbGVyOworICAgIFJldGFpblB0cjxDQUxheWVyPiBfdmlkZW9TdWJsYXllcjsKKyAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IF92aWRlb0dyYXZpdHk7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoc2VsZikgeworICAg
ICAgICBbc2VsZiBzZXRNYXNrc1RvQm91bmRzOllFU107CisgICAgICAgIF92aWRlb0dyYXZpdHkg
PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCk7CisgICAgfQorICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJl
dmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJl
c29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOworICAgIFtfcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzIHJl
bGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAgICByZXR1cm4gX2Z1bGxzY3Jl
ZW5JbnRlcmZhY2UuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZToo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAg
ICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Cit9CisKKy0gKEFW
UGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gKEFWUGxh
eWVyQ29udHJvbGxlciAqKV9hdlBsYXllckNvbnRyb2xsZXIuZ2V0KCk7Cit9CisKKy0gKHZvaWQp
c2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxl
cgoreworICAgIEFTU0VSVCghcGxheWVyQ29udHJvbGxlciB8fCBbcGxheWVyQ29udHJvbGxlciBp
c0tpbmRPZkNsYXNzOltXZWJBVlBsYXllckNvbnRyb2xsZXIgY2xhc3NdXSk7CisgICAgX2F2UGxh
eWVyQ29udHJvbGxlciA9IChXZWJBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVy
OworfQorCistICh2b2lkKXNldFZpZGVvU3VibGF5ZXI6KENBTGF5ZXIgKil2aWRlb1N1YmxheWVy
Cit7CisgICAgX3ZpZGVvU3VibGF5ZXIgPSB2aWRlb1N1YmxheWVyOworfQorCistIChDQUxheWVy
Kil2aWRlb1N1YmxheWVyCit7CisgICAgcmV0dXJuIF92aWRlb1N1YmxheWVyLmdldCgpOworfQor
CistICh2b2lkKWxheW91dFN1YmxheWVycworeworICAgIGlmIChbX3ZpZGVvU3VibGF5ZXIgc3Vw
ZXJsYXllcl0gIT0gc2VsZikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFbX2F2UGxheWVy
Q29udHJvbGxlciBkZWxlZ2F0ZV0pCisgICAgICAgIHJldHVybjsKKworICAgIFtfdmlkZW9TdWJs
YXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKHNlbGYuYm91bmRzKSwg
Q0dSZWN0R2V0TWlkWShzZWxmLmJvdW5kcykpXTsKKworICAgIGlmIChzZWxmLnZpZGVvRGltZW5z
aW9ucy5oZWlnaHQgPD0gMCB8fCBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8PSAwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3Qgc291cmNlVmlkZW9GcmFtZTsKKyAgICBGbG9h
dFJlY3QgdGFyZ2V0VmlkZW9GcmFtZTsKKyAgICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gc2Vs
Zi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7Cisg
ICAgCisgICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplKCkgaXNFcXVhbFRvU3Ry
aW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgeworICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc2Vs
Zi5tb2RlbFZpZGVvTGF5ZXJGcmFtZTsKKyAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNlbGYu
Ym91bmRzOworICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7CisgICAgICAgIHNvdXJj
ZVZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9B
c3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7CisgICAgICAgIHRhcmdldFZp
ZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9Bc3Bl
Y3RSYXRpbywgc2VsZi5ib3VuZHMpOworICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5
XSkgeworICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJh
dGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1l
KTsKKyAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IENHUmVjdE1ha2UoMCwgMCwg
c291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKKyAg
ICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKKyAgICAgICAgX2Z1
bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShzZWxmLm1vZGVs
VmlkZW9MYXllckZyYW1lKTsKKyAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVj
dFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMp
OworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIFVJVmll
dyAqdmlldyA9IChVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdOworICAgIENHQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHRhcmdl
dFZpZGVvRnJhbWUud2lkdGgoKSAvIHNvdXJjZVZpZGVvRnJhbWUud2lkdGgoKSwgdGFyZ2V0Vmlk
ZW9GcmFtZS5oZWlnaHQoKSAvIHNvdXJjZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOworICAgIFt2aWV3
IHNldFRyYW5zZm9ybTp0cmFuc2Zvcm1dOworICAgIAorICAgIE5TVGltZUludGVydmFsIGFuaW1h
dGlvbkR1cmF0aW9uID0gW0NBVHJhbnNhY3Rpb24gYW5pbWF0aW9uRHVyYXRpb25dOworICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4geworICAgICAgICBbTlNP
YmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOworCisgICAgICAgIFtzZWxm
IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgd2l0aE9iamVjdDpuaWwg
YWZ0ZXJEZWxheTphbmltYXRpb25EdXJhdGlvbiArIDAuMV07CisgICAgfSk7Cit9CisKKy0gKHZv
aWQpcmVzb2x2ZUJvdW5kcworeworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykg
b2JqZWN0Om5pbF07CisgICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5ZXJd
ICE9IHNlbGYpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoQ0dSZWN0RXF1YWxUb1Jl
Y3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkgJiYgQ0dBZmZpbmVU
cmFuc2Zvcm1Jc0lkZW50aXR5KFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXSB0
cmFuc2Zvcm1dKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsKKyAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIAorICAgIGlmICghQ0dS
ZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkp
IHsKKyAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IFtzZWxmIGJvdW5kc107Cisg
ICAgICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7CisgICAgICAgIF9m
dWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2Rl
bFZpZGVvTGF5ZXJGcmFtZSk7CisgICAgfQorICAgIFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVy
IGRlbGVnYXRlXSBzZXRUcmFuc2Zvcm06Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eV07CisgICAg
CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZClzZXRWaWRlb0dyYXZp
dHk6KE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Cit7CisgICAgX3ZpZGVvR3Jhdml0eSA9IHZpZGVv
R3Jhdml0eTsKKyAgICAKKyAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZp
ZGVvR3Jhdml0eSBncmF2aXR5ID0gV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJW
aWRlb0dyYXZpdHlSZXNpemUoKSkKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemU7CisgICAgaWYgKHZpZGVvR3Jhdml0eSA9
PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCisgICAgICAgIGdyYXZpdHkg
PSBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
OworICAgIGVsc2UgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0RmlsbCgpKQorICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7CisgICAgZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAKKyAgICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRl
cmZhY2UtPm1vZGVsKCkpOworICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRW
aWRlb0xheWVyR3Jhdml0eShncmF2aXR5KTsKK30KKworLSAoTlNTdHJpbmcgKil2aWRlb0dyYXZp
dHkKK3sKKyAgICByZXR1cm4gX3ZpZGVvR3Jhdml0eS5nZXQoKTsKK30KKworLSAoQ0dSZWN0KXZp
ZGVvUmVjdAoreworICAgIGlmIChzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8PSAwIHx8IHNl
bGYudmlkZW9EaW1lbnNpb25zLmhlaWdodCA8PSAwKQorICAgICAgICByZXR1cm4gc2VsZi5ib3Vu
ZHM7CisgICAgCisgICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlkZW9EaW1lbnNp
b25zLndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0OworCisgICAgaWYgKFtnZXRB
VkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlk
ZW9HcmF2aXR5XSkKKyAgICAgICAgcmV0dXJuIGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5z
aWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisgICAgaWYgKFtnZXRBVkxh
eWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZp
ZGVvR3Jhdml0eV0pCisgICAgICAgIHJldHVybiBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9B
cm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKKworICAgIHJldHVybiBz
ZWxmLmJvdW5kczsKK30KKworKyAoTlNTZXQgKilrZXlQYXRoc0ZvclZhbHVlc0FmZmVjdGluZ1Zp
ZGVvUmVjdAoreworICAgIHJldHVybiBbTlNTZXQgc2V0V2l0aE9iamVjdHM6QCJ2aWRlb0RpbWVu
c2lvbnMiLCBAInZpZGVvR3Jhdml0eSIsIG5pbF07Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBX
ZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgOiBVSVZpZXcKK0BlbmQKKworc3Rh
dGljIENsYXNzIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld19sYXllckNsYXNz
KGlkLCBTRUwpCit7CisgICAgcmV0dXJuIFtXZWJBVlBsYXllckxheWVyIGNsYXNzXTsKK30KKwor
c3RhdGljIENsYXNzIGdldFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld0NsYXNz
KCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7CisgICAgc3RhdGljIGRpc3Bh
dGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsK
KyAgICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdldFVJVmlld0NsYXNz
KCksICJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciLCAwKTsKKyAgICAgICAg
b2JqY19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7CisgICAgICAgIENsYXNzIG1ldGFDbGFz
cyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXciKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1ldGFDbGFzcywgQHNlbGVjdG9yKGxheWVy
Q2xhc3MpLCAoSU1QKVdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld19sYXllckNs
YXNzLCAiQEA6Iik7CisgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHRoZUNsYXNzOworfQorCitA
aW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXJWaWV3IDogX19BVlBsYXllckxheWVyVmlldworQHBy
b3BlcnR5IChyZXRhaW4pIFVJVmlldyogdmlkZW9WaWV3OworQGVuZAorCitzdGF0aWMgQ2xhc3Mg
V2ViQVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQoreworICAgIHJldHVybiBb
V2ViQVZQbGF5ZXJMYXllciBjbGFzc107Cit9CisKK3N0YXRpYyBBVlBsYXllckNvbnRyb2xsZXIg
KldlYkFWUGxheWVyTGF5ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCkKK3sK
KyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllciA9IGFTZWxmOworICAgIFdlYkFW
UGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5
ZXJMYXllciBwbGF5ZXJMYXllcl07CisgICAgcmV0dXJuIFt3ZWJBVlBsYXllckxheWVyIHBsYXll
ckNvbnRyb2xsZXJdOworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zZXRQ
bGF5ZXJDb250cm9sbGVyKGlkIGFTZWxmLCBTRUwsIEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVy
Q29udHJvbGxlcikKK3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcg
PSBhU2VsZjsKKyAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFW
UGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBbd2ViQVZQ
bGF5ZXJMYXllciBzZXRQbGF5ZXJDb250cm9sbGVyOiBwbGF5ZXJDb250cm9sbGVyXTsKK30KKwor
c3RhdGljIFVJVmlldyAqV2ViQVZQbGF5ZXJMYXllclZpZXdfdmlkZW9WaWV3KGlkIGFTZWxmLCBT
RUwpCit7CisgICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsKKyAg
ICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIg
KilbcGxheWVyTGF5ZXIgcGxheWVyTGF5ZXJdOworICAgIENBTGF5ZXIqIHZpZGVvTGF5ZXIgPSBb
d2ViQVZQbGF5ZXJMYXllciB2aWRlb1N1YmxheWVyXTsKKyAgICBpZiAoIXZpZGVvTGF5ZXIgfHwg
IXZpZGVvTGF5ZXIuZGVsZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKFtb
dmlkZW9MYXllciBkZWxlZ2F0ZV0gaXNLaW5kT2ZDbGFzczpnZXRVSVZpZXdDbGFzcygpXSk7Cisg
ICAgcmV0dXJuIChVSVZpZXcgKilbdmlkZW9MYXllciBkZWxlZ2F0ZV07Cit9CisKK3N0YXRpYyB2
b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFZpZGVvVmlldyhpZCBhU2VsZiwgU0VMLCBVSVZp
ZXcgKnZpZGVvVmlldykKK3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZp
ZXcgPSBhU2VsZjsKKyAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdl
YkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBbd2Vi
QVZQbGF5ZXJMYXllciBzZXRWaWRlb1N1YmxheWVyOlt2aWRlb1ZpZXcgbGF5ZXJdXTsKK30KKwor
c3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBs
YXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgV2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldyAqKVtwbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlld107CisKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJB
VlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAgV2ViQVZQ
bGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3
IGxheWVyXTsKKyAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OmdldEFWTGF5ZXJWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3QoKV07CisgICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvU3Vi
bGF5ZXI6cGxheWVyTGF5ZXIudmlkZW9TdWJsYXllcl07CisgICAgW3BpcFBsYXllckxheWVyIHNl
dFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOworICAgIFtwaXBQ
bGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6cGxheWVyTGF5ZXIudmlkZW9HcmF2aXR5XTsKKyAg
ICBbcGlwUGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6cGxheWVyTGF5ZXIubW9k
ZWxWaWRlb0xheWVyRnJhbWVdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRQbGF5ZXJDb250cm9s
bGVyOnBsYXllckxheWVyLnBsYXllckNvbnRyb2xsZXJdOworICAgIFtwaXBQbGF5ZXJMYXllciBz
ZXRGdWxsc2NyZWVuSW50ZXJmYWNlOnBsYXllckxheWVyLmZ1bGxzY3JlZW5JbnRlcmZhY2VdOwor
ICAgIFtwaXBWaWV3IGFkZFN1YnZpZXc6cGxheWVyTGF5ZXJWaWV3LnZpZGVvVmlld107Cit9CisK
K3N0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBs
YXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgaWYgKFVJVmlldyAq
dmlkZW9WaWV3ID0gcGxheWVyTGF5ZXJWaWV3LnZpZGVvVmlldykKKyAgICAgICAgW3BsYXllckxh
eWVyVmlldyBhZGRTdWJ2aWV3OnZpZGVvVmlld107CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxh
eWVyVmlldyAqKVtwbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
d107CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXll
ciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworICAgIFdlYkFWUGxheWVyTGF5ZXIg
KnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07Cisg
ICAgW3BsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBpcFBsYXllckxheWVyLm1v
ZGVsVmlkZW9MYXllckZyYW1lXTsKK30KKworc3RhdGljIFdlYkFWUGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlldyAqV2ViQVZQbGF5ZXJMYXllclZpZXdfcGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQoreworICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpw
bGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXcgKnBpcFZpZXcgPSBbcGxheWVyTGF5ZXJWaWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKKyAgICBpZiAoIXBpcFZpZXcpIHsKKyAgICAg
ICAgcGlwVmlldyA9IFtbZ2V0V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Q2xh
c3MoKSBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvXTsKKyAgICAgICAgW3BsYXllckxh
eWVyVmlldyBzZXRWYWx1ZTpwaXBWaWV3IGZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3Il07CisgICAgfQorICAgIHJldHVybiBwaXBWaWV3OworfQorCitzdGF0aWMgdm9p
ZCBXZWJBVlBsYXllckxheWVyVmlld19kZWFsbG9jKGlkIGFTZWxmLCBTRUwpCit7CisgICAgV2Vi
QVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFJldGFpblB0
cjxXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXc+IHBpcFZpZXcgPSBhZG9wdE5T
KFtwbGF5ZXJMYXllclZpZXcgdmFsdWVGb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxh
eWVyVmlldyJdKTsKKyAgICBbcGxheWVyTGF5ZXJWaWV3IHNldFZhbHVlOm5pbCBmb3JLZXk6QCJf
cGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOworICAgIG9iamNfc3VwZXIgc3VwZXJD
bGFzcyB7IHBsYXllckxheWVyVmlldywgZ2V0X19BVlBsYXllckxheWVyVmlld0NsYXNzKCkgfTsK
KyAgICBhdXRvIHN1cGVyX2RlYWxsb2MgPSByZWludGVycHJldF9jYXN0PHZvaWQoKikob2JqY19z
dXBlciosIFNFTCk+KG9iamNfbXNnU2VuZFN1cGVyKTsKKyAgICBzdXBlcl9kZWFsbG9jKCZzdXBl
ckNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYykpOworfQorCisjcHJhZ21hIG1hcmsgLSBNZXRob2Rz
CisKK3N0YXRpYyBDbGFzcyBnZXRXZWJBVlBsYXllckxheWVyVmlld0NsYXNzKCkKK3sKKyAgICBz
dGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBv
bmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKKyAgICAgICAgdGhl
Q2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdldF9fQVZQbGF5ZXJMYXllclZpZXdDbGFz
cygpLCAiV2ViQVZQbGF5ZXJMYXllclZpZXciLCAwKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9k
KHRoZUNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdf
ZGVhbGxvYywgInZAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxl
Y3RvcihzZXRQbGF5ZXJDb250cm9sbGVyOiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0
UGxheWVyQ29udHJvbGxlciwgInZAOkAiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNs
YXNzLCBAc2VsZWN0b3IocGxheWVyQ29udHJvbGxlciksIChJTVApV2ViQVZQbGF5ZXJMYXllclZp
ZXdfcGxheWVyQ29udHJvbGxlciwgIkBAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhl
Q2xhc3MsIEBzZWxlY3RvcihzZXRWaWRlb1ZpZXc6KSwgKElNUClXZWJBVlBsYXllckxheWVyVmll
d19zZXRWaWRlb1ZpZXcsICJ2QDpAIik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFz
cywgQHNlbGVjdG9yKHZpZGVvVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfdmlkZW9W
aWV3LCAiQEA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9y
KHN0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElN
UClXZWJBVlBsYXllckxheWVyVmlld19zdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldywgInZAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xh
c3MsIEBzZWxlY3RvcihzdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVvVG9QaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAidkA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1l
dGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcp
LCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcsICJAQDoiKTsKKyAgICAgICAgCisgICAgICAgIGNsYXNzX2FkZEl2YXIodGhlQ2xhc3MsICJf
cGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIsIHNpemVvZihXZWJBVlBpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcgKiksIGxvZzIoc2l6ZW9mKFdlYkFWUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldyAqKSksICJAIik7CisgICAgICAgIAorICAgICAgICBvYmpjX3JlZ2lz
dGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsKKyAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2JqY19n
ZXRNZXRhQ2xhc3MoIldlYkFWUGxheWVyTGF5ZXJWaWV3Iik7CisgICAgICAgIGNsYXNzX2FkZE1l
dGhvZChtZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClXZWJBVlBsYXllckxh
eWVyVmlld19sYXllckNsYXNzLCAiQEA6Iik7CisgICAgfSk7CisgICAgcmV0dXJuIHRoZUNsYXNz
OworfQorCitSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpjcmVhdGUoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSkKK3sKKyAgICBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7CisgICAgW2ludGVyZmFjZS0+bV9w
bGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJm
YWNlLnB0cigpXTsKKyAgICByZXR1cm4gaW50ZXJmYWNlOworfQorCitWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKKyAgICA6IG1fcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKKyAgICAsIG1f
cGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZShhZG9wdE5TKFtbV2ViQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX3dhdGNoZG9nVGltZXIoUnVu
TG9vcDo6bWFpbigpLCB0aGlzLCAmVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNo
ZG9nVGltZXJGaXJlZCkKK3sKK30KKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6On5W
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCit7CisgICAgV2ViQVZQbGF5ZXJDb250cm9s
bGVyKiBwbGF5ZXJDb250cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxlcigpOworICAgIGlm
IChwbGF5ZXJDb250cm9sbGVyICYmIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0Fj
dGl2ZSkKKyAgICAgICAgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZmFsc2UsIFBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSwgIiIpOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRo
aXMpOworfQorCitXZWJBVlBsYXllckNvbnRyb2xsZXIgKlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UtPnBsYXllckNvbnRyb2xsZXIoKTsKK30KKwordm9pZCBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxs
c2NyZWVuTW9kZWwqIG1vZGVsKQoreworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOworCisg
ICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG1vZGVsOworCisgICAgaWYgKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgq
dGhpcyk7CisKKyAgICBoYXNWaWRlb0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZSk7CisgICAgdmlkZW9EaW1l
bnNpb25zQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbC0+dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKSk7Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKK3sKKyAgICBb
cGxheWVyQ29udHJvbGxlcigpIHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRlb107CisgICAgW3Bs
YXllckNvbnRyb2xsZXIoKSBzZXRIYXNWaWRlbzpoYXNWaWRlb107Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxv
YXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVy
TGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXll
cl07CisKKyAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9u
c107CisgICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRDb250ZW50RGltZW5zaW9uczp2aWRlb0Rp
bWVuc2lvbnNdOworICAgIFttX3BsYXllckxheWVyVmlldyBzZXROZWVkc0xheW91dF07CisKKyAg
ICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQ
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW21fcGxheWVyTGF5ZXJWaWV3IHBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBs
YXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07CisgICAgW3Bp
cFBsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lv
bnNdOworICAgIFtwaXBWaWV3IHNldE5lZWRzTGF5b3V0XTsKK30KKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVk
LCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0
IFN0cmluZyYpCit7CisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEhpZGRlbjplbmFibGVkXTsK
K30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRC
ZWNvbWVBY3RpdmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCVwKSIsIHRoaXMpOworICAg
IGlmIChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kICYm
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aXNWaXNp
YmxlKCkpIHsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBp
Y3R1cmVdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgYXJlIGJvdGgg
aW4gUGlQIGFuZCBpbiBGdWxsc2NyZWVuIChpLmUuLCB2aWEgYXV0by1QaVApLCBhbmQgd2UgZGlk
IG5vdCBzdG9wIGZ1bGxzY3JlZW4gdXBvbiByZXR1cm5pbmcsIGl0IG11c3QgYmUKKyAgICAvLyBi
ZWNhdXNlIHRoZSBvcmlnaW5hdGluZyB2aWV3IGlzIG5vdCB2aXNpYmxlLCBzbyBoaWRlIHRoZSBm
dWxsc2NyZWVuIHdpbmRvdy4KKyAgICBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRp
b25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAg
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgfV07CisgICAgfQor
fQorCitAaW50ZXJmYWNlIFVJV2luZG93ICgpCistIChCT09MKV9pc0hvc3RlZEluQW5vdGhlclBy
b2Nlc3M7CitAZW5kCisKK0BpbnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAoKQorQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbiwgc2V0dGVyPV9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRh
dGlvbnM6KSBCT09MIF9pZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM7CitAZW5kCisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcm
IHZpZGVvVmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyog
cGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQoreworICAgIEFTU0VSVCht
b2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVw
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBs
YXliYWNrID0gYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOworCisgICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
CisgICAgYm9vbCBpc0luUGljdHVyZUluUGljdHVyZU1vZGUgPSBoYXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgIG1f
bW9kZSA9IG1vZGU7CisgICAgbV9wYXJlbnRWaWV3ID0gcGFyZW50VmlldzsKKyAgICBtX3BhcmVu
dFdpbmRvdyA9IHBhcmVudFZpZXcud2luZG93OworCisgICAgaWYgKCFbW3BhcmVudFZpZXcgd2lu
ZG93XSBfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzXSkgeworICAgICAgICBpZiAoIW1fd2luZG93
KQorICAgICAgICAgICAgbV93aW5kb3cgPSBhZG9wdE5TKFthbGxvY1VJV2luZG93SW5zdGFuY2Uo
KSBpbml0V2l0aEZyYW1lOltbZ2V0VUlTY3JlZW5DbGFzcygpIG1haW5TY3JlZW5dIGJvdW5kc11d
KTsKKyAgICAgICAgW21fd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07
CisgICAgICAgIGlmICghbV92aWV3Q29udHJvbGxlcikKKyAgICAgICAgICAgIG1fdmlld0NvbnRy
b2xsZXIgPSBhZG9wdE5TKFthbGxvY1VJVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsK
KyAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOlttX3dpbmRvdyBib3Vu
ZHNdXTsKKyAgICAgICAgW21fdmlld0NvbnRyb2xsZXIgX3NldElnbm9yZUFwcFN1cHBvcnRlZE9y
aWVudGF0aW9uczpZRVNdOworICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVy
Om1fdmlld0NvbnRyb2xsZXIuZ2V0KCldOworICAgICAgICBbbV93aW5kb3cgc2V0V2luZG93TGV2
ZWw6Z2V0VUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCgpICsgMV07Cisg
ICAgICAgIFttX3dpbmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07CisgICAgfQorCisgICAgaWYgKCFt
X3BsYXllckxheWVyVmlldykKKyAgICAgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBhZG9wdE5TKFtb
Z2V0V2ViQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpIGFsbG9jXSBpbml0XSk7CisgICAgW21fcGxh
eWVyTGF5ZXJWaWV3IHNldEhpZGRlbjpbcGxheWVyQ29udHJvbGxlcigpIGlzRXh0ZXJuYWxQbGF5
YmFja0FjdGl2ZV1dOworICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6
Y2xlYXJVSUNvbG9yKCldOworCisgICAgaWYgKCFpc0luUGljdHVyZUluUGljdHVyZU1vZGUpIHsK
KyAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldFZpZGVvVmlldzomdmlkZW9WaWV3XTsKKyAg
ICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6JnZpZGVvVmlld107CisgICAgfQor
CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAq
KVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisKKyAgICBbcGxheWVyTGF5ZXIgc2V0
TW9kZWxWaWRlb0xheWVyRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBpbml0aWFsUmVjdC53aWR0aCgp
LCBpbml0aWFsUmVjdC5oZWlnaHQoKSldOworICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVu
c2lvbnM6W3BsYXllckNvbnRyb2xsZXIoKSBjb250ZW50RGltZW5zaW9uc11dOworICAgIHBsYXll
ckxheWVyLmZ1bGxzY3JlZW5JbnRlcmZhY2UgPSB0aGlzOworCisgICAgaWYgKCFtX3BsYXllclZp
ZXdDb250cm9sbGVyKQorICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhb
YWxsb2NBVlBsYXllclZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0aFBsYXllckxheWVy
VmlldzptX3BsYXllckxheWVyVmlldy5nZXQoKV0pOworCisgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJD
b250cm9sbGVyKCldOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm1f
cGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgc2V0QWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOm1fYWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrXTsKKworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0UGljdHVy
ZUluUGljdHVyZVBvc3NpYmxlOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrXTsKKwor
ICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIFttX3ZpZXdDb250cm9sbGVyIGFk
ZENoaWxkVmlld0NvbnRyb2xsZXI6bV9wbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07CisgICAg
ICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW3BhcmVudFZpZXcgYWRkU3Vidmll
dzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07CisKKyAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciB2aWV3XS5mcmFtZSA9IFtwYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmluaXRpYWxSZWN0
IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOworCisgICAg
W1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJ
Q29sb3IoKV07CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEF1dG9yZXNp
emluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlQm90dG9tTWFyZ2luIHwgVUlWaWV3
QXV0b3Jlc2l6aW5nRmxleGlibGVSaWdodE1hcmdpbildOworCisgICAgW1ttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddIHNldE5lZWRzTGF5b3V0XTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld10gbGF5b3V0SWZOZWVkZWRdOworCisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0
XTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbcHJvdGVjdGVkVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIpCisgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0
dXBGdWxsc2NyZWVuKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwor
CisgICAgbV9leGl0Q29tcGxldGVkID0gZmFsc2U7CisgICAgbV9leGl0UmVxdWVzdGVkID0gZmFs
c2U7CisgICAgbV9lbnRlclJlcXVlc3RlZCA9IHRydWU7CisKKyAgICBpZiAobW9kZSgpID09IEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUp
CisgICAgICAgIGVudGVyUGljdHVyZUluUGljdHVyZSgpOworICAgIGVsc2UgaWYgKG1vZGUoKSA9
PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkKKyAg
ICAgICAgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjplbnRlclBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlz
KTsKKyAgICAKKyAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0
dXJlUG9zc2libGVdKQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdGFydFBpY3R1
cmVJblBpY3R1cmVdOworICAgIGVsc2UKKyAgICAgICAgZmFpbGVkVG9TdGFydFBpY3R1cmVJblBp
Y3R1cmUoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuU3RhbmRhcmQoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCVwKSIsIHRoaXMpOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKworICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1
cmVBY3RpdmVdKSB7CisgICAgICAgIC8vIE5PVEU6IFRoZSBmdWxsc2NyZWVuIG1vZGUgd2lsbCBi
ZSByZXN0b3JlZCBpbiBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlv
bkhhbmRsZXIoKS4KKyAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBp
bmdQaVAgPSB0cnVlOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVy
ZUluUGljdHVyZV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6
W3RoaXMsIHByb3RlY3RlZFRoaXNdIChCT09MIHN1Y2NlZWRlZCwgTlNFcnJvciopIHsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHN1Y2NlZWRlZCk7CisgICAgICAgIExPRyhGdWxsc2NyZWVuLCAiVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkIC0gbGFt
YmRhKCVwKSAtIHN1Y2NlZWRlZCglcykiLCB0aGlzLCBib29sU3RyaW5nKHN1Y2NlZWRlZCkpOwor
ICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6
WUVTXTsKKworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAg
ICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Cisg
ICAgfV07Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxs
c2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsUmVjdCkKK3sKKyAgICBtX3dhdGNo
ZG9nVGltZXIuc3RvcCgpOworCisgICAgbV9leGl0UmVxdWVzdGVkID0gdHJ1ZTsKKyAgICBpZiAo
bV9leGl0Q29tcGxldGVkKSB7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNj
cmVlbigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIExPRyhGdWxsc2NyZWVu
LCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKCVwKSIsIHRo
aXMpOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9s
czpOT107CisgICAgCisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBb
bV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmZpbmFsUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKKworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXll
ckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5
ZXJdOworICAgIGlmIChbcGxheWVyTGF5ZXIgdmlkZW9HcmF2aXR5XSAhPSBnZXRBVkxheWVyVmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCisgICAgICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dy
YXZpdHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpXTsKKyAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVkZWRdOworCisgICAgaWYgKGlzTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0
dXJlKSkgeworICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1Bp
UCA9IGZhbHNlOworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOworICAgIH0gZWxzZSBp
ZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBl
eGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlz
LCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgIGNsZWFyTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgICAg
ICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICAgICAgfV07CisgICAgfSBlbHNlIGlm
IChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRh
cmQpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1
bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRo
aXNdIChCT09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1
ZTsKKworICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgICAgICAgICAgW0NB
VHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAgICAgICAgIFttX3BsYXll
ckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgICAgICAg
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVh
clVJQ29sb3IoKV07CisgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAg
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgdGhpc10oKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKQorICAgICAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9XTsKKyAg
ICB9OworfQorCitAaW50ZXJmYWNlIFVJQXBwbGljYXRpb24gKCkKKy0gKHZvaWQpX3NldFN0YXR1
c0Jhck9yaWVudGF0aW9uOihVSUludGVyZmFjZU9yaWVudGF0aW9uKW87CitAZW5kCisKK0BpbnRl
cmZhY2UgVUlXaW5kb3cgKCkKKy0gKFVJSW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJmYWNlT3Jp
ZW50YXRpb247CitAZW5kCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNs
ZWFudXBGdWxsc2NyZWVuKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBpZiAo
bV93aW5kb3cpIHsKKyAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgICAgICBb
bV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm5pbF07CisgICAgICAgIGlmIChtX3BhcmVu
dFdpbmRvdykKKyAgICAgICAgICAgIFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBw
bGljYXRpb25dIF9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjpbbV9wYXJlbnRXaW5kb3cgaW50ZXJm
YWNlT3JpZW50YXRpb25dXTsKKyAgICB9CisgICAgCisgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5
ZXJDb250cm9sbGVyOm5pbF07CisgICAgCisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCisgICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICBpZiAoaGFz
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkp
CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6
Tk8gY29tcGxldGlvbkhhbmRsZXI6W10gKEJPT0wsIE5TRXJyb3IgKikgeyB9XTsKKyAgICAKKyAg
ICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107Cisg
ICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IHJlbW92ZUZyb21QYXJlbnRWaWV3Q29udHJvbGxlcl07CisgICAgCisgICAgW21fcGxheWVyTGF5
ZXJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3
XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gbmlsOwor
ICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIgPSBuaWw7CisgICAgbV93aW5kb3cgPSBuaWw7Cisg
ICAgbV9wYXJlbnRWaWV3ID0gbmlsOworICAgIG1fcGFyZW50V2luZG93ID0gbmlsOworICAgIAor
ICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7CisKKyAgICBtX2VudGVyUmVx
dWVzdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmludmFsaWRhdGUoKQoreworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7CisgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7CisgICAgCisgICAgY2xlYW51cEZ1bGxz
Y3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVz
dEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKCFtX2VudGVyUmVxdWVzdGVkKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworCisgICAgW21f
d2luZG93IHNldEhpZGRlbjpZRVNdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBzZXRIaWRkZW46WUVTXTsKKworICAgIGlmIChwbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgeworICAgICAgICBwbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgfQorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJ
bnRSZWN0JiBpbmxpbmVSZWN0KQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCkgLSB2aXNpYmxl
KCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSkpOworICAgIGlmIChtX3ByZXBhcmVUb0lu
bGluZUNhbGxiYWNrKSB7CisgICAgICAgIAorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1Zp
ZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKKworICAgICAgICBX
VEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGTW92ZShtX3ByZXBhcmVUb0lu
bGluZUNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7CisgICAgfQorfQorCiti
b29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1Zp
ZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFtwbGF5ZXJDb250cm9s
bGVyKCkgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZShXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCit7CisgICAg
bV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIGlmICht
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworfQorCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAg
ICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3Rh
cnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIHNldE1vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVy
ZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIG1fc2hvdWxkUmV0
dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRd
OworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZ
RVNdOworCisgICAgaWYgKG1fbW9kZSAmIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVN0YW5kYXJkKSB7CisgICAgICAgIGlmICghW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXSkgewor
ICAgICAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1
bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRo
aXNdIChCT09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRk
ZW46WUVTXTsKKyAgICAgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10g
c2V0SGlkZGVuOllFU107CisgICAgICAgICAgICB9XTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOworICAgIH0KKworICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBp
Y3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
c2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CisKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7CisKKyAgICBpZiAobV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRFbnRlckZ1bGxzY3JlZW4oKTsKKworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgp
Cit7CisgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxz
ZTsKKyAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5k
ID0gZmFsc2U7CisKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgaWYgKGhh
c01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQp
IHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKQorICAgICAg
ICByZXR1cm47CisKKyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICBbW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKKworICAgIGlmIChtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVs
bHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9u
ZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0
dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBp
ZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFu
ZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApIHsK
KyAgICAgICAgLy8gQVNTVU1QVElPTjogd2UgYXJlIGV4aXRpbmcgcGlwIGJlY2F1c2Ugd2UgYXJl
IGVudGVyaW5nIGZ1bGxzY3JlZW4KKyAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7CisKKyAgICBb
bV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKyAg
ICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFy
VUlDb2xvcigpXTsKKworICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICAKKyAgICBpZiAobV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRFeGl0RnVsbHNjcmVlbigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIo
dm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSkKK3sKKyAgICBMT0coRnVs
bHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVy
ZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoJXApIiwgdGhpcyk7CisgICAgaWYg
KG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQIHx8IG1fc2hvdWxkUmV0
dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQpIHsKKyAgICAgICAgbV9zaG91
bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKKyAgICAgICAgbV9z
aG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOwor
ICAgICAgICBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IHRy
dWU7CisKKyAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgICAgIFtbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46Tk9dOworCisgICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFu
ZGxlcjpeKEJPT0wgc3VjY2VzcywgTlNFcnJvciopIHsKKyAgICAgICAgICAgIG1fcmVzdG9yaW5n
RnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wID0gZmFsc2U7CisgICAgICAgICAgICBz
ZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOworICAgICAgICAgICAg
aWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgICAgIG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgfV07Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmV0YWluUHRyPGlkPiBzdHJvbmdD
b21wbGV0aW9uSGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKKyAg
ICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoW3Byb3RlY3RlZFRoaXMsIHN0cm9uZ0NvbXBs
ZXRpb25IYW5kbGVyXShib29sIHJlc3RvcmVkKSAgeworICAgICAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVy
ZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIgbGFtYmRhKCVwKSAtIHJlc3RvcmVkKCVzKSIsIHBy
b3RlY3RlZFRoaXMuZ2V0KCksIGJvb2xTdHJpbmcocmVzdG9yZWQpKTsKKyAgICAgICAgdm9pZCAo
XmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSA9IHN0cm9uZ0NvbXBsZXRpb25IYW5k
bGVyLmdldCgpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN0b3JlZCk7CisgICAgfSk7
Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxs
c2NyZWVuV2l0aFJlYXNvbihWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxT
Y3JlZW5SZWFzb24gcmVhc29uKQoreworICAgIGlmICghbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVu
UmVhc29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZCkgeworICAgICAgICBpZiAoW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNr
Z3JvdW5kXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3Nob3VsZFJl
dHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGhhc01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAgICAgICBjbGVhck1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocGxheWJhY2tTZXNzaW9uTW9kZWwo
KSAmJiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkIHx8
IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJl
Y2VpdmVkKSkKKyAgICAgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKKyAgICAK
KyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSwgcmVhc29uID09IEV4aXRG
dWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkKTsKKworICAgIGlmICghbV93YXRjaGRv
Z1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fd2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3Qo
ZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K05PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OndhdGNoZG9nVGltZXJGaXJlZCgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCVwKSAtIG5vIGV4aXQg
ZnVsbHNjcmVlbiByZXNwb25zZSBpbiAlZ3M7IGZvcmNpbmcgZnVsbHNjcmVlbiBoaWRkZW4uIiwg
dGhpcywgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbC52YWx1ZSgpKTsKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgW1ttX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKKyAgICBpZiAobV9t
b2RlID09IG5ld01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9kZSA9IG5ld01vZGU7
CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgJiB+bW9kZTsKKyAgICBpZiAo
bV9tb2RlID09IG5ld01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9kZSA9IG5ld01v
ZGU7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOworfQorCisjZW5kaWYg
Ly8gSEFWRShBVktJVCkKKworYm9vbCBXZWJDb3JlOjpzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUo
KQoreworI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkKKyAgICByZXR1cm4gW2dldEFW
UGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJDbGFzcygpIGlzUGljdHVyZUluUGljdHVyZVN1cHBv
cnRlZF07CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YkFWUGxheWVyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFW
UGxheWVyQ29udHJvbGxlci5oCmluZGV4IGU1Y2ZmMTJiYmFmYWU2OTExODMxMjdiZjI4MGZhOTNj
ZTkwZjI1MTIuLjFiMTBmYmEwZDQyMTlmMDkxZjczYjhjNzk3MDYwNGJiNWQyMGMwZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVy
LmgKQEAgLTI4LDggKzI4LDggQEAKICNpbXBvcnQgIkFWS2l0U1BJLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOwotY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKK2Ns
YXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OwogfQogCiBAaW50ZXJmYWNlIFdlYkFW
TWVkaWFTZWxlY3Rpb25PcHRpb24gOiBOU09iamVjdApAQCAtNDQsOCArNDQsOCBAQCBjbGFzcyBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDsKIH0KIAogQHByb3BlcnR5IChyZXRhaW4p
IEFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlclByb3h5OwotQHByb3BlcnR5IChh
c3NpZ24pIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBkZWxlZ2F0ZTsKLUBwcm9w
ZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCog
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbk1vZGVsKiBkZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCogcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
OwogCiBAcHJvcGVydHkgKHJlYWRvbmx5KSBCT09MIGNhblNjYW5Gb3J3YXJkOwogQHByb3BlcnR5
IEJPT0wgY2FuU2NhbkJhY2t3YXJkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIubW0KaW5kZXggNmJmYzVjYTFhYTI2YjIzZTVlOGE0
N2EyZjY4YzIyODdmMzE4YWEwMS4uODUwMzA2YWMxNWVkMGExOGJjOGYxN2I0ZjJiN2E2NGMxMGRl
ZDMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVy
Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5
ZXJDb250cm9sbGVyLm1tCkBAIC0zMSw5ICszMSw5IEBACiAKICNpbXBvcnQgIkFWS2l0U1BJLmgi
CiAjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgIlRpbWVS
YW5nZXMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0j
aW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9u
L0FWVGltZS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2ltcG9ydCA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhYjM3ZDRlNTYzMTg5MTAxMGFhOGE3YmE1ZGI5Njk4MTYyYzI3Y2Q4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKQot
Ci0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRF
bnVtcy5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbmNs
dWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPG9iamMvb2JqYy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7Ci1PQkpDX0NMQVNT
IEFWUGxheWVyVmlld0NvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7Ci1P
QkpDX0NMQVNTIFVJV2luZG93OwotT0JKQ19DTEFTUyBVSVZpZXc7Ci0KLW5hbWVzcGFjZSBXVEYg
ewotY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0
OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25DaGFuZ2VPYnNlcnZlcjsKLQotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQKLSAgICA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVi
bGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHsKLQotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IGNy
ZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChtb2RlbCkp
OwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgp
OwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KLQotICAgIC8vIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRNZWRp
YVN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1
cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hh
bmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBs
aXZlVXBkYXRlSW50ZXJ2YWwpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVy
cmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVk
RGV2aWNlTmFtZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgV2ViQVZQbGF5ZXJDb250cm9s
bGVyICpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXJDb250cm9sbGVy
LmdldCgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOwotCi0gICAgUmV0
YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gbV9wbGF5ZXJDb250cm9sbGVyOwotICAgIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0ciB9
OwotfTsKLQotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2QxNmRiMWVmNGRkZmEzZWZiMDUzZWUwZjg1MGI5
NTliZmUyYjM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0KLSNpZiBQTEFU
Rk9STShJT1MpCi0jaWYgSEFWRShBVktJVCkKLQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNpbXBv
cnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0
ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJBVlBsYXllckNvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZU
aW1lLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2ltcG9ydCAiQ29yZU1l
ZGlhU29mdExpbmsuaCIKLQotU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKLVNP
RlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQot
ICAgIDogbV9wbGF5ZXJDb250cm9sbGVyKGFkb3B0TlMoW1tXZWJBVlBsYXllckNvbnRyb2xsZXIg
YWxsb2NdIGluaXRdKSkKLSAgICAsIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQotewot
ICAgIG1vZGVsLmFkZENsaWVudCgqdGhpcyk7Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6dGhpc107Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXREZWxlZ2F0ZTombW9kZWxdOwotCi0gICAgZHVyYXRpb25DaGFuZ2VkKG1vZGVsLmR1cmF0aW9u
KCkpOwotICAgIGN1cnJlbnRUaW1lQ2hhbmdlZChtb2RlbC5jdXJyZW50VGltZSgpLCBbW05TUHJv
Y2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0pOwotICAgIGJ1ZmZlcmVkVGltZUNo
YW5nZWQobW9kZWwuYnVmZmVyZWRUaW1lKCkpOwotICAgIHJhdGVDaGFuZ2VkKG1vZGVsLmlzUGxh
eWluZygpLCBtb2RlbC5wbGF5YmFja1JhdGUoKSk7Ci0gICAgc2Vla2FibGVSYW5nZXNDaGFuZ2Vk
KG1vZGVsLnNlZWthYmxlUmFuZ2VzKCksIG1vZGVsLnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2Rp
ZmllZFRpbWUoKSwgbW9kZWwubGl2ZVVwZGF0ZUludGVydmFsKCkpOwotICAgIGNhblBsYXlGYXN0
UmV2ZXJzZUNoYW5nZWQobW9kZWwuY2FuUGxheUZhc3RSZXZlcnNlKCkpOwotICAgIGF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtb2RlbC5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
cygpLCBtb2RlbC5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpKTsKLSAgICBsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtb2RlbC5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
KCksIG1vZGVsLmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQobW9kZWwuZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSwgbW9kZWwuZXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUoKSwgbW9kZWwuZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERl
dmljZU5hbWUoKSk7Ci0gICAgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKG1v
ZGVsLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkpOwotfQotCi1XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCkK
LXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTpu
dWxscHRyXTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEV4dGVybmFsUGxheWJhY2tBY3Rp
dmU6ZmFsc2VdOwotCi0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OjpyZXNldE1lZGlhU3RhdGUoKQotewotICAgIFttX3BsYXllckNv
bnRyb2xsZXIgcmVzZXRNZWRpYVN0YXRlXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBX
ZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xs
ZXIuZ2V0KCk7Ci0KLSAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0
aW9uOwotICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uV2l0aGluRW5kVGltZXMg
PSBkdXJhdGlvbjsKLQotICAgIC8vIEZJWE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlv
biB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LgotICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGxheSA9
IFlFUzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmNhblBhdXNlID0gWUVTOwotICAgIHBsYXllckNv
bnRyb2xsZXIuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5o
YXNFbmFibGVkQXVkaW8gPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVT
OwotICAgIHBsYXllckNvbnRyb2xsZXIuc3RhdHVzID0gQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVz
UmVhZHlUb1BsYXk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1l
KQotewotICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbbV9wbGF5ZXJDb250
cm9sbGVyIHJhdGVdID8gTkFOIDogYW5jaG9yVGltZTsKLSAgICBBVlZhbHVlVGltaW5nICp0aW1p
bmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6
Y3VycmVudFRpbWUKLSAgICAgICAgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRl
OjBdOwotCi0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRUaW1pbmc6dGltaW5nXTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YnVmZmVyZWRUaW1lQ2hhbmdl
ZChkb3VibGUgYnVmZmVyZWRUaW1lKQotewotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxh
eWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKLSAgICBkb3VibGUgZHVy
YXRpb24gPSBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbjsKLSAgICBkb3VibGUgbm9y
bWFsaXplZEJ1ZmZlcmVkVGltZTsKLSAgICBpZiAoIWR1cmF0aW9uKQotICAgICAgICBub3JtYWxp
emVkQnVmZmVyZWRUaW1lID0gMDsKLSAgICBlbHNlCi0gICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJl
ZFRpbWUgPSBidWZmZXJlZFRpbWUgLyBkdXJhdGlvbjsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmxv
YWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBAKG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUpXTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmF0ZUNoYW5nZWQoYm9vbCBp
c1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDogMC5dOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3Qg
VGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBs
aXZlVXBkYXRlSW50ZXJ2YWwpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBzZWVr
YWJsZVJhbmdlcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewot
ICAgICAgICBkb3VibGUgc3RhcnQgPSB0aW1lUmFuZ2VzLnN0YXJ0KGkpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpOwotICAgICAgICBkb3VibGUgZW5kID0gdGltZVJhbmdlcy5lbmQoaSkucmVsZWFzZVJl
dHVyblZhbHVlKCk7Ci0KLSAgICAgICAgQ01UaW1lUmFuZ2UgcmFuZ2UgPSBDTVRpbWVSYW5nZU1h
a2UoQ01UaW1lTWFrZVdpdGhTZWNvbmRzKHN0YXJ0LCAxMDAwKSwgQ01UaW1lTWFrZVdpdGhTZWNv
bmRzKGVuZC1zdGFydCwgMTAwMCkpOwotICAgICAgICBbc2Vla2FibGVSYW5nZXMgYWRkT2JqZWN0
OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07Ci0gICAgfQotCi0gICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6c2Vla2FibGVSYW5nZXMuZ2V0
KCldOwotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1v
ZGlmaWVkVGltZTogbGFzdE1vZGlmaWVkVGltZV07Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRMaXZlVXBkYXRlSW50ZXJ2YWw6bGl2ZVVwZGF0ZUludGVydmFsXTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChi
b29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKLXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldENh
blNjYW5CYWNrd2FyZDpjYW5QbGF5RmFzdFJldmVyc2VdOwotfQotCi1zdGF0aWMgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IHdlYk9wdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
Q2FwYWNpdHk6b3B0aW9ucy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIG9wdGlvbiA6IG9wdGlv
bnMpIHsKLSAgICAgICAgUmV0YWluUHRyPFdlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24+IHdlYk9w
dGlvbiA9IGFkb3B0TlMoW1tXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uIGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgIFt3ZWJPcHRpb24gc2V0TG9jYWxpemVkRGlzcGxheU5hbWU6b3B0aW9uLmRpc3Bs
YXlOYW1lXTsKLSAgICAgICAgW3dlYk9wdGlvbnMgYWRkT2JqZWN0OndlYk9wdGlvbi5nZXQoKV07
Ci0gICAgfQotICAgIHJldHVybiB3ZWJPcHRpb25zOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBt
ZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRpb25zLmdldCgpXTsKLSAgICBpZiAo
c2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKLSAgICAgICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXRDdXJyZW50QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBv
YmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwot
ICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczp3
ZWJPcHRpb25zLmdldCgpXTsKLSAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNv
dW50XSkKLSAgICAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50TGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNV
SW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKQotewotICAgIEFWUGxheWVyQ29u
dHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5
ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVOb25lOwotICAgIGlmICh0YXJnZXRUeXBl
ID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSkKLSAgICAgICAg
ZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNr
VHlwZUFpclBsYXk7Ci0gICAgZWxzZSBpZiAodGFyZ2V0VHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6VGFyZ2V0VHlwZVRWT3V0KQotICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9
IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlVFZPdXQ7Ci0KLSAgICBXZWJB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIu
Z2V0KCk7Ci0gICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWlyUGxheURldmlj
ZUxvY2FsaXplZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lOwotICAgIHBsYXllckNvbnRyb2xs
ZXIuZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXliYWNrVHlwZTsKLSAgICBwbGF5
ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldEFsbG93c0V4dGVybmFsUGxheWJhY2s6IWRpc2FibGVkXTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCi17Ci0g
ICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRNdXRlZDptdXRlZF07Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQotewotICAgIGlmICghbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXREZWxlZ2F0ZTpudWxscHRyXTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxs
cHRyOwotfQotCi19Ci0KLSNlbmRpZiAvLyBIQVZFKEFWS0lUKQotI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCmluZGV4IGViYzlhNjc2NjQxYzk3
OWFiNzgzYTBkZTFjZDUxMGU0ZWY5ODNkMTYuLjI2ODRkZGRiMmZmMjkxNzdhZDk0Yjc3ZWUwMmE0
MTc3NmUyZDc1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQpAQCAtMzEsMTMg
KzMxLDEzIEBACiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhU2VsZWN0aW9u
T3B0aW9uLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorI2lt
cG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKICNpbXBvcnQgIlF1YXJ0
ekNvcmVTUEkuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCi0jaW1w
b3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgorI2ltcG9ydCAiVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxVSUtp
dC9VSVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CkBAIC05MiwyNCArOTIs
MjQgQEAgc3RhdGljIEludFJlY3QgZWxlbWVudFJlY3RJbldpbmRvdyhIVE1MVmlkZW9FbGVtZW50
KiB2aWRlb0VsZW1lbnQpCiAgICAgcmV0dXJuIHZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5k
b3cocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogfQogCi1jbGFzcyBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OwogCiBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgKGRlbGVnYXRlKQotLSh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46KFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0OworLSh2b2lkKWRpZEZpbmlzaEZ1bGxzY3Jl
ZW46KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0OwogQGVuZAogCi1j
bGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCBmaW5hbAotICAgIDogcHJp
dmF0ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgICwgcHJpdmF0ZSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudAotICAgICwgcHJpdmF0ZSBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcgotICAgICwgcHJpdmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAotICAgICwgcHJp
dmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiB7CitjbGFz
cyBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCBmaW5hbAorICAgIDogcHJpdmF0ZSBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgICwgcHJpdmF0ZSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudAorICAgICwgcHJpdmF0ZSBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgICwg
cHJpdmF0ZSBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgICwgcHJpdmF0ZSBQbGF5YmFja1Nlc3Np
b25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiB7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBjcmVhdGUoKQorICAgIHN0YXRpYyBS
ZWY8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IGNyZWF0ZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0KTsKICAgICB9CiAKICAgICB2b2lkIHNldENvbnRyb2xsZXIoV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOyB9CkBAIC0xMTksMjIgKzExOSwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRl
KCk7CiAKIHByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQo
KSB7IH0KKyAgICBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCgpIHsgfQogCi0gICAg
Ly8gV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICAvLyBWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcgogICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGRp
ZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVl
bigpIG92ZXJyaWRlOwogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3Zl
cnJpZGU7CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIC8vIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CiAgICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6
ZSYpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKLSAgICB2b2lk
IGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJp
ZGU7CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50
KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwbGF5KCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdG9nZ2xlUGxh
eVN0YXRlKCkgb3ZlcnJpZGU7CkBAIC0xNzAsNyArMTcwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHRvZ2dsZU11dGVkKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsK
IAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLy8gUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQKICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIG92ZXJy
aWRlOwogICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91
YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChk
b3VibGUpIG92ZXJyaWRlOwpAQCAtMTc5LDM5ICsxNzksMzkgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworICAgIHZvaWQgZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQo
Ym9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CiAK
LSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgIHZvaWQgYWRkQ2xpZW50KFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDbGll
bnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICAvLyBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVDbGllbnQoVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRX
aXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUo
RmxvYXRSZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKICAgICBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZTsKICAg
ICBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBp
c011dGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBIYXNoU2V0PFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50Kj4gbV9wbGF5YmFja0NsaWVudHM7Ci0gICAgSGFzaFNldDxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1fZnVsbHNjcmVlbkNsaWVudHM7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1fZnVsbHNjcmVlbk1vZGVsOwot
ICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbV9wbGF5YmFj
a01vZGVsOworICAgIEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX3BsYXli
YWNrQ2xpZW50czsKKyAgICBIYXNoU2V0PFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9m
dWxsc2NyZWVuQ2xpZW50czsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IG1faW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gbV9mdWxsc2NyZWVuTW9kZWw7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50PiBtX3BsYXliYWNrTW9kZWw7CiAgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1l
bnQ+IG1fdmlkZW9FbGVtZW50OwogICAgIFJldGFpblB0cjxVSVZpZXc+IG1fdmlkZW9GdWxsc2Ny
ZWVuVmlldzsKICAgICBSZXRhaW5QdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcj4gbV9j
b250cm9sbGVyOwogfTsKIAotI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyCisjcHJhZ21hIG1hcmsgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVu
KCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNj
cmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgUmV0YWluUHRyPENBTGF5
ZXI+IHZpZGVvRnVsbHNjcmVlbkxheWVyID0gW21fdmlkZW9GdWxsc2NyZWVuVmlldyBsYXllcl07
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMs
IHRoaXMsIHZpZGVvRnVsbHNjcmVlbkxheWVyXSB7CiAgICAgICAgIFt2aWRlb0Z1bGxzY3JlZW5M
YXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJh
bnNwYXJlbnQpXTsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKHZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10g
ewpAQCAtMjIyLDEwICsyMjIsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQogewog
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2Vi
VGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIG1fZnVsbHNjcmVlbk1v
ZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7
CiAgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
cHJvdGVjdGVkVGhpcywgdGhpc10gewpAQCAtMjM1LDE1ICsyMzUsMTUgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQogICAgIH0p
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVh
bnVwRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpk
aWRDbGVhbnVwRnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAg
bV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIpOwotICAgIG1f
aW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsK
KyAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0cik7CisgICAg
bV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKG51bGxwdHIpOwog
ICAgIG1faW50ZXJmYWNlID0gbnVsbHB0cjsKICAgICBtX3ZpZGVvRnVsbHNjcmVlblZpZXcgPSBu
aWw7CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVk
VGhpcywgdGhpc10gewogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIobmlsKTsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRWxlbWVu
dChudWxscHRyKTsKQEAgLTI1NiwxMCArMjU2LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJl
dHVyblRvSW5saW5lKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMs
IHRoaXNdIHsKICAgICAgICAgSW50UmVjdCBjbGllbnRSZWN0ID0gZWxlbWVudFJlY3RJbldpbmRv
dyhtX3ZpZGVvRWxlbWVudC5nZXQoKSk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjbGllbnRSZWN0XSB7CkBA
IC0yNjgsMTIgKzI2OCwxMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQogICAgIH0pOwogfQogCi0jcHJhZ21h
IG1hcmsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyNwcmFnbWEgbWFyayBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikK
IHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
ICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtwcm90ZWN0ZWRUaGlzLCBkdXJhdGlvbl0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKICAgICAgICAgfSk7CkBAIC0yODQsMTAgKzI4
NCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkdXJhdGlv
bkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogICAgICAgICBjbGllbnQtPmR1cmF0aW9uQ2hhbmdl
ZChkdXJhdGlvbik7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JU
aW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVD
aGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7CiAgICAgaWYg
KFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwog
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgY3VycmVudFRpbWUsIGFuY2hvclRpbWVdIHsKICAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7CiAgICAg
ICAgIH0pOwpAQCAtMjk4LDEwICsyOTgsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwKICAg
ICAgICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hvclRpbWUp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJl
ZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUp
CiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbcHJvdGVjdGVkVGhpcywgYnVmZmVyZWRUaW1lXSB7CiAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiAgICAgICAgIH0pOwpA
QCAtMzEyLDEwICszMTIsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW0KICAgICAgICAgY2xp
ZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewog
ICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIGlzUGxheWluZywgcGxheWJhY2tSYXRlXSB7CiAgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CiAgICAg
ICAgIH0pOwpAQCAtMzI2LDEwICszMjYsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXkKICAg
ICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdl
ZChib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3Vy
cmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgaGFzVmlk
ZW9dIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRl
byk7CiAgICAgICAgIH0pOwpAQCAtMzQwLDEwICszNDAsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCiAg
ICAgICAgIGNsaWVudC0+aGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChj
b25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2
aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9EaW1lbnNpb25zID0gdmlk
ZW9EaW1lbnNpb25zXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT52aWRlb0RpbWVuc2lv
bnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7CiAgICAgICAgIH0pOwpAQCAtMzU0LDEwICszNTQs
MTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9EaW1l
bnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUKICAgICAgICAgY2xpZW50LT52aWRlb0RpbWVu
c2lvbnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFu
Z2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRh
dGVJbnRlcnZhbCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWth
YmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFz
dE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKIHsKICAgICBpZiAoV2Vi
VGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCBwbGF0Zm9ybVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLCBsYXN0TW9kaWZp
ZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWxdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
PnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChUaW1lUmFuZ2VzOjpjcmVhdGUocGxhdGZvcm1UaW1lUmFu
Z2VzKSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKICAgICAgICAgfSk7
CkBAIC0zNjgsMTAgKzM2OCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcwogICAgICAgICBj
bGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1l
LCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RS
ZXZlcnNlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZh
c3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKIHsKICAgICBpZiAoV2Vi
VGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCBjYW5QbGF5RmFzdFJldmVyc2VdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKICAgICAgICAgfSk7
CkBAIC0zOTEsMTAgKzM5MSwxMCBAQCBzdGF0aWMgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBpc29sYXRlZENvcHkoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aQogICAgIHJldHVy
biBvcHRpb25zQ29weTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkp
IHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBvcHRpb25zID0gaXNv
bGF0ZWRDb3B5KG9wdGlvbnMpLCBzZWxlY3RlZEluZGV4XSB7CiAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0
ZWRJbmRleCk7CiAgICAgICAgIH0pOwpAQCAtNDA1LDEwICs0MDUsMTAgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnMKICAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGlmIChX
ZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3Rl
ZFRoaXMsIG9wdGlvbnMgPSBpc29sYXRlZENvcHkob3B0aW9ucyksIHNlbGVjdGVkSW5kZXhdIHsK
ICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogICAgICAgICB9KTsKQEAgLTQxOSw3ICs0
MTksNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjbwogICAgICAgICBjbGllbnQtPmxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5h
bWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUp
CiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7CiAgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGhpcywgZW5hYmxlZCwgdHlw
ZSwgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZERldmljZU5hbWUuaXNvbGF0ZWRDb3B5
KCldIHsKQEAgLTQzMywxMCArNDMzLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwKICAgICAg
ICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6
ZWREZXZpY2VOYW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBpZiAoV2ViVGhyZWFk
SXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBk
aXNhYmxlZF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKTsKICAgICAgICAgfSk7CkBAIC00NDcsMTAgKzQ0
NywxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYgogICAgICAgICBjbGllbnQtPndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wg
bXV0ZWQpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgbXV0ZWRdIHsKICAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPm11dGVkQ2hhbmdlZChtdXRlZCk7CiAgICAgICAgIH0pOwpAQCAtNDYxLDM0ICs0NjEs
MzQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRDaGFu
Z2VkKGJvb2wgbXV0ZWQpCiAgICAgICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKG11dGVkKTsKIH0K
IAotI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCisjcHJhZ21hIG1hcmsgVmlk
ZW9GdWxsc2NyZWVuTW9kZWwKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQoVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fZnVsbHNjcmVlbkNs
aWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fZnVsbHNjcmVlbkNsaWVudHMuYWRkKCZj
bGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpy
ZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVChtX2Z1bGxzY3JlZW5DbGll
bnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2Z1bGxzY3JlZW5DbGllbnRzLnJlbW92ZSgm
Y2xpZW50KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlh
KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBtb2RlLCBmaW5pc2hlZFdpdGhN
ZWRpYV0gewogICAgICAgICBpZiAobV9mdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgICAgICBtX2Z1
bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1vZGUsIGZpbmlzaGVkV2l0aE1l
ZGlhKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgZnJh
bWUpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSBbbV92aWRlb0Z1
bGxzY3JlZW5WaWV3IGxheWVyXTsKICAgICAKICAgICBbdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0
U3VibGF5ZXJUcmFuc2Zvcm06W3ZpZGVvRnVsbHNjcmVlbkxheWVyIHRyYW5zZm9ybV1dOwpAQCAt
NTA4LDEwNSArNTA4LDEwNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IGZyYW1lKQogICAgIH0pOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jh
dml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0eSkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2
aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5KQogewog
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2Vi
VGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB2aWRlb0dyYXZpdHldIHsKICAgICAgICAg
aWYgKG1fZnVsbHNjcmVlbk1vZGVsKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNl
dFZpZGVvTGF5ZXJHcmF2aXR5KHZpZGVvR3Jhdml0eSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1
bihbcHJvdGVjdGVkVGhpcywgdGhpcywgbW9kZV0gewogICAgICAgICBpZiAobV9mdWxsc2NyZWVu
TW9kZWwpCiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKG1vZGUpOwogICAgIH0pOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1bGxzY3JlZW5Nb2RlbC0+aXNW
aXNpYmxlKCkgOiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwog
ICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVlbk1vZGVsLT5oYXNWaWRl
bygpIDogZmFsc2U7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmlzTXV0ZWQoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6aXNNdXRlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0
dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+aXNNdXRlZCgpIDogZmFsc2U7
CiB9CiAKLUZsb2F0U2l6ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlk
ZW9EaW1lbnNpb25zKCkgY29uc3QKK0Zsb2F0U2l6ZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6dmlkZW9EaW1lbnNpb25zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1bGxzY3JlZW5Nb2RlbC0+
dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKTsKIH0KIAotI3ByYWdtYSBtYXJrIC0gV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbk1vZGVs
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKCFtX3BsYXliYWNrQ2xpZW50cy5jb250YWlucygmY2xp
ZW50KSk7CiAgICAgbV9wbGF5YmFja0NsaWVudHMuYWRkKCZjbGllbnQpOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQoV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xp
ZW50KQogewogICAgIEFTU0VSVChtX3BsYXliYWNrQ2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
CiAgICAgbV9wbGF5YmFja0NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KCkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlz
LCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3Bs
YXliYWNrTW9kZWwtPnBsYXkoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6cGF1c2UoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6cGF1c2UoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7
CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9k
ZWwtPnBhdXNlKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFk
KCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRU
aGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBt
X3BsYXliYWNrTW9kZWwtPnRvZ2dsZVBsYXlTdGF0ZSgpOwogICAgIH0pOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVNdXRlZCgpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVNdXRlZCgpCiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRS
dW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkK
ICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+dG9nZ2xlTXV0ZWQoKTsKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TXV0ZWQoYm9v
bCBtdXRlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldE11dGVk
KGJvb2wgbXV0ZWQpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgV2ViVGhyZWFk
UnVuKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlzKSwgdGhpcywgbXV0ZWRdIHsKQEAg
LTYxNSwxNTEgKzYxNSwxNTEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAg
ICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2NydWJiaW5nKCk7CiAgICAgfSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmlu
ZygpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY3J1YmJpbmco
KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3Bs
YXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmVuZFNjcnViYmluZygp
OwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVk
VGhpcywgdGhpcywgdGltZV0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAg
ICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWVrVG9UaW1lKHRpbWUpOwogICAgIH0pOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUg
dGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZhc3RTZWVrKGRv
dWJsZSB0aW1lKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB0aW1lXSB7CiAg
ICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwt
PmZhc3RTZWVrKHRpbWUpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRS
dW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkK
ICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+YmVnaW5TY2FubmluZ0ZvcndhcmQoKTsKICAg
ICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVn
aW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMs
IHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxh
eWJhY2tNb2RlbC0+YmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKCkKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVh
ZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVs
KQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5lbmRTY2FubmluZygpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRp
b01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKIHsKICAg
ICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgaW5kZXhdIHsKICAgICAgICAgaWYgKG1fcGxh
eWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+c2VsZWN0QXVkaW9NZWRp
YU9wdGlvbihpbmRleCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRp
YU9wdGlvbih1aW50NjRfdCBpbmRleCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhp
cywgaW5kZXhdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1f
cGxheWJhY2tNb2RlbC0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKICAgICB9KTsK
IH0KIAotZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkdXJhdGlv
bigpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0
aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9w
bGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5kdXJhdGlvbigpIDogMDsKIH0KIAotZG91
YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZSgpIGNv
bnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1l
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5
YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5jdXJyZW50VGltZSgpIDogMDsKIH0KIAotZG91
YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWUoKSBj
b25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRp
bWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3Bs
YXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmJ1ZmZlcmVkVGltZSgpIDogMDsKIH0KIAot
Ym9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNQbGF5aW5nKCkgY29u
c3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzUGxheWluZygpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tN
b2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+aXNQbGF5aW5nKCkgOiBmYWxzZTsKIH0KIAotZmxvYXQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSgpIGNvbnN0
CitmbG9hdCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheWJhY2tSYXRlKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFj
a01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5wbGF5YmFja1JhdGUoKSA6IDA7CiB9CiAKLVJlZjxU
aW1lUmFuZ2VzPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVS
YW5nZXMoKSBjb25zdAorUmVmPFRpbWVSYW5nZXM+IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+c2Vla2Fi
bGVSYW5nZXMoKSA6IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogfQogCi1kb3VibGUgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmll
ZFRpbWUoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01v
ZGVsLT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgOiAwOwogfQogCi1kb3Vi
bGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRlcnZh
bCgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVV
cGRhdGVJbnRlcnZhbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAg
cmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+bGl2ZVVwZGF0ZUludGVy
dmFsKCkgOiAwOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVs
LT5jYW5QbGF5RmFzdFJldmVyc2UoKSA6IGZhbHNlOwogfQogCi1WZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
cygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgaWYgKG1fcGxheWJh
Y2tNb2RlbCkKQEAgLTc2NywxMyArNzY3LDEzIEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdWludDY0X3QgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKK3VpbnQ2NF90IFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tN
b2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSA6IC0xOwog
fQogCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK1ZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwogICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCkBAIC03ODEsMzEgKzc4MSwzMSBA
QCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZQogICAgIHJldHVybiB7IH07CiB9CiAKLXVpbnQ2NF90
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rl
ZEluZGV4KCkgY29uc3QKK3VpbnQ2NF90IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5s
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgOiAtMTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdAor
Ym9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0Vu
YWJsZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBt
X3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFsUGxheWJhY2tFbmFibGVk
KCkgOiBmYWxzZTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CitQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5leHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIDogVGFyZ2V0VHlwZU5vbmU7CiB9CiAKLVN0cmluZyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUoKSBjb25zdAorU3RyaW5nIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1f
cGxheWJhY2tNb2RlbC0+ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSA6IFN0
cmluZygpOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2Rl
bCA/IG1fcGxheWJhY2tNb2RlbC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSA6IHRy
dWU7CkBAIC04MTMsMTYgKzgxMywxNiBAQCBib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0CiAKICNwcmFn
bWEgbWFyayBPdGhlcgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBVSVZpZXcg
KnZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhU
TUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgVUlWaWV3ICp2aWV3LCBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIFJldGFpblB0cjxVSVZpZXc+IHZpZXdSZWYgPSB2aWV3OwogICAgIG1f
dmlkZW9FbGVtZW50ID0gJnZpZGVvRWxlbWVudDsKLSAgICBtX3BsYXliYWNrTW9kZWwgPSBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgbV9wbGF5YmFj
a01vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOwogICAg
IG1fcGxheWJhY2tNb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBtX3BsYXliYWNrTW9kZWwt
PnNldE1lZGlhRWxlbWVudChtX3ZpZGVvRWxlbWVudC5nZXQoKSk7CiAKLSAgICBtX2Z1bGxzY3Jl
ZW5Nb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsK
KyAgICBtX2Z1bGxzY3JlZW5Nb2RlbCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpjcmVhdGUoKTsKICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKICAg
ICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9FbGVtZW50KG1fdmlkZW9FbGVtZW50LmdldCgp
KTsKIApAQCAtODMyLDE1ICs4MzIsMTUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGUKICAgICBG
bG9hdFJlY3QgdmlkZW9MYXllckZyYW1lID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdmlkZW9F
bGVtZW50Q2xpZW50UmVjdC5zaXplKCkpOwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRl
b0xheWVyRnJhbWUodmlkZW9MYXllckZyYW1lKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRo
aXMsIHRoaXMsIHZpZGVvRWxlbWVudENsaWVudFJlY3QsIHZpZXdSZWYsIG1vZGUsIGFsbG93c1Bp
Y3R1cmVJblBpY3R1cmVdIHsKICAgICAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAKLSAgICAg
ICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBzZXNzaW9uSW50ZXJmYWNl
ID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZSgqdGhpcyk7Ci0gICAg
ICAgIG1faW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0
ZShzZXNzaW9uSW50ZXJmYWNlLmdldCgpKTsKLSAgICAgICAgbV9pbnRlcmZhY2UtPnNldFdlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOwotICAgICAgICBtX2ludGVyZmFjZS0+
c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwodGhpcyk7Ci0gICAgICAgIG1faW50ZXJmYWNlLT5z
ZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgUmVmPFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBzZXNzaW9uSW50ZXJmYWNlID0gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1faW50ZXJmYWNl
ID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZShzZXNzaW9uSW50ZXJmYWNl
LmdldCgpKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKHRoaXMpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuTW9k
ZWwodGhpcyk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcih0aGlzKTsKIAogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlblZpZXcgPSBhZG9wdE5T
KFthbGxvY1VJVmlld0luc3RhbmNlKCkgaW5pdF0pOwogICAgICAgICAKQEAgLTg0OCwyNSArODQ4
LDI1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVs
bHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKCkKIHsKICAgICBB
U1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwgaXNNYWluVGhyZWFkKCkpOwogICAgIEludFJl
Y3QgY2xpZW50UmVjdCA9IGVsZW1lbnRSZWN0SW5XaW5kb3cobV92aWRlb0VsZW1lbnQuZ2V0KCkp
OwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNsaWVudFJlY3RdIHsKICAgICAg
ICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgICAgIG1faW50ZXJmYWNlLT5leGl0RnVsbHNj
cmVlbihjbGllbnRSZWN0KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBtX2ludGVyZmFjZS0+cmVx
dWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwogfQogCiBAaW1wbGVtZW50YXRpb24gV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlciB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBfY29udGV4dDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IF9jb250ZXh0OwogICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBf
dmlkZW9FbGVtZW50OwogfQogCkBAIC04OTEsNyArODkxLDcgQEAgLSAoSFRNTFZpZGVvRWxlbWVu
dCopdmlkZW9FbGVtZW50CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmlldyBt
b2RlOihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpbW9kZQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgX2NvbnRleHQgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3JlYXRlKCk7CisgICAgX2NvbnRleHQgPSBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3JlYXRlKCk7CiAgICAgX2NvbnRleHQtPnNldENv
bnRyb2xsZXIoc2VsZik7CiAgICAgX2NvbnRleHQtPnNldFVwRnVsbHNjcmVlbigqX3ZpZGVvRWxl
bWVudC5nZXQoKSwgdmlldywgbW9kZSk7CiB9CkBAIC05MDksNyArOTA5LDcgQEAgLSAodm9pZCly
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuCiAgICAgICAgIF9jb250ZXh0LT5yZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKLS0gKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjoo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQKKy0gKHZvaWQpZGlk
RmluaXNoRnVsbHNjcmVlbjooVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRl
eHQKIHsKICAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwogICAgIEFTU0VSVF9VTlVT
RUQoY29udGV4dCwgY29udGV4dCA9PSBfY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWM3MDQ3YWI3MmNiMzRkZjYxOGM2
NGUwNjYzMjkyNWI2ZGU3OGRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgUExBVEZPUk0oSU9TKQotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNp
bmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2luY2x1ZGUgIldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0jaW5jbHVkZSA8b2JqYy9vYmpjLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+Ci0KLU9CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKLU9CSkNf
Q0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgVUlXaW5kb3c7Ci1PQkpDX0NMQVNT
IFVJVmlldzsKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250
cm9sbGVyOwotT0JKQ19DTEFTUyBXZWJBVlBsYXllckxheWVyVmlldzsKLU9CSkNfQ0xBU1MgV2Vi
QVZQbGF5ZXJMYXllcjsKLU9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVn
YXRlOwotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7
Ci0gICAgCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCBmaW5hbAotICAgIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0g
ICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gewot
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Jik7Ci0gICAgdmlydHVh
bCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwotICAgIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9
Ci0KLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLQot
ICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2Nh
bGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiwgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJ
VmlldyAqLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wg
YWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGV4aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBj
b25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KTsKLQotICAgIGVudW0gY2xhc3MgRXhpdEZ1bGxTY3Jl
ZW5SZWFzb24gewotICAgICAgICBEb25lQnV0dG9uVGFwcGVkLAotICAgICAgICBGdWxsU2NyZWVu
QnV0dG9uVGFwcGVkLAotICAgICAgICBQaW5jaEdlc3R1cmVIYW5kbGVkLAotICAgICAgICBSZW1v
dGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQsCi0gICAgICAgIFBpY3R1cmVJblBpY3R1cmVTdGFy
dGVkCi0gICAgfTsKLQotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KLSAgICBib29sIHNob3VsZEV4aXRG
dWxsc2NyZWVuV2l0aFJlYXNvbihFeGl0RnVsbFNjcmVlblJlYXNvbik7Ci0gICAgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBt
X21vZGU7IH0KLSAgICBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOyB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgp
IGNvbnN0OwotICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rp
b248dm9pZChib29sKT4mJiBjYWxsYmFjayk7Ci0gICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZCgpIGNvbnN0OwotICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUo
KTsKLQotICAgIHZvaWQgd2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgZGlk
U3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBmYWlsZWRUb1N0YXJ0UGljdHVyZUlu
UGljdHVyZSgpOwotICAgIHZvaWQgd2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9p
ZCBkaWRTdG9wUGljdHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgcHJlcGFyZUZvclBpY3R1cmVJ
blBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQgKF4pKEJPT0wpKTsKLQotICAg
IHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
OwotICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSk7Ci0gICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgJiBtb2RlOyB9Ci0gICAg
Ym9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBX
RUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOwotICAgIHZvaWQgYmVnaW5TZXNzaW9uKCk7Ci0gICAg
dm9pZCBlbnRlclBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIGVudGVyRnVsbHNjcmVlblN0
YW5kYXJkKCk7Ci0gICAgdm9pZCB3YXRjaGRvZ1RpbWVyRmlyZWQoKTsKLSAgICBXZWJBVlBsYXll
ckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdDsKLQotICAgIFJlZjxXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0g
ICAgUmV0YWluUHRyPFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4gbV9wbGF5ZXJW
aWV3Q29udHJvbGxlckRlbGVnYXRlOwotICAgIFJldGFpblB0cjxBVlBsYXllclZpZXdDb250cm9s
bGVyPiBtX3BsYXllclZpZXdDb250cm9sbGVyOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0ciB9OwotICAgIFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIg
fTsKLQotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgd2hlbiBmdWxsc2NyZWVuIGlzIHByZXNl
bnRlZCBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KLSAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IG1fd2lu
ZG93OwotICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiBtX3ZpZXdDb250cm9sbGVyOwot
ICAgIFJldGFpblB0cjxVSVZpZXc+IG1fcGFyZW50VmlldzsKLSAgICBSZXRhaW5QdHI8VUlXaW5k
b3c+IG1fcGFyZW50V2luZG93OwotICAgIFJldGFpblB0cjxXZWJBVlBsYXllckxheWVyVmlldz4g
bV9wbGF5ZXJMYXllclZpZXc7Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZU5vbmUgfTsKLSAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+IG1fcHJlcGFyZVRvSW5s
aW5lQ2FsbGJhY2s7Ci0gICAgUnVuTG9vcDo6VGltZXI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IG1fd2F0Y2hkb2dUaW1lcjsKLSAgICBib29sIG1fYWxsb3dzUGljdHVyZUluUGlj
dHVyZVBsYXliYWNrIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZXhpdFJlcXVlc3RlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2V4aXRDb21wbGV0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9lbnRl
clJlcXVlc3RlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVu
U3RvcHBpbmdQaVAgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3Jl
ZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Jlc3Rvcmlu
Z0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCB7IGZhbHNlIH07Ci0KLSAgICB2b2lk
IGRvRW50ZXJGdWxsc2NyZWVuKCk7Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNDhkYzU1OGU4
MzRiNzhiYzMyMzJmMDdhNDYzNThmNjQ5MTlhMWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTA0MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLQotI2lmIFBMQVRGT1JNKElPUykKLQotI2ltcG9ydCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKLQotI2lmIEhBVkUoQVZLSVQpCi0KLSNp
bXBvcnQgIkFWS2l0U1BJLmgiCi0jaW1wb3J0ICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2ltcG9y
dCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW1w
b3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJBVlBsYXllckNvbnRyb2xsZXIuaCIKLSNp
bXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbXBvcnQg
PEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0jaW1wb3J0
IDxvYmpjL21lc3NhZ2UuaD4KLSNpbXBvcnQgPG9iamMvcnVudGltZS5oPgotI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2ltcG9ydCA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBTb2Z0
LWxpbmtpbmcgaGVhZGVycyBtdXN0IGJlIGluY2x1ZGVkIGxhc3Qgc2luY2UgdGhleSAjZGVmaW5l
IGZ1bmN0aW9ucywgY29uc3RhbnRzLCBldGMuCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5o
IgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikKLVNPRlRfTElOS19DTEFTUyhB
VkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCi1TT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0
aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX0NP
TlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgTlNT
dHJpbmcgKikKLVNPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3RGaWxsLCBOU1N0cmluZyAqKQotCi1TT0ZUX0xJTktfRlJBTUVXT1JL
X09QVElPTkFMKEFWS2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBpY3R1
cmVJblBpY3R1cmVDb250cm9sbGVyKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBB
VlBsYXllclZpZXdDb250cm9sbGVyKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBf
X0FWUGxheWVyTGF5ZXJWaWV3KQotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQotU09GVF9M
SU5LX0NMQVNTKFVJS2l0LCBVSUFwcGxpY2F0aW9uKQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBV
SVNjcmVlbikKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlXaW5kb3cpCi1TT0ZUX0xJTktfQ0xB
U1MoVUlLaXQsIFVJVmlldykKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3Q29udHJvbGxl
cikKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlDb2xvcikKLVNPRlRfTElOS19DT05TVEFOVChV
SUtpdCwgVUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCwgVUlXaW5kb3dM
ZXZlbCkKLQotc3RhdGljIFVJQ29sb3IgKmNsZWFyVUlDb2xvcigpCi17Ci0gICAgcmV0dXJuIChV
SUNvbG9yICopW2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdOwotfQotCi0jaWYgIUxPR19E
SVNBQkxFRAotc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCi17Ci0gICAg
cmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGNvbnN0
IFNlY29uZHMgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCB7IDFfcyB9OwotCi1AY2xhc3Mg
V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbjsKLQotQGludGVyZmFjZSBXZWJBVlBsYXllclZpZXdD
b250cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdCA8QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVn
YXRlX1dlYktpdE9ubHk+IHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOwotfQotQHByb3BlcnR5IChhc3NpZ24pIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOwotLSAoQk9P
TClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZp
ZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3
Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNvbjsKLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQotLSAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAgICByZXR1cm4g
X2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0RnVsbHNjcmVlbklu
dGVyZmFjZTooV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRl
cmZhY2UKLXsKLSAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7
Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3RhcnRQaWN0dXJlSW5QaWN0
dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVl
bkludGVyZmFjZS0+d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lkKXBs
YXllclZpZXdDb250cm9sbGVyRGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdD
b250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxh
eWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3Rh
cnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJG
YWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBs
YXllclZpZXdDb250cm9sbGVyIHdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBVTlVTRURfUEFSQU0oZXJyb3Ip
OwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBp
Y3R1cmUoKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdG9wUGljdHVy
ZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVy
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBzZWxmLmZ1
bGxzY3JlZW5JbnRlcmZhY2UtPndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2
b2lkKXBsYXllclZpZXdDb250cm9sbGVyRGlkU3RvcFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVy
Vmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJB
TShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5k
aWRTdG9wUGljdHVyZUluUGljdHVyZSgpOwotfQotCi1zdGF0aWMgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uIGNvbnZlcnRUb0V4aXRGdWxsU2Ny
ZWVuUmVhc29uKEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFz
b24pCi17Ci0gICAgc3dpdGNoIChyZWFzb24pIHsKLSAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRy
b2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkRvbmVCdXR0b25UYXBwZWQ6Ci0gICAgICAgIHJldHVy
biBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246
OkRvbmVCdXR0b25UYXBwZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1
bGxTY3JlZW5SZWFzb25GdWxsU2NyZWVuQnV0dG9uVGFwcGVkOgotICAgICAgICByZXR1cm4gV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpGdWxs
U2NyZWVuQnV0dG9uVGFwcGVkOwotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRG
dWxsU2NyZWVuUmVhc29uUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ6Ci0gICAgICAgIHJldHVybiBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBp
Y3R1cmVJblBpY3R1cmVTdGFydGVkOwotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4
aXRGdWxsU2NyZWVuUmVhc29uUGluY2hHZXN0dXJlSGFuZGxlZDoKLSAgICAgICAgcmV0dXJuIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGlu
Y2hHZXN0dXJlSGFuZGxlZDsKLSAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVs
bFNjcmVlblJlYXNvblJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZDoKLSAgICAgICAgcmV0
dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNv
bjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkOwotICAgIH0KLX0KLQotLSAoQk9PTClw
bGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdD
b250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNvbgotewotICAgIFVOVVNFRF9QQVJBTShw
bGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgcmV0dXJuIHNlbGYuZnVsbHNjcmVlbkludGVyZmFj
ZS0+c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVu
UmVhc29uKHJlYXNvbikpOwotfQotCi0tICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBs
YXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgcmVzdG9yZVVzZXJJbnRl
cmZhY2VGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoQk9PTCByZXN0b3JlZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0o
cGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+cHJl
cGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRp
b25IYW5kbGVyKTsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJBVlBsYXllckxheWVyIDogQ0FM
YXllcgotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgTlNTdHJpbmcgKnZpZGVvR3Jhdml0
eTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNSZWFkeUZvckRpc3BsYXkpIEJPT0wg
cmVhZHlGb3JEaXNwbGF5OwotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluKSBBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXI7
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBDQUxheWVyICp2aWRlb1N1YmxheWVyOwot
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIG51bGxhYmxlKSBOU0RpY3Rpb25hcnkgKnBpeGVs
QnVmZmVyQXR0cmlidXRlczsKLUBwcm9wZXJ0eSBDR1NpemUgdmlkZW9EaW1lbnNpb25zOwotQHBy
b3BlcnR5IENHUmVjdCBtb2RlbFZpZGVvTGF5ZXJGcmFtZTsKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdlYkFWUGxheWVyTGF5ZXIgewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0gICAgUmV0YWluUHRyPFdlYkFWUGxh
eWVyQ29udHJvbGxlcj4gX2F2UGxheWVyQ29udHJvbGxlcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXll
cj4gX3ZpZGVvU3VibGF5ZXI7Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfdmlkZW9HcmF2aXR5
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdAotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgaWYgKHNlbGYpIHsKLSAgICAgICAgW3NlbGYgc2V0TWFza3NUb0JvdW5kczpZRVNdOwot
ICAgICAgICBfdmlkZW9HcmF2aXR5ID0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dCgpOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0g
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKLSAgICBbX3Bp
eGVsQnVmZmVyQXR0cmlidXRlcyByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNl
Ci17Ci0gICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNlLmdldCgpOwotfQotCi0tICh2b2lk
KXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
KilmdWxsc2NyZWVuSW50ZXJmYWNlCi17Ci0gICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBmdWxs
c2NyZWVuSW50ZXJmYWNlOwotfQotCi0tIChBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250
cm9sbGVyCi17Ci0gICAgcmV0dXJuIChBVlBsYXllckNvbnRyb2xsZXIgKilfYXZQbGF5ZXJDb250
cm9sbGVyLmdldCgpOwotfQotCi0tICh2b2lkKXNldFBsYXllckNvbnRyb2xsZXI6KEFWUGxheWVy
Q29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKLXsKLSAgICBBU1NFUlQoIXBsYXllckNvbnRy
b2xsZXIgfHwgW3BsYXllckNvbnRyb2xsZXIgaXNLaW5kT2ZDbGFzczpbV2ViQVZQbGF5ZXJDb250
cm9sbGVyIGNsYXNzXV0pOwotICAgIF9hdlBsYXllckNvbnRyb2xsZXIgPSAoV2ViQVZQbGF5ZXJD
b250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcjsKLX0KLQotLSAodm9pZClzZXRWaWRlb1N1Ymxh
eWVyOihDQUxheWVyICopdmlkZW9TdWJsYXllcgotewotICAgIF92aWRlb1N1YmxheWVyID0gdmlk
ZW9TdWJsYXllcjsKLX0KLQotLSAoQ0FMYXllciopdmlkZW9TdWJsYXllcgotewotICAgIHJldHVy
biBfdmlkZW9TdWJsYXllci5nZXQoKTsKLX0KLQotLSAodm9pZClsYXlvdXRTdWJsYXllcnMKLXsK
LSAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5ZXJdICE9IHNlbGYpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBbX3ZpZGVvU3VibGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2Uo
Q0dSZWN0R2V0TWlkWChzZWxmLmJvdW5kcyksIENHUmVjdEdldE1pZFkoc2VsZi5ib3VuZHMpKV07
Ci0KLSAgICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0IDw9IDAgfHwgc2VsZi52aWRl
b0RpbWVuc2lvbnMud2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0
IHNvdXJjZVZpZGVvRnJhbWU7Ci0gICAgRmxvYXRSZWN0IHRhcmdldFZpZGVvRnJhbWU7Ci0gICAg
ZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIC8gc2Vs
Zi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0OwotICAgIAotICAgIGlmIChbZ2V0QVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZSgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsKLSAg
ICAgICAgc291cmNlVmlkZW9GcmFtZSA9IHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWU7Ci0gICAg
ICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzZWxmLmJvdW5kczsKLSAgICB9IGVsc2UgaWYgKFtnZXRB
VkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlk
ZW9HcmF2aXR5XSkgewotICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gbGFyZ2VzdFJlY3RXaXRo
QXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYubW9kZWxWaWRlb0xh
eWVyRnJhbWUpOwotICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gbGFyZ2VzdFJlY3RXaXRoQXNw
ZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKLSAgICB9
IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpIGlzRXF1
YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsKLSAgICAgICAgc291cmNlVmlkZW9GcmFt
ZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRp
bywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgICAgIHNlbGYubW9kZWxWaWRlb0xh
eWVyRnJhbWUgPSBDR1JlY3RNYWtlKDAsIDAsIHNvdXJjZVZpZGVvRnJhbWUud2lkdGgoKSwgc291
cmNlVmlkZW9GcmFtZS5oZWlnaHQoKSk7Ci0gICAgICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVy
ZmFjZS0+bW9kZWwoKSk7Ci0gICAgICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5z
ZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgICAgIHRh
cmdldFZpZGVvRnJhbWUgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZp
ZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0KLSAgICBVSVZpZXcgKnZpZXcgPSAoVUlWaWV3ICopW192aWRlb1N1
YmxheWVyIGRlbGVnYXRlXTsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2VTY2FsZSh0YXJnZXRWaWRlb0ZyYW1lLndpZHRoKCkgLyBzb3VyY2VW
aWRlb0ZyYW1lLndpZHRoKCksIHRhcmdldFZpZGVvRnJhbWUuaGVpZ2h0KCkgLyBzb3VyY2VWaWRl
b0ZyYW1lLmhlaWdodCgpKTsKLSAgICBbdmlldyBzZXRUcmFuc2Zvcm06dHJhbnNmb3JtXTsKLSAg
ICAKLSAgICBOU1RpbWVJbnRlcnZhbCBhbmltYXRpb25EdXJhdGlvbiA9IFtDQVRyYW5zYWN0aW9u
IGFuaW1hdGlvbkR1cmF0aW9uXTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBeIHsKLSAgICAgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJl
cXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSBv
YmplY3Q6bmlsXTsKLQotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHJl
c29sdmVCb3VuZHMpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6YW5pbWF0aW9uRHVyYXRpb24g
KyAwLjFdOwotICAgIH0pOwotfQotCi0tICh2b2lkKXJlc29sdmVCb3VuZHMKLXsKLSAgICBbTlNP
YmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwotICAgIGlmICghW19hdlBs
YXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYg
KFtfdmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBzZWxmKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0KHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUs
IFtzZWxmIGJvdW5kc10pICYmIENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShbKFVJVmlldyAq
KVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0gdHJhbnNmb3JtXSkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0
QW5pbWF0aW9uRHVyYXRpb246MF07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlv
bnM6WUVTXTsKLSAgICAKLSAgICBpZiAoIUNHUmVjdEVxdWFsVG9SZWN0KHNlbGYubW9kZWxWaWRl
b0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pKSB7Ci0gICAgICAgIHNlbGYubW9kZWxWaWRlb0xh
eWVyRnJhbWUgPSBbc2VsZiBib3VuZHNdOwotICAgICAgICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRl
cmZhY2UtPm1vZGVsKCkpOwotICAgICAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKS0+
c2V0VmlkZW9MYXllckZyYW1lKHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOwotICAgIH0KLSAg
ICBbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0gc2V0VHJhbnNmb3JtOkNHQWZm
aW5lVHJhbnNmb3JtSWRlbnRpdHldOwotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
Ci19Ci0KLS0gKHZvaWQpc2V0VmlkZW9HcmF2aXR5OihOU1N0cmluZyAqKXZpZGVvR3Jhdml0eQot
ewotICAgIF92aWRlb0dyYXZpdHkgPSB2aWRlb0dyYXZpdHk7Ci0gICAgCi0gICAgaWYgKCFbX2F2
UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSA9IFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7Ci0g
ICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplKCkpCi0g
ICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5UmVzaXplOwotICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdCgpKQotICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBlbHNlIGlmICh2
aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwoKSkK
LSAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgCi0gICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgp
KTsKLSAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZp
dHkoZ3Jhdml0eSk7Ci19Ci0KLS0gKE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Ci17Ci0gICAgcmV0
dXJuIF92aWRlb0dyYXZpdHkuZ2V0KCk7Ci19Ci0KLS0gKENHUmVjdCl2aWRlb1JlY3QKLXsKLSAg
ICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0gMCB8fCBzZWxmLnZpZGVvRGltZW5z
aW9ucy5oZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuIHNlbGYuYm91bmRzOwotICAgIAotICAg
IGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCAvIHNl
bGYudmlkZW9EaW1lbnNpb25zLmhlaWdodDsKLQotICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pCi0g
ICAgICAgIHJldHVybiBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9B
c3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOwotICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdEZpbGwoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKQot
ICAgICAgICByZXR1cm4gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRl
b0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7Ci0KLSAgICByZXR1cm4gc2VsZi5ib3VuZHM7Ci19
Ci0KLSsgKE5TU2V0ICopa2V5UGF0aHNGb3JWYWx1ZXNBZmZlY3RpbmdWaWRlb1JlY3QKLXsKLSAg
ICByZXR1cm4gW05TU2V0IHNldFdpdGhPYmplY3RzOkAidmlkZW9EaW1lbnNpb25zIiwgQCJ2aWRl
b0dyYXZpdHkiLCBuaWxdOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViQVZQaWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3IDogVUlWaWV3Ci1AZW5kCi0KLXN0YXRpYyBDbGFzcyBXZWJB
VlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQotewot
ICAgIHJldHVybiBbV2ViQVZQbGF5ZXJMYXllciBjbGFzc107Ci19Ci0KLXN0YXRpYyBDbGFzcyBn
ZXRXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdDbGFzcygpCi17Ci0gICAgc3Rh
dGljIENsYXNzIHRoZUNsYXNzID0gbmlsOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25j
ZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7Ci0gICAgICAgIHRoZUNs
YXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihnZXRVSVZpZXdDbGFzcygpLCAiV2ViQVZQaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3IiwgMCk7Ci0gICAgICAgIG9iamNfcmVnaXN0ZXJD
bGFzc1BhaXIodGhlQ2xhc3MpOwotICAgICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1l
dGFDbGFzcygiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Iik7Ci0gICAgICAg
IGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClX
ZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOwot
ICAgIH0pOwotICAgIAotICAgIHJldHVybiB0aGVDbGFzczsKLX0KLQotQGludGVyZmFjZSBXZWJB
VlBsYXllckxheWVyVmlldyA6IF9fQVZQbGF5ZXJMYXllclZpZXcKLUBwcm9wZXJ0eSAocmV0YWlu
KSBVSVZpZXcqIHZpZGVvVmlldzsKLUBlbmQKLQotc3RhdGljIENsYXNzIFdlYkFWUGxheWVyTGF5
ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKLXsKLSAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5
ZXIgY2xhc3NdOwotfQotCi1zdGF0aWMgQVZQbGF5ZXJDb250cm9sbGVyICpXZWJBVlBsYXllckxh
eWVyVmlld19wbGF5ZXJDb250cm9sbGVyKGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgX19BVlBsYXll
ckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsKLSAgICBXZWJBVlBsYXllckxheWVyICp3
ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXIgcGxheWVy
TGF5ZXJdOwotICAgIHJldHVybiBbd2ViQVZQbGF5ZXJMYXllciBwbGF5ZXJDb250cm9sbGVyXTsK
LX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxl
cihpZCBhU2VsZiwgU0VMLCBBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIpCi17
Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAg
V2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICop
W3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0gICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0
UGxheWVyQ29udHJvbGxlcjogcGxheWVyQ29udHJvbGxlcl07Ci19Ci0KLXN0YXRpYyBVSVZpZXcg
KldlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldyhpZCBhU2VsZiwgU0VMKQotewotICAgIF9f
QVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJM
YXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVy
IHBsYXllckxheWVyXTsKLSAgICBDQUxheWVyKiB2aWRlb0xheWVyID0gW3dlYkFWUGxheWVyTGF5
ZXIgdmlkZW9TdWJsYXllcl07Ci0gICAgaWYgKCF2aWRlb0xheWVyIHx8ICF2aWRlb0xheWVyLmRl
bGVnYXRlKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChbW3ZpZGVvTGF5ZXIgZGVs
ZWdhdGVdIGlzS2luZE9mQ2xhc3M6Z2V0VUlWaWV3Q2xhc3MoKV0pOwotICAgIHJldHVybiAoVUlW
aWV3ICopW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdOwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXll
ckxheWVyVmlld19zZXRWaWRlb1ZpZXcoaWQgYVNlbGYsIFNFTCwgVUlWaWV3ICp2aWRlb1ZpZXcp
Ci17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0g
ICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVy
ICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0gICAgW3dlYkFWUGxheWVyTGF5ZXIg
c2V0VmlkZW9TdWJsYXllcjpbdmlkZW9WaWV3IGxheWVyXV07Ci19Ci0KLXN0YXRpYyB2b2lkIFdl
YkFWUGxheWVyTGF5ZXJWaWV3X3N0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcg
KnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwot
Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAq
KVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBp
cFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAg
W3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0KCldOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb1N1YmxheWVyOnBsYXllckxh
eWVyLnZpZGVvU3VibGF5ZXJdOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lv
bnM6cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNpb25zXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0
VmlkZW9HcmF2aXR5OnBsYXllckxheWVyLnZpZGVvR3Jhdml0eV07Ci0gICAgW3BpcFBsYXllckxh
eWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBsYXllckxheWVyLm1vZGVsVmlkZW9MYXllckZy
YW1lXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0UGxheWVyQ29udHJvbGxlcjpwbGF5ZXJMYXll
ci5wbGF5ZXJDb250cm9sbGVyXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0RnVsbHNjcmVlbklu
dGVyZmFjZTpwbGF5ZXJMYXllci5mdWxsc2NyZWVuSW50ZXJmYWNlXTsKLSAgICBbcGlwVmlldyBh
ZGRTdWJ2aWV3OnBsYXllckxheWVyVmlldy52aWRlb1ZpZXddOwotfQotCi1zdGF0aWMgdm9pZCBX
ZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcg
KnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIGlmIChVSVZpZXcgKnZpZGVvVmlldyA9IHBs
YXllckxheWVyVmlldy52aWRlb1ZpZXcpCi0gICAgICAgIFtwbGF5ZXJMYXllclZpZXcgYWRkU3Vi
dmlldzp2aWRlb1ZpZXddOwotICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxh
eWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwotICAgIFdlYkFW
UGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5
ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXll
ciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOwotICAgIFtwbGF5ZXJMYXll
ciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpwaXBQbGF5ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJG
cmFtZV07Ci19Ci0KLXN0YXRpYyBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcg
KldlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQg
YVNlbGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3
ID0gYVNlbGY7Ci0gICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBW
aWV3ID0gW3BsYXllckxheWVyVmlldyB2YWx1ZUZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3Il07Ci0gICAgaWYgKCFwaXBWaWV3KSB7Ci0gICAgICAgIHBpcFZpZXcgPSBb
W2dldFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld0NsYXNzKCkgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0WmVyb107Ci0gICAgICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0VmFs
dWU6cGlwVmlldyBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOwot
ICAgIH0KLSAgICByZXR1cm4gcGlwVmlldzsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJM
YXllclZpZXdfZGVhbGxvYyhpZCBhU2VsZiwgU0VMKQotewotICAgIFdlYkFWUGxheWVyTGF5ZXJW
aWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAgICBSZXRhaW5QdHI8V2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3PiBwaXBWaWV3ID0gYWRvcHROUyhbcGxheWVyTGF5ZXJW
aWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXSk7Ci0g
ICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1ZTpuaWwgZm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXciXTsKLSAgICBvYmpjX3N1cGVyIHN1cGVyQ2xhc3MgeyBwbGF5ZXJM
YXllclZpZXcsIGdldF9fQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpIH07Ci0gICAgYXV0byBzdXBl
cl9kZWFsbG9jID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKG9iamNfc3VwZXIqLCBTRUwpPihv
YmpjX21zZ1NlbmRTdXBlcik7Ci0gICAgc3VwZXJfZGVhbGxvYygmc3VwZXJDbGFzcywgQHNlbGVj
dG9yKGRlYWxsb2MpKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gTWV0aG9kcwotCi1zdGF0aWMgQ2xh
c3MgZ2V0V2ViQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpCi17Ci0gICAgc3RhdGljIENsYXNzIHRo
ZUNsYXNzID0gbmlsOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAg
IGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7Ci0gICAgICAgIHRoZUNsYXNzID0gb2JqY19h
bGxvY2F0ZUNsYXNzUGFpcihnZXRfX0FWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSwgIldlYkFWUGxh
eWVyTGF5ZXJWaWV3IiwgMCk7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNl
bGVjdG9yKGRlYWxsb2MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MsICJ2QDoi
KTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0UGxheWVy
Q29udHJvbGxlcjopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xs
ZXIsICJ2QDpAIik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9y
KHBsYXllckNvbnRyb2xsZXIpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BsYXllckNvbnRy
b2xsZXIsICJAQDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0
b3Ioc2V0VmlkZW9WaWV3OiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3
LCAidkA6QCIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcih2
aWRlb1ZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldywgIkBAOiIpOwot
ICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzdGFydFJvdXRpbmdW
aWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJM
YXllclZpZXdfc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcsICJ2QDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Io
c3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVAp
V2ViQVZQbGF5ZXJMYXllclZpZXdfc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlldywgInZAOiIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3Ms
IEBzZWxlY3RvcihwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBs
YXllckxheWVyVmlld19waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAiQEA6Iik7Ci0g
ICAgICAgIAotICAgICAgICBjbGFzc19hZGRJdmFyKHRoZUNsYXNzLCAiX3BpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXciLCBzaXplb2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3ICopLCBsb2cyKHNpemVvZihXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcgKikpLCAiQCIpOwotICAgICAgICAKLSAgICAgICAgb2JqY19yZWdpc3RlckNsYXNzUGFpcih0
aGVDbGFzcyk7Ci0gICAgICAgIENsYXNzIG1ldGFDbGFzcyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJX
ZWJBVlBsYXllckxheWVyVmlldyIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QobWV0YUNsYXNz
LCBAc2VsZWN0b3IobGF5ZXJDbGFzcyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJD
bGFzcywgIkBAOiIpOwotICAgIH0pOwotICAgIHJldHVybiB0aGVDbGFzczsKLX0KLQotUmVmPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6Y3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UpCi17Ci0gICAgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOwotICAgIFtpbnRlcmZhY2UtPm1f
cGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOmludGVy
ZmFjZS5wdHIoKV07Ci0gICAgcmV0dXJuIGludGVyZmFjZTsKLX0KLQotV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0g
ICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Up
Ci0gICAgLCBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWUGxh
eWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pKQotICAgICwgbV93YXRjaGRv
Z1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQpCi17Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKQotewotICAg
IFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IHRoaXMtPnBsYXllckNv
bnRyb2xsZXIoKTsKLSAgICBpZiAocGxheWVyQ29udHJvbGxlciAmJiBwbGF5ZXJDb250cm9sbGVy
LmV4dGVybmFsUGxheWJhY2tBY3RpdmUpCi0gICAgICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGZhbHNlLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUsICIiKTsKLSAg
ICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLX0KLQotV2ViQVZQbGF5ZXJDb250cm9sbGVyICpX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cGxheWVyQ29udHJvbGxlcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5ZXJDb250cm9s
bGVyKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKLXsK
LSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLQotICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwgPSBtb2RlbDsKLQotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwotCi0gICAgaGFzVmlkZW9D
aGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5o
YXNWaWRlbygpIDogZmFsc2UpOwotICAgIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnZpZGVvRGltZW5zaW9ucygp
IDogRmxvYXRTaXplKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCi17Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIgPSBvYnNlcnZlcjsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgW3BsYXllckNvbnRy
b2xsZXIoKSBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlkZW9dOwotICAgIFtwbGF5ZXJDb250cm9s
bGVyKCkgc2V0SGFzVmlkZW86aGFzVmlkZW9dOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYg
dmlkZW9EaW1lbnNpb25zKQotewotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0g
KFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotCi0g
ICAgW3BsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwotICAg
IFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0Q29udGVudERpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25z
XTsKLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0TmVlZHNMYXlvdXRdOwotCi0gICAgV2ViQVZQ
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyAqKVttX3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3XTsKLSAgICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXll
ciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOwotICAgIFtwaXBQbGF5ZXJM
YXllciBzZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNpb25zXTsKLSAg
ICBbcGlwVmlldyBzZXROZWVkc0xheW91dF07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmKQotewotICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRkZW46ZW5hYmxlZF07Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlk
QmVjb21lQWN0aXZlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlzKTsK
LSAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3Vu
ZCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmlz
VmlzaWJsZSgpKSB7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJl
SW5QaWN0dXJlXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSBi
b3RoIGluIFBpUCBhbmQgaW4gRnVsbHNjcmVlbiAoaS5lLiwgdmlhIGF1dG8tUGlQKSwgYW5kIHdl
IGRpZCBub3Qgc3RvcCBmdWxsc2NyZWVuIHVwb24gcmV0dXJuaW5nLCBpdCBtdXN0IGJlCi0gICAg
Ly8gYmVjYXVzZSB0aGUgb3JpZ2luYXRpbmcgdmlldyBpcyBub3QgdmlzaWJsZSwgc28gaGlkZSB0
aGUgZnVsbHNjcmVlbiB3aW5kb3cuCi0gICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCB8IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKSB7Ci0gICAgICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBj
b21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7
Ci0gICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAgICBbW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107Ci0gICAgICAgIH1dOwot
ICAgIH0KLX0KLQotQGludGVyZmFjZSBVSVdpbmRvdyAoKQotLSAoQk9PTClfaXNIb3N0ZWRJbkFu
b3RoZXJQcm9jZXNzOwotQGVuZAotCi1AaW50ZXJmYWNlIFVJVmlld0NvbnRyb2xsZXIgKCkKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHNldHRlcj1fc2V0SWdub3JlQXBwU3VwcG9ydGVk
T3JpZW50YXRpb25zOikgQk9PTCBfaWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOwotQGVu
ZAotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3Jl
ZW4oVUlWaWV3JiB2aWRlb1ZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0
LCBVSVZpZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKLXsKLSAg
ICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lKTsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAgICBtX2FsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjayA9IGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsKLQot
ICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxl
QWN0aW9uczpZRVNdOwotICAgIGJvb2wgaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlID0gaGFzTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0
dXJlKTsKLSAgICBtX21vZGUgPSBtb2RlOwotICAgIG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7
Ci0gICAgbV9wYXJlbnRXaW5kb3cgPSBwYXJlbnRWaWV3LndpbmRvdzsKLQotICAgIGlmICghW1tw
YXJlbnRWaWV3IHdpbmRvd10gX2lzSG9zdGVkSW5Bbm90aGVyUHJvY2Vzc10pIHsKLSAgICAgICAg
aWYgKCFtX3dpbmRvdykKLSAgICAgICAgICAgIG1fd2luZG93ID0gYWRvcHROUyhbYWxsb2NVSVdp
bmRvd0luc3RhbmNlKCkgaW5pdFdpdGhGcmFtZTpbW2dldFVJU2NyZWVuQ2xhc3MoKSBtYWluU2Ny
ZWVuXSBib3VuZHNdXSk7Ci0gICAgICAgIFttX3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xl
YXJVSUNvbG9yKCldOwotICAgICAgICBpZiAoIW1fdmlld0NvbnRyb2xsZXIpCi0gICAgICAgICAg
ICBtX3ZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NVSVZpZXdDb250cm9sbGVySW5zdGFu
Y2UoKSBpbml0XSk7Ci0gICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpb
bV93aW5kb3cgYm91bmRzXV07Ci0gICAgICAgIFttX3ZpZXdDb250cm9sbGVyIF9zZXRJZ25vcmVB
cHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6WUVTXTsKLSAgICAgICAgW21fd2luZG93IHNldFJvb3RW
aWV3Q29udHJvbGxlcjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKLSAgICAgICAgW21fd2luZG93
IHNldFdpbmRvd0xldmVsOmdldFVJVGV4dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2
ZWwoKSArIDFdOwotICAgICAgICBbbV93aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwotICAgIH0K
LQotICAgIGlmICghbV9wbGF5ZXJMYXllclZpZXcpCi0gICAgICAgIG1fcGxheWVyTGF5ZXJWaWV3
ID0gYWRvcHROUyhbW2dldFdlYkFWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSBhbGxvY10gaW5pdF0p
OwotICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRkZW46W3BsYXllckNvbnRyb2xsZXIoKSBp
c0V4dGVybmFsUGxheWJhY2tBY3RpdmVdXTsKLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFj
a2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLQotICAgIGlmICghaXNJblBpY3R1cmVJblBp
Y3R1cmVNb2RlKSB7Ci0gICAgICAgIFttX3BsYXllckxheWVyVmlldyBzZXRWaWRlb1ZpZXc6JnZp
ZGVvVmlld107Ci0gICAgICAgIFttX3BsYXllckxheWVyVmlldyBhZGRTdWJ2aWV3OiZ2aWRlb1Zp
ZXddOwotICAgIH0KLQotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFW
UGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotCi0gICAgW3Bs
YXllckxheWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgaW5pdGlh
bFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJlY3QuaGVpZ2h0KCkpXTsKLSAgICBbcGxheWVyTGF5ZXIg
c2V0VmlkZW9EaW1lbnNpb25zOltwbGF5ZXJDb250cm9sbGVyKCkgY29udGVudERpbWVuc2lvbnNd
XTsKLSAgICBwbGF5ZXJMYXllci5mdWxsc2NyZWVuSW50ZXJmYWNlID0gdGhpczsKLQotICAgIGlm
ICghbV9wbGF5ZXJWaWV3Q29udHJvbGxlcikKLSAgICAgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciA9IGFkb3B0TlMoW2FsbG9jQVZQbGF5ZXJWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdFdp
dGhQbGF5ZXJMYXllclZpZXc6bV9wbGF5ZXJMYXllclZpZXcuZ2V0KCldKTsKLQotICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107Ci0gICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9s
bGVyICopcGxheWVyQ29udHJvbGxlcigpXTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
ZXREZWxlZ2F0ZTptX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOwotICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHNldEFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazpt
X2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFja107Ci0KLSAgICBbcGxheWVyQ29udHJvbGxl
cigpIHNldFBpY3R1cmVJblBpY3R1cmVQb3NzaWJsZTptX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQ
bGF5YmFja107Ci0KLSAgICBpZiAobV92aWV3Q29udHJvbGxlcikgewotICAgICAgICBbbV92aWV3
Q29udHJvbGxlciBhZGRDaGlsZFZpZXdDb250cm9sbGVyOm1fcGxheWVyVmlld0NvbnRyb2xsZXIu
Z2V0KCldOwotICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gYWRkU3VidmlldzpbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07Ci0gICAgfSBlbHNlCi0gICAgICAgIFtwYXJlbnRW
aWV3IGFkZFN1YnZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld11dOwotCi0gICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbcGFyZW50VmlldyBjb252ZXJ0UmVj
dDppbml0aWFsUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2
aWV3XTsKLQotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5k
Q29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUJvdHRvbU1h
cmdpbiB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlUmlnaHRNYXJnaW4pXTsKLQotICAgIFtb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXROZWVkc0xheW91dF07Ci0gICAgW1ttX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKLQotICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKLSAgICAgICAgaWYgKG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQotewotICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVs
bHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAgIG1fZXhpdENvbXBsZXRlZCA9IGZhbHNlOwotICAg
IG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOwotICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSB0cnVlOwot
Ci0gICAgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVQaWN0dXJlSW5QaWN0dXJlKQotICAgICAgICBlbnRlclBpY3R1cmVJblBpY3R1cmUoKTsK
LSAgICBlbHNlIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlU3RhbmRhcmQpCi0gICAgICAgIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7Ci0g
ICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0gICAgCi0gICAgaWYgKFttX3BsYXllclZp
ZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZVBvc3NpYmxlXSkKLSAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgc3RhcnRQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICBlbHNlCi0gICAg
ICAgIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKLXsKLSAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
ckZ1bGxzY3JlZW5TdGFuZGFyZCglcCkiLCB0aGlzKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0KLSAgICBpZiAoW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlXSkgewotICAgICAg
ICAvLyBOT1RFOiBUaGUgZnVsbHNjcmVlbiBtb2RlIHdpbGwgYmUgcmVzdG9yZWQgaW4gcHJlcGFy
ZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCkuCi0gICAgICAg
IG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gdHJ1ZTsKLSAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxs
U2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOlt0aGlzLCBwcm90ZWN0ZWRUaGlz
XSAoQk9PTCBzdWNjZWVkZWQsIE5TRXJyb3IqKSB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzdWNj
ZWVkZWQpOwotICAgICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCAtIGxhbWJkYSglcCkgLSBzdWNjZWVk
ZWQoJXMpIiwgdGhpcywgYm9vbFN0cmluZyhzdWNjZWVkZWQpKTsKLSAgICAgICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0KLSAgICAgICAg
aWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwotICAgIH1dOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCi17Ci0gICAgbV93YXRjaGRvZ1RpbWVyLnN0b3Ao
KTsKLQotICAgIG1fZXhpdFJlcXVlc3RlZCA9IHRydWU7Ci0gICAgaWYgKG1fZXhpdENvbXBsZXRl
ZCkgewotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLSAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwotICAg
IAotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50Vmll
dyBjb252ZXJ0UmVjdDpmaW5hbFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddLnN1cGVydmlld107Ci0KLSAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChX
ZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBp
ZiAoW3BsYXllckxheWVyIHZpZGVvR3Jhdml0eV0gIT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdCgpKQotICAgICAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OmdldEFW
TGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKV07Ci0gICAgW1ttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKLQotICAgIGlmIChpc01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpIHsKLSAg
ICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsK
LSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAgICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICB9IGVsc2UgaWYgKGlzTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJl
IHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7
Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxT
Y3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10g
KEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAgICAgICAgW21fd2lu
ZG93IHNldEhpZGRlbjpOT107Ci0gICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
dG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgICAgIH1dOwotICAgIH0gZWxzZSBpZiAoaXNNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgewot
ICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2Ny
ZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAo
Qk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7Ci0K
LSAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICAgICAgICAgIFtDQVRyYW5z
YWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgICAgICAgICBbbV9wbGF5ZXJMYXll
clZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLSAgICAgICAgICAgIFtb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNv
bG9yKCldOwotICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRo
aXMsIHRoaXNdKCkgewotICAgICAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcikKLSAgICAgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfV07Ci0gICAgfTsK
LX0KLQotQGludGVyZmFjZSBVSUFwcGxpY2F0aW9uICgpCi0tICh2b2lkKV9zZXRTdGF0dXNCYXJP
cmllbnRhdGlvbjooVUlJbnRlcmZhY2VPcmllbnRhdGlvbilvOwotQGVuZAotCi1AaW50ZXJmYWNl
IFVJV2luZG93ICgpCi0tIChVSUludGVyZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9yaWVudGF0
aW9uOwotQGVuZAotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVh
bnVwRnVsbHNjcmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0gICAgaWYg
KG1fd2luZG93KSB7Ci0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAg
W21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOwotICAgICAgICBpZiAobV9wYXJl
bnRXaW5kb3cpCi0gICAgICAgICAgICBbW2dldFVJQXBwbGljYXRpb25DbGFzcygpIHNoYXJlZEFw
cGxpY2F0aW9uXSBfc2V0U3RhdHVzQmFyT3JpZW50YXRpb246W21fcGFyZW50V2luZG93IGludGVy
ZmFjZU9yaWVudGF0aW9uXV07Ci0gICAgfQotICAgIAotICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxh
eWVyQ29udHJvbGxlcjpuaWxdOwotICAgIAotICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQotICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgaWYgKGhh
c01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQp
KQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVk
Ok5PIGNvbXBsZXRpb25IYW5kbGVyOltdIChCT09MLCBOU0Vycm9yICopIHsgfV07Ci0gICAgCi0g
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOwot
ICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciByZW1vdmVGcm9tUGFyZW50Vmlld0NvbnRyb2xsZXJdOwotICAgIAotICAgIFttX3BsYXllckxh
eWVyVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICBbW21fdmlld0NvbnRyb2xsZXIgdmll
d10gcmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICBtX3BsYXllckxheWVyVmlldyA9IG5pbDsK
LSAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gbmlsOwotICAgIG1fd2luZG93ID0gbmlsOwot
ICAgIG1fcGFyZW50VmlldyA9IG5pbDsKLSAgICBtX3BhcmVudFdpbmRvdyA9IG5pbDsKLSAgICAK
LSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOwotCi0gICAgbV9lbnRlclJl
cXVlc3RlZCA9IGZhbHNlOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmlsOwot
ICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gbmlsOwotICAgIAotICAgIGNsZWFudXBG
dWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQotewotICAgIGlmICghbV9lbnRlclJlcXVl
c3RlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsK
LQotICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107Ci0KLSAgICBpZiAod2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKSAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsICYmICFtX2V4aXRSZXF1ZXN0ZWQpIHsK
LSAgICAgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKLSAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIH0KLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJv
b2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCkKLXsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUoJXApIC0gdmlzaWJsZSglcykiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpKTsK
LSAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjaykgewotICAgICAgICAKLSAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZl
cnRSZWN0OmlubGluZVJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1
cGVydmlld107Ci0KLSAgICAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9
IFdURk1vdmUobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjayk7Ci0gICAgICAgIGNhbGxiYWNrKHZp
c2libGUpOwotICAgIH0KLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAotewot
ICAgIHJldHVybiBbcGxheWVyQ29udHJvbGxlcigpIGlzUGxheWluZ10gJiYgbV9tb2RlID09IEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkICYmIHN1cHBv
cnRzUGljdHVyZUluUGljdHVyZSgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lk
KGJvb2wpPiYmIGNhbGxiYWNrKQotewotICAgIG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKTsKLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0g
ICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2ls
bFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCki
LCB0aGlzKTsKLSAgICBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVy
ZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFm
dGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUlu
UGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXTsKLSAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLQotICAgIGlmICht
X21vZGUgJiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFy
ZCkgewotICAgICAgICBpZiAoIVttX3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1
cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF0pIHsKLSAgICAgICAgICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
LSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0
ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNF
cnJvciopIHsKLSAgICAgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAg
ICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNd
OwotICAgICAgICAgICAgfV07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBbbV93
aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBzZXRIaWRkZW46WUVTXTsKLSAgICB9Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1
bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dz
UGxheWJhY2tDb250cm9sczpZRVNdOwotCi0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwotCi0gICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKQotICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJG
dWxsc2NyZWVuKCk7Ci0KLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKQotewot
ICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7Ci0g
ICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZh
bHNlOwotCi0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIGlmIChoYXNN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB8
fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgW21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107Ci0KLSAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxz
Y3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGlj
dHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0g
ICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9w
KSB7Ci0gICAgICAgIC8vIEFTU1VNUFRJT046IHdlIGFyZSBleGl0aW5nIHBpcCBiZWNhdXNlIHdl
IGFyZSBlbnRlcmluZyBmdWxsc2NyZWVuCi0gICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwotCi0g
ICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07
Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpj
bGVhclVJQ29sb3IoKV07Ci0KLSAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0gICAgCi0gICAgaWYgKG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25I
YW5kbGVyKHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCi17Ci0gICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFy
ZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMp
OwotICAgIGlmIChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB8fCBt
X3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kKSB7Ci0gICAg
ICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7Ci0g
ICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQg
PSBmYWxzZTsKLSAgICAgICAgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVy
ZVN0b3AgPSB0cnVlOwotCi0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwotICAgICAg
ICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKLQotICAgICAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29t
cGxldGlvbkhhbmRsZXI6XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBt
X3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IGZhbHNlOwotICAg
ICAgICAgICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVTdGFuZGFyZCk7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsKLSAg
ICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgICAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAg
ICAgIH1dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIFJldGFpblB0
cjxpZD4gc3Ryb25nQ29tcGxldGlvbkhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxl
ciBjb3B5XSk7Ci0gICAgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFtwcm90ZWN0ZWRUaGlz
LCBzdHJvbmdDb21wbGV0aW9uSGFuZGxlcl0oYm9vbCByZXN0b3JlZCkgIHsKLSAgICAgICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZv
clBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyIGxhbWJkYSglcCkgLSBy
ZXN0b3JlZCglcykiLCBwcm90ZWN0ZWRUaGlzLmdldCgpLCBib29sU3RyaW5nKHJlc3RvcmVkKSk7
Ci0gICAgICAgIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkgPSBzdHJv
bmdDb21wbGV0aW9uSGFuZGxlci5nZXQoKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVz
dG9yZWQpOwotICAgIH0pOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKLXsKLSAgICBpZiAoIW1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJl
YXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQpIHsK
LSAgICAgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNT
dGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBo
YXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
KTsKLSAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYg
KHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgJiYgKHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJl
YXNvbjo6RG9uZUJ1dHRvblRhcHBlZCB8fCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246
OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZCkpCi0gICAgICAgIHdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCktPnBhdXNlKCk7Ci0gICAgCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU5vbmUsIHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRh
cHBlZCk7Ci0KLSAgICBpZiAoIW1fd2F0Y2hkb2dUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBt
X3dhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90KGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwp
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1OT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoKQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OndhdGNoZG9nVGltZXJGaXJlZCglcCkgLSBubyBleGl0IGZ1bGxzY3JlZW4gcmVzcG9uc2UgaW4g
JWdzOyBmb3JjaW5nIGZ1bGxzY3JlZW4gaGlkZGVuLiIsIHRoaXMsIGRlZmF1bHRXYXRjaGRvZ1Rp
bWVySW50ZXJ2YWwudmFsdWUoKSk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgW21f
d2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBzZXRIaWRkZW46WUVTXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX21vZGUgPSBuZXdNb2RlOwotICAgIGlmIChtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVu
TW9kZUNoYW5nZWQobV9tb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKQotewotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdNb2Rl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21vZGUgPSBuZXdNb2RlOwotICAgIGlmIChtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxs
c2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKLX0KLQotI2VuZGlmIC8vIEhBVkUoQVZLSVQpCi0K
LWJvb2wgV2ViQ29yZTo6c3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSNpZiBQTEFURk9S
TShJT1MpICYmIEhBVkUoQVZLSVQpCi0gICAgcmV0dXJuIFtnZXRBVlBpY3R1cmVJblBpY3R1cmVD
b250cm9sbGVyQ2xhc3MoKSBpc1BpY3R1cmVJblBpY3R1cmVTdXBwb3J0ZWRdOwotI2Vsc2UKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGI4ZDEzNWI1NWEyNjdjMWIyZGFhZGIxM2VjOGY3
NDMxMGFiYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpCisKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMu
aCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitP
QkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWw7CisKK2NsYXNz
IFdFQkNPUkVfRVhQT1JUIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBmaW5hbAorICAgIDog
cHVibGljIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgICwgcHVibGljIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYz4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbk1vZGVsJik7CisgICAgdmlydHVhbCB+
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCk7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwq
IHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25N
b2RlbDsgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbCB7IH0KKworICAgIC8vIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5n
ZWQoZG91YmxlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hh
bmdlZChkb3VibGUgLypjdXJyZW50VGltZSovLCBkb3VibGUgLyphbmNob3JUaW1lKi8pIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAvKmlzUGxheWluZyov
LCBmbG9hdCAvKnBsYXliYWNrUmF0ZSovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIC8qbGFzdE1v
ZGlmaWVkVGltZSovLCBkb3VibGUgLypsaXZlVXBkYXRlSW50ZXJ2YWwqLykgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8q
c2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIC8qb3B0aW9ucyovLCB1aW50NjRfdCAvKnNlbGVjdGVkSW5kZXgqLykgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBs
b2NhbGl6ZWREZXZpY2VOYW1lICovKSBmaW5hbDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
aW52YWxpZGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5h
Z2VyKCk7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIgKik7CisgICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIgKnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisjZW5kaWYKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGJlZ2luU2NydWJiaW5nKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRTY3J1YmJpbmcoKTsKKworcHJpdmF0ZToKKyAgICAgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjKFBsYXliYWNrU2Vzc2lvbk1vZGVsJik7CisgICAgICAgIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0ciB9OworI2lmIEVOQUJMRShXRUJf
UExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ciAqbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciAgeyBudWxscHRyIH07CisKKyAgICB2b2lkIHVw
ZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91
YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKTsKKyNl
bmRpZgorCit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ZWYy
MjMwNjlhOWNlZTlmMTEyNTEzYmJmZWYwYjEyYzY3YjI0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1t
CkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgorCisjaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisKKyNpbXBvcnQgIkFWS2l0
U1BJLmgiCisjaW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlv
bi5oIgorI2ltcG9ydCAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgiCisjaW1wb3J0ICJQbGF5YmFj
a1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4K
KworI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19P
UFRJT05BTChBVktpdCkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRp
bWluZykKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjpjcmVhdGUoUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQoreworICAgIGF1dG8g
aW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMobW9k
ZWwpKTsKKyAgICBtb2RlbC5hZGRDbGllbnQoaW50ZXJmYWNlKTsKKyAgICByZXR1cm4gaW50ZXJm
YWNlOworfQorCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCisgICAgOiBtX3BsYXliYWNr
U2Vzc2lvbk1vZGVsKCZtb2RlbCkKK3sKK30KKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCkKK3sKKyAgICBpbnZhbGlkYXRlKCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQoZG91
YmxlIGR1cmF0aW9uKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKKyAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxh
eUJhY2tDb250cm9sc01hbmFnZXIoKTsKKworICAgIGNvbnRyb2xzTWFuYWdlci5jb250ZW50RHVy
YXRpb24gPSBkdXJhdGlvbjsKKworICAgIC8vIEZJWE1FOiBXZSB0YWtlIHRoaXMgYXMgYW4gaW5k
aWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LCBidXQgdGhhdCBpcyBub3QgbmVjZXNzYXJp
bHkgdHJ1ZS4KKyAgICBjb250cm9sc01hbmFnZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAg
IGNvbnRyb2xzTWFuYWdlci5oYXNFbmFibGVkVmlkZW8gPSBZRVM7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShkdXJhdGlvbik7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBh
bmNob3JUaW1lKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
KyAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJh
Y2tDb250cm9sc01hbmFnZXIoKTsKKyAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRp
bWluZyhjdXJyZW50VGltZSwgYW5jaG9yVGltZSwgY29udHJvbHNNYW5hZ2VyLnJhdGUsIGNvbnRy
b2xzTWFuYWdlci5wbGF5aW5nKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRUaW1l
KTsKKyAgICBVTlVTRURfUEFSQU0oYW5jaG9yVGltZSk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9h
dCBwbGF5YmFja1JhdGUpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworICAgIFtjb250cm9sc01hbmFnZXIgc2V0UmF0ZTpp
c1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07CisgICAgW2NvbnRyb2xzTWFuYWdlciBzZXRQ
bGF5aW5nOmlzUGxheWluZ107CisgICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1p
bmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJl
bnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0s
IHBsYXliYWNrUmF0ZSwgaXNQbGF5aW5nKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlzUGxh
eWluZyk7CisgICAgVU5VU0VEX1BBUkFNKHBsYXliYWNrUmF0ZSk7CisjZW5kaWYKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyNpZiBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgdXBkYXRlUGxheWJhY2tD
b250cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tT
ZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0lu
Zm9dIHN5c3RlbVVwdGltZV0sIDAsIGZhbHNlKTsKKyNlbmRpZgorICAgIHBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjplbmRTY3J1YmJpbmcoKQoreworICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkt
PmVuZFNjcnViYmluZygpOworfQorCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQorc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gdGltZVJhbmdlc1RvQXJy
YXkoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IHJhbmdlQXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgp
OyBpKyspIHsKKyAgICAgICAgY29uc3QgUGxhdGZvcm1UaW1lUmFuZ2VzJiByYW5nZXMgPSB0aW1l
UmFuZ2VzLnJhbmdlcygpOworICAgICAgICBDTVRpbWVSYW5nZSByYW5nZSA9IENNVGltZVJhbmdl
TWFrZSh0b0NNVGltZShyYW5nZXMuc3RhcnQoaSkpLCB0b0NNVGltZShyYW5nZXMuZW5kKGkpKSk7
CisgICAgICAgIFtyYW5nZUFycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVS
YW5nZTpyYW5nZV1dOworICAgIH0KKworICAgIHJldHVybiByYW5nZUFycmF5OworfQorI2VuZGlm
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5n
ZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlLCBkb3VibGUpCit7CisjaWYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRy
b2xzTWFuYWdlcigpIHNldFNlZWthYmxlVGltZVJhbmdlczp0aW1lUmFuZ2VzVG9BcnJheSh0aW1l
UmFuZ2VzKS5nZXQoKV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0aW1lUmFuZ2VzKTsKKyNl
bmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNl
dEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3Rh
dGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ob3B0aW9ucyk7CisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlm
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworI2lmIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3Rh
dGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ob3B0aW9ucyk7CisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlm
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisjaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdl
cigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4XTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXg6c2VsZWN0ZWRJbmRleF07CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxlY3RlZEluZGV4KTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCit7
CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcigpIHNldENhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmU6IWVuYWJsZWRd
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQoreworICAgIGlmICghbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsID0gbnVsbHB0cjsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVu
c3VyZUNvbnRyb2xzTWFuYWdlcigpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQorICAgIHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisjZW5kaWYKK30KKwor
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKworV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIgKlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250
cm9sc01hbmFnZXIoKQoreworICAgIHJldHVybiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9s
c01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIpCit7CisgICAgbV9w
bGF5YmFja0NvbnRyb2xzTWFuYWdlciA9IG1hbmFnZXI7CisKKyAgICBpZiAoIW1hbmFnZXIgfHwg
IW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVGltZUlu
dGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbbWFuYWdlciByYXRlXSA/IE5BTiA6IFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKKyAgICBtYW5hZ2VyLnRpbWluZyA9
IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTptX3Bs
YXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIGFuY2hvclRpbWVTdGFtcDphbmNob3JU
aW1lU3RhbXAgcmF0ZTowXTsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBtX3BsYXliYWNrU2Vzc2lv
bk1vZGVsLT5kdXJhdGlvbigpOworICAgIG1hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRp
b247CisgICAgbWFuYWdlci5oYXNFbmFibGVkQXVkaW8gPSBkdXJhdGlvbiA+IDA7CisgICAgbWFu
YWdlci5oYXNFbmFibGVkVmlkZW8gPSBkdXJhdGlvbiA+IDA7CisgICAgbWFuYWdlci5yYXRlID0g
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+aXNQbGF5aW5nKCkgPyBtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsLT5wbGF5YmFja1JhdGUoKSA6IDAuOworICAgIG1hbmFnZXIuc2Vla2FibGVUaW1lUmFuZ2Vz
ID0gdGltZVJhbmdlc1RvQXJyYXkobV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+c2Vla2FibGVSYW5n
ZXMoKSkuZ2V0KCk7CisgICAgbWFuYWdlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKKyAgICBt
YW5hZ2VyLnBsYXlpbmcgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKTsKKyAg
ICBbbWFuYWdlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lv
bk1vZGVsLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0
YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFT
ZWxlY3RlZEluZGV4KCkpXTsKKyAgICBbbWFuYWdlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMoKSB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXliYWNr
U2Vzc2lvbk1vZGVsLT5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
VGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5
YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKQoreworICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyICptYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICBpZiAoIW1hbmFn
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsICptb2RlbCA9
IHBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgaWYgKCFtb2RlbCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZG91YmxlIGVmZmVjdGl2ZUFuY2hvclRpbWUgPSBwbGF5YmFja1JhdGUgPyBhbmNo
b3JUaW1lIDogTkFOOworICAgIGRvdWJsZSBlZmZlY3RpdmVQbGF5YmFja1JhdGUgPSBwbGF5YmFj
a1JhdGU7CisgICAgaWYgKCFpc1BsYXlpbmcKKyAgICAgICAgfHwgbW9kZWwtPmlzU2NydWJiaW5n
KCkKKyAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA+IDAgJiYgbW9kZWwtPnBsYXliYWNrU3RhcnRl
ZFRpbWUoKSA+PSBjdXJyZW50VGltZSkKKyAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA8IDAgJiYg
bW9kZWwtPnBsYXliYWNrU3RhcnRlZFRpbWUoKSA8PSBjdXJyZW50VGltZSkpCisgICAgICAgIGVm
ZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IDA7CisKKyAgICBtYW5hZ2VyLnRpbWluZyA9IFtnZXRBVlZh
bHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZSBh
bmNob3JUaW1lU3RhbXA6ZWZmZWN0aXZlQW5jaG9yVGltZSByYXRlOmVmZmVjdGl2ZVBsYXliYWNr
UmF0ZV07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjNzRiODQ4ZmFmOWIy
OTBlZWY4NmE3MjkwMmI2MzBkZGRiZWMxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKQEAgLTAsMCAr
MSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKQorCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNz
aW9uTW9kZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIE5TV2luZG93OworT0JKQ19DTEFT
UyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7CisK
K2NsYXNzIFdFQkNPUkVfRVhQT1JUIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYworICAgIDog
cHVibGljIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwcml2YXRlIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM+IHsKKworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjPiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7
CisgICAgfQorICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpOworICAg
IFZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCog
cGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKKyAgICBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogdmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKSBvdmVycmlkZTsKKworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0
U2l6ZSYpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXR1cEZ1bGxzY3JlZW4o
TlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dp
bmRvdyAqcGFyZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50
V2luZG93KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFu
aW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKKyAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW4oKSB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2lu
ZG93ICpwYXJlbnRXaW5kb3cpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJv
bHNNYW5hZ2VyKCk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIGJvb2wgaGFzTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0g
bW9kZTsgfQorICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUpOworICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisKKyAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNl
ZEZ1bGxzY3JlZW4oKSBjb25zdDsKKworICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRl
b1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgYXBw
bGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKSB7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9i
akMoKTsKKworcHJpdmF0ZToKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjJik7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYz4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9k
ZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07CisgICAgVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9
OworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUg
eyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAg
UmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM+IG1fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQzsKK307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1MjNmMTI5OTNkNzgyYzg5MDc2OWQ1NjAyM2IwYzZmZTUxNjFl
OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCkBAIC0wLDAgKzEsNTc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorCisjaW1wb3J0ICJBVktpdFNQSS5o
IgorI2ltcG9ydCAiSW50UmVjdC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVk
aWFUaW1lQVZGb3VuZGF0aW9uLmgiCisjaW1wb3J0ICJQSVBTUEkuaCIKKyNpbXBvcnQgIlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9y
dCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgorI2lt
cG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGlu
ay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NM
QVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQorCitTT0ZUX0xJTktfUFJJVkFURV9G
UkFNRVdPUktfT1BUSU9OQUwoUElQKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFBJUCwgUElQ
Vmlld0NvbnRyb2xsZXIpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAY2xhc3MgV2Vi
VmlkZW9WaWV3Q29udGFpbmVyOworCitAcHJvdG9jb2wgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVs
ZWdhdGUgPE5TT2JqZWN0PgorCistICh2b2lkKWJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0Nv
bnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyOworLSAo
dm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmll
d0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcjsKKworQGVuZAorCitAaW50ZXJmYWNlIFdl
YlZpZGVvVmlld0NvbnRhaW5lciA6IE5TVmlldyB7CisgICAgaWQgPFdlYlZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlPiBfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Cit9CisKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIGlkIDxXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4g
dmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YlZpZGVvVmlld0NvbnRhaW5lcgorCitAc3ludGhlc2l6ZSB2aWRlb1ZpZXdDb250YWluZXJEZWxl
Z2F0ZT1fdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7CisKKy0gKHZvaWQpcmVzaXplV2l0aE9s
ZFN1cGVydmlld1NpemU6KE5TU2l6ZSlvbGRCb3VuZHNTaXplCit7CisgICAgW3N1cGVyIHJlc2l6
ZVdpdGhPbGRTdXBlcnZpZXdTaXplOm9sZEJvdW5kc1NpemVdOworCisgICAgW192aWRlb1ZpZXdD
b250YWluZXJEZWxlZ2F0ZSBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6c2Vs
Zl07Cit9CisKKy0gKHZvaWQpdmlld0RpZE1vdmVUb1N1cGVydmlldworeworICAgIFtzdXBlciB2
aWV3RGlkTW92ZVRvU3VwZXJ2aWV3XTsKKworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdh
dGUgc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNlbGZdOworfQorCitA
ZW5kCisKK2VudW0gY2xhc3MgUElQU3RhdGUgeworICAgIE5vdEluUElQLAorICAgIEluUElQLAor
ICAgIEV4aXRpbmdQSVAKK307CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjT2JqQyA6IE5TT2JqZWN0IDxQSVBWaWV3Q29udHJvbGxlckRlbGVnYXRlLCBXZWJWaWRl
b1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4geworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYyogX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKyAgICBOU1NpemUgX3Zp
ZGVvRGltZW5zaW9uczsKKyAgICBSZXRhaW5QdHI8UElQVmlld0NvbnRyb2xsZXI+IF9waXBWaWV3
Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8TlNWaWV3Q29udHJvbGxlcj4gX3ZpZGVvVmlld0Nv
bnRhaW5lckNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFdlYlZpZGVvVmlld0NvbnRhaW5lcj4g
X3ZpZGVvVmlld0NvbnRhaW5lcjsKKyAgICBQSVBTdGF0ZSBfcGlwU3RhdGU7CisgICAgUmV0YWlu
UHRyPE5TV2luZG93PiBfcmV0dXJuaW5nV2luZG93OworICAgIE5TUmVjdCBfcmV0dXJuaW5nUmVj
dDsKKyAgICBCT09MIF9wbGF5aW5nOworICAgIEJPT0wgX2RpZFJlcXVlc3RFeGl0aW5nUElQOwor
ICAgIEJPT0wgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKy0gKHZv
aWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZTsKKy0gKHZvaWQpaW52YWxpZGF0ZTsKKworLy8g
VHJhY2tpbmcgdmlkZW8gcGxheWJhY2sgc3RhdGUKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1Np
emUgdmlkZW9EaW1lbnNpb25zOworQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1BsYXlp
bmcpIEJPT0wgcGxheWluZzsKKy0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxheWlu
ZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZTsKKworLy8gSGFuZGxpbmcgUElQ
IHRyYW5zaXRpb25zCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgZGlkUmVx
dWVzdEV4aXRpbmdQSVA7CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzRXhpdGluZ1Rv
U3RhbmRhcmRGdWxsc2NyZWVuKSBCT09MIGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKKwor
LSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNWaWV3ICopdmlkZW9WaWV3IHdpdGhGcmFt
ZTooTlNSZWN0KWZyYW1lIGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKKy0gKHZvaWQpZW50
ZXJQSVA7CistICh2b2lkKWV4aXRQSVA7CistICh2b2lkKWV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6
KE5TUmVjdClyZWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQworCitAc3ludGhl
c2l6ZSBwbGF5aW5nPV9wbGF5aW5nOworQHN5bnRoZXNpemUgdmlkZW9EaW1lbnNpb25zPV92aWRl
b0RpbWVuc2lvbnM7CitAc3ludGhlc2l6ZSBkaWRSZXF1ZXN0RXhpdGluZ1BJUD1fZGlkUmVxdWVz
dEV4aXRpbmdQSVA7CitAc3ludGhlc2l6ZSBleGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW49X2V4
aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMqKXZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYworeworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyA9IHZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKyAgICBfcGlwU3Rh
dGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlCit7CisgICAgW19waXBWaWV3Q29udHJvbGxlciBz
ZXREZWxlZ2F0ZTpuaWxdOworICAgIF9waXBWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBbX3Zp
ZGVvVmlld0NvbnRhaW5lciByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBbX3ZpZGVvVmlld0Nv
bnRhaW5lciBzZXRWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTpuaWxdOworICAgIF92aWRlb1Zp
ZXdDb250YWluZXIgPSBuaWw7CisgICAgX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgPSBu
aWw7CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Ok5vdEluUElQOworICAgIF9kaWRSZXF1ZXN0
RXhpdGluZ1BJUCA9IE5POworICAgIF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBOTzsK
KyAgICBfcmV0dXJuaW5nV2luZG93ID0gbmlsOworICAgIF9yZXR1cm5pbmdSZWN0ID0gTlNaZXJv
UmVjdDsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgW3NlbGYgaW52YWxpZGF0ZUZ1
bGxzY3JlZW5TdGF0ZV07CisgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IG51bGxw
dHI7CisgICAgX3ZpZGVvRGltZW5zaW9ucyA9IE5TWmVyb1NpemU7Cit9CisKKy0gKHZvaWQpdXBk
YXRlSXNQbGF5aW5nOihCT09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXli
YWNrUmF0ZQoreworICAgIF9wbGF5aW5nID0gaXNQbGF5aW5nICYmIHBsYXliYWNrUmF0ZTsKKwor
ICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107Cit9CisKKy0gKHZv
aWQpc2V0VmlkZW9EaW1lbnNpb25zOihOU1NpemUpdmlkZW9EaW1lbnNpb25zCit7CisgICAgX3Zp
ZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uczsKKworICAgIFtfcGlwVmlld0NvbnRyb2xs
ZXIgc2V0QXNwZWN0UmF0aW86X3ZpZGVvRGltZW5zaW9uc107Cit9CisKKy0gKHZvaWQpc2V0VXBQ
SVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFt
ZSBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBBU1NFUlQoIV9waXBWaWV3Q29u
dHJvbGxlcik7CisgICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcik7Cisg
ICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyKTsKKworICAgIF9waXBWaWV3Q29udHJvbGxl
ciA9IGFkb3B0TlMoW2FsbG9jUElQVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAg
ICBbX3BpcFZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtfcGlwVmlld0Nv
bnRyb2xsZXIgc2V0VXNlckNhblJlc2l6ZTpZRVNdOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIg
c2V0UGxheWluZzpfcGxheWluZ107CisgICAgW3NlbGYgc2V0VmlkZW9EaW1lbnNpb25zOk5TRXF1
YWxTaXplcyhfdmlkZW9EaW1lbnNpb25zLCBOU1plcm9TaXplKSA/IGZyYW1lLnNpemUgOiBfdmlk
ZW9EaW1lbnNpb25zXTsKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBf
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQorICAg
ICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgp
LT5zZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5
UmVzaXplQXNwZWN0RmlsbCk7CisKKyAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gYWRvcHROUyhb
W1dlYlZpZGVvVmlld0NvbnRhaW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOworICAg
IFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOnNlbGZd
OworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKKyAgICB2
aWRlb1ZpZXcuZnJhbWUgPSBbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdOworICAgIHZpZGVv
Vmlldy5hdXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0
U2l6YWJsZTsKKworICAgIF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyID0gYWRvcHROUyhb
W05TVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5l
ckNvbnRyb2xsZXIgc2V0VmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpXTsKKyAgICBbd2lu
ZG93LmNvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBwb3Np
dGlvbmVkOk5TV2luZG93QWJvdmUgcmVsYXRpdmVUbzpuaWxdOworfQorCistICh2b2lkKWVudGVy
UElQCit7CisgICAgaWYgKF9waXBTdGF0ZSA9PSBQSVBTdGF0ZTo6SW5QSVApCisgICAgICAgIHJl
dHVybjsKKworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5i
YWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKTsK
KyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlckFzUGljdHVyZUlu
UGljdHVyZTpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07CisgICAgX3BpcFN0
YXRlID0gUElQU3RhdGU6OkluUElQOworfQorCistICh2b2lkKWV4aXRQSVAKK3sKKyAgICBpZiAo
X3BpcFN0YXRlICE9IFBJUFN0YXRlOjpJblBJUCB8fCAhX3BpcFZpZXdDb250cm9sbGVyIHx8ICFf
dmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgX2Rp
ZFJlcXVlc3RFeGl0aW5nUElQID0gWUVTOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJv
bGxlciB2aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xv
cihrQ0dDb2xvckNsZWFyKTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29u
dHJvbGxlcjpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07CisgICAgX3BpcFN0
YXRlID0gUElQU3RhdGU6OkV4aXRpbmdQSVA7Cit9CisKKy0gKHZvaWQpZXhpdFBJUEFuaW1hdGlu
Z1RvUmVjdDooTlNSZWN0KXJlY3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93Cit7CisgICAg
X3JldHVybmluZ1dpbmRvdyA9IHdpbmRvdzsKKyAgICBfcmV0dXJuaW5nUmVjdCA9IHJlY3Q7Cisg
ICAgCisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFJlY3Q6cmVjdF07Cisg
ICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFdpbmRvdzp3aW5kb3ddOworCisg
ICAgW3NlbGYgZXhpdFBJUF07Cit9CisKKy8vIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRl
CisKKy0gKHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRl
b1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXIKK3sKKyAgICBpZiAoIV92aWRlb1Zp
ZXdDb250YWluZXIgfHwgIV9waXBWaWV3Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUX1VOVVNFRCh2aWRlb1ZpZXdDb250YWluZXIsIHZpZGVvVmlld0NvbnRhaW5lciA9
PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsKKworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1v
ZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNj
cmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3Vu
ZHNdKTsKK30KKworLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWlu
ZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcgoreworICAgIGlm
ICghX3ZpZGVvVmlld0NvbnRhaW5lciB8fCAhX3BpcFZpZXdDb250cm9sbGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQodmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250
YWluZXIpOworCisgICAgaWYgKCFbdmlkZW9WaWV3Q29udGFpbmVyIGlzRGVzY2VuZGFudE9mOltf
cGlwVmlld0NvbnRyb2xsZXIgdmlld11dKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmNl
IHRoZSB2aWV3IGlzIG1vdmVkIGludG8gdGhlIHBpcCB2aWV3LCBtYWtlIHN1cmUgaXQgcmVzaXpl
cyB3aXRoIHRoZSBwaXAgdmlldy4KKyAgICB2aWRlb1ZpZXdDb250YWluZXIuZnJhbWUgPSBbdmlk
ZW9WaWV3Q29udGFpbmVyIHN1cGVydmlld10uYm91bmRzOworICAgIHZpZGVvVmlld0NvbnRhaW5l
ci5hdXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6
YWJsZTsKK30KKworLy8gUElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQorCistIChCT09MKXBpcFNo
b3VsZENsb3NlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQo
cGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmICghX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYyB8fCAhX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIF9k
aWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKKyAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLT52aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpLT5mdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUoKTsKKworICAgIHJldHVybiBOTzsKK30KKworLSAodm9pZClwaXBEaWRDbG9zZToo
UElQVmlld0NvbnRyb2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09
IF9waXBWaWV3Q29udHJvbGxlcik7CisKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCgpICYmIF92aWRlb1ZpZXdDb250YWluZXIgJiYgX3JldHVybmluZ1dpbmRvdyAmJiAhTlNFcXVh
bFJlY3RzKF9yZXR1cm5pbmdSZWN0LCBOU1plcm9SZWN0KSkgeworICAgICAgICBbTlNBbmltYXRp
b25Db250ZXh0IHJ1bkFuaW1hdGlvbkdyb3VwOl4oTlNBbmltYXRpb25Db250ZXh0ICpjb250ZXh0
KSB7CisgICAgICAgICAgICBjb250ZXh0LmFsbG93c0ltcGxpY2l0QW5pbWF0aW9uID0gTk87Cisg
ICAgICAgICAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRGcmFtZTpfcmV0dXJuaW5nUmVjdF07
CisgICAgICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRz
XSk7CisgICAgICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKKworICAgICAgICAgICAgW1tfcmV0dXJuaW5nV2lu
ZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkgcG9z
aXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsKKyAgICAgICAgfSBjb21wbGV0
aW9uSGFuZGxlcjpuaWxdOworICAgIH0KKworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjKSB7CisgICAgICAgIGlmICghc2VsZi5pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVl
bikgeworICAgICAgICAgICAgaWYgKFZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1v
ZGVsKCkpIHsKKyAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5v
bmUpOworICAgICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0xheWVy
R3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKworICAgICAgICBpZiAoVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIqIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IF92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCisgICAgICAgICAg
ICBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgfQor
fQorCistICh2b2lkKXBpcEFjdGlvblBsYXk6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCit7Cisg
ICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOworCisgICAg
aWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOworfQorCistICh2
b2lkKXBpcEFjdGlvblBhdXNlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VS
VF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmIChfdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMt
PnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7Cit9CisKKy0gKHZvaWQpcGlw
QWN0aW9uU3RvcDooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CisKKyAgICBpZiAoIV92aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXliYWNrU2Vzc2lv
bk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgaWYgKHBsYXliYWNrU2Vzc2lvbk1vZGVs
KQorICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbC0+cGF1c2UoKTsKKworICAgIC8vIEZJWE1F
IDI1MDk2MTcwOiBTaG91bGQgYW5pbWF0ZSBvbmx5IGlmIHRoZSBwYWdlIHdpdGggdGhlIHZpZGVv
IGlzIHVub2JzY3VyZWQuIEZvciBub3csIGFsd2F5cyBjbG9zZSB3aXRob3V0IGFuaW1hdGlvbi4K
KyAgICBbc2VsZiBleGl0UElQXTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQor
ICAgIDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KQoreworICAgIEFTU0VSVChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNz
aW9uTW9kZWwoKSk7CisgICAgYXV0byBtb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOworICAgIG1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwor
ICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOm1vZGVs
LT5pc1BsYXlpbmcoKSBuZXdQbGF5YmFja1JhdGU6bW9kZWwtPnBsYXliYWNrUmF0ZSgpXTsKK30K
KworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjKCkKK3sKKyAgICBpZiAobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vz
c2lvbk1vZGVsKCkpCisgICAgICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpLT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIGlmIChtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGll
bnQoKnRoaXMpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0Vmlk
ZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQoreworICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2Rl
bDsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlciA9IG9ic2VydmVyOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3
TW9kZSA9IG1fbW9kZSB8IG1vZGU7CisgICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX21vZGUgPSBuZXdNb2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQobV9tb2RlKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3
TW9kZSA9IG1fbW9kZSAmIH5tb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAg
IFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOmlzUGxheWlu
ZyBuZXdQbGF5YmFja1JhdGU6cGxheWJhY2tSYXRlXTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCit7CisgICAgbV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UtPmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOworfQorCitXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDICpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKQoreworICAgIGlmICghbV93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VPYmpDKQorICAgICAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgPSBhZG9wdE5TKFtbV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBh
bGxvY10gaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6dGhpc10pOworCisgICAg
cmV0dXJuIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQy5nZXQoKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxh
eWVySG9zdGVkVmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJl
bnRXaW5kb3csIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
LCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3sKKyAgICBMT0coRnVsbHNj
cmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwg
aW5pdGlhbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwg
dGhpcywgaW5pdGlhbFJlY3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRo
KCksIGluaXRpYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUpOworCisgICAgVU5V
U0VEX1BBUkFNKGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7CisgICAgQVNTRVJUKG1v
ZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUlu
UGljdHVyZSk7CisKKyAgICBtX21vZGUgPSBtb2RlOworCisgICAgW3ZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU9iakMoKSBzZXRVcFBJUEZvclZpZGVvVmlldzombGF5ZXJIb3N0ZWRWaWV3IHdpdGhG
cmFtZTooTlNSZWN0KWluaXRpYWxSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107CisKKyAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAg
ICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4o
KTsKKyAgICB9KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVy
RnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIGlmIChtb2RlKCkg
PT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSkgeworICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGVudGVy
UElQXTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICAg
ICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigp
IHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6WUVTXTsKKyNlbmRpZgorCisgICAgICAgIGlmICht
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5h
bFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKCVwKSwgZmluYWxSZWN0
OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGZpbmFsUmVjdC54KCks
IGZpbmFsUmVjdC55KCksIGZpbmFsUmVjdC53aWR0aCgpLCBmaW5hbFJlY3QuaGVpZ2h0KCksIHBh
cmVudFdpbmRvdyk7CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
CisgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdl
cigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOworI2VuZGlmCisKKyAgICBpZiAoW21f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChmaW5hbFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBb
bV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOworICAgIGVsc2UKKyAg
ICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5n
VG9SZWN0OmZpbmFsUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9N
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQorewor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVs
bHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoJXApLCBtb2RlOiVkIiwgdGhpcywgbW9kZSk7
CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1
cmVJblBpY3R1cmVBY3RpdmU6Tk9dOworI2VuZGlmCisKKyAgICBpZiAoW21fd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCisgICAgICAgIHJldHVy
bjsKKworICAgIGJvb2wgaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBtb2RlID09IEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkOworICAgIC8v
IE9uIE1hYywgc3RhbmRhcmQgZnVsbHNjcmVlbiBpcyBoYW5kbGVkIGJ5IHRoZSBGdWxsc2NyZWVu
IEFQSSBhbmQgbm90IGJ5IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuCisgICAgLy8gSnVzdCB1cGRh
dGUgbV9tb2RlIGRpcmVjdGx5IHRvIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVN0YW5kYXJkIGluIHRoYXQgY2FzZSB0byBrZWVwCisgICAgLy8gbV9tb2RlIGluIHN5
bmMgd2l0aCB0aGUgZnVsbHNjcmVlbiBtb2RlIGluIEhUTUxNZWRpYUVsZW1lbnQuCisgICAgaWYg
KGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKQorICAgICAgICBtX21vZGUgPSBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsKKworICAgIFttX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgc2V0RXhpdGluZ1RvU3RhbmRhcmRGdWxsc2Ny
ZWVuOmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlz
KTsKKworICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07Cisg
ICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlRnVsbHNjcmVl
blN0YXRlXTsKKworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKK3sKKyAgICBM
T0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgl
cCkiLCB0aGlzKTsKKworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7CisgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7CisKKyAgICBjbGVhbnVwRnVsbHNjcmVlbigp
OworCisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlXTsK
KyAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBuaWw7Cit9CisKKyNpZiAh
TE9HX0RJU0FCTEVECitzdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKK3sK
KyAgICByZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKK30KKyNlbmRpZgorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wg
dmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRv
dykKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQs
ICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUp
LCBpbmxpbmVSZWN0LngoKSwgaW5saW5lUmVjdC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5s
aW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKKworICAgIGlmICghdmlzaWJsZSkgewor
ICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKHBhcmVudFdpbmRvdyk7CisgICAgW21f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OihO
U1JlY3QpaW5saW5lUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFi
bGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNv
bnN0IFN0cmluZyYpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKCVwKSwgZW5hYmxlZDolcyIsIHRoaXMs
IGJvb2xTdHJpbmcoZW5hYmxlZCkpOworCisgICAgaWYgKGVuYWJsZWQgJiYgbV9tb2RlID09IEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUp
CisgICAgICAgIGV4aXRGdWxsc2NyZWVuKEludFJlY3QoKSwgbmlsKTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQor
eworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNW
aWRlb0NoYW5nZWQoJXApOiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbykpOworCisgICAg
aWYgKCFoYXNWaWRlbykKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9N
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBMT0coRnVsbHNjcmVl
biwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCgl
cCksIHdpZHRoOiUuMGYsIGhlaWdodDolLjBmIiwgdGhpcywgdmlkZW9EaW1lbnNpb25zLndpZHRo
KCksIHZpZGVvRGltZW5zaW9ucy5oZWlnaHQoKSk7CisKKyAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0
IGNhbiBiZSB6ZXJvIHdoZW4gd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgdmlkZW8gdG8g
YW5vdGhlci4gSWdub3JlIHplcm8gdmFsdWVzLgorICAgIGlmICghdmlkZW9EaW1lbnNpb25zLmlz
WmVybygpKQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNldFZp
ZGVvRGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOworfQorCitib29sIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgJiYgW21fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQyBpc1BsYXlpbmddOworfQorCitib29sIHN1cHBvcnRzUGljdHVyZUlu
UGljdHVyZSgpCit7CisgICAgcmV0dXJuIFBJUExpYnJhcnkoKSAmJiBnZXRQSVBWaWV3Q29udHJv
bGxlckNsYXNzKCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oCmluZGV4IDcwNWQ2
M2I0OGE5OWFlZTFlODkzOTY1NjI0MDEzMjI0M2U0NzJjNGQuLjc2N2YwMTI4NzMwMDAxYWI0ZDc5
ZmU2MDNjMTIyNzc0YWY3MTNlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzsKIHN0cnVjdCBNZWRpYVNlbGVjdGlvbk9wdGlvbjsKIH0KIApAQCAtNTgsMTAgKzU4
LDEwIEBAIFdFQkNPUkVfRVhQT1JUCiAgICAgZmxvYXQgX3JhdGU7CiAgICAgQk9PTCBfY2FuVG9n
Z2xlUGxheWJhY2s7CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjPiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IF9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM7CiB9CiAKLUBwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMqIHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKK0Bwcm9w
ZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqIHBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIEBwcm9wZXJ0eSAocmVhZHdyaXRlKSBOU1RpbWVJbnRl
cnZhbCBjb250ZW50RHVyYXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFk
d3JpdGUpIEFWVmFsdWVUaW1pbmcgKnRpbWluZzsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1Rp
bWVJbnRlcnZhbCBzZWVrVG9UaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4IDdiNDRhMDc0ZGYy
OTgwNjJmODA1M2U5ZWJjN2QzMTQ1MWU4MmU1ZTUuLmFiYmRiNTI3NzIwNzI0YWZlNTQ3MzExNzQw
OGI0MzdhMDk0OTJhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KQEAgLTI5LDggKzI5LDggQEAKICNp
ZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkgJiYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogCiAjaW1wb3J0ICJNZWRpYVNlbGVj
dGlvbk9wdGlvbi5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgi
Ci0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgog
I2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIApAQCAtNTksOCArNTksOCBAQCBAc3ludGhlc2l6ZSBjYW5Ub2dnbGVQaWN0dXJlSW5QaWN0
dXJlOwogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0
UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNl
dFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxwdHIpOwogICAgIFtzdXBlciBkZWFsbG9jXTsK
IH0KIApAQCAtOTMsNyArOTMsNyBAQCAtICh2b2lkKXNlZWtUb1RpbWU6KE5TVGltZUludGVydmFs
KXRpbWUgdG9sZXJhbmNlQmVmb3JlOihOU1RpbWVJbnRlcnZhbCl0b2xlcmFuYwogewogICAgIFVO
VVNFRF9QQVJBTSh0b2xlcmFuY2VCZWZvcmUpOwogICAgIFVOVVNFRF9QQVJBTSh0b2xlcmFuY2VB
ZnRlcik7Ci0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+c2Vla1RvVGltZSh0aW1lKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWVrVG9UaW1lKHRpbWUpOwogfQog
CiAtICh2b2lkKWNhbmNlbFRodW1ibmFpbEFuZEF1ZGlvQW1wbGl0dWRlU2FtcGxlR2VuZXJhdGlv
bgpAQCAtMTI1LDEyICsxMjUsMTIgQEAgLSAoQk9PTCljYW5CZWdpblRvdWNoQmFyU2NydWJiaW5n
CiAKIC0gKHZvaWQpYmVnaW5Ub3VjaEJhclNjcnViYmluZwogewotICAgIF93ZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy0+YmVnaW5TY3J1YmJpbmcoKTsKIH0KIAogLSAodm9pZCllbmRUb3VjaEJh
clNjcnViYmluZwogewotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPmVuZFNj
cnViYmluZygpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPmVuZFNjcnViYmlu
ZygpOwogfQogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTMwMApA
QCAtMTkyLDcgKzE5Miw3IEBAIC0gKHZvaWQpc2V0Q3VycmVudEF1ZGlvVG91Y2hCYXJNZWRpYVNl
bGVjdGlvbk9wdGlvbjooQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0CiAgICAgaWYgKGF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb24gJiYgX2F1ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpCiAgICAgICAgIGluZGV4ID0gW19hdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25z
IGluZGV4T2ZPYmplY3Q6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbl07CiAKLSAgICBfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9N
QVgpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCktPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4
IDogVUlOVDY0X01BWCk7CiB9CiAKIC0gKE5TQXJyYXk8QVZUb3VjaEJhck1lZGlhU2VsZWN0aW9u
T3B0aW9uICo+ICopbGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zCkBAIC0yMjIs
NyArMjIyLDcgQEAgLSAodm9pZClzZXRDdXJyZW50TGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rp
b25PcHRpb246KEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk8KICAgICBpZiAobGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uICYmIF9sZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMp
CiAgICAgICAgIGluZGV4ID0gW19sZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMg
aW5kZXhPZk9iamVjdDpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25dOwogCi0gICAgX3dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2Vs
ZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2
NF9NQVgpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8g
aW5kZXggOiBVSU5UNjRfTUFYKTsKIH0KIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMzAwCkBAIC0yOTIsNDcgKzI5Miw0NyBAQCAtICh2b2lkKXNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbkluZGV4OihOU1VJbnRlZ2VyKXNlbGVjdGVkSW5kZXgKICAgICBbc2VsZiBk
aWRDaGFuZ2VWYWx1ZUZvcktleTpAImN1cnJlbnRMZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlv
bk9wdGlvbiJdOwogfQogCi0tIChXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYworLSAoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
KilwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKIHsKLSAgICByZXR1cm4gX3dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5nZXQoKTsKKyAgICByZXR1cm4gX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy5nZXQoKTsKIH0KIAotLSAodm9pZClzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopd2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjCistICh2b2lkKXNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzoo
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKilwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMK
IHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9PSB3ZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMgPT0gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAgICAgICAgX3dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0
cik7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgICAgIF9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxw
dHIpOwogCi0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9IHdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjID0g
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwogCi0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMt
PnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKHNlbGYpOworICAgIGlmIChfcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5z
ZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihzZWxmKTsKIH0KIAogLSAodm9pZCl0b2dnbGVQbGF5
YmFjawogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0g
ICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjICYmIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lv
bk1vZGVsKCkpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBsYXlTdGF0ZSgpOwogfQogCiAtICh2b2lkKXNldFBsYXlp
bmc6KEJPT0wpcGxheWluZwogewotICAgIGlmICghX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYyB8fCAhX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwoKSkKKyAgICBpZiAoIV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgfHwgIV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEJPT0wgaXNDdXJyZW50bHlQbGF5aW5nID0gc2VsZi5wbGF5aW5n
OwogICAgIGlmICghaXNDdXJyZW50bHlQbGF5aW5nICYmIHBsYXlpbmcpCi0gICAgICAgIF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBs
YXkoKTsKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNz
aW9uTW9kZWwoKS0+cGxheSgpOwogICAgIGVsc2UgaWYgKGlzQ3VycmVudGx5UGxheWluZyAmJiAh
cGxheWluZykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKIH0KIAogLSAoQk9P
TClpc1BsYXlpbmcKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAm
JiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpKQotICAgICAgICByZXR1cm4gX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+aXNQbGF5aW5nKCk7CisgICAgaWYgKF9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMgJiYgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgcmV0dXJuIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmlzUGxheWluZygpOwogCiAgICAgcmV0dXJu
IE5POwogfQpAQCAtMzQwLDggKzM0MCw4IEBAIC0gKEJPT0wpaXNQbGF5aW5nCiAjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDAKIC0gKHZvaWQpdG9nZ2xlUGljdHVy
ZUluUGljdHVyZQogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYm
IF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICBpZiAoX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5w
bGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7CiB9
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiODEyNGMxZTFiZmUwMTViZDI5YzBlZjA3YTcwZTM3MWMxOWI1MWU2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0KLSNpbmNs
dWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1PQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xh
c3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw7Ci0KLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBmaW5hbAotICAgIDogcHVibGljIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYz4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0gICAgdmlydHVhbCB+V2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbDsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbCB7IH0KLQotICAgIC8v
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
dXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1
cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLypjdXJyZW50VGltZSovLCBkb3VibGUgLyphbmNob3JU
aW1lKi8pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAv
KmlzUGxheWluZyovLCBmbG9hdCAvKnBsYXliYWNrUmF0ZSovKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91
YmxlIC8qbGFzdE1vZGlmaWVkVGltZSovLCBkb3VibGUgLypsaXZlVXBkYXRlSW50ZXJ2YWwqLykg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8s
IHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyovLCB1aW50NjRfdCAvKnNlbGVjdGVkSW5kZXgq
LykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8s
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29u
c3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICovKSBmaW5hbDsKLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5z
dXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGxheUJhY2tDb250cm9sc01hbmFn
ZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2Vi
UGxheWJhY2tDb250cm9sc01hbmFnZXIgKnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0jZW5k
aWYKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2NydWJiaW5nKCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKLSAgICBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51bGxwdHIgfTsK
LSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXIgKm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgIHsgbnVsbHB0ciB9
OwotCi0gICAgdm9pZCB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUg
Y3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29s
IGlzUGxheWluZyk7Ci0jZW5kaWYKLQotfTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0NGE2MWM1MGUwMTYyYzNjMTBl
NzE3NWQ4MWM2ZjJhMjQ4NGNlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkKLQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNpbXBvcnQgIkludFJlY3Qu
aCIKLSNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0ICJNZWRpYVRpbWVB
VkZvdW5kYXRpb24uaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
IgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgotCi0jaW1wb3J0ICJDb3JlTWVkaWFT
b2Z0TGluay5oIgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09GVF9M
SU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8V2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjPiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZShX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi17Ci0gICAgYXV0byBpbnRlcmZhY2UgPSBh
ZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhtb2RlbCkpOwotICAg
IG1vZGVsLmFkZENsaWVudChpbnRlcmZhY2UpOwotICAgIHJldHVybiBpbnRlcmZhY2U7Ci19Ci0K
LVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKLSAgICA6IG1fcGxheWJhY2tT
ZXNzaW9uTW9kZWwoJm1vZGVsKQotewotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKQotewotICAgIGludmFsaWRhdGUo
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hh
bmdlZChkb3VibGUgZHVyYXRpb24pCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQotICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFn
ZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotCi0gICAgY29udHJvbHNNYW5hZ2VyLmNv
bnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotCi0gICAgLy8gRklYTUU6IFdlIHRha2UgdGhpcyBh
cyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHksIGJ1dCB0aGF0IGlzIG5vdCBu
ZWNlc3NhcmlseSB0cnVlLgotICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFibGVkQXVkaW8gPSBZ
RVM7Ci0gICAgY29udHJvbHNNYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IFlFUzsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKGR1cmF0aW9uKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGlt
ZSwgZG91YmxlIGFuY2hvclRpbWUpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQotICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFn
ZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIHVwZGF0ZVBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyVGltaW5nKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lLCBjb250cm9sc01hbmFnZXIu
cmF0ZSwgY29udHJvbHNNYW5hZ2VyLnBsYXlpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
Y3VycmVudFRpbWUpOwotICAgIFVOVVNFRF9QQVJBTShhbmNob3JUaW1lKTsKLSNlbmRpZgotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cmF0ZUNoYW5nZWQoYm9vbCBp
c1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIqIGNvbnRy
b2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgW2NvbnRyb2xzTWFu
YWdlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKLSAgICBbY29udHJv
bHNNYW5hZ2VyIHNldFBsYXlpbmc6aXNQbGF5aW5nXTsKLSAgICB1cGRhdGVQbGF5YmFja0NvbnRy
b2xzTWFuYWdlclRpbWluZyhtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSwgcGxheWJhY2tSYXRlLCBpc1BsYXlpbmcpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oaXNQbGF5aW5nKTsKLSAgICBVTlVTRURfUEFSQU0ocGxheWJhY2tSYXRlKTsKLSNl
bmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YmVnaW5TY3J1
YmJpbmcoKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAg
ICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6IDAsIFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgMCwgZmFsc2UpOwotI2VuZGlmCi0g
ICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+YmVnaW5TY3J1YmJpbmcoKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuZFNjcnViYmluZygpCi17Ci0gICAg
d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0KLSNpZiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiB0aW1lUmFuZ2VzVG9BcnJheShjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2Vz
KQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmFuZ2VBcnJheSA9IGFkb3B0TlMo
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewotICAgICAgICBjb25zdCBQbGF0Zm9y
bVRpbWVSYW5nZXMmIHJhbmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCk7Ci0gICAgICAgIENNVGlt
ZVJhbmdlIHJhbmdlID0gQ01UaW1lUmFuZ2VNYWtlKHRvQ01UaW1lKHJhbmdlcy5zdGFydChpKSks
IHRvQ01UaW1lKHJhbmdlcy5lbmQoaSkpKTsKLSAgICAgICAgW3JhbmdlQXJyYXkgYWRkT2JqZWN0
OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJhbmdlQXJyYXk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFu
Z2VzLCBkb3VibGUsIGRvdWJsZSkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0U2Vla2FibGVUaW1l
UmFuZ2VzOnRpbWVSYW5nZXNUb0FycmF5KHRpbWVSYW5nZXMpLmdldCgpXTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHRpbWVSYW5nZXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0g
ICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxl
Y3RlZEluZGV4KV07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICBVTlVT
RURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQot
ICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihz
ZWxlY3RlZEluZGV4KV07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICBV
TlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4OnNlbGVjdGVkSW5kZXhdOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Vs
ZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAg
ICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eDpzZWxlY3RlZEluZGV4XTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgp
OwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKLXsKLSNpZiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNN
YW5hZ2VyKCkgc2V0Q2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZTohZW5hYmxlZF07Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaWYgKCFtX3BsYXliYWNr
U2Vzc2lvbk1vZGVsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBu
dWxscHRyOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5zdXJl
Q29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01B
TkFHRVIpCi0gICAgcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSNlbmRpZgotfQotCi0jaWYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotCi1XZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciAqV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpwbGF5QmFja0NvbnRy
b2xzTWFuYWdlcigpCi17Ci0gICAgcmV0dXJuIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXI7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFja0NvbnRy
b2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlcikKLXsKLSAgICBt
X3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyID0gbWFuYWdlcjsKLQotICAgIGlmICghbWFuYWdlciB8
fCAhbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNUaW1l
SW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVttYW5hZ2VyIHJhdGVdID8gTkFOIDogW1tOU1By
b2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwotICAgIG1hbmFnZXIudGltaW5n
ID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOm1f
cGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgYW5jaG9yVGltZVN0YW1wOmFuY2hv
clRpbWVTdGFtcCByYXRlOjBdOwotICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1fcGxheWJhY2tTZXNz
aW9uTW9kZWwtPmR1cmF0aW9uKCk7Ci0gICAgbWFuYWdlci5jb250ZW50RHVyYXRpb24gPSBkdXJh
dGlvbjsKLSAgICBtYW5hZ2VyLmhhc0VuYWJsZWRBdWRpbyA9IGR1cmF0aW9uID4gMDsKLSAgICBt
YW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IGR1cmF0aW9uID4gMDsKLSAgICBtYW5hZ2VyLnJhdGUg
PSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKSA/IG1fcGxheWJhY2tTZXNzaW9u
TW9kZWwtPnBsYXliYWNrUmF0ZSgpIDogMC47Ci0gICAgbWFuYWdlci5zZWVrYWJsZVRpbWVSYW5n
ZXMgPSB0aW1lUmFuZ2VzVG9BcnJheShtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZWVrYWJsZVJh
bmdlcygpKS5nZXQoKTsKLSAgICBtYW5hZ2VyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwotICAg
IG1hbmFnZXIucGxheWluZyA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpOwot
ICAgIFttYW5hZ2VyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm1fcGxheWJhY2tTZXNz
aW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6
c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRp
YVNlbGVjdGVkSW5kZXgoKSldOwotICAgIFttYW5hZ2VyIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSldOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6dXBkYXRlUGxheWJhY2tDb250cm9sc01h
bmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91Ymxl
IHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpCi17Ci0gICAgV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIgKm1hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIGlmICgh
bWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwg
Km1vZGVsID0gd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKLSAgICBpZiAoIW1vZGVsKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgZWZmZWN0aXZlQW5jaG9yVGltZSA9IHBsYXliYWNr
UmF0ZSA/IGFuY2hvclRpbWUgOiBOQU47Ci0gICAgZG91YmxlIGVmZmVjdGl2ZVBsYXliYWNrUmF0
ZSA9IHBsYXliYWNrUmF0ZTsKLSAgICBpZiAoIWlzUGxheWluZwotICAgICAgICB8fCBtb2RlbC0+
aXNTY3J1YmJpbmcoKQotICAgICAgICB8fCAobWFuYWdlci5yYXRlID4gMCAmJiBtb2RlbC0+cGxh
eWJhY2tTdGFydGVkVGltZSgpID49IGN1cnJlbnRUaW1lKQotICAgICAgICB8fCAobWFuYWdlci5y
YXRlIDwgMCAmJiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGltZSgpIDw9IGN1cnJlbnRUaW1lKSkK
LSAgICAgICAgZWZmZWN0aXZlUGxheWJhY2tSYXRlID0gMDsKLQotICAgIG1hbmFnZXIudGltaW5n
ID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1
cnJlbnRUaW1lIGFuY2hvclRpbWVTdGFtcDplZmZlY3RpdmVBbmNob3JUaW1lIHJhdGU6ZWZmZWN0
aXZlUGxheWJhY2tSYXRlXTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09O
VFJPTFNfTUFOQUdFUikKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NTFiMmNlM2EyZTllNDU1OWExMjEzNjA0ZDEyNjBiZmU5
MzBiNGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbmNsdWRlICJXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1PQkpDX0NMQVNTIE5TV2luZG93OwotT0JKQ19DTEFTUyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWNPYmpDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xh
c3MgRmxvYXRTaXplOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwotY2xh
c3MgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7Ci0KLWNsYXNzIFdFQkNPUkVfRVhQ
T1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYwotICAgIDogcHVibGljIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM+IHsKLQotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjPiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygp
OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB3ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBt
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwqKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ciogd2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIqKTsKLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJh
Y2tSYXRlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBv
dmVycmlkZTsKLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZp
bmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBs
YXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFy
ZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJv
b2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGVudGVyRnVsbHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxz
Y3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRv
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGludmFsaWRhdGUoKTsKLSAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3Jl
ZW4oKSB7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGlu
ZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJl
bnRXaW5kb3cpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2Vy
KCk7Ci0KLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9t
b2RlICYgbW9kZTsgfQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQot
ICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpOwotICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSk7Ci0KLSAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3Jl
ZW4oKSBjb25zdDsKLQotICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJ
blBpY3R1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgYXBwbGljYXRpb25E
aWRCZWNvbWVBY3RpdmUoKSB7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hY09iakMgKnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKTsKLQot
cHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjJik7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYz4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Ci0gICAgV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVs
bHB0ciB9OwotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
X21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07
Ci0gICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM+IG1fd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQzsKLX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmU2NDJj
OGVjMGNiZjk0NzVlODQ5NmRmN2M4NzAyYzI0ODY1NTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw1NzMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgi
Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkK
LQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNpbXBvcnQgIkludFJlY3QuaCIKLSNpbXBvcnQgIkxv
Z2dpbmcuaCIKLSNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgotI2ltcG9ydCAiUElQ
U1BJLmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgi
Ci0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAi
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUu
aD4KLQotI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKLQotU09GVF9MSU5LX0ZSQU1FV09S
S19PUFRJT05BTChBVktpdCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1
ZVRpbWluZykKLQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKFBJUCkKLVNP
RlRfTElOS19DTEFTU19PUFRJT05BTChQSVAsIFBJUFZpZXdDb250cm9sbGVyKQotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotQGNsYXNzIFdlYlZpZGVvVmlld0NvbnRhaW5lcjsKLQotQHBy
b3RvY29sIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIDxOU09iamVjdD4KLQotLSAodm9p
ZClib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRh
aW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcjsKLS0gKHZvaWQpc3VwZXJ2aWV3RGlkQ2hhbmdlRm9y
VmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250
YWluZXI7Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJWaWRlb1ZpZXdDb250YWluZXIgOiBOU1Zp
ZXcgewotICAgIGlkIDxXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gX3ZpZGVvVmlld0Nv
bnRhaW5lckRlbGVnYXRlOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpZCA8
V2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRl
OwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb1ZpZXdDb250YWluZXIKLQotQHN5
bnRoZXNpemUgdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU9X3ZpZGVvVmlld0NvbnRhaW5lckRl
bGVnYXRlOwotCi0tICh2b2lkKXJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXplOihOU1NpemUpb2xk
Qm91bmRzU2l6ZQotewotICAgIFtzdXBlciByZXNpemVXaXRoT2xkU3VwZXJ2aWV3U2l6ZTpvbGRC
b3VuZHNTaXplXTsKLQotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgYm91bmRzRGlk
Q2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNlbGZdOwotfQotCi0tICh2b2lkKXZpZXdEaWRN
b3ZlVG9TdXBlcnZpZXcKLXsKLSAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1N1cGVydmlld107Ci0K
LSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIHN1cGVydmlld0RpZENoYW5nZUZvclZp
ZGVvVmlld0NvbnRhaW5lcjpzZWxmXTsKLX0KLQotQGVuZAotCi1lbnVtIGNsYXNzIFBJUFN0YXRl
IHsKLSAgICBOb3RJblBJUCwKLSAgICBJblBJUCwKLSAgICBFeGl0aW5nUElQCi19OwotCi1AaW50
ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgOiBOU09iamVjdCA8UElQ
Vmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSwgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IHsK
LSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqIF93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM7Ci0gICAgTlNTaXplIF92aWRlb0RpbWVuc2lvbnM7Ci0gICAg
UmV0YWluUHRyPFBJUFZpZXdDb250cm9sbGVyPiBfcGlwVmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0
YWluUHRyPE5TVmlld0NvbnRyb2xsZXI+IF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyOwot
ICAgIFJldGFpblB0cjxXZWJWaWRlb1ZpZXdDb250YWluZXI+IF92aWRlb1ZpZXdDb250YWluZXI7
Ci0gICAgUElQU3RhdGUgX3BpcFN0YXRlOwotICAgIFJldGFpblB0cjxOU1dpbmRvdz4gX3JldHVy
bmluZ1dpbmRvdzsKLSAgICBOU1JlY3QgX3JldHVybmluZ1JlY3Q7Ci0gICAgQk9PTCBfcGxheWlu
ZzsKLSAgICBCT09MIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUDsKLSAgICBCT09MIF9leGl0aW5nVG9T
dGFuZGFyZEZ1bGxzY3JlZW47Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzooV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjKil3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7Ci0tICh2b2lkKWludmFsaWRh
dGVGdWxsc2NyZWVuU3RhdGU7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0KLS8vIFRyYWNraW5nIHZp
ZGVvIHBsYXliYWNrIHN0YXRlCi1AcHJvcGVydHkgKG5vbmF0b21pYykgTlNTaXplIHZpZGVvRGlt
ZW5zaW9uczsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNQbGF5aW5nKSBCT09MIHBs
YXlpbmc7Ci0tICh2b2lkKXVwZGF0ZUlzUGxheWluZzooQk9PTClpc1BsYXlpbmcgbmV3UGxheWJh
Y2tSYXRlOihmbG9hdClwbGF5YmFja1JhdGU7Ci0KLS8vIEhhbmRsaW5nIFBJUCB0cmFuc2l0aW9u
cwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGRpZFJlcXVlc3RFeGl0aW5n
UElQOwotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc0V4aXRpbmdUb1N0YW5kYXJkRnVs
bHNjcmVlbikgQk9PTCBleGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47Ci0KLS0gKHZvaWQpc2V0
VXBQSVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClm
cmFtZSBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7Ci0tICh2b2lkKWVudGVyUElQOwotLSAo
dm9pZClleGl0UElQOwotLSAodm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpcmVj
dCBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMKLQotQHN5bnRoZXNpemUgcGxheWlu
Zz1fcGxheWluZzsKLUBzeW50aGVzaXplIHZpZGVvRGltZW5zaW9ucz1fdmlkZW9EaW1lbnNpb25z
OwotQHN5bnRoZXNpemUgZGlkUmVxdWVzdEV4aXRpbmdQSVA9X2RpZFJlcXVlc3RFeGl0aW5nUElQ
OwotQHN5bnRoZXNpemUgZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuPV9leGl0aW5nVG9TdGFu
ZGFyZEZ1bGxzY3JlZW47Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzooV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Kil3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMgPSB3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7Ci0gICAgX3Bp
cFN0YXRlID0gUElQU3RhdGU6Ok5vdEluUElQOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZQotewotICAgIFtfcGlwVmlld0NvbnRyb2xs
ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBfcGlwVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAg
W192aWRlb1ZpZXdDb250YWluZXIgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgW192aWRlb1Zp
ZXdDb250YWluZXIgc2V0VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU6bmlsXTsKLSAgICBfdmlk
ZW9WaWV3Q29udGFpbmVyID0gbmlsOwotICAgIF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVy
ID0gbmlsOwotICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpOb3RJblBJUDsKLSAgICBfZGlkUmVx
dWVzdEV4aXRpbmdQSVAgPSBOTzsKLSAgICBfZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuID0g
Tk87Ci0gICAgX3JldHVybmluZ1dpbmRvdyA9IG5pbDsKLSAgICBfcmV0dXJuaW5nUmVjdCA9IE5T
WmVyb1JlY3Q7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIFtzZWxmIGludmFsaWRh
dGVGdWxsc2NyZWVuU3RhdGVdOwotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMg
PSBudWxscHRyOwotICAgIF92aWRlb0RpbWVuc2lvbnMgPSBOU1plcm9TaXplOwotfQotCi0tICh2
b2lkKXVwZGF0ZUlzUGxheWluZzooQk9PTClpc1BsYXlpbmcgbmV3UGxheWJhY2tSYXRlOihmbG9h
dClwbGF5YmFja1JhdGUKLXsKLSAgICBfcGxheWluZyA9IGlzUGxheWluZyAmJiBwbGF5YmFja1Jh
dGU7Ci0KLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFBsYXlpbmc6X3BsYXlpbmddOwotfQot
Ci0tICh2b2lkKXNldFZpZGVvRGltZW5zaW9uczooTlNTaXplKXZpZGVvRGltZW5zaW9ucwotewot
ICAgIF92aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnM7Ci0KLSAgICBbX3BpcFZpZXdD
b250cm9sbGVyIHNldEFzcGVjdFJhdGlvOl92aWRlb0RpbWVuc2lvbnNdOwotfQotCi0tICh2b2lk
KXNldFVwUElQRm9yVmlkZW9WaWV3OihOU1ZpZXcgKil2aWRlb1ZpZXcgd2l0aEZyYW1lOihOU1Jl
Y3QpZnJhbWUgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgQVNTRVJUKCFfcGlw
Vmlld0NvbnRyb2xsZXIpOwotICAgIEFTU0VSVCghX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xs
ZXIpOwotICAgIEFTU0VSVCghX3ZpZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAgICBfcGlwVmlld0Nv
bnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY1BJUFZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0
XSk7Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3Bp
cFZpZXdDb250cm9sbGVyIHNldFVzZXJDYW5SZXNpemU6WUVTXTsKLSAgICBbX3BpcFZpZXdDb250
cm9sbGVyIHNldFBsYXlpbmc6X3BsYXlpbmddOwotICAgIFtzZWxmIHNldFZpZGVvRGltZW5zaW9u
czpOU0VxdWFsU2l6ZXMoX3ZpZGVvRGltZW5zaW9ucywgTlNaZXJvU2l6ZSkgPyBmcmFtZS5zaXpl
IDogX3ZpZGVvRGltZW5zaW9uc107Ci0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpOwotCi0gICAgX3ZpZGVv
Vmlld0NvbnRhaW5lciA9IGFkb3B0TlMoW1tXZWJWaWRlb1ZpZXdDb250YWluZXIgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6ZnJhbWVdKTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1Zp
ZXdDb250YWluZXJEZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBhZGRT
dWJ2aWV3OnZpZGVvVmlld107Ci0gICAgdmlkZW9WaWV3LmZyYW1lID0gW192aWRlb1ZpZXdDb250
YWluZXIgYm91bmRzXTsKLSAgICB2aWRlb1ZpZXcuYXV0b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dp
ZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGU7Ci0KLSAgICBfdmlkZW9WaWV3Q29udGFp
bmVyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tOU1ZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7
Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHNldFZpZXc6X3ZpZGVvVmlld0Nv
bnRhaW5lci5nZXQoKV07Ci0gICAgW3dpbmRvdy5jb250ZW50VmlldyBhZGRTdWJ2aWV3Ol92aWRl
b1ZpZXdDb250YWluZXIuZ2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86
bmlsXTsKLX0KLQotLSAodm9pZCllbnRlclBJUAotewotICAgIGlmIChfcGlwU3RhdGUgPT0gUElQ
U3RhdGU6OkluUElQKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5l
ckNvbnRyb2xsZXIgdmlld10ubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gQ0dDb2xvckdldENvbnN0
YW50Q29sb3Ioa0NHQ29sb3JCbGFjayk7Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBwcmVzZW50
Vmlld0NvbnRyb2xsZXJBc1BpY3R1cmVJblBpY3R1cmU6X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRy
b2xsZXIuZ2V0KCldOwotICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpJblBJUDsKLX0KLQotLSAo
dm9pZClleGl0UElQCi17Ci0gICAgaWYgKF9waXBTdGF0ZSAhPSBQSVBTdGF0ZTo6SW5QSVAgfHwg
IV9waXBWaWV3Q29udHJvbGxlciB8fCAhX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKLSAgICBb
X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgdmlld10ubGF5ZXIuYmFja2dyb3VuZENvbG9y
ID0gQ0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JDbGVhcik7Ci0gICAgW19waXBWaWV3
Q29udHJvbGxlciBkaXNtaXNzVmlld0NvbnRyb2xsZXI6X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRy
b2xsZXIuZ2V0KCldOwotICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpFeGl0aW5nUElQOwotfQot
Ci0tICh2b2lkKWV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2luZG93OihO
U1dpbmRvdyAqKXdpbmRvdwotewotICAgIF9yZXR1cm5pbmdXaW5kb3cgPSB3aW5kb3c7Ci0gICAg
X3JldHVybmluZ1JlY3QgPSByZWN0OwotICAgIAotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0
UmVwbGFjZW1lbnRSZWN0OnJlY3RdOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UmVwbGFj
ZW1lbnRXaW5kb3c6d2luZG93XTsKLQotICAgIFtzZWxmIGV4aXRQSVBdOwotfQotCi0vLyBXZWJW
aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZQotCi0tICh2b2lkKWJvdW5kc0RpZENoYW5nZUZvclZp
ZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFp
bmVyCi17Ci0gICAgaWYgKCFfdmlkZW9WaWV3Q29udGFpbmVyIHx8ICFfcGlwVmlld0NvbnRyb2xs
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVF9VTlVTRUQodmlkZW9WaWV3Q29udGFp
bmVyLCB2aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAgICBp
ZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAgICAgICBfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRW
aWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7Ci19Ci0KLS0gKHZv
aWQpc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdD
b250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXIKLXsKLSAgICBpZiAoIV92aWRlb1ZpZXdDb250
YWluZXIgfHwgIV9waXBWaWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKHZpZGVvVmlld0NvbnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsKLQotICAgIGlm
ICghW3ZpZGVvVmlld0NvbnRhaW5lciBpc0Rlc2NlbmRhbnRPZjpbX3BpcFZpZXdDb250cm9sbGVy
IHZpZXddXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25jZSB0aGUgdmlldyBpcyBtb3Zl
ZCBpbnRvIHRoZSBwaXAgdmlldywgbWFrZSBzdXJlIGl0IHJlc2l6ZXMgd2l0aCB0aGUgcGlwIHZp
ZXcuCi0gICAgdmlkZW9WaWV3Q29udGFpbmVyLmZyYW1lID0gW3ZpZGVvVmlld0NvbnRhaW5lciBz
dXBlcnZpZXddLmJvdW5kczsKLSAgICB2aWRlb1ZpZXdDb250YWluZXIuYXV0b3Jlc2l6aW5nTWFz
ayA9IE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGU7Ci19Ci0KLS8vIFBJ
UFZpZXdDb250cm9sbGVyRGVsZWdhdGUKLQotLSAoQk9PTClwaXBTaG91bGRDbG9zZTooUElQVmll
d0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBW
aWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMgfHwgIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKCkpCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICBfZGlkUmVxdWVz
dEV4aXRpbmdQSVAgPSBZRVM7Ci0gICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+
d2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKS0+ZnVsbHNjcmVlbk1heVJldHVyblRv
SW5saW5lKCk7Ci0KLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpcGlwRGlkQ2xvc2U6KFBJ
UFZpZXdDb250cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBf
cGlwVmlld0NvbnRyb2xsZXIpOwotCi0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwoKSAmJiBfdmlkZW9WaWV3Q29udGFpbmVyICYmIF9yZXR1cm5pbmdXaW5kb3cgJiYg
IU5TRXF1YWxSZWN0cyhfcmV0dXJuaW5nUmVjdCwgTlNaZXJvUmVjdCkpIHsKLSAgICAgICAgW05T
QW5pbWF0aW9uQ29udGV4dCBydW5BbmltYXRpb25Hcm91cDpeKE5TQW5pbWF0aW9uQ29udGV4dCAq
Y29udGV4dCkgewotICAgICAgICAgICAgY29udGV4dC5hbGxvd3NJbXBsaWNpdEFuaW1hdGlvbiA9
IE5POwotICAgICAgICAgICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0RnJhbWU6X3JldHVybmlu
Z1JlY3RdOwotICAgICAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29u
dGFpbmVyIGJvdW5kc10pOwotICAgICAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7Ci0KLSAgICAg
ICAgICAgIFtbX3JldHVybmluZ1dpbmRvdyBjb250ZW50Vmlld10gYWRkU3VidmlldzpfdmlkZW9W
aWV3Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxhdGl2ZVRvOm5p
bF07Ci0gICAgICAgIH0gY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKLSAgICB9Ci0KLSAgICBpZiAo
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYykgewotICAgICAgICBpZiAoIXNlbGYuaXNF
eGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4pIHsKLSAgICAgICAgICAgIGlmIChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCogdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICAgICAgICAgICAgICB2
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5jbGVhck1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSk7Ci0KLSAgICAgICAgaWYgKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBm
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LT53ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpKQotICAgICAgICAgICAgZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgIH0KLX0KLQotLSAo
dm9pZClwaXBBY3Rpb25QbGF5OihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VS
VF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAgIGlmIChfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKLX0K
LQotLSAodm9pZClwaXBBY3Rpb25QYXVzZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAg
ICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBp
ZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVz
ZSgpOwotfQotCi0tICh2b2lkKXBpcEFjdGlvblN0b3A6KFBJUFZpZXdDb250cm9sbGVyICopcGlw
Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwot
Ci0gICAgaWYgKCFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1v
ZGVsID0gX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKSkKLSAgICAgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBhdXNlKCk7Ci0KLSAgICAv
LyBGSVhNRSAyNTA5NjE3MDogU2hvdWxkIGFuaW1hdGUgb25seSBpZiB0aGUgcGFnZSB3aXRoIHRo
ZSB2aWRlbyBpcyB1bm9ic2N1cmVkLiBGb3Igbm93LCBhbHdheXMgY2xvc2Ugd2l0aG91dCBhbmlt
YXRpb24uCi0gICAgW3NlbGYgZXhpdFBJUF07Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZSkKLSAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZSkKLXsKLSAgICBBU1NFUlQobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpOwotICAgIGF1dG8gbW9kZWwgPSBtX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKLSAgICBtb2Rl
bC0+YWRkQ2xpZW50KCp0aGlzKTsKLSAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygp
IHVwZGF0ZUlzUGxheWluZzptb2RlbC0+aXNQbGF5aW5nKCkgbmV3UGxheWJhY2tSYXRlOm1vZGVs
LT5wbGF5YmFja1JhdGUoKV07Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpCi17Ci0gICAgaWYgKG1fcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBtX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3Zl
Q2xpZW50KCp0aGlzKTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKLXsKLSAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbW9kZWw7Ci0gICAgaWYgKG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmFk
ZENsaWVudCgqdGhpcyk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCi17Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIgPSBvYnNlcnZlcjsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
Ci17Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01v
ZGUgPSBtX21vZGUgfCBtb2RlOwotICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9tb2RlID0gbmV3TW9kZTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKG1fbW9kZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5l
d01vZGUgPSBtX21vZGUgJiB+bW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZChtX21vZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsK
LSAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzppc1Bs
YXlpbmcgbmV3UGxheWJhY2tSYXRlOnBsYXliYWNrUmF0ZV07Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQotewotICAgIG1f
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLX0KLQot
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyAqV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjp2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkKLXsKLSAgICBpZiAoIW1f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQykKLSAgICAgICAgbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDID0gYWRvcHROUyhbW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakMgYWxsb2NdIGluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOnRo
aXNdKTsKLQotICAgIHJldHVybiBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMuZ2V0
KCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxz
Y3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0
LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCi17
Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNl
dHVwRnVsbHNjcmVlbiglcCksIGluaXRpYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdp
bmRvdzolcCwgbW9kZTolZCIsIHRoaXMsIGluaXRpYWxSZWN0LngoKSwgaW5pdGlhbFJlY3QueSgp
LCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0aWFsUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93
LCBtb2RlKTsKLQotICAgIFVOVVNFRF9QQVJBTShhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJh
Y2spOwotICAgIEFTU0VSVChtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotCi0gICAgbV9tb2RlID0gbW9kZTsKLQotICAg
IFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgc2V0VXBQSVBGb3JWaWRlb1ZpZXc6Jmxh
eWVySG9zdGVkVmlldyB3aXRoRnJhbWU6KE5TUmVjdClpbml0aWFsUmVjdCBpbldpbmRvdzpwYXJl
bnRXaW5kb3ddOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewotICAgICAgICBpZiAobV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oKQotewotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oJXAp
IiwgdGhpcyk7Ci0KLSAgICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpIHsKLSAgICAgICAgW21fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBlbnRlclBJUF07Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOllF
U107Ci0jZW5kaWYKLQotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0g
ICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVu
KCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhp
dEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2lu
ZG93KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpleGl0RnVsbHNjcmVlbiglcCksIGZpbmFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJl
bnRXaW5kb3c6JXAiLCB0aGlzLCBmaW5hbFJlY3QueCgpLCBmaW5hbFJlY3QueSgpLCBmaW5hbFJl
Y3Qud2lkdGgoKSwgZmluYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOwotCi0jaWYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFttX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJl
QWN0aXZlOk5PXTsKLSNlbmRpZgotCi0gICAgaWYgKFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgZGlkUmVxdWVzdEV4aXRpbmdQSVBdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoZmluYWxSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlT2JqQyBleGl0UElQXTsKLSAgICBlbHNlCi0gICAgICAgIFttX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDpmaW5hbFJlY3QgaW5XaW5k
b3c6cGFyZW50V2luZG93XTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5p
bWF0aW9uVG9Nb2RlKCVwKSwgbW9kZTolZCIsIHRoaXMsIG1vZGUpOwotCi0jaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZl
Ok5PXTsKLSNlbmRpZgotCi0gICAgaWYgKFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9i
akMgZGlkUmVxdWVzdEV4aXRpbmdQSVBdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGlz
RXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuID0gbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsKLSAgICAvLyBPbiBNYWMsIHN0YW5kYXJk
IGZ1bGxzY3JlZW4gaXMgaGFuZGxlZCBieSB0aGUgRnVsbHNjcmVlbiBBUEkgYW5kIG5vdCBieSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLgotICAgIC8vIEp1c3QgdXBkYXRlIG1fbW9kZSBkaXJl
Y3RseSB0byBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFy
ZCBpbiB0aGF0IGNhc2UgdG8ga2VlcAotICAgIC8vIG1fbW9kZSBpbiBzeW5jIHdpdGggdGhlIGZ1
bGxzY3JlZW4gbW9kZSBpbiBIVE1MTWVkaWFFbGVtZW50LgotICAgIGlmIChpc0V4aXRpbmdUb1N0
YW5kYXJkRnVsbHNjcmVlbikKLSAgICAgICAgbV9tb2RlID0gSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQ7Ci0KLSAgICBbbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDIHNldEV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjppc0V4aXRpbmdU
b1N0YW5kYXJkRnVsbHNjcmVlbl07Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQyBleGl0UElQXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFudXBGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAg
ICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotICAgIFttX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07
Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCi17Ci0gICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoJXAp
IiwgdGhpcyk7Ci0KLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmlsOwotICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyID0gbmlsOwotCi0gICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsK
LQotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaW52YWxpZGF0ZV07Ci0g
ICAgbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDID0gbmlsOwotfQotCi0jaWYgIUxP
R19ESVNBQkxFRAotc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCi17Ci0g
ICAgcmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29s
IHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5k
b3cpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCksIHZpc2libGU6JXMsIGlubGluZVJlY3Q6
eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwIiwgdGhpcywgYm9vbFN0cmluZyh2aXNp
YmxlKSwgaW5saW5lUmVjdC54KCksIGlubGluZVJlY3QueSgpLCBpbmxpbmVSZWN0LndpZHRoKCks
IGlubGluZVJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7Ci0KLSAgICBpZiAoIXZpc2libGUp
IHsKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChwYXJlbnRXaW5kb3cpOwotICAg
IFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVj
dDooTlNSZWN0KWlubGluZVJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlLCBjb25zdCBTdHJpbmcmKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCglcCksIGVuYWJs
ZWQ6JXMiLCB0aGlzLCBib29sU3RyaW5nKGVuYWJsZWQpKTsKLQotICAgIGlmIChlbmFibGVkICYm
IG1fbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0
dXJlSW5QaWN0dXJlKQotICAgICAgICBleGl0RnVsbHNjcmVlbihJbnRSZWN0KCksIG5pbCk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQo
Ym9vbCBoYXNWaWRlbykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKCVwKTolcyIsIHRoaXMsIGJvb2xTdHJpbmco
aGFzVmlkZW8pKTsKLQotICAgIGlmICghaGFzVmlkZW8pCi0gICAgICAgIGV4aXRGdWxsc2NyZWVu
V2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVOb25lKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMp
Ci17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoJXApLCB3aWR0aDolLjBmLCBoZWlnaHQ6JS4wZiIsIHRo
aXMsIHZpZGVvRGltZW5zaW9ucy53aWR0aCgpLCB2aWRlb0RpbWVuc2lvbnMuaGVpZ2h0KCkpOwot
Ci0gICAgLy8gV2lkdGggYW5kIGhlaWdodCBjYW4gYmUgemVybyB3aGVuIHdlIGFyZSB0cmFuc2l0
aW9uaW5nIGZyb20gb25lIHZpZGVvIHRvIGFub3RoZXIuIElnbm9yZSB6ZXJvIHZhbHVlcy4KLSAg
ICBpZiAoIXZpZGVvRGltZW5zaW9ucy5pc1plcm8oKSkKLSAgICAgICAgW21fd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQyBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsK
LX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVv
SW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiBoYXNNb2RlKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBp
Y3R1cmUpICYmIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaXNQbGF5aW5nXTsK
LX0KLQotYm9vbCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKQotewotICAgIHJldHVybiBQSVBM
aWJyYXJ5KCkgJiYgZ2V0UElQVmlld0NvbnRyb2xsZXJDbGFzcygpOwotfQotCi19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDRhMTcwYTM2NzZhMTkwM2Q0
NzRiOTA5MWNjYzkxMjE0NmM3ZjE4ODEuLjg4NjljMDE3Y2I3ZGNmMzFmMzY0N2UzZGE0NjBmYTlh
NzA0MjZjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTMxOSw4ICsz
MTksOCBAQAogCiAKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkKLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKQEAgLTkyNjIsMTEgKzkyNjIsMTEgQEAg
LSAodm9pZClfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxlbWVudDooV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFfcHJp
dmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUo
KTsKKyAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOwogICAgIF9wcml2YXRlLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbC0+c2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOwogCiAgICAgaWYgKCFf
cHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotICAgICAgICBfcHJpdmF0ZS0+cGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpj
cmVhdGUoKl9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCk7CisgICAgICAgIF9wcml2YXRl
LT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKTsKIAogICAgIFtzZWxmIHVw
ZGF0ZVRvdWNoQmFyXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0RhdGEuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaApp
bmRleCBhNzhiMDkwZTA3YmU0MzYxOTZhNjk1Y2ExMjg3ZTg3OGQyNjY2MWNjLi5iZGVkZjc3M2Rk
ZmRlMDY2ZmE1MmUxNzU2Y2I2ODIyMjc0NmNmNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3RGF0YS5oCkBAIC01NCw4ICs1NCw4IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBUZXh0
SW5kaWNhdG9yV2luZG93OwogY2xhc3MgVmFsaWRhdGlvbkJ1YmJsZTsKICNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLWNsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworY2xhc3MgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CiAjZW5kaWYKIH0KIApAQCAtMzM4LDggKzMzOCw4
IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKQotICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJhY2tTZXNzaW9uTW9kZWw7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudD4gcGxheWJhY2tTZXNzaW9uTW9kZWw7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYz4gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogI2VuZGlmCiAg
ICAgCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0RhdGEubW0KaW5kZXggNzc5NzM2YTE2YWZmNjBlM2ZhNWEwYWM3ZWEzNjQwNmRjMzY0
ZjJlNC4uZjkzMGZhOTZjODg1YmJmZjc0MDRmMDcyMzU5Njc1OTU1ZmM0YjgzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCkBAIC01MSw4ICs1MSw4IEBACiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KQotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogQk9P
TCBhcHBsaWNhdGlvbklzVGVybWluYXRpbmcgPSBOTzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5t
YWtlCmluZGV4IDgzYWQwZThhNTc4ZTEyZDY4NzU1NjBiMDg3ODFhNzc0NzE4NDQ2MTUuLmUyNGUz
MDU4YjY3MmI3ODBlY2Q0OTc3ZTY3MjYyNGJjODRkMTMwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNv
dXJjZXMubWFrZQpAQCAtMTU0LDggKzE1NCw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAg
IFdlYlBhc3RlYm9hcmRQcm94eSBcCiAgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yIFwKICAgICBX
ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eSBcCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciBcCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IFwKKyAgICBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyIFwKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgXAogICAgIFdl
YlByb2Nlc3MgXAogICAgIFdlYlByb2Nlc3NDb25uZWN0aW9uIFwKICAgICBXZWJQcm9jZXNzUG9v
bCBcCkBAIC0xNjgsOCArMTY4LDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViU29j
a2V0U3RyZWFtIFwKICAgICBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgXAogICAgIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5IFwKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIFwK
LSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgXAorICAgIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIgXAorICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSBcCiAjCiAKIFNDUklQ
VFMgPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCmluZGV4IDMyMjFkNzVhOGVhMWUxMDgyM2Y3MWY3OGVlYmRjZTg1ZjdmYTA3NTMuLmY5OWU0
MmIzMzAyMDFiMjI2YTNjZjNlNzRiZTA2M2NiZDA2ZjExYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0xMjYsMTIgKzEyNiwxMiBA
QAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAi
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIK
KyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1wb3J0ICJXS1BERlZpZXcuaCIKICNpbXBvcnQgIldL
UGFzc3dvcmRWaWV3LmgiCiAjaW1wb3J0ICJXS1Njcm9sbFZpZXcuaCIKICNpbXBvcnQgIldLV2Vi
Vmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIl9XS0RyYWdnYWJsZUVsZW1lbnRJbmZvSW50ZXJu
YWwuaCIKICNpbXBvcnQgIl9XS1dlYlZpZXdQcmludEZvcm1hdHRlci5oIgogI2ltcG9ydCA8VUlL
aXQvVUlBcHBsaWNhdGlvbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1
ODBmOTU3N2YwNDQzMGNjYzY0Y2YzM2NlZTdlN2E4OWI5NTNmNjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5LmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVj
dGlvbk9wdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2RlbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGlt
ZVJhbmdlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg+CisjZWxz
ZQorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKElPUykKK3R5cGVkZWYgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisjZWxzZQor
dHlwZWRlZiBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgUGxhdGZvcm1QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2U7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKKwor
Y2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0IGZpbmFsOiBwdWJsaWMgUmVmQ291bnRl
ZDxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBwdWJsaWMgV2ViQ29yZTo6UGxheWJhY2tT
ZXNzaW9uTW9kZWwgIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwg
dWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAgIH0K
KyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQoKSB7IH0KKworICAgIHZv
aWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQorCisgICAgLy8gUGxheWJh
Y2tTZXNzaW9uTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JilmaW5hbDsKKworICAgIHZvaWQgZHVyYXRpb25DaGFu
Z2VkKGRvdWJsZSk7CisgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlKTsKKyAgICB2
b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKTsKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRl
ZFRpbWVDaGFuZ2VkKGRvdWJsZSk7CisgICAgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKKyAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChX
ZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZl
VXBkYXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29s
KTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRl
eCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBp
bmRleCk7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQoYm9vbCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OworCisgICAg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYg
bWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdl
cikKKyAgICAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCisgICAgeworICAgIH0KKworICAg
IC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisgICAgdm9pZCBwbGF5KCkgZmluYWw7CisgICAgdm9p
ZCBwYXVzZSgpIGZpbmFsOworICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7CisgICAg
dm9pZCBiZWdpblNjcnViYmluZygpIGZpbmFsOworICAgIHZvaWQgZW5kU2NydWJiaW5nKCkgZmlu
YWw7CisgICAgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSkgZmluYWw7CisgICAgdm9pZCBmYXN0U2Vl
ayhkb3VibGUgdGltZSkgZmluYWw7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZp
bmFsOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7CisgICAgdm9pZCBl
bmRTY2FubmluZygpIGZpbmFsOworICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50
NjRfdCkgZmluYWw7CisgICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qp
IGZpbmFsOworICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOworICAgIHZv
aWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKKyAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwor
CisgICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3BsYXliYWNrU3RhcnRlZFRpbWU7IH0KKyAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9jdXJyZW50VGltZTsgfQorICAgIGRvdWJsZSBidWZmZXJlZFRpbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1ZmZlcmVkVGltZTsgfQorICAgIGJvb2wgaXNQbGF5
aW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KKyAgICBib29sIGlzU2Ny
dWJiaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1NjcnViYmluZzsgfQorICAgIGZsb2F0
IHBsYXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGxheWJhY2tSYXRlOyB9Cisg
ICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9zZWVrYWJsZVJhbmdlcy5jb3B5UmVmKCk7IH0KKyAgICBkb3VibGUgc2Vla2Fi
bGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vl
a2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZTsgfQorICAgIGRvdWJsZSBsaXZlVXBkYXRl
SW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2xpdmVVcGRhdGVJbnRlcnZhbDsgfQorICAgIGJv
b2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jYW5QbGF5RmFz
dFJldmVyc2U7IH0KKyAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uczsgfQorICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleDsgfQor
ICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uczsgfQorICAgIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7IH0KKyAgICBi
b29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRl
cm5hbFBsYXliYWNrRW5hYmxlZDsgfQorICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU7IH0KKyAgICBTdHJpbmcg
ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOyB9CisgICAgYm9vbCB3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fd2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7IH0KKyAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX211dGVkOyB9CisKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkq
IG1fbWFuYWdlcjsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKKyAgICBIYXNoU2V0PFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIGRvdWJsZSBt
X3BsYXliYWNrU3RhcnRlZFRpbWUgeyAwIH07CisgICAgYm9vbCBtX3BsYXliYWNrU3RhcnRlZFRp
bWVOZWVkc1VwZGF0ZSB7IGZhbHNlIH07CisgICAgZG91YmxlIG1fZHVyYXRpb24geyAwIH07Cisg
ICAgZG91YmxlIG1fY3VycmVudFRpbWUgeyAwIH07CisgICAgZG91YmxlIG1fYnVmZmVyZWRUaW1l
IHsgMCB9OworICAgIGJvb2wgbV9pc1BsYXlpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Nj
cnViYmluZyB7IGZhbHNlIH07CisgICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAwIH07CisgICAg
UmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IG1fc2Vla2FibGVSYW5nZXMgeyBXZWJDb3JlOjpUaW1l
UmFuZ2VzOjpjcmVhdGUoKSB9OworICAgIGRvdWJsZSBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RN
b2RpZmllZFRpbWUgeyAwIH07CisgICAgZG91YmxlIG1fbGl2ZVVwZGF0ZUludGVydmFsIHsgMCB9
OworICAgIGJvb2wgbV9jYW5QbGF5RmFzdFJldmVyc2UgeyBmYWxzZSB9OworICAgIFZlY3RvcjxX
ZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
czsKKyAgICB1aW50NjRfdCBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9OworICAgIFZl
Y3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zOworICAgIHVpbnQ2NF90IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCB7IDAg
fTsKKyAgICBib29sIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgeyBmYWxzZSB9OworICAgIFBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBtX2V4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlIHsgUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25l
IH07CisgICAgU3RyaW5nIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWU7Cisg
ICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fbXV0ZWQgeyBmYWxzZSB9OworfTsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Piwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0
cjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmKTsKKyAg
ICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKTsKKworICAgIHZvaWQgaW52
YWxpZGF0ZSgpOworCisgICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGNvbnRy
b2xzTWFuYWdlckludGVyZmFjZSgpOworICAgIHZvaWQgcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50
SUQoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CisK
KyAgICBleHBsaWNpdCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5Jik7
CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBmaW5hbDsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8UGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1v
ZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VU
dXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRf
dCBjb250ZXh0SWQpOworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyCisgICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Cisg
ICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGN1
cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwg
ZG91YmxlIGhvc3RUaW1lKTsKKyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKKyAgICB2b2lkIHNlZWthYmxlUmFuZ2Vz
VmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91Ymxl
LCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVw
ZGF0ZUludGVydmFsKTsKKyAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIHZhbHVlKTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNl
bGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9p
ZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVz
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0
VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOworICAgIHZvaWQgd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAg
dm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24p
OworICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSk7CisgICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSk7CisgICAgdm9pZCBo
YW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QsIFN0cmluZykgY29uc3Q7
CisgICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsK
KworICAgIC8vIE1lc3NhZ2VzIHRvIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKyAgICB2b2lkIHBs
YXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2
b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY3J1
YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Cisg
ICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVy
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIHNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisK
KyAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbElu
dGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQgeyAwIH07CisgICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50
Q291bnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYWM4Zjc5ZDFiMjQ1NWE3ODBmODIyN2EzZWZhNDkxNjlmZDA1ZWE5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQ1IEBACisjIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKK21lc3NhZ2VzIC0+IFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSB7CisgICAgUmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90
IGNvbnRleHRJZCkKKyAgICBDdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSkKKyAgICBCdWZmZXJlZFRpbWVDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKKyAgICBTZWVrYWJs
ZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWly
PGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91Ymxl
IGxpdmVVcGRhdGVJbnRlcnZhbCkKKyAgICBDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKKyAgICBBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rp
b25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgTGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCisgICAgQXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgTGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAg
ICBFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VO
YW1lKQorICAgIFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCisgICAgRHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQorICAgIFBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCisgICAgUmF0
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUp
CisgICAgTXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7CisgICAg
U2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgQ2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpCisKKyAgICBIYW5kbGVDb250cm9sbGVk
RWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJpbmcgaWQpCit9CisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyYzM5OWU4ZGI4NmE5MTUw
NWEyYWRkNjY0NGRkODkwMzYyMjdlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCkBAIC0wLDAg
KzEsNTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1w
b3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIK
KyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYg
Y2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAg
IG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpwbGF5KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPnBsYXkobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6cGF1c2UoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
cGF1c2UobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21h
bmFnZXItPnRvZ2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmluZyhtX2NvbnRleHRJZCk7CisKKyAg
ICBtX2lzU2NydWJiaW5nID0gdHJ1ZTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmVuZFNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9t
YW5hZ2VyLT5lbmRTY3J1YmJpbmcobV9jb250ZXh0SWQpOworCisgICAgbV9pc1NjcnViYmluZyA9
IGZhbHNlOworICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlID0gaXNQbGF5aW5n
KCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRv
dWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2Vl
a1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1fY29udGV4dElkLCB0aW1lKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3
YXJkKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAg
bV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nQmFja3dhcmQobV9jb250ZXh0SWQpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBvcHRpb25JZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRp
YU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9u
SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGljdHVy
ZUluUGljdHVyZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT50
b2dnbGVQaWN0dXJlSW5QaWN0dXJlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZU11dGVkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX21hbmFnZXItPnRvZ2dsZU11dGVkKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRNdXRlZChtX2NvbnRleHRJZCwg
bXV0ZWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCit7CisgICAgbV9w
bGF5YmFja1N0YXJ0ZWRUaW1lID0gcGxheWJhY2tTdGFydGVkVGltZTsKKyAgICBtX3BsYXliYWNr
U3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGZhbHNlOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBt
X2R1cmF0aW9uID0gZHVyYXRpb247CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMp
CisgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3Vy
cmVudFRpbWUpCit7CisgICAgbV9jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lOworICAgIGF1dG8g
YW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsK
KyAgICBpZiAobV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUpCisgICAgICAgIHBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsKKworICAgIGZvciAoYXV0byogY2xp
ZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJy
ZW50VGltZSwgYW5jaG9yVGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgbV9i
dWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWU7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCisgICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9v
bCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBtX2lzUGxheWluZyA9IGlz
UGxheWluZzsKKyAgICBtX3BsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKKyAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChpc1Bs
YXlpbmcsIHBsYXliYWNrUmF0ZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYgc2Vla2FibGVS
YW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFs
KQoreworICAgIG1fc2Vla2FibGVSYW5nZXMgPSBzZWVrYWJsZVJhbmdlczsKKyAgICBtX3NlZWth
YmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSBsYXN0TW9kaWZpZWRUaW1lOworICAgIG1f
bGl2ZVVwZGF0ZUludGVydmFsID0gbGl2ZVVwZGF0ZUludGVydmFsOworICAgIGZvciAoYXV0byog
Y2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZChzZWVrYWJsZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit7CisgICAgbV9jYW5QbGF5RmFzdFJl
dmVyc2UgPSBjYW5QbGF5RmFzdFJldmVyc2U7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCisgICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5
RmFzdFJldmVyc2UpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4mIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBhdWRpb01lZGlh
U2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gYXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCA9
IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGll
bnRzKQorICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucywgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRl
eCkKK3sKKyAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zOworICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IGxlZ2li
bGVNZWRpYVNlbGVjdGVkSW5kZXg7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2F1ZGlvTWVk
aWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKKworICAgIGZvciAoYXV0byogY2xpZW50
IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3sKKyAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4
OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+
bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
Ym9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWROYW1lKQoreworICAgIG1fZXh0ZXJu
YWxQbGF5YmFja0VuYWJsZWQgPSBlbmFibGVkOworICAgIG1fZXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUgPSB0eXBlOworICAgIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUg
PSBsb2NhbGl6ZWROYW1lOworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisg
ICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlwZSwgbG9j
YWxpemVkTmFtZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZCkKK3sKKyAgICBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gd2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCisgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFu
Z2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQoreworICAgIG1fbXV0
ZWQgPSBtdXRlZDsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAg
Y2xpZW50LT5tdXRlZENoYW5nZWQobXV0ZWQpOworfQorCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkKKworUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdl
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
KHBhZ2UpKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQorICAgIDogbV9wYWdlKCZwYWdlKQor
eworICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+
cGFnZUlEKCksICp0aGlzKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZSA9IG51bGxw
dHI7CisKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Cisg
ICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgICAg
ICBSZWZQdHI8UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZTsKKyAg
ICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKKworICAgICAgICBpbnRl
cmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsK
KyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpj
cmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmPFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKKyAgICBSZWY8UGxhdGZvcm1QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlOjpjcmVhdGUobW9kZWwpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZN
b3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFj
ZVR1cGxlKCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7
CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1BsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dCYgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2Rl
bCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVN
b2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworUGxhdGZvcm1QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBpZiAoIW1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5pbnZhbGlkYXRlKCk7
CisgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworfQorCisjcHJhZ21hIG1hcmsg
TWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICByZW1vdmVDbGllbnRGb3JDb250
ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKworICAgIG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkID0gY29udGV4dElkOworICAgIGVuc3VyZUludGVyZmFjZShtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCkuZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgYWRkQ2xpZW50Rm9y
Q29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisKKyAgICBtX3BhZ2UtPnZpZGVv
Q29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0SWQpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpj
bGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAg
aWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisgICAg
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOworICAgIG1fcGFnZS0+dmlkZW9Db250cm9s
c01hbmFnZXJEaWRDaGFuZ2UoKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBl
bnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5yZXNldE1lZGlhU3RhdGUoKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQoreworICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuY3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJ1ZmZlcmVkVGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuYnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla2FibGVSYW5nZXNWZWN0b3JDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+
IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2
YWwpCit7CisgICAgUmVmPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVh
dGUoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDogcmFuZ2VzKSB7CisgICAgICAgIEFT
U0VSVChpc2Zpbml0ZShyYW5nZS5maXJzdCkpOworICAgICAgICBBU1NFUlQoaXNmaW5pdGUocmFu
Z2Uuc2Vjb25kKSk7CisgICAgICAgIEFTU0VSVChyYW5nZS5zZWNvbmQgPj0gcmFuZ2UuZmlyc3Qp
OworICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFuZ2UuZmlyc3QsIHJhbmdlLnNlY29uZCk7Cisg
ICAgfQorCisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrYWJsZVJhbmdlc0NoYW5nZWQo
dGltZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQoreworICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh2YWx1ZSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRl
eCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZChzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmlj
ZU5hbWUpCit7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGU+KHRhcmdldFR5cGUpOworICAgIEFTU0VSVCh0eXBlID09IFBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQgfHwgdHlwZSA9PSBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6VGFyZ2V0VHlwZU5vbmUpOworCisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit7Cisg
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoZGlzYWJsZWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3sKKyAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLm11dGVkQ2hhbmdlZChtdXRlZCk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5kdXJhdGlv
bkNoYW5nZWQoZHVyYXRpb24pOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
cGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHJhdGUpOworfQorCisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWlu
dDY0X3QgY29udGV4dElkLCBTdHJpbmcgaWRlbnRpZmllcikgY29uc3QKK3sKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgaWYgKGNvbnRleHRJZCA9PSBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkK
KyAgICAgICAgbV9wYWdlLT5oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UoaWRlbnRp
Zmllcik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQpOworICAgIFVOVVNFRF9Q
QVJBTShpZGVudGlmaWVyKTsKKyNlbmRpZgorfQorCisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0
byBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBsYXkoY29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwYXVzZSh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpQYXVzZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1
aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmlu
Zyh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1l
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGlt
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkZhc3RTZWVrKGNv
bnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElk
KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
QmVnaW5TY2FubmluZ0ZvcndhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQo
dWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3YXJkKGNvbnRleHRJZCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5k
U2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2Nhbm5pbmcoY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRp
YU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWlu
dDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6VG9nZ2xlUGljdHVyZUluUGljdHVyZShjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2ds
ZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQoreworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRl
ZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKQoreworICAgIGlmIChtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdChtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCitQbGF0Zm9ybVBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpjb250
cm9sc01hbmFnZXJJbnRlcmZhY2UoKQoreworICAgIGlmICghbV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgaW50ZXJmYWNlID0g
ZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICByZXR1cm4g
JmludGVyZmFjZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE3NzI1NmU0YWVlODFl
ZDQ2Y2NhZDZmZGUyNjA5YjNlYmM0OTZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaApAQCAtMCww
ICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgKFBMQVRGT1JNKElP
UykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVmll
dy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQor
I2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaD4KKyNlbHNl
CisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaD4KKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oSU9TKQordHlwZWRlZiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdCBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyNlbHNlCit0
eXBlZGVmIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyBQbGF0Zm9ybVZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViUGFnZVByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OworY2xh
c3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWwKKyAg
ICA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4KKyAgICAs
IHB1YmxpYyBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgICwgcHVibGljIFdlYkNv
cmU6OlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyICB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJh
Y2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBwbGF5
YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgflZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21h
bmFnZXIgPSBudWxscHRyOyB9CisKKyAgICBQbGF0Zm9ybVZpZXcgKmxheWVySG9zdFZpZXcoKSBj
b25zdCB7IHJldHVybiBtX2xheWVySG9zdFZpZXcuZ2V0KCk7IH0KKyAgICB2b2lkIHNldExheWVy
SG9zdFZpZXcoUmV0YWluUHRyPFBsYXRmb3JtVmlldz4mJiBsYXllckhvc3RWaWV3KSB7IG1fbGF5
ZXJIb3N0VmlldyA9IFdURk1vdmUobGF5ZXJIb3N0Vmlldyk7IH0KKworcHJpdmF0ZToKKyAgICBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Jiwg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiwgdWludDY0X3QpOworCisgICAgLy8gVmlkZW9G
dWxsc2NyZWVuTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6
OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAg
IHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1Zpc2libGUoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9oYXNWaWRlbzsgfQorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvRGltZW5zaW9uczsgfQorCisgICAgLy8g
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVl
bigpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ2xlYW51
cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lu
bGluZSgpIG92ZXJyaWRlOworCisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21h
bmFnZXI7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbDsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKKyAgICBSZXRhaW5QdHI8UGxh
dGZvcm1WaWV3ICo+IG1fbGF5ZXJIb3N0VmlldzsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIFdlYkNvcmU6OkZsb2F0U2l6
ZSBtX3ZpZGVvRGltZW5zaW9uczsKKyAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OworfTsK
KworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsK
KyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKTsKKworICAgIHZvaWQg
aW52YWxpZGF0ZSgpOworCisgICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7
CisgICAgYm9vbCBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSkgY29uc3Q7CisgICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVv
UGljdHVyZUluUGljdHVyZSgpIGNvbnN0OworICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUoKTsKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OworCisjaWYgUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisgICAgYm9vbCBpc1BsYXlpbmdW
aWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OworCisgICAgZXhwbGlj
aXQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYsIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eSYpOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB0eXBlZGVmIHN0ZDo6dHVw
bGU8UmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAgTW9kZWxJ
bnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBlbnN1cmVN
b2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGFk
ZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNs
aWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKworICAgIC8vIE1lc3NhZ2VzIGZy
b20gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElE
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dz
UGljdHVyZUluUGljdHVyZSk7CisgICAgdm9pZCBzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wpOworICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIHZvaWQgY2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHByZXBhcmVkVG9SZXR1cm5U
b0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVj
dCBpbmxpbmVSZWN0KTsKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9k
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSk7CisjZW5kaWYKKworICAgIC8vIE1lc3NhZ2VzIHRvIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIKKyAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBj
b250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKTsKKyAgICB2b2lkIGRpZFNldHVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dy
YXZpdHkpOworICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsK
KyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQp
OworCisgICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CisgICAgSGFzaE1hcDx1
aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90
IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAgIEhhc2hNYXA8dWludDY0X3Qs
IGludD4gbV9jbGllbnRDb3VudHM7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmYzNiNTA0N2VmNDdhYmExOTU3MWU3NjQzYTA3MmVjZTgy
MjBhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzYgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIChQTEFURk9STShJ
T1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQorbWVzc2FnZXMgLT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
IHsKKyAgICBTZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCisg
ICAgU2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRT
aXplIHZpZGVvRGltZW5zaW9ucykKKyAgICBTZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3Qg
Y29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIFdlYkNvcmU6OkludFJlY3QgaW5pdGlh
bFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxs
b3dzUGljdHVyZUluUGljdHVyZSkKKyAgICBFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKQorICAgIEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50
UmVjdCBmaW5hbFJlY3QpCisgICAgQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQorICAgIFByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
dmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KQorI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorICAgIEV4aXRGdWxsc2NyZWVuV2l0
aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQor
I2VuZGlmCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVj
Y2I5YjI5MjE5NjgyNjg2NGYwMDkxMDA4ZjkzMDg5ODg4YTE4YTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1tCkBAIC0wLDAgKzEsNTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKKworI2lmIFBMQVRGT1JN
KElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIkRy
YXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5o
IgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFnZVBy
b3h5LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUv
Q29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL01lZGlhUGxheWVyRW51bXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUXVhcnR6
Q29yZVNQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDxXZWJL
aXRTeXN0ZW1JbnRlcmZhY2UuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIlJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisjZW5k
aWYKKworQGludGVyZmFjZSBXS0xheWVySG9zdFZpZXcgOiBQbGF0Zm9ybVZpZXcKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIHVpbnQzMl90IGNvbnRleHRJRDsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdLTGF5ZXJIb3N0VmlldworCisjaWYgUExBVEZPUk0oSU9TKQorKyAoQ2xhc3Mp
bGF5ZXJDbGFzcyB7CisgICAgcmV0dXJuIFtDQUxheWVySG9zdCBjbGFzc107Cit9CisjZWxzZQor
LSAoQ0FMYXllciAqKW1ha2VCYWNraW5nTGF5ZXIKK3sKKyAgICByZXR1cm4gW1tbQ0FMYXllckhv
c3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKyNlbmRpZgorCistICh1aW50MzJfdClj
b250ZXh0SUQgeworICAgIHJldHVybiBbW3NlbGYgbGF5ZXJIb3N0XSBjb250ZXh0SWRdOworfQor
CistICh2b2lkKXNldENvbnRleHRJRDoodWludDMyX3QpY29udGV4dElEIHsKKyAgICBbW3NlbGYg
bGF5ZXJIb3N0XSBzZXRDb250ZXh0SWQ6Y29udGV4dElEXTsKK30KKworLSAoQ0FMYXllckhvc3Qg
KilsYXllckhvc3QgeworICAgIHJldHVybiAoQ0FMYXllckhvc3QgKilbc2VsZiBsYXllcl07Cit9
CisKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisjaWYgUExBVEZPUk0oSU9TKSAmJiAhSEFWRShBVktJVCkKKworUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUo
V2ViUGFnZVByb3h5JikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQoreworfQorCitib29sIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1
cmVJblBpY3R1cmUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQor
eworCit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRp
ZEJlY29tZUFjdGl2ZSgpCit7CisKK30KKyNlbHNlCisKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dAorCitWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFn
ZXIsIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVp
bnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKKyAgICAsIG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwocGxheWJhY2tTZXNzaW9uTW9kZWwpCisgICAgLCBtX2NvbnRleHRJ
ZChjb250ZXh0SWQpCit7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6flZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjphZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkK
K3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGll
bnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OnJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAg
IEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xpZW50cy5yZW1v
dmUoJmNsaWVudCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZXF1
ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7CisgICAgaWYgKG1fbWFuYWdlcikK
KyAgICAgICAgbV9tYW5hZ2VyLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobV9jb250ZXh0SWQsIG1v
ZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0xheWVyRnJhbWUo
bV9jb250ZXh0SWQsIGZyYW1lKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21h
bmFnZXItPnNldFZpZGVvTGF5ZXJHcmF2aXR5KG1fY29udGV4dElkLCBncmF2aXR5KTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZChtX2NvbnRleHRJZCwgbW9kZSk7Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAoreworICAgIHJldHVybiBtX21hbmFnZXIgPyBt
X21hbmFnZXItPmlzVmlzaWJsZSgpIDogZmFsc2U7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxz
Y3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+ZGlkRXhpdEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQoreworICAgIGlm
IChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9j
b250ZXh0SWQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShtX2NvbnRleHRJZCk7Cit9CisK
KyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQorCitSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNy
ZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSkpOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQorICAgIDogbV9wYWdlKCZwYWdlKQorICAg
ICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5KQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
cGFnZS0+cGFnZUlEKCksICp0aGlzKTsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Ojp+VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZSA9
IG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygp
KSB7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOwor
ICAgICAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFj
ZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKKworICAgICAg
ICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICAgICAgW21vZGVsLT5sYXllckhvc3RWaWV3
KCkgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3
KG51bGxwdHIpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fY2xp
ZW50Q291bnRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQorICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPnJl
cXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1h
cC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1v
ZGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlT
aG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBs
ZSktPm1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCitib29sIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVl
bigpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMo
KSkgeworICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5pc1BsYXlpbmdWaWRlb0luRW5o
YW5jZWRGdWxsc2NyZWVuKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCit7CisgICAgZm9yIChhdXRv
JiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKKyAgICAgICAgc3RkOjpnZXQ8MT4odHVw
bGUpLT5hcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOworfQorCitWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAg
YXV0byYgcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS0+ZW5zdXJlTW9kZWwoY29udGV4dElkKTsKKyAgICBSZWY8VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0PiBtb2RlbCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlz
LCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKTsKKyAgICBhdXRvJiBwbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJlSW50
ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgUmVmPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6Y3JlYXRl
KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7CisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHktPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+
c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsKKyAgICBpbnRlcmZhY2UtPnNl
dFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7CisKKyAgICByZXR1
cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwor
fQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChj
b250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxB
bmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKK30KKworVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1
cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQor
CitQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVy
biAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRz
LmFkZChjb250ZXh0SWQsIDEpOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElk
KQoreworICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKKwor
ICAgIGludCBjbGllbnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOworICAg
IEFTU0VSVChjbGllbnRDb3VudCA+IDApOworICAgIGNsaWVudENvdW50LS07CisKKyAgICBpZiAo
Y2xpZW50Q291bnQgPD0gMCkgeworICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS0+cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworICAgICAgICBtX2NsaWVudENv
dW50cy5yZW1vdmUoY29udGV4dElkKTsKKyAgICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250
ZXh0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jbGllbnRDb3VudHMuc2V0
KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJv
bSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2
aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBo
b3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1
cmUpCit7CisgICAgQVNTRVJUKHZpZGVvTGF5ZXJJRCk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgYWRkQ2xpZW50Rm9y
Q29udGV4dChjb250ZXh0SWQpOworCisgICAgUmV0YWluUHRyPFdLTGF5ZXJIb3N0Vmlldz4gdmll
dyA9IHN0YXRpY19jYXN0PFdLTGF5ZXJIb3N0Vmlldyo+KG1vZGVsLT5sYXllckhvc3RWaWV3KCkp
OworICAgIGlmICghdmlldykgeworICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLTGF5ZXJIb3N0
VmlldyBhbGxvY10gaW5pdF0pOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgW3ZpZXcgc2V0
V2FudHNMYXllcjpZRVNdOworI2VuZGlmCisgICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3
KHZpZXcpOworICAgIH0KKyAgICBbdmlldyBzZXRDb250ZXh0SUQ6dmlkZW9MYXllcklEXTsKKyAg
ICBpZiAoaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yICE9IDEpIHsKKyAgICAgICAgLy8gSW52ZXJ0
IHRoZSBzY2FsZSB0cmFuc2Zvcm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFy
Oi8vcHJvYmxlbS8xODMxNjU0Mj4uCisgICAgICAgIGZsb2F0IGludmVyc2VTY2FsZSA9IDEgLyBo
b3N0aW5nRGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgIFtbdmlldyBsYXllcl0gc2V0U3VibGF5
ZXJUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VT
Y2FsZSwgMSldOworICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVSVZpZXcgKnBhcmVu
dFZpZXcgPSBkb3duY2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqbV9wYWdl
LT5kcmF3aW5nQXJlYSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExheWVyKCk7CisgICAg
aW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3RWaWV3KCksIGluaXRp
YWxSZWN0LCBwYXJlbnRWaWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlKTsKKyNlbHNlCisgICAgSW50UmVjdCBpbml0aWFsV2luZG93UmVjdDsKKyAgICBtX3Bh
Z2UtPnJvb3RWaWV3VG9XaW5kb3coaW5pdGlhbFJlY3QsIGluaXRpYWxXaW5kb3dSZWN0KTsKKyAg
ICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5p
dGlhbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSwgdmlkZW9GdWxsc2NyZWVu
TW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7CisjZW5kaWYKKyAgICBtX3BhZ2UtPnVpQ2xp
ZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCB2aWRlb0Z1
bGxzY3JlZW5Nb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0
SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQoreworICAgIGVuc3Vy
ZUludGVyZmFjZShjb250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnModWludDY0
X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBl
bnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHZpZGVvRGlt
ZW5zaW9ucyk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8mIGludGVyZmFjZSA9IGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpOworICAgIGludGVyZmFjZS5lbnRlckZ1bGxzY3JlZW4o
KTsKKworICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGluIGEgZ2l2ZW4gZnVsbCBzY3Jl
ZW4gbW9kZSBhdCBhIHRpbWU6CisgICAgZm9yIChhdXRvJiBjb250ZXh0UGFpciA6IG1fY29udGV4
dE1hcCkgeworICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9IGNvbnRleHRQYWlyLmtleTsK
KyAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJZCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4oY29u
dGV4dFBhaXIudmFsdWUpOworICAgICAgICBpZiAob3RoZXJJbnRlcmZhY2UtPmhhc01vZGUoaW50
ZXJmYWNlLm1vZGUoKSkpCisgICAgICAgICAgICBvdGhlckludGVyZmFjZS0+cmVxdWVzdEhpZGVB
bmRFeGl0RnVsbHNjcmVlbigpOworICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50
UmVjdCBmaW5hbFJlY3QpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGVuc3VyZUludGVyZmFj
ZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVjdCk7CisjZWxzZQorICAgIEludFJl
Y3QgZmluYWxXaW5kb3dSZWN0OworICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhmaW5hbFJl
Y3QsIGZpbmFsV2luZG93UmVjdCk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhp
dEZ1bGxzY3JlZW4oZmluYWxXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3JtV2luZG93KCkpOwor
I2VuZGlmCit9CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKK3sKKyAg
ICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRp
b25Ub01vZGUodGFyZ2V0TW9kZSk7Cit9CisjZW5kaWYKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVwRnVsbHNjcmVlbigpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5l
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGlu
ZVJlY3QpCit7CisgICAgbV9wYWdlLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKKwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5wcmVwYXJl
ZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVjdCk7CisjZWxzZQorICAgIEludFJl
Y3QgaW5saW5lV2luZG93UmVjdDsKKyAgICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3coaW5saW5l
UmVjdCwgaW5saW5lV2luZG93UmVjdCk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCku
cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlubGluZVdpbmRvd1JlY3QsIG1fcGFn
ZS0+cGxhdGZvcm1XaW5kb3coKSk7CisjZW5kaWYKK30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2Vz
IHRvIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZp
bmlzaGVkV2l0aE1lZGlhKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6UmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKGNvbnRleHRJZCwgbW9kZSwgZmlu
aXNoZWRXaXRoTWVkaWEpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpE
aWRTZXR1cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgUmVmUHRy
PFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisKKyAgICBzdGQ6
OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJ
ZCk7CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07CisgICAgW21vZGVsLT5sYXllckhvc3RW
aWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXco
bnVsbHB0cik7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KworICAgIGludGVyZmFjZS0+c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVOb25lKTsKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7
Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJh
bWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCit7CisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBtYWNoX3BvcnRf
bmFtZV90IGZlbmNlUG9ydCA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVEcmF3aW5nQWNyb3NzUHJv
Y2Vzc2VzXTsKKyNlbHNlCisgICAgICAgIE1hY2hTZW5kUmlnaHQgZmVuY2VTZW5kUmlnaHQ7Cisg
ICAgICAgIGlmIChEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2lu
Z0FyZWEoKSkKKyAgICAgICAgICAgIGZlbmNlU2VuZFJpZ2h0ID0gZHJhd2luZ0FyZWEtPmNyZWF0
ZUZlbmNlKCk7CisgICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gZmVuY2VTZW5k
UmlnaHQubGVha1NlbmRSaWdodCgpOworI2VuZGlmCisKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQo
Y29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwgTUFDSF9NU0dfVFlQ
RV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgfQorfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZp
dHkpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElkLCAodW5zaWduZWQpZ3Jhdml0eSks
IG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgbV9w
YWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJlRGlkQ2hhbmdlKG1fcGFn
ZSwgbW9kZSAmIE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5Q
aWN0dXJlKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChjb250ZXh0SWQsIG1vZGUpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzVmlzaWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpICYmIG1fcGFnZS0+
aXNJbldpbmRvdygpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBib29s
IGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZShjb250ZXh0SWQsIGlzVmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
KworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2YzMzYmU2NWE5OGMyMTljMGRiOTFkMDMyODQyOTVlY2U1ZjU0NzNkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaAorKysgL2Rldi9udWxs
CkBAIC0xLDIzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTZWxlY3Rpb25P
cHRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVGltZVJhbmdlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0j
aW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oPgotI2Vs
c2UKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi10eXBlZGVmIFdlYkNvcmU6OldlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
OwotI2Vsc2UKLXR5cGVkZWYgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk7Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCBm
aW5hbDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Piwg
cHVibGljIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsICB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KCkgeyB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKSB7
IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Ci0gICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCYpZmluYWw7Ci0KLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3Vi
bGUpOwotICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9pZCBidWZm
ZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hh
bmdlZChkb3VibGUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0
IHBsYXliYWNrUmF0ZSk7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6
VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKTsKLSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCk7Ci0gICAg
dm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNv
cmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3QgaW5kZXgpOwotICAg
IHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdl
YkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3QgaW5kZXgpOwot
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwg
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCk7Ci0KLXByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKLQotICAgIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICAgICAgOiBtX21hbmFnZXIoJm1h
bmFnZXIpCi0gICAgICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotICAgIHsKLSAgICB9Ci0K
LSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAotICAgIHZvaWQgcGxheSgpIGZpbmFsOwot
ICAgIHZvaWQgcGF1c2UoKSBmaW5hbDsKLSAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFs
OwotICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKLSAgICB2b2lkIGVuZFNjcnViYmlu
ZygpIGZpbmFsOwotICAgIHZvaWQgc2Vla1RvVGltZShkb3VibGUpIGZpbmFsOwotICAgIHZvaWQg
ZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZpbmFsOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0Zvcndh
cmQoKSBmaW5hbDsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOwotICAg
IHZvaWQgZW5kU2Nhbm5pbmcoKSBmaW5hbDsKLSAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24odWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVp
bnQ2NF90KSBmaW5hbDsKLSAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSBmaW5hbDsK
LSAgICB2b2lkIHRvZ2dsZU11dGVkKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRNdXRlZChib29sKSBm
aW5hbDsKLQotICAgIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9wbGF5YmFja1N0YXJ0ZWRUaW1lOyB9Ci0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIGRvdWJsZSBjdXJyZW50VGltZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY3VycmVudFRpbWU7IH0KLSAgICBkb3VibGUgYnVmZmVy
ZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9idWZmZXJlZFRpbWU7IH0KLSAgICBib29s
IGlzUGxheWluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9Ci0gICAgYm9v
bCBpc1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNTY3J1YmJpbmc7IH0KLSAg
ICBmbG9hdCBwbGF5YmFja1JhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrUmF0
ZTsgfQotICAgIFJlZjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc2Vla2FibGVSYW5nZXMuY29weVJlZigpOyB9Ci0gICAgZG91Ymxl
IHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWU7IH0KLSAgICBkb3VibGUgbGl2
ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9saXZlVXBkYXRlSW50ZXJ2YWw7IH0K
LSAgICBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2Fu
UGxheUZhc3RSZXZlcnNlOyB9Ci0gICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0
aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7IH0KLSAgICB1aW50NjRfdCBhdWRpb01lZGlhU2Vs
ZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5k
ZXg7IH0KLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnM7IH0KLSAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4OyB9
Ci0gICAgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQ7IH0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlOyB9Ci0g
ICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsgfQotICAg
IGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOyB9Ci0gICAgYm9vbCBpc011dGVkKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRlZDsgfQotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5KiBtX21hbmFnZXI7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAg
SGFzaFNldDxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50
czsKLSAgICBkb3VibGUgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lIHsgMCB9OwotICAgIGJvb2wgbV9w
bGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgeyBmYWxzZSB9OwotICAgIGRvdWJsZSBtX2R1
cmF0aW9uIHsgMCB9OwotICAgIGRvdWJsZSBtX2N1cnJlbnRUaW1lIHsgMCB9OwotICAgIGRvdWJs
ZSBtX2J1ZmZlcmVkVGltZSB7IDAgfTsKLSAgICBib29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faXNTY3J1YmJpbmcgeyBmYWxzZSB9OwotICAgIGZsb2F0IG1fcGxheWJhY2tS
YXRlIHsgMCB9OwotICAgIFJlZjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBtX3NlZWthYmxlUmFuZ2Vz
IHsgV2ViQ29yZTo6VGltZVJhbmdlczo6Y3JlYXRlKCkgfTsKLSAgICBkb3VibGUgbV9zZWVrYWJs
ZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lIHsgMCB9OwotICAgIGRvdWJsZSBtX2xpdmVVcGRh
dGVJbnRlcnZhbCB7IDAgfTsKLSAgICBib29sIG1fY2FuUGxheUZhc3RSZXZlcnNlIHsgZmFsc2Ug
fTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fYXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAgdWludDY0X3QgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRl
eCB7IDAgfTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fbGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsKLSAgICB1aW50NjRfdCBtX2xlZ2libGVNZWRpYVNl
bGVjdGVkSW5kZXggeyAwIH07Ci0gICAgYm9vbCBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkIHsg
ZmFsc2UgfTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgbV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB7IFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpUYXJnZXRUeXBlTm9uZSB9OwotICAgIFN0cmluZyBtX2V4dGVybmFsUGxheWJhY2tM
b2NhbGl6ZWREZXZpY2VOYW1lOwotICAgIGJvb2wgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5KCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIFBsYXRm
b3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBjb250cm9sc01hbmFnZXJJbnRlcmZhY2Uo
KTsKLSAgICB2b2lkIHJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKLSAgICBmcmll
bmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OwotCi0gICAgZXhwbGljaXQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYpOwotICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7
Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4+IE1v
ZGVsSW50ZXJmYWNlVHVwbGU7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFu
ZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUm
IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKTsKLQotICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcgotICAgIHZvaWQgc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigp
OwotICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCBjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRp
bWUsIGRvdWJsZSBob3N0VGltZSk7Ci0gICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7Ci0gICAgdm9pZCBzZWVrYWJsZVJh
bmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRv
dWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxp
dmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVk
aWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAg
IHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZv
aWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrUHJvcGVy
dGllc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRh
cmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLSAgICB2b2lkIHdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwot
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0
aW9uKTsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpOwotICAgIHZv
aWQgaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90LCBTdHJpbmcpIGNv
bnN0OwotICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRl
ZCk7Ci0KLSAgICAvLyBNZXNzYWdlcyB0byBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0gICAg
dm9pZCBwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBwYXVzZSh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQg
ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZWVrVG9UaW1lKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOwotICAgIHZvaWQgZmFzdFNlZWsodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2Fy
ZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKHVp
bnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBlbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0
SWQpOwotICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2dsZU11dGVkKHVpbnQ2
NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wpOwotCi0gICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwg
TW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OwotICAgIEhhc2hDb3VudGVkU2V0PHVpbnQ2NF90PiBt
X2NsaWVudENvdW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MzZhODMyNzNlYjhlMTQ0YTZhMTAz
NTA1NTc4OWMyM2UwOTEyN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAK
LSMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0j
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQotbWVzc2FnZXMgLT4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IHsKLSAgICBS
ZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQotICAgIEN1cnJlbnRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1l
KQotICAgIEJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVm
ZmVyZWRUaW1lKQotICAgIFNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBs
YXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotICAgIENhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQotICAgIEF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKLSAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLSAgICBBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLSAgICBM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQotICAgIEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwg
U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCi0gICAgV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKLSAgICBEdXJh
dGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi0gICAgUGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJh
Y2tTdGFydGVkVGltZSkKLSAgICBSYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
aXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKLSAgICBNdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBib29sIG11dGVkKTsKLSAgICBTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElE
KHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkK
LQotICAgIEhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0
SWQsIFN0cmluZyBpZCkKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOWQzM2Y5ZmMwODkzYTgyMDk3YTVlZWM4
Zjg2ZjVhYTg2NTNjZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJXZWJQYWdlUHJveHku
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9y
dCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIldl
YlByb2Nlc3NQcm94eS5oIgotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI3ByYWdtYSBt
YXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjphZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
Ci0gICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwot
ICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpwbGF5KCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBt
X21hbmFnZXItPnBsYXkobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6cGF1c2UoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+cGF1c2UobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmluZyhtX2Nv
bnRleHRJZCk7Ci0KLSAgICBtX2lzU2NydWJiaW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZygpCi17Ci0gICAgaWYgKG1fbWFu
YWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY3J1YmJpbmcobV9jb250ZXh0SWQpOwotCi0g
ICAgbV9pc1NjcnViYmluZyA9IGZhbHNlOwotICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRz
VXBkYXRlID0gaXNQbGF5aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0g
ICAgICAgIG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkK
LXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1fY29u
dGV4dElkLCB0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBt
X21hbmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCi17
Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nQmFj
a3dhcmQobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6ZW5kU2Nhbm5pbmcoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25J
ZCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBv
cHRpb25JZCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCi17
Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJlSW5Q
aWN0dXJlKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnRvZ2dsZU11dGVkKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPnRvZ2dsZU11dGVkKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1fbWFu
YWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5zZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tTdGFydGVk
VGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCi17Ci0gICAgbV9wbGF5YmFj
a1N0YXJ0ZWRUaW1lID0gcGxheWJhY2tTdGFydGVkVGltZTsKLSAgICBtX3BsYXliYWNrU3RhcnRl
ZFRpbWVOZWVkc1VwZGF0ZSA9IGZhbHNlOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBtX2R1
cmF0aW9uID0gZHVyYXRpb247Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0g
ICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3Vy
cmVudFRpbWUpCi17Ci0gICAgbV9jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lOwotICAgIGF1dG8g
YW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsK
LSAgICBpZiAobV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUpCi0gICAgICAgIHBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsKLQotICAgIGZvciAoYXV0byogY2xp
ZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJy
ZW50VGltZSwgYW5jaG9yVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAg
bV9idWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWU7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBt
X2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRp
bWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5n
ZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBtX2lzUGxheWlu
ZyA9IGlzUGxheWluZzsKLSAgICBtX3BsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKLSAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdl
ZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYg
c2Vla2FibGVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0
ZUludGVydmFsKQotewotICAgIG1fc2Vla2FibGVSYW5nZXMgPSBzZWVrYWJsZVJhbmdlczsKLSAg
ICBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSBsYXN0TW9kaWZpZWRUaW1l
OwotICAgIG1fbGl2ZVVwZGF0ZUludGVydmFsID0gbGl2ZVVwZGF0ZUludGVydmFsOwotICAgIGZv
ciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUlu
dGVydmFsKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCi17Ci0gICAgbV9j
YW5QbGF5RmFzdFJldmVyc2UgPSBjYW5QbGF5RmFzdFJldmVyc2U7Ci0gICAgZm9yIChhdXRvKiBj
bGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50
NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX2F1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAgbV9hdWRpb01lZGlh
U2VsZWN0ZWRJbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OwotICAgIGZvciAoYXV0byog
Y2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucywgYXVkaW9NZWRpYVNlbGVj
dGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgbGVnaWJs
ZU1lZGlhU2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOwotICAgIG1fbGVnaWJsZU1lZGlhU2Vs
ZWN0ZWRJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7Ci0KLSAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBsZWdpYmxlTWVk
aWFTZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKLXsKLSAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKLQot
ICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmF1ZGlv
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX2xlZ2libGVNZWRpYVNlbGVj
dGVkSW5kZXggPSBzZWxlY3RlZEluZGV4OwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCi0gICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBs
b2NhbGl6ZWROYW1lKQotewotICAgIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBlbmFibGVk
OwotICAgIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgPSB0eXBlOwotICAgIG1fZXh0ZXJu
YWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUgPSBsb2NhbGl6ZWROYW1lOwotCi0gICAgZm9y
IChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkTmFtZSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQoYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKLXsKLSAgICBtX3dp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQ7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+
d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11
dGVkQ2hhbmdlZChib29sIG11dGVkKQotewotICAgIG1fbXV0ZWQgPSBtdXRlZDsKLSAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQo
bXV0ZWQpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkKLQotUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KHBhZ2UpKTsK
LX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQotICAgIDogbV9wYWdlKCZwYWdlKQotewot
ICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+
cGFnZUlEKCksICp0aGlzKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCkKLXsKLSAgICBpZiAoIW1fcGFnZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQotewotICAgIG1fcGFnZS0+cHJvY2Vzcygp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1f
cGFnZSA9IG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZh
bHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+
IG1vZGVsOwotICAgICAgICBSZWZQdHI8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2U+IGludGVyZmFjZTsKLSAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBs
ZTsKLQotICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBtX2Nv
bnRleHRNYXAuY2xlYXIoKTsKLSAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwotfQotCi1XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9k
ZWwgPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4
dElkKTsKLSAgICBSZWY8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVy
ZmFjZSA9IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9kZWwp
OwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShp
bnRlcmZhY2UpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbElu
dGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOwotICAg
IGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0dXJuIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5pbnZhbGlkYXRl
KCk7Ci0gICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotfQotCi0jcHJhZ21hIG1h
cmsgTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0
aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1f
Y29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZW1vdmVDbGll
bnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLQotICAgIG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOwotICAgIGVuc3VyZUludGVyZmFjZShtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCkuZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgYWRk
Q2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0KLSAgICBtX3Bh
Z2UtPnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjb250ZXh0SWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRl
eHRJZCk7Ci0gICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOwotICAgIG1fcGFnZS0+
dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5yZXNldE1lZGlhU3RhdGUo
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1l
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhv
c3RUaW1lKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY3VycmVudFRpbWVDaGFuZ2Vk
KGN1cnJlbnRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRU
aW1lKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYnVmZmVyZWRUaW1lQ2hhbmdlZChi
dWZmZXJlZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
c2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0
ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUs
IGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi17Ci0gICAgUmVmPFRpbWVSYW5nZXM+IHRpbWVS
YW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdl
IDogcmFuZ2VzKSB7Ci0gICAgICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5maXJzdCkpOwotICAg
ICAgICBBU1NFUlQoaXNmaW5pdGUocmFuZ2Uuc2Vjb25kKSk7Ci0gICAgICAgIEFTU0VSVChyYW5n
ZS5zZWNvbmQgPj0gcmFuZ2UuZmlyc3QpOwotICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFuZ2Uu
Zmlyc3QsIHJhbmdlLnNlY29uZCk7Ci0gICAgfQotCi0gICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5zZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2
ZVVwZGF0ZUludGVydmFsKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZh
bHVlKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojph
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
Ci17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxh
eWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwg
dWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0gICAg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUg
PSBzdGF0aWNfY2FzdDxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGU+KHRhcmdldFR5cGUpOwotICAgIEFTU0VSVCh0eXBlID09IFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQgfHwgdHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6VGFyZ2V0VHlwZU5vbmUpOwotCi0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCi17
Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQoZGlzYWJsZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLXsKLSAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm11dGVkQ2hhbmdlZChtdXRlZCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCi17Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHJhdGUpOwotfQotCi0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJpbmcgaWRlbnRpZmllcikgY29u
c3QKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKGNvbnRleHRJZCA9PSBtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgbV9wYWdlLT5oYW5kbGVDb250cm9sbGVkRWxlbWVu
dElEUmVzcG9uc2UoaWRlbnRpZmllcik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0
SWQpOwotICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsKLSNlbmRpZgotfQotCi0KLSNwcmFn
bWEgbWFyayBNZXNzYWdlcyB0byBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBs
YXkoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQ
bGF5U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0
SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpCZWdpblNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpFbmRTY3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGlt
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLXsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkZhc3RT
ZWVrKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNj
YW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3YXJk
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQotewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2Nh
bm5pbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJ
ZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IGluZGV4KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGNvbnRleHRJZCwg
aW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
VG9nZ2xlUGljdHVyZUluUGljdHVyZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRlZCks
IG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKQotewotICAgIGlmIChtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdChtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi1QbGF0Zm9y
bVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKQotewotICAgIGlmICghbV9jb250cm9sc01h
bmFnZXJDb250ZXh0SWQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgaW50
ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAg
ICByZXR1cm4gJmludGVyZmFjZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVlMDQwY2EwNTExNDUzY2E3MDkwNGE1YTRkY2RlZmU5ZDllZjUy
MWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykK
LXR5cGVkZWYgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgUGxhdGZv
cm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0jZWxzZQotdHlwZWRlZiBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2U7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQ
cm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKLWNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGZpbmFsCi0g
ICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+Ci0g
ICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciAgewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBjcmVhdGUoV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiBtYW5hZ2VyLCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQmIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQobWFuYWdlciwgcGxheWJhY2tTZXNzaW9uTW9kZWwsIGNvbnRleHRJZCkpOwotICAg
IH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKTsKLQotICAg
IHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi0gICAgUGxhdGZv
cm1WaWV3ICpsYXllckhvc3RWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9sYXllckhvc3RWaWV3Lmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRMYXllckhvc3RWaWV3KFJldGFpblB0cjxQbGF0Zm9ybVZpZXc+
JiYgbGF5ZXJIb3N0VmlldykgeyBtX2xheWVySG9zdFZpZXcgPSBXVEZNb3ZlKGxheWVySG9zdFZp
ZXcpOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dCYsIHVpbnQ2NF90KTsKLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAg
dm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9v
bCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZpZGVv
TGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKLSAgICB2b2lkIGZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87
IH0KLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0KLQotICAgIC8vIFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyCi0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlk
RXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVy
cmlkZTsKLQotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOwot
ICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1fcGxheWJhY2tTZXNzaW9u
TW9kZWw7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3Jt
VmlldyAqPiBtX2xheWVySG9zdFZpZXc7Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUg
bV92aWRlb0RpbWVuc2lvbnM7Ci0gICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKLX07Ci0K
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVk
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7
Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbigpOwotICAgIGJvb2wgaGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0OwotICAgIGJvb2wgbWF5QXV0b21hdGlj
YWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGFwcGxpY2F0
aW9uRGlkQmVjb21lQWN0aXZlKCk7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLQotI2lm
IFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIGJv
b2wgaXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0OwotI2VuZGlmCi0K
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDsKLQotICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdl
UHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKLSAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwot
Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ+LCBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+PiBNb2Rl
bEludGVyZmFjZVR1cGxlOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsK
LSAgICBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIKLSAgICB2b2lkIHNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJl
Y3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOwot
ICAgIHZvaWQgc2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sKTsKLSAgICB2b2lk
IHNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYpOwotICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6Oklu
dFJlY3QgZmluYWxSZWN0KTsKLSAgICB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29u
dGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCk7Ci0jaWYg
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgdm9p
ZCBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwot
I2VuZGlmCi0KLSAgICAvLyBNZXNzYWdlcyB0byBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCi0g
ICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEgPSBmYWxzZSk7Ci0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCk7Ci0gICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
LSAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCBzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9h
dFJlY3QpOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KTsKLSAgICB2
b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKTsKLQotICAgIFdlYlBh
Z2VQcm94eSogbV9wYWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwotICAgIEhhc2hNYXA8dWludDY0X3QsIE1v
ZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCB7IDAgfTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1fY2xp
ZW50Q291bnRzOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4MTVkNjcyMzhlOWQzYWZmY2Yw
MWY0ZjRkYmQ0MDUyNDA4NDRjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBA
QAotIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgKFBMQVRGT1JN
KElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkgewotICAgIFNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRl
bykKLSAgICBTZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpG
bG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKQotICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBp
bml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9v
bCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKQotICAgIEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpCi0gICAgRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpJbnRSZWN0IGZpbmFsUmVjdCkKLSAgICBDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCi0gICAgUHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCi0jaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgRXhpdEZ1bGxzY3Jl
ZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1v
ZGUpCi0jZW5kaWYKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMjlhZDlhMTQxZDQxNmIxYjliZWQyZTMzN2Fl
NmFhZTFkYWUxYzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDUyMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkuaCIKLQotI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQVBJVUlD
bGllbnQuaCIKLSNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbXBvcnQgIldlYlBhZ2VQ
cm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCi0jaW1w
b3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8
V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWVyRW51
bXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotI2lm
IFBMQVRGT1JNKElPUykKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHku
aCIKLSNpbXBvcnQgIlVJS2l0U1BJLmgiCi0jZW5kaWYKLQotQGludGVyZmFjZSBXS0xheWVySG9z
dFZpZXcgOiBQbGF0Zm9ybVZpZXcKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIHVpbnQz
Ml90IGNvbnRleHRJRDsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLTGF5ZXJIb3N0Vmlldwot
Ci0jaWYgUExBVEZPUk0oSU9TKQotKyAoQ2xhc3MpbGF5ZXJDbGFzcyB7Ci0gICAgcmV0dXJuIFtD
QUxheWVySG9zdCBjbGFzc107Ci19Ci0jZWxzZQotLSAoQ0FMYXllciAqKW1ha2VCYWNraW5nTGF5
ZXIKLXsKLSAgICByZXR1cm4gW1tbQ0FMYXllckhvc3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKLX0KLSNlbmRpZgotCi0tICh1aW50MzJfdCljb250ZXh0SUQgewotICAgIHJldHVybiBbW3Nl
bGYgbGF5ZXJIb3N0XSBjb250ZXh0SWRdOwotfQotCi0tICh2b2lkKXNldENvbnRleHRJRDoodWlu
dDMyX3QpY29udGV4dElEIHsKLSAgICBbW3NlbGYgbGF5ZXJIb3N0XSBzZXRDb250ZXh0SWQ6Y29u
dGV4dElEXTsKLX0KLQotLSAoQ0FMYXllckhvc3QgKilsYXllckhvc3QgewotICAgIHJldHVybiAo
Q0FMYXllckhvc3QgKilbc2VsZiBsYXllcl07Ci19Ci0KLUBlbmQKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiAh
SEFWRShBVktJVCkKLQotUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKLXsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmludmFsaWRhdGUoKQotewotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUo
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQotewotCi19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29t
ZUFjdGl2ZSgpCi17Ci0KLX0KLSNlbHNlCi0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dAotCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkm
IG1hbmFnZXIsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9u
TW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAg
ICAsIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwocGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgLCBt
X2NvbnRleHRJZChjb250ZXh0SWQpCi17Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygm
Y2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNs
aWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRo
TWVkaWEpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yZXF1ZXN0
RnVsbHNjcmVlbk1vZGUobV9jb250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFt
ZShXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2
aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0
eSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5
ZXJHcmF2aXR5KG1fY29udGV4dElkLCBncmF2aXR5KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBpZiAobV9t
YW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRl
eHRJZCwgbW9kZSk7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpp
c1Zpc2libGUoKSBjb25zdAotewotICAgIHJldHVybiBtX21hbmFnZXIgPyBtX21hbmFnZXItPmlz
VmlzaWJsZSgpIDogZmFsc2U7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4o
bV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZGlkRXhpdEZ1bGxzY3JlZW4oKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+ZGlkRXhpdEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQotewotICAgIGlm
IChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9j
b250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShtX2NvbnRleHRJZCk7Ci19
Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQotCi1SZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KHBhZ2UsIHBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
KQotICAgIDogbV9wYWdlKCZwYWdlKQotICAgICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkocGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQotewotICAgIG1fcGFnZS0+cHJvY2Vzcygp
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKLX0K
LQotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5KCkKLXsKLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlu
dmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omlu
dmFsaWRhdGUoKQotewotICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci0KLSAg
ICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgICAgICBSZWZQ
dHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLSAgICAg
ICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKLQotICAgICAgICBpbnRlcmZh
Y2UtPmludmFsaWRhdGUoKTsKLSAgICAgICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3Zl
RnJvbVN1cGVydmlld107Ci0gICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIp
OwotICAgIH0KLQotICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRz
LmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9j
b250ZXh0TWFwLnZhbHVlcygpKQotICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPnJlcXVlc3RI
aWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52
YWx1ZXMoKSkgewotICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlT
aG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBs
ZSktPm1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi1ib29sIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNj
cmVlbigpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1
ZXMoKSkgewotICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5pc1BsYXlpbmdWaWRlb0lu
RW5oYW5jZWRGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCi17Ci0gICAgZm9y
IChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKLSAgICAgICAgc3RkOjpnZXQ8
MT4odHVwbGUpLT5hcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwotfQotCi1XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0
SWQpCi17Ci0gICAgYXV0byYgcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS0+ZW5zdXJlTW9kZWwoY29udGV4dElkKTsKLSAgICBSZWY8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKTsKLSAg
ICBhdXRvJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS0+ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgUmVmPFBsYXRmb3JtV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZTo6Y3JlYXRlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7Ci0gICAg
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4
dElkKTsKLQotICAgIGludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVs
LmdldCgpKTsKLSAgICBpbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKCZtb2RlbC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUo
bW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJm
YWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVu
c3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+
KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi1QbGF0Zm9ybVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpl
bnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpn
ZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFkZChj
b250ZXh0SWQsIDEpOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKLQotICAg
IGludCBjbGllbnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOwotICAgIEFT
U0VSVChjbGllbnRDb3VudCA+IDApOwotICAgIGNsaWVudENvdW50LS07Ci0KLSAgICBpZiAoY2xp
ZW50Q291bnQgPD0gMCkgewotICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+
cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotICAgICAgICBtX2NsaWVudENvdW50
cy5yZW1vdmUoY29udGV4dElkKTsKLSAgICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0
SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jbGllbnRDb3VudHMuc2V0KGNv
bnRleHRJZCwgY2xpZW50Q291bnQpOwotfQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJf
dCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9h
dCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmUpCi17Ci0gICAgQVNTRVJUKHZpZGVvTGF5ZXJJRCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7Ci0KLSAgICBzdGQ6OnRpZShtb2RlbCwg
aW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgYWRk
Q2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotCi0gICAgUmV0YWluUHRyPFdLTGF5ZXJIb3N0
Vmlldz4gdmlldyA9IHN0YXRpY19jYXN0PFdLTGF5ZXJIb3N0Vmlldyo+KG1vZGVsLT5sYXllckhv
c3RWaWV3KCkpOwotICAgIGlmICghdmlldykgewotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dL
TGF5ZXJIb3N0VmlldyBhbGxvY10gaW5pdF0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAg
W3ZpZXcgc2V0V2FudHNMYXllcjpZRVNdOwotI2VuZGlmCi0gICAgICAgIG1vZGVsLT5zZXRMYXll
ckhvc3RWaWV3KHZpZXcpOwotICAgIH0KLSAgICBbdmlldyBzZXRDb250ZXh0SUQ6dmlkZW9MYXll
cklEXTsKLSAgICBpZiAoaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yICE9IDEpIHsKLSAgICAgICAg
Ly8gSW52ZXJ0IHRoZSBzY2FsZSB0cmFuc2Zvcm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8g
Zml4IDxyZGFyOi8vcHJvYmxlbS8xODMxNjU0Mj4uCi0gICAgICAgIGZsb2F0IGludmVyc2VTY2Fs
ZSA9IDEgLyBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3I7Ci0gICAgICAgIFtbdmlldyBsYXllcl0g
c2V0U3VibGF5ZXJUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUs
IGludmVyc2VTY2FsZSwgMSldOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBVSVZp
ZXcgKnBhcmVudFZpZXcgPSBkb3duY2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
PigqbV9wYWdlLT5kcmF3aW5nQXJlYSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExheWVy
KCk7Ci0gICAgaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3RWaWV3
KCksIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlKTsKLSNlbHNlCi0gICAgSW50UmVjdCBpbml0aWFsV2luZG93UmVjdDsK
LSAgICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3coaW5pdGlhbFJlY3QsIGluaXRpYWxXaW5kb3dS
ZWN0KTsKLSAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZp
ZXcoKSwgaW5pdGlhbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSwgdmlkZW9G
dWxsc2NyZWVuTW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7Ci0jZW5kaWYKLSAgICBtX3Bh
Z2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdl
LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVBpY3R1cmVJblBpY3R1cmUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQot
ewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRl
byk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0Rp
bWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5z
aW9ucykKLXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1
dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOwotICAgIGludGVyZmFj
ZS5lbnRlckZ1bGxzY3JlZW4oKTsKLQotICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGlu
IGEgZ2l2ZW4gZnVsbCBzY3JlZW4gbW9kZSBhdCBhIHRpbWU6Ci0gICAgZm9yIChhdXRvJiBjb250
ZXh0UGFpciA6IG1fY29udGV4dE1hcCkgewotICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9
IGNvbnRleHRQYWlyLmtleTsKLSAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJ
ZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNl
ID0gc3RkOjpnZXQ8MT4oY29udGV4dFBhaXIudmFsdWUpOwotICAgICAgICBpZiAob3RoZXJJbnRl
cmZhY2UtPmhhc01vZGUoaW50ZXJmYWNlLm1vZGUoKSkpCi0gICAgICAgICAgICBvdGhlckludGVy
ZmFjZS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwotICAgIH0KLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCi17Ci0jaWYgUExBVEZPUk0oSU9T
KQotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVj
dCk7Ci0jZWxzZQotICAgIEludFJlY3QgZmluYWxXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+cm9v
dFZpZXdUb1dpbmRvdyhmaW5hbFJlY3QsIGZpbmFsV2luZG93UmVjdCk7Ci0gICAgZW5zdXJlSW50
ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxXaW5kb3dSZWN0LCBtX3BhZ2Ut
PnBsYXRmb3JtV2luZG93KCkpOwotI2VuZGlmCi19Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3Qg
Y29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgdGFyZ2V0TW9kZSkKLXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0
RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodGFyZ2V0TW9kZSk7Ci19Ci0jZW5kaWYK
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5j
bGVhbnVwRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCi17Ci0gICAgbV9wYWdlLT5mdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBlbnN1
cmVJbnRlcmZhY2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwg
aW5saW5lUmVjdCk7Ci0jZWxzZQotICAgIEludFJlY3QgaW5saW5lV2luZG93UmVjdDsKLSAgICBt
X3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3coaW5saW5lUmVjdCwgaW5saW5lV2luZG93UmVjdCk7Ci0g
ICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZp
c2libGUsIGlubGluZVdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7Ci0jZW5k
aWYKLX0KLQotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQotewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKGNvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxz
Y3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpEaWRFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAg
ICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQot
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1f
cGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAg
UmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7Ci0K
LSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07Ci0gICAgW21vZGVsLT5s
YXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgbW9kZWwtPnNldExheWVy
SG9zdFZpZXcobnVsbHB0cik7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLQotICAgIGludGVyZmFjZS0+c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0
KGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3Qg
ZnJhbWUpCi17Ci0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAg
ICAgICBtYWNoX3BvcnRfbmFtZV90IGZlbmNlUG9ydCA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVE
cmF3aW5nQWNyb3NzUHJvY2Vzc2VzXTsKLSNlbHNlCi0gICAgICAgIE1hY2hTZW5kUmlnaHQgZmVu
Y2VTZW5kUmlnaHQ7Ci0gICAgICAgIGlmIChEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9
IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgICAgIGZlbmNlU2VuZFJpZ2h0ID0gZHJh
d2luZ0FyZWEtPmNyZWF0ZUZlbmNlKCk7Ci0gICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQ
b3J0ID0gZmVuY2VTZW5kUmlnaHQubGVha1NlbmRSaWdodCgpOwotI2VuZGlmCi0KLSAgICAgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRl
b0xheWVyRnJhbWVGZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNl
UG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAg
fQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXll
ckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29u
dGV4dElkLCAodW5zaWduZWQpZ3Jhdml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5Q
aWN0dXJlSW5QaWN0dXJlRGlkQ2hhbmdlKG1fcGFnZSwgbW9kZSAmIE1lZGlhUGxheWVyRW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZChjb250ZXh0SWQsIG1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotYm9vbCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpICYmIG1fcGFnZS0+aXNJbldpbmRvdygpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRv
SW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBib29sIGlzVmlld1Zpc2libGUgPSBt
X3BhZ2UtPmlzVmlld1Zpc2libGUoKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0
SWQsIGlzVmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotI2VuZGlmCi0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4IDdmMWU5ODU5ODZlNTM1
OGM0NTQ4Y2E1OTkzZWFhNjNlYzFiYTljMDMuLjlhZWRlNzBhZTE3MTM3ZmFhMTIzY2I1MGU4ZTYz
ODQ5YTVlMjJkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwubW0KQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBv
cnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBv
cnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIK
ICNpbXBvcnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCIKQEAgLTYyLDcgKzYzLDYg
QEAKICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJv
eHkuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAi
V2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVy
bmFsLmgiCkBAIC0xMTcwLDggKzExNzAsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVNZWRp
YVRvdWNoQmFyKCkKICAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0Q2FuVG9n
Z2xlUGljdHVyZUluUGljdHVyZTpZRVNdOwogICAgIH0KIAotICAgIGlmIChQbGF0Zm9ybVdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSogaW50ZXJmYWNlID0gbV9wYWdlLT5wbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCktPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpKQotICAgICAgICBbbV9wbGF5
YmFja0NvbnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6aW50
ZXJmYWNlXTsKKyAgICBpZiAoUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGludGVy
ZmFjZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250cm9sc01hbmFnZXJJ
bnRlcmZhY2UoKSkKKyAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CiAKICAgICBbbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5nZXQoKV07CiAgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5
YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYTY0YTFjNmYz
NDZiOWY1NWNiYTY0OTdkOTQ5Y2I0ZmY3YWY0MGJiNi4uMmU4MDY2M2FiNjdhZWQ5N2ZjOTYyZGU5
MmI3MjY5YjE1M2IyYjgyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKQEAgLTE1Miw5ICsxNTIsOSBAQAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUg
IlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJSZW1vdGVMYXll
clRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCi0jaW5jbHVkZSAiV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL01hY2hTZW5kUmln
aHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3BPYnNlcnZlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dEluZGljYXRvcldpbmRvdy5oPgpAQCAtMTgwLDcgKzE4MCw3IEBACiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgog
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKQEAgLTM5NCw4ICszOTQsOCBAQCBXZWJQYWdlUHJv
eHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9jZXNzUHJveHkm
IHByb2Nlc3MsIHVpbgogICAgIG1fZnVsbFNjcmVlbk1hbmFnZXIgPSBXZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5OjpjcmVhdGUoKnRoaXMsIG1fcGFnZUNsaWVudC5mdWxsU2NyZWVuTWFuYWdlclBy
b3h5Q2xpZW50KCkpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAg
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6Y3JlYXRlKCp0aGlzKTsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9u
TWFuYWdlcik7CisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdl
ciA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTYz
Niw4ICs2MzYsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3MoKQog
ICAgIG1fZnVsbFNjcmVlbk1hbmFnZXIgPSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpjcmVh
dGUoKnRoaXMsIG1fcGFnZUNsaWVudC5mdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkpOwog
I2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIG1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlciA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlz
KTsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CisgICAg
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpj
cmVhdGUoKnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTQyOTUsMTIgKzQyOTUsMTIg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEZ1bGxzY3JlZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6RnVsbHNjcmVlbkNsaWVudD4mJgogI2VuZGlmCiAgICAgCiAjaWYgKFBMQVRGT1JNKElP
UykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQ
cm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkqIFdlYlBhZ2VQcm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCiB7CiAgICAgcmV0dXJu
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci5nZXQoKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5KiBXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQorVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIoKQogewogICAgIHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuZ2V0KCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYTkwODgwM2ZkNWUy
MjgxOGNiMDRlMTY3M2M1N2U4YmY4NzIwMTdmMS4uZmQwZmQ3ZWRmZTZlZGMyNTdlODhiNDNkNDcw
YzhiZjJiZWZhNjI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApA
QCAtMjAwLDkgKzIwMCw5IEBAIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBX
ZWJDb250ZXh0TWVudVByb3h5OwogY2xhc3MgV2ViRWRpdENvbW1hbmRQcm94eTsKIGNsYXNzIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJOYXZp
Z2F0aW9uU3RhdGU7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CitjbGFz
cyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50Owog
Y2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlcjsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CkBAIC0zNDIs
OCArMzQyLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0RnVsbHNjcmVlbkNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpGdWxsc2NyZWVuQ2xpZW50PiYmKTsKICNlbmRpZgogI2lmIChQTEFURk9S
TShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSog
cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eSogdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSogcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOworICAgIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eSogdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShJT1MpCkBAIC0xNjc4LDggKzE2NzgsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiAo
UExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5PiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOworICAg
IFJlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tTZXNzaW9uTWFu
YWdlcjsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBtX3ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggYzFiYTc2NGYw
MTU0MjcxMWUyOWFkNWY5YTA3MzQyNzc2ODI4YWJiYS4uYzkyZWE5ZjRjM2IzM2YzYThmY2M5YTIw
ZGRmMjYyODA1ZTQ5YzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0KQEAgLTQxLDExICs0MSwxMSBAQAogI2ltcG9ydCAiUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24uaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0ICJVc2Vy
RGF0YS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0
ICJWaWV3VXBkYXRlRGlzcGF0Y2hlck1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4u
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA0ZWFmNDZmZGViNWE4YWE5OWI1MGQwNmYxZGY1MGYxYzQxZTY4YmZkLi40ODBkZWRj
YWQxYWRlMTRjYjRhOGNiMTBmNDFmMmM5ODA5NzI5OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NzEsOCArODcxLDggQEAK
IAkJMzdGQzE5NDcxODUwRkJGMjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVn
YXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzdGQzE5NDYxODUwRkJGMjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVn
YXRlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTM3RkMxOTRBMTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzN0ZDMTk0ODE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLm1tICovOyB9OwogCQkzN0ZDMTk0QjE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0ZDMTk0OTE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLmggKi87IH07Ci0JCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJ
M0Y0MThFRkIxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJM0Y0MThFRjkxODg3QkQ5
NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjUxODg3
QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovOyB9OworCQkzRjQxOEVGQjE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkzRjg3QjlCRDE1
ODk0MDEyMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBX
ZWJDb2xvckNob29zZXIuY3BwICovOyB9OwogCQkzRjg3QjlCRTE1ODk0MDE5MDA5MEZGNjIgLyog
V2ViQ29sb3JDaG9vc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzRjg3QjlCQjE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi87
IH07CiAJCTNGODdCOUMwMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4N0I5QkYxNTg5NDBE
ODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2VyLmggKi87IH07CkBAIC0xMTE0LDkgKzExMTQsOSBA
QAogCQk1MjcyRDRDOTFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkQ0QzcxRTcz
NUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjcyRDRDQTFFNzM1RjA5MDBFQjQyOTAg
LyogV0tQcm90ZWN0aW9uU3BhY2VOUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyNzJENEM4MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25T
cGFjZU5TLm1tICovOyB9OwogCQk1MjhDMzdDMTE5NUNCQjFBMDBEOEI5Q0MgLyogV0tCYWNrRm9y
d2FyZExpc3RQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTlGMjgxMDE5NThGNDc4MDA4Q0FDNzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
NTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUEx
QUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICov
OyB9OwotCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5tbSAqLzsgfTsKLQkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tbSAqLzsgfTsKKwkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5oICovOyB9OworCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tbSAqLzsgfTsKKwkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tbSAqLzsgfTsKIAkJNTMwMjU4M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2Uu
Y3BwICovOyB9OwogCQk1MzAyNTgzQzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVS
ZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLzsg
fTsKIAkJNTMwMjU4M0QxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzAx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovOyB9OwpAQCAtMTky
OSwxNCArMTkyOSwxNCBAQAogCQlDRDc4RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNj
cmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0Q3OEUxMTYxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLzsg
fTsKIAkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTgx
REI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTA0MUY0MUFDRTIxMDUwMDRB
MTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDQxRjMxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2Fy
ZFNlcnZpY2VzU1BJLmggKi87IH07Ci0JCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW0gKi87IH07Ci0JCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5oICovOyB9OwotCQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5LmggKi87IH07Ci0JCUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovOyB9OwotCQlDREEyOUEyODFDQkVCNjdB
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNDFD
QkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07Ci0JCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKLQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNjFDQkVCNjdB
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLzsgfTsKLQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKKwkJQ0RBMjlBMUExQ0JEQkY0MTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLzsgfTsKKwkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLmggKi87IH07CisJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkuaCAqLzsgfTsKKwkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkubW0gKi87IH07CisJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJ
Q0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlB
MjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICov
OyB9OworCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREEyOUEyQjFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNCRUI2
N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovOyB9
OwogCQlDREMzODJGRTE3MjExNzk5MDA4QTJGQzMgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzgxMzhC
NDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5tbSAqLzsgfTsKIAkJQ0RDMzgzMDcx
NzIxMTdERDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODJGOTE3MjExNkQzMDA4
QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCAqLzsgfTsKIAkJQ0RDMzgzMEMx
NzIxMjI4MjAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDMzgzMEIxNzIxMjFDRTAwOEEy
RkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oICovOyB9OwpAQCAtMzA5OCwxMCArMzA5
OCwxMCBAQAogCQkzN0ZDMTk0NjE4NTBGQkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRM
b2FkRGVsZWdhdGVQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
QnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzN0ZDMTk0ODE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzN0ZDMTk0OTE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTlNVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQx
OEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5
NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY2MTg4
N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2Vz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVG
RCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0
MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdC
OUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29sb3JDaG9vc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5QkIxNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hv
b3Nlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvckNob29zZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYy
IC8qIFdlYkNvbG9yUGlja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkNvbG9yUGlja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzg1LDEyICsz
Mzg1LDEyIEBACiAJCTUyNzJCMjg5MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjcyRDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQ
cm90ZWN0aW9uU3BhY2VOUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1By
b3RlY3Rpb25TcGFjZU5TLmg7IHBhdGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjcyRDRDODFFNzM1RjA5MDBFQjQyOTAgLyogV0tQ
cm90ZWN0aW9uU3BhY2VOUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFdLUHJvdGVjdGlvblNwYWNlTlMubW07IHBhdGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VO
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQUExQzU3NDk0RTAwREUz
NEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJE
NUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjQxQzU3NDlG
MjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUEx
QjIxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODJFMURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlUmVzb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0
d29ya0NhcHR1cmVSZXNvdXJjZS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1
ODMwMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNzIsMTYgKzQyNzIsMTYgQEAKIAkJQ0Q3OEUxMTYx
REI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQVBJRnVsbHNjcmVlbkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDRDc4RTExODFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRl
bGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0Z1bGxzY3JlZW5E
ZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEwNDFGMzFBQ0UyMTA1
MDA0QTEzRUMgLyogQmFja0JvYXJkU2VydmljZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmFja0JvYXJkU2VydmljZXNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEy
OUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNzFDQkVCNjdBMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTgxQ0JEQkY0
MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5
QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RB
MjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0RDMzgyRjcxNzIxMTUwNjAwOEEyRkMzIC8qIENGTmV0d29yay5mcmFt
ZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3
cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENGTmV0d29yay5mcmFtZXdvcms7IHBhdGggPSAvU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DRk5ldHdvcmsuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
IjxhYnNvbHV0ZT4iOyB9OwogCQlDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3Rv
cmFnZVNoaW1MaWJyYXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZVN0b3JhZ2VTaGlt
TGlicmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MzA2MTcyMTE3
OTkwMDhBMkZDMyAvKiBXZWJQcm9jZXNzU2hpbS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYlByb2Nlc3NTaGltLmR5bGliOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNTIxNywxNyArNTIxNywxNyBAQAogCQkJCTJEMUI1
RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4g
Ki8sCiAJCQkJMUFDMDI3M0UxOTY2MjJENjAwQzEyQjc1IC8qIFdlYlBhZ2VQcm94eUNvY29hLm1t
ICovLAogCQkJCTdDNDY5NENCMUE0QjUxMEEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlD
b2NvYS5tbSAqLywKLQkJCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5LmggKi8sCi0JCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEy
OUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1t
ICovLAorCQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkuaCAqLywKKwkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCUNEQTI5QTFGMUNCRUI1RkIw
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJN0NFNEQy
MTUxQTQ5MTQ4NDAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sQ29jb2EubW0gKi8sCiAJCQkJMUEw
NEY2MTcxQTRBM0E3QTAwQTIxQjZFIC8qIFdlYlByb2Nlc3NQcm94eUNvY29hLm1tICovLAogCQkJ
CTdBQUQxNzVFMUVBNkFGMzcwMDNCMDg5NCAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmVDb2NvYS5tbSAqLywKIAkJCQk1MUQxMjQzMTFFNkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2No
ZW1lSGFuZGxlckNvY29hLmggKi8sCiAJCQkJNTFEMTI0MzIxRTZERTUyMTAwMkIyODIwIC8qIFdl
YlVSTFNjaGVtZUhhbmRsZXJDb2NvYS5tbSAqLywKLQkJCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi8sCi0JCQkJNTJENUExQUIx
QzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbiAqLywKLQkJCQk1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1tICovLAorCQkJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLywKKwkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJ
CTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
bW0gKi8sCiAJCQkJMkRGQzdEQjkxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggKi8s
CiAJCQkJMkRGQzdEQkExQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tICovLAogCQkJ
CTFBRDAxQkNCMTkwNUQ1NDkwMEM5QzQ1RiAvKiBXS1JlbG9hZEZyYW1lRXJyb3JSZWNvdmVyeUF0
dGVtcHRlci5oICovLApAQCAtNjQxMSwxNCArNjQxMSwxNCBAQAogCQkJCUNENDkxQjA1MUU3MEQw
NUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHAgKi8sCiAJCQkJQ0Q0OTFC
MDYxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggKi8sCiAJCQkJ
Q0Q0OTFCMEExRTczMkQxMjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLm1lc3Nh
Z2VzLmluICovLAotCQkJCUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLmggKi8sCi0JCQkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMTgxQ0JEQkY0
MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8sCisJCQkJQ0RBMjlB
MTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLywKKwkJCQlD
REEyOUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdl
cy5pbiAqLywKKwkJCQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tbSAqLywKIAkJCQlFQ0E2ODBENzFFNjkwREY4MDA3MzFEMjAgLyogV2ViUHJvY2Vz
c0NvY29hLmggKi8sCiAJCQkJN0M2RTcwRjkxOEIyRDRBMDAwRjI0RTJFIC8qIFdlYlByb2Nlc3ND
b2NvYS5tbSAqLywKLQkJCQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5oICovLAotCQkJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCTUyRDVBMUI0MUM1NzQ5
RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovLAorCQkJCTUyRDVB
MUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8sCisJCQkJ
NTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4gKi8sCisJCQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTc5MDMsMTAgKzc5MDMsMTAgQEAKIAkJCQkxQUIxRjc5MzFEMUIzNjEz
MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yTWVzc2FnZXMuaCAqLywKIAkJCQkxQUIx
Rjc5NDFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovLAogCQkJCTFBQjFGNzk1MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmggKi8sCi0JCQkJQ0RBMjlBMjQxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
LAotCQkJCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZXMuaCAqLywKLQkJCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlDREEy
OUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVz
c2FnZXMuaCAqLywKKwkJCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJQ0RBMjlBMjUxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5
QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovLAorCQkJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovLAogCQkJCTFBMDQzRjY3MTI1MTREOEIw
MEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJ
CQkJMUEwNDNGNjgxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZXMuaCAqLywKIAkJCQlCQzMwNjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8sCkBAIC03OTI4LDEwICs3OTI4LDEwIEBACiAJCQkJMUFBRjA4QjYx
OTI2OUU2RDAwQjYzOTBDIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2VzLmggKi8s
CiAJCQkJN0MzNjFENzYxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQk3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1
OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovLAotCQkJCTNG
NDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkzRjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8sCi0JCQkJM0Y0MThFRjcxODg3QkQ5NzAw
Mjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8sCi0JCQkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCisJCQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZE
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTNG
NDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMu
aCAqLywKKwkJCQkzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQkzRjQxOEVGODE4ODdCRDk3MDAy
Nzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCSk7
CiAJCQluYW1lID0gIkRlcml2ZWQgU291cmNlcyI7CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMv
V2ViS2l0MjsKQEAgLTg3NzIsMTAgKzg3NzIsMTAgQEAKIAkJCQkxQUIxRjc5OTFEMUIzNjEzMDA3
QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY4NTBGRTcxRUQ3QzM5RjAwRkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2lu
Z0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzRTczNjExMUNDMjY1OTAwN0JENTM5IC8q
IFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMUIxQ0JE
QkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTI5
MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzFENTkyOUYxNjZFMDYwMDAwRTZCRjAyIC8qIFdlYlBsdWdJbkNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM1NzQ0RjAxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRl
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkE1MDgwQkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2lu
ZG93RmVhdHVyZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTg4MjksNyArODgyOSw3IEBA
CiAJCQkJN0MzNjFENzkxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQy
NThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRUU1NzVD
MURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQjAxQzU3NDk1QTAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkRGQzdEQkIxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyOUNENTVBQTEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5MjMyREY0MThCMjlENjgwMEQwNTk2RiAv
KiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
Mzg0LDEwICsxMDM4NCwxMCBAQAogCQkJCTFBM0U3MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEREQxMjdBNTIx
QzAwOEZGNEY0IC8qIFdlYlBsYXRmb3JtVG91Y2hQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyREE5NDRBMjE4ODRFNEYwMDBFRDg2REIgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjgxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTJBMUNC
RUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyODFD
QkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMkExQ0JF
QjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUQ1OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2Vi
UGx1Z0luQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDhGRUU0MUQ1OTNFMkEwMDhC
QThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1
NzQ0RUYxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTEwNDYwLDEwICsxMDQ2MCwxMCBAQAogCQkJCTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAv
KiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNTczOUJCRTFCNDIwNDY2MDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzRUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBX
ZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MkQ1QTFC
NzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUIx
MUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4g
U291cmNlcyAqLywKLQkJCQkzRjQxOEVGQjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUEx
QjExQzU3NDk2MjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTNGNDE4RUZCMTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRG
QzdEQkMxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzAzMzdERDExMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY4MTYwRDAxODc2NDU1NzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5l
Y3Rpb24ubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA0ZDIy
YWZmMTI4OWY3MDJlOGU1ODRhNjcyM2I1YzZhZTllZGQ5YjhmLi5mZWUwZDI4Njc3ZDAwMGE1YTc5
NzBkYWQ0OWE1MTkwZjRkMjhhZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC03OCw4
ICs3OCw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCiAjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdl
ci5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNlbmRpZgogCiAjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAppbmRleCAwODU5ZjY2NWY3MGVlNjFiZTUyMDdkNTJhNTgzOWJiZWRj
YTEzNzQ2Li44ODNmNjFiYWUzZjFkN2MyZDBhY2UzOGU4NTdiNzBjMmQ1NDMzZWU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yMTgsMTAg
KzIxOCwxMCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUERGUGx1Z2luLmgi
CisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
IgogI2luY2x1ZGUgIldLU3RyaW5nQ0YuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgogI2VuZGlmCiAKQEAgLTM0NzAsMTcgKzM0
NzAsMTcgQEAgUmVtb3RlV2ViSW5zcGVjdG9yVUkqIFdlYlBhZ2U6OnJlbW90ZUluc3BlY3RvclVJ
KCkKIH0KIAogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlciYgV2ViUGFnZTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCitQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyJiBXZWJQYWdlOjpwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKIHsKICAgICBp
ZiAoIW1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLSAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25N
YW5hZ2VyID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsKKyAgICAg
ICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3Jl
YXRlKCp0aGlzKTsKICAgICByZXR1cm4gKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKIH0KIAot
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgV2ViUGFnZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdl
cigpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBXZWJQYWdlOjp2aWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyKCkKIHsKICAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcikKLSAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRl
KCp0aGlzLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkpOworICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoKnRoaXMsIHBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIoKSk7CiAgICAgcmV0dXJuICptX3ZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCmluZGV4IDE0MmY1N2Q1NzVhNmE2ZjEzMTQ2YTliZjQyMjQyZTkyYzcxODRjNjEuLmI3ZWJi
ZTgxYWQ4YmJjNTFmMmVmMjhhNWY4YWZmN2IwNTBmNGU0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTg2LDExICsxODYsMTEgQEAgY2xhc3Mg
V2ViTm90aWZpY2F0aW9uQ2xpZW50OwogY2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7
CiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94eTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5OwotY2xhc3Mg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7
CiBjbGFzcyBXZWJQb3B1cE1lbnU7CiBjbGFzcyBXZWJVbmRvU3RlcDsKIGNsYXNzIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CitjbGFz
cyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogY2xhc3MgV2ViV2hlZWxFdmVudDsKIGVudW0gRmlu
ZE9wdGlvbnMgOiB1aW50MTZfdDsKIHN0cnVjdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjsKQEAg
LTI2Niw4ICsyNjYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0luc3BlY3RvclBhZ2UoKSB7IHJl
dHVybiAhIW1faW5zcGVjdG9yVUkgfHwgISFtX3JlbW90ZUluc3BlY3RvclVJOyB9CiAKICNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9u
TWFuYWdlcigpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIHZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25N
YW5hZ2VyKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgdmlkZW9GdWxsc2NyZWVuTWFu
YWdlcigpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZvaWQgc2V0QWxsb3dzTWVk
aWFEb2N1bWVudElubGluZVBsYXliYWNrKGJvb2wpOwpAQCAtMTQwMCw4ICsxNDAwLDggQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8UmVtb3RlV2ViSW5zcGVjdG9yVUk+IG1fcmVtb3RlSW5zcGVjdG9y
VUk7CiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBSZWZQdHI8V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7Cisg
ICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
cjsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gbV92aWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGJvb2wgbV9hbGxvd3NNZWRp
YURvY3VtZW50SW5saW5lUGxheWJhY2sgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yMzZhMjgxN2I5MDJkZGEyOTZiYTM2YmIxY2U4YWNlNjI3OTAxM2ZiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVk
aWFFbGVtZW50RW51bXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJ
UEMgeworY2xhc3MgQXR0YWNobWVudDsKK2NsYXNzIENvbm5lY3Rpb247CitjbGFzcyBEZWNvZGVy
OworY2xhc3MgTWVzc2FnZVJlY2VpdmVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBOb2RlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKK2NsYXNz
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CisKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQgZmluYWwKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ+CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQg
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRl
eHRJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1
YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoKTsKKworICAgIHZvaWQgaW52YWxp
ZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OworCisgICAgLy8gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlCisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbDsKKworICAg
IC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQo
ZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNo
YW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2Vk
KGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKSBmaW5hbDsKKyAgICB2b2lkIHJhdGVDaGFuZ2Vk
KGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIGZpbmFsOworICAgIHZvaWQgc2Vl
a2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUgbGFz
dE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgZmluYWw7CisgICAgdm9p
ZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIGZp
bmFsOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkgZmluYWw7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sIGVuYWJsZWQsIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBm
aW5hbDsKKyAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29s
KSBmaW5hbDsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBmaW5hbDsKKworICAgIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoUGxheWJhY2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2
NF90IGNvbnRleHRJZCk7CisKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKiBtX21hbmFnZXI7
CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Cit9OworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4sIHByaXZh
dGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2UmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKCk7CisKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworCisgICAgdm9pZCBzZXRVcFBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmKTsKKyAgICB2b2lkIGNs
ZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICB1aW50NjRfdCBjb250ZXh0SWRGb3JN
ZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYpOworCitwcm90ZWN0ZWQ6Cisg
ICAgZnJpZW5kIGNsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7CisgICAgZnJp
ZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisKKyAgICBleHBsaWNpdCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2UmKTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQ
dHI8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+LCBSZWZQdHI8UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAg
TW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBy
ZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAvLyBJbnRl
cmZhY2UgdG8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAorICAgIHZvaWQgcmVzZXRN
ZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUpOworICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGlt
ZSk7CisgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91
YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKKyAgICB2b2lk
IHJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBs
YXliYWNrUmF0ZSk7CisgICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRp
bWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2FuUGxheUZhc3RSZXZl
cnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgYXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVj
dGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQg
YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAg
dm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5h
YmxlZCwgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9pZCB3aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKKyAg
ICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOworCisgICAgLy8g
TWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKKyAgICB2b2lkIHBsYXko
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY3J1YmJp
bmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qg
aW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJ
RFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBp
Y3R1cmUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZU11dGVkKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
bXV0ZWQpOworCisgICAgV2ViUGFnZSogbV9wYWdlOworICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudCosIHVpbnQ2NF90PiBtX21lZGlhRWxlbWVudHM7CisgICAgSGFzaE1hcDx1
aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90
IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAgIEhhc2hDb3VudGVkU2V0PHVp
bnQ2NF90PiBtX2NsaWVudENvdW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJlNThkYzk4NDdjZWRjOTIyOWI3YTNkZTIzMjE3YzQ3ZmVjY2YzMTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKK21lc3NhZ2VzIC0+IFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIgeworICAgIFBsYXkodWludDY0X3QgY29udGV4dElkKQorICAgIFBh
dXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29u
dGV4dElkKQorICAgIEJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFbmRT
Y3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQorICAgIFNlZWtUb1RpbWUodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgdGltZSkKKyAgICBGYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSB0aW1lKQorICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkK
KyAgICBCZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQorICAgIEVuZFNj
YW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCisgICAgU2VsZWN0TGVnaWJsZU1lZGlh
T3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCisgICAgSGFuZGxlQ29u
dHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQorICAgIFRvZ2dsZVBp
Y3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQorICAgIFRvZ2dsZU11dGVkKHVpbnQ2
NF90IGNvbnRleHRJZCkKKyAgICBTZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0
ZWQpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29j
b2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTQxZTM4ZjU0NDUz
ZGIxNTJiMzFkMmFiZTFmNGNiYjA2MDM4YmFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCkBAIC0wLDAg
KzEsNDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAi
QXR0YWNobWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgi
CisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2ltcG9y
dCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0
ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1VzZXJHZXN0
dXJlSW5kaWNhdG9yLmg+CisjaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB1aW50NjRfdCBu
ZXh0Q29udGV4dElkKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY29udGV4dElkID0gMDsKKyAg
ICByZXR1cm4gKytjb250ZXh0SWQ7Cit9CisKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQKKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5h
Z2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAg
LCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KCkKK3sKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cmVzZXRNZWRpYVN0YXRlKG1f
Y29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojpk
dXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmIChtX21hbmFnZXIpCisg
ICAgICAgIG1fbWFuYWdlci0+ZHVyYXRpb25DaGFuZ2VkKG1fY29udGV4dElkLCBkdXJhdGlvbik7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVudFRpbWVD
aGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAgaWYg
KG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5jdXJyZW50VGltZUNoYW5nZWQobV9jb250
ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRp
bWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5idWZmZXJlZFRp
bWVDaGFuZ2VkKG1fY29udGV4dElkLCBidWZmZXJlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9h
dCBwbGF5YmFja1JhdGUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5yYXRlQ2hhbmdlZChtX2NvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRp
bWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQoreworICAgIGlmIChtX21hbmFn
ZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQobV9jb250
ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpUaW1l
UmFuZ2VzJiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0
ZUludGVydmFsKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2Vl
a2FibGVSYW5nZXNDaGFuZ2VkKG1fY29udGV4dElkLCByYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUs
IGxpdmVVcGRhdGVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIHZhbHVlKQoreworICAgIGlm
IChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZChtX2NvbnRleHRJZCwgdmFsdWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
bV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNl
bGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5leHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQobV9jb250ZXh0SWQsIGRpc2FibGVkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAobV9tYW5h
Z2VyKQorICAgICAgICBtX21hbmFnZXItPm11dGVkQ2hhbmdlZChtX2NvbnRleHRJZCwgbXV0ZWQp
OworfQorCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisKK1JlZjxQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyPiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUoV2ViUGFn
ZSYgcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKHBhZ2UpKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcihXZWJQYWdlJiBwYWdlKQorICAgIDogbV9wYWdlKCZwYWdlKQoreworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhp
cyk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXI6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Cisg
ICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7Cisg
ICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7
CisgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CisgICAgICAgIG1v
ZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisgICAgICAgIG1vZGVsLT5zZXRNZWRpYUVs
ZW1lbnQobnVsbHB0cik7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CisgICAg
fQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV9tZWRpYUVsZW1lbnRzLmNsZWFy
KCk7CisgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKworUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbCA9IFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIG1vZGVsLT5hZGRD
bGllbnQoKmludGVyZmFjZSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUo
bW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpNb2RlbEludGVyZmFjZVR1cGxlJiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2Rl
bEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudCYgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWlu
dDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxB
bmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1v
dmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFj
ZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgUmVmUHRyPEhU
TUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IG1vZGVsLT5tZWRpYUVsZW1lbnQoKTsKKyAg
ICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgIG1vZGVsLT5yZW1vdmVDbGll
bnQoKmludGVyZmFjZSk7CisgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CisgICAgbV9tZWRp
YUVsZW1lbnRzLnJlbW92ZShtZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIG1fY29udGV4dE1hcC5y
ZW1vdmUoY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRD
bGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX2NsaWVudENvdW50
cy5hZGQoY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1v
dmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBBU1NFUlQobV9j
bGllbnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7CisgICAgaWYgKG1fY2xpZW50Q291bnRz
LnJlbW92ZShjb250ZXh0SWQpKQorICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFu
YWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCit7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIGF1dG8gZm91bmRJdGVyYXRvciA9IG1fbWVkaWFFbGVtZW50cy5maW5k
KCZtZWRpYUVsZW1lbnQpOworICAgIGlmIChmb3VuZEl0ZXJhdG9yICE9IG1fbWVkaWFFbGVtZW50
cy5lbmQoKSkgeworICAgICAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBmb3VuZEl0ZXJhdG9yLT52
YWx1ZTsKKyAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJ
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQpCisgICAgICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKTsKKyAgICAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBj
b250ZXh0SWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX21lZGlh
RWxlbWVudHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4dElk
KCk7IH0pOworICAgICAgICBhdXRvIGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgICAg
IHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAg
ICAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsKKyAgICAgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7CisgICAg
fQorCisgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OlNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQoreworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkKTsKKyAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNsZWFyUGxheWJh
Y2tDb250cm9sc01hbmFnZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisjZW5kaWYKK30KKwordWlu
dDY0X3QgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsgcmV0dXJu
IG5leHRDb250ZXh0SWQoKTsgfSk7CisgICAgdWludDY0X3QgY29udGV4dElkID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE1lZGlhRWxl
bWVudCgmbWVkaWFFbGVtZW50KTsKKyAgICByZXR1cm4gY29udGV4dElkOworfQorCisjcHJhZ21h
IG1hcmsgSW50ZXJmYWNlIHRvIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RHVyYXRpb25DaGFuZ2VkKGNvbnRleHRJ
ZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
Y3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDdXJyZW50VGltZUNoYW5nZWQoY29u
dGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpCdWZmZXJlZFRpbWVDaGFuZ2Vk
KGNvbnRleHRJZCwgYnVmZmVyZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UGxheWJhY2tTdGFy
dGVkVGltZUNoYW5nZWQoY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1lKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQor
eworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpSYXRlQ2hhbmdlZChjb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVS
YW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdl
cyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRl
SW50ZXJ2YWwpCit7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdl
c1ZlY3RvcjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgo
KTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuc3Rh
cnQoaSkudG9Eb3VibGUoKTsKKyAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMucmFuZ2Vz
KCkuZW5kKGkpLnRvRG91YmxlKCk7CisgICAgICAgIHJhbmdlc1ZlY3Rvci5hcHBlbmQoeyBzdGFy
dCwgZW5kIH0pOworICAgIH0KKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6U2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKGNvbnRleHRJZCwg
V1RGTW92ZShyYW5nZXNWZWN0b3IpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2
YWwpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1
ZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjb250ZXh0SWQsIHZhbHVlKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywg
c2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQo
KSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxp
emVkRGV2aWNlTmFtZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKGNvbnRl
eHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRhcmdldFR5cGUpLCBsb2NhbGl6
ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQoY29udGV4dElkLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRl
eCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgZGlzYWJsZWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OldpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChj
b250ZXh0SWQsIGRpc2FibGVkKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3sKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFu
Z2VkKGNvbnRleHRJZCwgbXV0ZWQpKTsKK30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20g
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OgorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnBsYXkodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkucGxheSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBhdXNl
KCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2ds
ZVBsYXlTdGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGlj
YXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLmVuZFNjcnViYmluZygpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWtUb1RpbWUodGltZSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
dGltZSkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZhc3RTZWVrKHRpbWUpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVn
aW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjYW5uaW5nKCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGlj
YXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDY0X3QgaW5kZXgpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24oaW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBhdXRvIGVsZW1lbnQgPSBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm1lZGlhRWxlbWVudCgp
OworICAgIGlmIChlbGVtZW50KQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNl
KGNvbnRleHRJZCwgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSkpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4
dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGljdHVyZUluUGlj
dHVyZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZU11dGVkKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2ds
ZU11dGVkKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0ZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkuc2V0TXV0ZWQobXV0ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhkM2MyNDkyNTUx
MmJhMzM4ZGIwOWMyYzEyZjc1Yzc1MjkyM2NkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCkBAIC0wLDAg
KzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiAoUExBVEZPUk0oSU9T
KSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxl
bWVudEVudW1zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBdHRhY2htZW50OworY2xh
c3MgQ29ubmVjdGlvbjsKK2NsYXNzIERlY29kZXI7CitjbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Cit9
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIE5vZGU7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllckhvc3RpbmdDb250ZXh0OworY2xh
c3MgV2ViUGFnZTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7CitjbGFz
cyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsK
KworY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAorICAgIDogcHVibGljIFJl
ZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4KKyAgICAsIHB1YmxpYyBX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChtYW5h
Z2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBu
dWxscHRyOyB9CisKKyAgICBMYXllckhvc3RpbmdDb250ZXh0KiBsYXllckhvc3RpbmdDb250ZXh0
KCkgeyByZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0LmdldCgpOyB9CisgICAgdm9pZCBzZXRM
YXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiYm
KTsKKworICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzQW5pbWF0aW5n
OyB9CisgICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29sIGZsYWcpIHsgbV9pc0FuaW1hdGluZyA9
IGZsYWc7IH0KKworICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRJc0Z1bGxzY3JlZW47IH0KKyAgICB2b2lkIHNldFRhcmdldElzRnVsbHNjcmVlbihi
b29sIGZsYWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSBmbGFnOyB9CisKKyAgICBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgZnVsbHNjcmVlbk1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlOyB9CisgICAgdm9pZCBzZXRGdWxs
c2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkgeyBtX2Z1bGxzY3JlZW5Nb2RlID0gbW9kZTsgfQorCisgICAgYm9vbCBpc0Z1
bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbHNjcmVlbjsgfQorICAgIHZvaWQgc2V0
SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX2lzRnVsbHNjcmVlbiA9IGZsYWc7IH0KKworcHJp
dmF0ZToKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIHZvaWQgaGFzVmlk
ZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKKworICAgIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQoVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNv
bnRleHRJZCk7CisKKyAgICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAg
dWludDY0X3QgbV9jb250ZXh0SWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0Nv
bnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKKyAgICBib29sIG1faXNBbmltYXRpbmcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV90YXJnZXRJc0Z1bGxzY3JlZW4geyBmYWxzZSB9OworICAgIFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX2Z1bGxz
Y3JlZW5Nb2RlIHsgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlTm9uZSB9OworICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4geyBmYWxzZSB9OworfTsKKwor
Y2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJiwg
UGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIoKTsKKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICAKKyAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OworCisgICAgLy8gSW50ZXJmYWNlIHRvIENocm9tZUNsaWVudAorICAgIGJvb2wgc3VwcG9ydHNW
aWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlKSBjb25zdDsKKyAgICB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9F
bGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNj
cmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Jik7CisgICAgdm9p
ZCBleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1M
VmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlKTsKKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0OworCisgICAgZXhwbGljaXQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cihXZWJQYWdlJiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOworCisgICAgdHlwZWRlZiBzdGQ6
OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4s
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VU
dXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxB
bmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsK
KyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4
dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKwor
ICAgIC8vIEludGVyZmFjZSB0byBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisgICAg
dm9pZCBoYXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKTsK
KyAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5CisgICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0
X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpOworICAgIHZvaWQgZGlkU2V0dXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9y
dCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElk
LCB1bnNpZ25lZCBncmF2aXR5KTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0
X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpOworICAgIAorICAgIFdlYlBhZ2UqIG1f
cGFnZTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOworICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCosIHVpbnQ2NF90
PiBtX3ZpZGVvRWxlbWVudHM7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VU
dXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkIHsgMCB9OworICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7Cit9
OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2Ev
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzRiNTY4OTU1
OWVlNzVkOTk0MTZlODA0YzdmY2Y2OTdiYjAyNTEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2Vz
LmluCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorbWVzc2FnZXMgLT4gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlciB7CisgICAgUmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCisgICAgRGlk
U2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRFeGl0RnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICBEaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgU2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKKyAgICBTZXRWaWRl
b0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQor
ICAgIEZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5N
b2RlKQorICAgIEZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgaXNQYWdlVmlzaWJsZSkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmVmNjgwYjlkYWI0NmIyZmM2NTVmNzMyMGU3YTU1ZDA5MjExODIxNDcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW0KQEAgLTAsMCArMSw0NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKKworI2lmIChQTEFURk9S
TShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJBdHRhY2htZW50LmgiCisjaW1wb3J0ICJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
LmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIldlYlBhZ2Uu
aCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1h
dGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXll
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyVmlkZW8uaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+
CisjaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBJbnRSZWN0IGlubGluZVZpZGVvRnJhbWUo
SFRNTFZpZGVvRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBlbGVtZW50LmRvY3VtZW50KCkudXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgYXV0byogcmVuZGVyZXIg
PSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBhdXRvIHJlY3QgPSByZW5kZXJlci0+dmlkZW9Cb3goKTsKKyAgICByZWN0Lm1v
dmVCeShyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKS5sb2NhdGlvbigpKTsKKyAg
ICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KHJl
Y3QpOworfQorCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQoVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29u
dGV4dElkKQorICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAgICwgbV9jb250ZXh0SWQoY29u
dGV4dElkKQoreworfQorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+VmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8
TGF5ZXJIb3N0aW5nQ29udGV4dD4mJiBjb250ZXh0KQoreworICAgIG1fbGF5ZXJIb3N0aW5nQ29u
dGV4dCA9IFdURk1vdmUoY29udGV4dCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit7CisgICAgaWYgKG1f
bWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5oYXNWaWRlb0NoYW5nZWQobV9jb250ZXh0SWQs
IGhhc1ZpZGVvKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dmlkZW9EaW1lbnNpb25z
Q2hhbmdlZChtX2NvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKTsKK30KKworI3ByYWdtYSBtYXJr
IC0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCitSZWY8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4g
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UsIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlLCBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKSk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIoV2ViUGFnZSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9u
TWFuYWdlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAgICAsIG1fcGxheWJhY2tTZXNzaW9uTWFu
YWdlcihwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7Cit9CisKK1ZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgICAgIHN0ZDo6
dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CisKKyAgICAgICAgbW9kZWwtPnNldFZpZGVv
RWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNl
KTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBtX2Nv
bnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX3ZpZGVvRWxlbWVudHMuY2xlYXIoKTsKKyAgICBtX2Ns
aWVudENvdW50cy5jbGVhcigpOworICAgIAorICAgIGlmIChtX3BhZ2UpCisgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKK3sKKyAg
ICBBU1NFUlQobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlID0gbnVsbHB0cjsKK30K
KworVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbCA9
IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIG1fcGxh
eWJhY2tTZXNzaW9uTWFuYWdlci0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworCisg
ICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6
OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7CisgICAgbW9kZWwtPmFkZENsaWVu
dCgqaW50ZXJmYWNlKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2Rl
bCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1v
ZGVsSW50ZXJmYWNlVHVwbGUmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
Y29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOworICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgcmV0dXJuIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dCYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNv
bnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9
IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXItPnJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKworICAgIFJl
ZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50
KCk7CisgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICBtb2RlbC0+cmVt
b3ZlQ2xpZW50KCppbnRlcmZhY2UpOworICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAg
IG1fdmlkZW9FbGVtZW50cy5yZW1vdmUodmlkZW9FbGVtZW50LmdldCgpKTsKKyAgICBtX2NvbnRl
eHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkLCAxKTsKKyAgICBpZiAoIWFk
ZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7
Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRh
aW5zKGNvbnRleHRJZCkpOworCisgICAgaW50IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMu
Z2V0KGNvbnRleHRJZCk7CisgICAgQVNTRVJUKGNsaWVudENvdW50ID4gMCk7CisgICAgY2xpZW50
Q291bnQtLTsKKworICAgIGlmIChjbGllbnRDb3VudCA8PSAwKSB7CisgICAgICAgIG1fY2xpZW50
Q291bnRzLnJlbW92ZShjb250ZXh0SWQpOworICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJ
ZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudENvdW50cy5zZXQoY29u
dGV4dElkLCBjbGllbnRDb3VudCk7Cit9CisKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hy
b21lQ2xpZW50OgorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9G
dWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKSBjb25zdAoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0o
bW9kZSk7CisgICAgcmV0dXJuIFNldHRpbmdzOjphdktpdEVuYWJsZWQoKTsKKyNlbHNlCisgICAg
cmV0dXJuIG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSAmJiBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKKyNlbmRpZgor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9y
VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1fcGFn
ZSk7CisgICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXItPmNvbnRleHRJZEZvck1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQpOworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV92aWRlb0VsZW1lbnRzLmFkZCgmdmlkZW9FbGVtZW50LCBjb250
ZXh0SWQpOworICAgIFVOVVNFRF9QQVJBTShhZGRSZXN1bHQpOworICAgIEFTU0VSVChhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID09IGNvbnRleHRJZCk7CisKKyAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVy
ZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworICAgIGFkZENsaWVu
dEZvckNvbnRleHQoY29udGV4dElkKTsKKyAgICBpZiAoIWludGVyZmFjZS0+bGF5ZXJIb3N0aW5n
Q29udGV4dCgpKQorICAgICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5
ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKKwor
ICAgIGF1dG8gdmlkZW9SZWN0ID0gaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpOworICAg
IEZsb2F0UmVjdCB2aWRlb0xheWVyRnJhbWUgPSBGbG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0Lndp
ZHRoKCksIHZpZGVvUmVjdC5oZWlnaHQoKSk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgb2xkTW9kZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUo
KTsKKyAgICBpbnRlcmZhY2UtPnNldFRhcmdldElzRnVsbHNjcmVlbih0cnVlKTsKKyAgICBpbnRl
cmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOworICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1l
bnQoJnZpZGVvRWxlbWVudCk7CisgICAgaWYgKG9sZE1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSkKKyAgICAgICAgbW9kZWwtPnNldFZpZGVvTGF5
ZXJGcmFtZSh2aWRlb0xheWVyRnJhbWUpOworCisgICAgaWYgKGludGVyZmFjZS0+aXNBbmltYXRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcodHJ1
ZSk7CisKKyAgICBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUgPSB2aWRlb0VsZW1lbnQud2Vi
a2l0U3VwcG9ydHNQcmVzZW50YXRpb25Nb2RlKEhUTUxWaWRlb0VsZW1lbnQ6OlZpZGVvUHJlc2Vu
dGF0aW9uTW9kZTo6UGljdHVyZUluUGljdHVyZSk7CisgICAgCisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldHVwRnVsbHNjcmVlbldpdGhJ
RChjb250ZXh0SWQsIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5jb250ZXh0SUQo
KSwgdmlkZW9SZWN0LCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVs
bHNjcmVlbk1vZGUoKSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSksIG1fcGFnZS0+cGFnZUlEKCkp
OworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50KQor
eworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFp
bnMoJnZpZGVvRWxlbWVudCkpOworCisgICAgdWludDY0X3QgY29udGV4dElkID0gbV92aWRlb0Vs
ZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKKyAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJ
bnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3Jl
ZW4oZmFsc2UpOworCisgICAgaWYgKGludGVyZmFjZS5pc0FuaW1hdGluZygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnRlcmZhY2Uuc2V0SXNBbmltYXRpbmcodHJ1ZSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2Ny
ZWVuKGNvbnRleHRJZCwgaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVs
bHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYg
dmlkZW9FbGVtZW50LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgdGFyZ2V0TW9kZSkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBBU1NFUlQobV92
aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKKworICAgIHVpbnQ2NF90IGNv
bnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZpZGVvRWxlbWVudCk7CisgICAgYXV0byYg
aW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2Uu
c2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbldpdGhvdXRBbmlt
YXRpb25Ub01vZGUoY29udGV4dElkLCB0YXJnZXRNb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aWRlb0VsZW1lbnQpOworICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXRNb2RlKTsKKyNlbmRpZgorfQorCisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6aGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKK3sK
KyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0SGFzVmlkZW8oY29udGV4dElkLCBoYXNWaWRlbyksIG1f
cGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnZpZGVv
RGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZp
ZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0VmlkZW9EaW1lbnNpb25z
KGNvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKKyNw
cmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eToKKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0
X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3sKKyAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtb2RlLCBmaW5pc2hlZFdpdGhNZWRp
YSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCit7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7
Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBQbGF0Zm9ybUxh
eWVyKiB2aWRlb0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworI2lmbmRlZiBOREVCVUcKKyAgICBb
dmlkZW9MYXllciBzZXROYW1lOkAiV2ViIHZpZGVvIGZ1bGxzY3JlZW4gbWFuYWdlciBsYXllciJd
OworI2VuZGlmCisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rp
b24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKworICAgIFt2aWRlb0xheWVyIHNldFBvc2l0aW9u
OkNHUG9pbnRNYWtlKDAsIDApXTsKKyAgICBbdmlkZW9MYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6
Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQpXTsKKworICAgIC8vIFNl
dCBhIHNjYWxlIGZhY3RvciBoZXJlIHRvIG1ha2UgY29udmVydFJlY3Q6dG9MYXllcjpuaWwgdGFr
ZSBzY2FsZSBmYWN0b3IgaW50byBhY2NvdW50LiA8cmRhcjovL3Byb2JsZW0vMTgzMTY1NDI+Lgor
ICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9yIGlzIGludmVydGVkIGluIHRoZSBob3N0aW5nIHByb2Nl
c3MuCisgICAgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZh
Y3RvcigpOworICAgIFt2aWRlb0xheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNj
YWxlKGhvc3RpbmdTY2FsZUZhY3RvciwgaG9zdGluZ1NjYWxlRmFjdG9yLCAxKV07CisKKyAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0
aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQp
OworCisgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldFJvb3RMYXllcih2
aWRlb0xheWVyKTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIAorICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2
aWRlb0xheWVyLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7CisgICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0
aGlzLCBjb250ZXh0SWRdIHsKKyAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2Up
CisgICAgICAgICAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5t
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgCisgICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKK30KKyAgICAKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAg
aW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisgICAgaW50ZXJmYWNlLT5zZXRJc0Z1
bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYgKGludGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVu
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRl
b0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7CisgICAgaWYgKCF2aWRlb0VsZW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIGV4aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2Fz
IHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1cmluZyBhbiBhbmltYXRpb24uCisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxl
bWVudF0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9F
bGVtZW50KTsKKyAgICB9KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRF
eGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAKKyAgICBt
b2RlbC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihbcHJvdGVjdGVkVGhpcywgY29udGV4
dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwg
bW9kZWxdIHsKKyAgICAgICAgICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWws
IFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0geworICAgICAgICAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlz
LCBjb250ZXh0SWQsIGludGVyZmFjZV0geworICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJm
YWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIobnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQo
bnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xl
YW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50
ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRl
cmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNj
cmVlbihmYWxzZSk7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCk7CisgICAgYm9vbCB0YXJnZXRJ
c0Z1bGxzY3JlZW4gPSBpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpOworCisgICAgbW9k
ZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CisgICAgUmVmUHRyPEhUTUxWaWRlb0Vs
ZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKworICAgIGludGVy
ZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSk7CisgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwor
CisgICAgaWYgKCF2aWRlb0VsZW1lbnQgfHwgIXRhcmdldElzRnVsbHNjcmVlbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudCwgbW9kZV0geworICAgICAgICBpZiAocHJvdGVj
dGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCwgbW9kZSk7CisgICAgfSk7Cit9
CisgICAgCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5
RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpCit7CisgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5zZXRWaWRlb0xheWVyR3Jhdml0eSgoVmlkZW9GdWxsc2NyZWVuTW9k
ZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKK30KKyAgICAKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBpc1BhZ2VWaXNpYmxlKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvJiBtb2RlbCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJZCk7CisKKyAgICBpZiAo
IWlzUGFnZVZpc2libGUpCisgICAgICAgIG1vZGVsLnZpZGVvRWxlbWVudCgpLT5zY3JvbGxJbnRv
Vmlld0lmTm90VmlzaWJsZShmYWxzZSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShjb250ZXh0
SWQsIHRydWUsIGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLnZpZGVvRWxlbWVudCgpKSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworfQorICAgIAordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRW
aWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQoreworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwg
aW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBp
ZiAoc3RkOjppc25hbihib3VuZHMueCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy55KCkpIHx8IHN0
ZDo6aXNuYW4oYm91bmRzLndpZHRoKCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLmhlaWdodCgpKSkg
eworICAgICAgICBhdXRvIHZpZGVvUmVjdCA9IGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLT52aWRl
b0VsZW1lbnQoKSk7CisgICAgICAgIGJvdW5kcyA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qu
d2lkdGgoKSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKKyAgICB9CisgICAgCisgICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBd
OworICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKKyAgICAgICAgaW50
ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9y
dCgpKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7CisgICAgbWFjaF9w
b3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7CisgICAg
W0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3NTNjYjE2OThiZGIxNTVmOTY2OTgxMTFmMDUxNWYyMzg4N2Y1ZGEyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFF
bGVtZW50RW51bXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFj
ZSBJUEMgewotY2xhc3MgQXR0YWNobWVudDsKLWNsYXNzIENvbm5lY3Rpb247Ci1jbGFzcyBEZWNv
ZGVyOwotY2xhc3MgTWVzc2FnZVJlY2VpdmVyOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBOb2RlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQgZmluYWwKLSAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIm
IG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29u
dGV4dElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0
cjsgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0OwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAg
dm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbDsKLQotICAgIC8vIFdlYlBsYXliYWNrTW9kZWxD
bGllbnQKLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOwotICAgIHZvaWQg
Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUp
IGZpbmFsOwotICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIGZpbmFsOwotICAg
IHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRp
bWUpIGZpbmFsOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBs
YXliYWNrUmF0ZSkgZmluYWw7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3Qg
V2ViQ29yZTo6VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2
ZVVwZGF0ZUludGVydmFsKSBmaW5hbDsKLSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5n
ZWQoYm9vbCB2YWx1ZSkgZmluYWw7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7Ci0gICAgdm9pZCBsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKLSAg
ICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwot
ICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5h
bDsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29y
ZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBj
b25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOwotICAgIHZvaWQgd2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIGZpbmFsOwotICAgIHZvaWQgbXV0
ZWRDaGFuZ2VkKGJvb2wpIGZpbmFsOwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsK
LQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRf
dCBtX2NvbnRleHRJZDsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwgfldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIoKTsKLQotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7Ci0KLSAgICB2b2lkIHNldFVwUGxheWJhY2tD
b250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYpOwotICAgIHZvaWQgY2xl
YXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIHVpbnQ2NF90IGNvbnRleHRJZEZvck1l
ZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7Ci0KLXByb3RlY3RlZDoKLSAg
ICBmcmllbmQgY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLSAgICBm
cmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKLQotICAgIGV4cGxpY2l0IFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnR1
cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4s
IFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZh
Y2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJDb3JlOjpXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4
dElkKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQodWludDY0
X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4
dElkKTsKLQotICAgIC8vIEludGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0Ci0gICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSk7Ci0gICAg
dm9pZCBjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKLSAgICB2b2lkIHBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNr
U3RhcnRlZFRpbWUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKLSAgICB2b2lkIHNlZWthYmxlUmFu
Z2VzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMm
LCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0g
ICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCB2YWx1ZSk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VO
YW1lKTsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCk7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eQotICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAg
IHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKLSAgICB2
b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOwotICAgIHZvaWQg
YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGJlZ2lu
U2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZW5kU2Nhbm5p
bmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24o
dWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Ci0gICAg
dm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpOwot
ICAgIHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNldE11
dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7Ci0KLSAgICBXZWJQYWdlKiBtX3Bh
Z2U7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiwgdWludDY0X3Q+IG1f
bWVkaWFFbGVtZW50czsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxl
PiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQg
eyAwIH07Ci0gICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk1NjY2YTcxNTRjYzRhOTQ0ZDA0ZWNhODZjYjMwMzAwNmJkNzc4YTEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyAv
ZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFy
ZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0j
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIgewotICAgIFBsYXkodWludDY0X3QgY29udGV4dElkKQotICAgIFBhdXNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKLSAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQotICAg
IEJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBFbmRTY3J1YmJpbmcodWlu
dDY0X3QgY29udGV4dElkKQotICAgIFNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgdGltZSkKLSAgICBGYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQot
ICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBCZWdpblNj
YW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQotICAgIEVuZFNjYW5uaW5nKHVpbnQ2
NF90IGNvbnRleHRJZCkKLSAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpCi0gICAgU2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi0gICAgSGFuZGxlQ29udHJvbGxlZEVsZW1l
bnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQotICAgIFRvZ2dsZVBpY3R1cmVJblBpY3R1
cmUodWludDY0X3QgY29udGV4dElkKQotICAgIFRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICBTZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi19Ci0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Mjg1YTI3ZTQ4YjJhNDI4MjlmYjQ0MjI0YzE3NGQ5YjIzODM1NWI1Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSw0
NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbXBv
cnQgIkF0dGFjaG1lbnQuaCIKLSNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2lt
cG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
IgotI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgotI2lt
cG9ydCA8V2ViQ29yZS9FdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgotI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMg
dWludDY0X3QgbmV4dENvbnRleHRJZCgpCi17Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnRleHRJ
ZCA9IDA7Ci0gICAgcmV0dXJuICsrY29udGV4dElkOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIDogbV9t
YW5hZ2VyKCZtYW5hZ2VyKQotICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotewotfQotCi1X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6cmVzZXRNZWRpYVN0YXRlKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPnJlc2V0TWVkaWFTdGF0ZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBk
dXJhdGlvbikKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmR1cmF0
aW9uQ2hhbmdlZChtX2NvbnRleHRJZCwgZHVyYXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+Y3VycmVudFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwg
YW5jaG9yVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQotewotICAgIGlmICht
X21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YnVmZmVyZWRUaW1lQ2hhbmdlZChtX2NvbnRl
eHRJZCwgYnVmZmVyZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRl
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cmF0ZUNoYW5nZWQo
bV9jb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChk
b3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBwbGF5
YmFja1N0YXJ0ZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYg
cmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZh
bCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZChtX2NvbnRleHRJZCwgcmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBk
YXRlSW50ZXJ2YWwpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAobV9t
YW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQobV9j
b250ZXh0SWQsIHZhbHVlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsK
LSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElk
LCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZp
Y2VOYW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQobV9jb250ZXh0SWQsIGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERl
dmljZU5hbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKG1fY29udGV4dElkLCBkaXNhYmxlZCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQp
Ci17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5tdXRlZENoYW5nZWQo
bV9jb250ZXh0SWQsIG11dGVkKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcgotCi1SZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihwYWdlKSk7Ci19Ci0KLVdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYgcGFn
ZSkKLSAgICA6IG1fcGFnZSgmcGFnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCi17Ci0gICAg
Zm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQ
dHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOwotICAgICAgICBS
ZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAg
ICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotICAgICAgICBtb2RlbC0+
cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAgICAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50
KG51bGxwdHIpOwotCi0gICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIH0KLQot
ICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwotICAgIG1fbWVkaWFFbGVtZW50cy5jbGVhcigpOwot
ICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLVdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWwg
PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7Ci0gICAgUmVm
UHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsK
LSAgICBtb2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2UpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFr
ZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKLX0KLQotV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVs
SW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1
cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQot
Ci1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVy
biAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50
PiBtZWRpYUVsZW1lbnQgPSBtb2RlbC0+bWVkaWFFbGVtZW50KCk7Ci0gICAgbW9kZWwtPnNldE1l
ZGlhRWxlbWVudChudWxscHRyKTsKLSAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2Up
OwotICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIG1fbWVkaWFFbGVtZW50cy5yZW1v
dmUobWVkaWFFbGVtZW50LmdldCgpKTsKLSAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJ
ZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29u
dGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRl
eHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50Q291
bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotICAgIGlmIChtX2NsaWVudENvdW50cy5yZW1vdmUo
Y29udGV4dElkKSkKLSAgICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQotewotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICBhdXRvIGZvdW5kSXRlcmF0b3IgPSBtX21lZGlhRWxlbWVudHMuZmluZCgmbWVk
aWFFbGVtZW50KTsKLSAgICBpZiAoZm91bmRJdGVyYXRvciAhPSBtX21lZGlhRWxlbWVudHMuZW5k
KCkpIHsKLSAgICAgICAgdWludDY0X3QgY29udGV4dElkID0gZm91bmRJdGVyYXRvci0+dmFsdWU7
Ci0gICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9PSBjb250ZXh0SWQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkKQotICAgICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdl
ckNvbnRleHRJZCk7Ci0gICAgICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4
dElkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1l
bnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9
KTsKLSAgICAgICAgYXV0byBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwot
ICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgICAgICByZW1v
dmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICAgICAg
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7Ci0gICAgICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuc2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOwotICAgIH0KLQot
ICAgIGFkZENsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpT
ZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCk7Ci0gICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOwotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotI2VuZGlmCi19Ci0K
LXVpbnQ2NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1lZGlhRWxl
bWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCi17Ci0gICAgYXV0
byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7
IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOwotICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRN
ZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7Ci0gICAgcmV0dXJuIGNvbnRleHRJZDsKLX0KLQot
I3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OgotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0ZShjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpkdXJh
dGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1
cmF0aW9uQ2hhbmdlZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkK
LXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRp
bWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZl
cmVkVGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6QnVmZmVyZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGlt
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IHBsYXliYWNrU3RhcnRlZFRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNv
bnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5n
ZWQoY29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVS
YW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFs
KQotewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykg
ewotICAgICAgICBkb3VibGUgc3RhcnQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLnN0YXJ0KGkpLnRv
RG91YmxlKCk7Ci0gICAgICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLmVuZChp
KS50b0RvdWJsZSgpOwotICAgICAgICByYW5nZXNWZWN0b3IuYXBwZW5kKHsgc3RhcnQsIGVuZCB9
KTsKLSAgICB9Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OlNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZChjb250ZXh0SWQsIFdURk1v
dmUocmFuZ2VzVmVjdG9yKSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUp
Ci17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OkNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY29udGV4dElkLCB2YWx1ZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9w
dGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1f
cGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0
VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkV4dGVybmFsUGxheWJhY2tQ
cm9wZXJ0aWVzQ2hhbmdlZChjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90
Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQot
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJ
bmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQotewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoY29udGV4dElkLCBkaXNhYmxl
ZCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok11dGVkQ2hhbmdlZChjb250ZXh0
SWQsIG11dGVkKSk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eToKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpw
bGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnBsYXkoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwYXVzZSh1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wYXVzZSgp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dn
bGVQbGF5U3RhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdp
blNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5iZWdpblNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5lbmRTY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUp
Ci17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9UaW1lKHRpbWUpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHRpbWUpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mYXN0
U2Vlayh0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNj
YW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nQmFja3dhcmQo
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyh1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY2Fu
bmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKLXsKLSAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewotICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElE
UmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBlbGVtZW50ID0gZW5zdXJl
TW9kZWwoY29udGV4dElkKS5tZWRpYUVsZW1lbnQoKTsKLSAgICBpZiAoZWxlbWVudCkKLSAgICAg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQsIGVsZW1lbnQtPmdl
dElkQXR0cmlidXRlKCkpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0
b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVNdXRlZCgpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBtdXRlZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE11dGVk
KG11dGVkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
YTlhMDBmMTFhZWE0NDRmOTY4NTEzNWI5OTcwY2NhMmQ4YWU3MzI4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIChQTEFURk9STShJT1Mp
ICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVt
ZW50RW51bXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIEF0dGFjaG1lbnQ7Ci1j
bGFzcyBDb25uZWN0aW9uOwotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIE1lc3NhZ2VSZWNlaXZlcjsK
LX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgTm9kZTsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIExheWVySG9zdGluZ0NvbnRleHQ7Ci1j
bGFzcyBXZWJQYWdlOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsK
LWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ci0g
ICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
PgotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBj
b250ZXh0SWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCk7Ci0KLSAgICB2
b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotICAgIExheWVySG9z
dGluZ0NvbnRleHQqIGxheWVySG9zdGluZ0NvbnRleHQoKSB7IHJldHVybiBtX2xheWVySG9zdGlu
Z0NvbnRleHQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1
bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYpOwotCi0gICAgYm9vbCBpc0FuaW1hdGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1faXNBbmltYXRpbmc7IH0KLSAgICB2b2lkIHNldElzQW5pbWF0
aW5nKGJvb2wgZmxhZykgeyBtX2lzQW5pbWF0aW5nID0gZmxhZzsgfQotCi0gICAgYm9vbCB0YXJn
ZXRJc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX3RhcmdldElzRnVsbHNjcmVlbjsgfQot
ICAgIHZvaWQgc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX3RhcmdldElzRnVs
bHNjcmVlbiA9IGZsYWc7IH0KLQotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBmdWxsc2NyZWVuTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVs
bHNjcmVlbk1vZGU7IH0KLSAgICB2b2lkIHNldEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSB7IG1fZnVsbHNjcmVl
bk1vZGUgPSBtb2RlOyB9Ci0KLSAgICBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJu
IG1faXNGdWxsc2NyZWVuOyB9Ci0gICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7
IG1faXNGdWxsc2NyZWVuID0gZmxhZzsgfQotCi1wcml2YXRlOgotICAgIC8vIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYpIG92ZXJyaWRlOwotCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKLQotICAg
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2Nv
bnRleHRJZDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXll
ckhvc3RpbmdDb250ZXh0OwotICAgIGJvb2wgbV9pc0FuaW1hdGluZyB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX3RhcmdldElzRnVsbHNjcmVlbiB7IGZhbHNlIH07Ci0gICAgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fZnVsbHNjcmVlbk1vZGUgeyBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07
Ci0gICAgYm9vbCBtX2lzRnVsbHNjcmVlbiB7IGZhbHNlIH07Ci19OwotCi1jbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2UmLCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcigpOwotICAgIAotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIAotICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7Ci0KLSAgICAvLyBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50Ci0gICAgYm9vbCBzdXBwb3J0
c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUpIGNvbnN0OwotICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRl
b0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBleGl0VmlkZW9GdWxs
c2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmKTsKLSAgICB2
b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ7Ci0KLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKFdlYlBhZ2UmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7Ci0KLSAgICB0
eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50PiwgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+
PiBNb2RlbEludGVyZmFjZVR1cGxlOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1
cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBlbnN1cmVNb2RlbCh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3Zl
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1
aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQKLSAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pOwotICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotCi0gICAg
Ly8gTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKLSAgICB2b2lk
IHJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhN
ZWRpYSk7Ci0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
LSAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCBkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZENs
ZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZXRWaWRlb0xh
eWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91
bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJH
cmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpOwotICAgIHZv
aWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlz
aWJsZSk7Ci0gICAgCi0gICAgV2ViUGFnZSogbV9wYWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyPiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgSGFzaE1hcDxXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50KiwgdWludDY0X3Q+IG1fdmlkZW9FbGVtZW50czsKLSAgICBI
YXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAg
dWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaE1hcDx1
aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50czsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzU5YzI1YWFl
N2IwMTVlMzAxM2Q5YTFiMTUwN2I2MTBhMmZiY2E1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM1
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIChQ
TEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlciB7Ci0gICAgUmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVv
RnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi0gICAgRGlkU2V0dXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCi0gICAgRGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
LSAgICBEaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgU2V0Vmlk
ZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0
IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKLSAgICBTZXRWaWRlb0xheWVyR3Jh
dml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQotICAgIEZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotICAg
IEZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQ
YWdlVmlzaWJsZSkKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyNGM5OGNhOGVjNjMzYWU2ODY4OTU5NjUwZWU4MjEyOWUyMzhl
YjcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDQ2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCi0KLSNpZiAo
UExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQXR0YWNobWVudC5oIgotI2lt
cG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0ICJXZWJQYWdlLmgiCi0jaW1w
b3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzLmgi
Ci0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQg
IldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0IDxRdWFy
dHpDb3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxl
bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5n
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZGVvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jl
bmRlclZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvVGltZVJhbmdlcy5oPgotI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgSW50UmVjdCBp
bmxpbmVWaWRlb0ZyYW1lKEhUTUxWaWRlb0VsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgZWxlbWVu
dC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAg
IGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byByZWN0ID0gcmVuZGVyZXItPnZpZGVvQm94
KCk7Ci0gICAgcmVjdC5tb3ZlQnkocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCku
bG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS52aWV3KCktPmNvbnRl
bnRzVG9Sb290VmlldyhyZWN0KTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dAotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICA6IG1fbWFuYWdlcigmbWFu
YWdlcikKLSAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQoKQotewotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNl
dExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+
JiYgY29udGV4dCkKLXsKLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEZNb3ZlKGNvbnRl
eHQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhhc1Zp
ZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+aGFzVmlkZW9DaGFuZ2VkKG1fY29udGV4dElkLCBoYXNWaWRlbyk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlkZW9EaW1lbnNpb25z
Q2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBpZiAobV9t
YW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV9jb250
ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIKLQotUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFu
YWdlcikpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIHBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIpCi0gICAgOiBtX3BhZ2UoJnBhZ2UpCi0gICAgLCBtX3BsYXliYWNr
U2Vzc2lvbk1hbmFnZXIocGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLXsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMp
OwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcigpCi17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkg
ewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsOwotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4g
aW50ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwot
Ci0gICAgICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7Ci0gICAgICAgIG1vZGVs
LT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7Ci0KLSAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlk
YXRlKCk7Ci0gICAgfQotCi0gICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7Ci0gICAgbV92aWRlb0Vs
ZW1lbnRzLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKLSAgICAKLSAgICBp
ZiAobV9wYWdlKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3Jl
YXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWwgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAgICBtX3BsYXliYWNr
U2Vzc2lvbk1hbmFnZXItPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIGlu
dGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVh
dGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOwotICAgIG1vZGVsLT5hZGRDbGllbnQoKmlu
dGVyZmFjZSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBX
VEZNb3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2Rl
bEludGVyZmFjZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFu
ZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBt
X2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKLSAgICBp
ZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIHJldHVybiBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwo
dWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0
aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQp
OwotCi0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5yZW1vdmVDbGllbnRGb3JDb250ZXh0
KGNvbnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50
ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOwotICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVs
bHB0cik7Ci0gICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLSAgICBpbnRlcmZh
Y2UtPmludmFsaWRhdGUoKTsKLSAgICBtX3ZpZGVvRWxlbWVudHMucmVtb3ZlKHZpZGVvRWxlbWVu
dC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNv
bnRleHRJZCwgMSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAg
IEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKLQotICAgIGludCBj
bGllbnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOwotICAgIEFTU0VSVChj
bGllbnRDb3VudCA+IDApOwotICAgIGNsaWVudENvdW50LS07Ci0KLSAgICBpZiAoY2xpZW50Q291
bnQgPD0gMCkgewotICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKTsKLSAg
ICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOwotfQotCi0j
cHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIENocm9tZUNsaWVudDoKLQotYm9vbCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKLXsKLSNpZiBQ
TEFURk9STShJT1MpCi0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIHJldHVybiBTZXR0aW5n
czo6YXZLaXRFbmFibGVkKCk7Ci0jZWxzZQotICAgIHJldHVybiBtb2RlID09IEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgJiYgc3VwcG9y
dHNQaWN0dXJlSW5QaWN0dXJlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9F
bGVtZW50JiB2aWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKQotewotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVChtb2RlICE9
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotCi0gICAg
dWludDY0X3QgY29udGV4dElkID0gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5jb250ZXh0SWRG
b3JNZWRpYUVsZW1lbnQodmlkZW9FbGVtZW50KTsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmlk
ZW9FbGVtZW50cy5hZGQoJnZpZGVvRWxlbWVudCwgY29udGV4dElkKTsKLSAgICBVTlVTRURfUEFS
QU0oYWRkUmVzdWx0KTsKLSAgICBBU1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9PSBj
b250ZXh0SWQpOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRl
eHRJZCk7Ci0gICAgaWYgKCFpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKLSAgICAg
ICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6
OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7Ci0KLSAgICBhdXRvIHZpZGVvUmVj
dCA9IGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KTsKLSAgICBGbG9hdFJlY3QgdmlkZW9M
YXllckZyYW1lID0gRmxvYXRSZWN0KDAsIDAsIHZpZGVvUmVjdC53aWR0aCgpLCB2aWRlb1JlY3Qu
aGVpZ2h0KCkpOwotCi0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG9sZE1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCk7Ci0gICAgaW50ZXJmYWNl
LT5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7Ci0gICAgaW50ZXJmYWNlLT5zZXRGdWxsc2Ny
ZWVuTW9kZShtb2RlKTsKLSAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KCZ2aWRlb0VsZW1lbnQp
OwotICAgIGlmIChvbGRNb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU5vbmUpCi0gICAgICAgIG1vZGVsLT5zZXRWaWRlb0xheWVyRnJhbWUodmlkZW9MYXll
ckZyYW1lKTsKLQotICAgIGlmIChpbnRlcmZhY2UtPmlzQW5pbWF0aW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKHRydWUpOwotCi0gICAgYm9vbCBh
bGxvd3NQaWN0dXJlSW5QaWN0dXJlID0gdmlkZW9FbGVtZW50LndlYmtpdFN1cHBvcnRzUHJlc2Vu
dGF0aW9uTW9kZShIVE1MVmlkZW9FbGVtZW50OjpWaWRlb1ByZXNlbnRhdGlvbk1vZGU6OlBpY3R1
cmVJblBpY3R1cmUpOwotICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQoY29udGV4dElkLCBp
bnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+Y29udGV4dElEKCksIHZpZGVvUmVjdCwg
bV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCks
IGFsbG93c1BpY3R1cmVJblBpY3R1cmUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVt
ZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCkKLXsKLSAgICBBU1NF
UlQobV9wYWdlKTsKLSAgICBBU1NFUlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0Vs
ZW1lbnQpKTsKLQotICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQo
JnZpZGVvRWxlbWVudCk7Ci0gICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsK
LQotICAgIGlmIChpbnRlcmZhY2UuaXNBbmltYXRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50ZXJmYWNlLnNldElzQW5pbWF0aW5nKHRydWUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjb250
ZXh0SWQsIGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3Jl
ZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVv
RWxlbWVudCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIHRhcmdldE1vZGUpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCi0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgQVNTRVJUKG1fdmlkZW9F
bGVtZW50cy5jb250YWlucygmdmlkZW9FbGVtZW50KSk7Ci0KLSAgICB1aW50NjRfdCBjb250ZXh0
SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2aWRlb0VsZW1lbnQpOwotICAgIGF1dG8mIGludGVy
ZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLnNldFRh
cmdldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0
aW9uVG9Nb2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0odmlkZW9FbGVtZW50KTsKLSAgICBVTlVTRURfUEFSQU0odGFy
Z2V0TW9kZSk7Ci0jZW5kaWYKLX0KLQotI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OgotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8p
Ci17Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNvbnRleHRJZCwgaGFzVmlk
ZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgRmxv
YXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFZp
ZGVvRGltZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyksIG1fcGFnZS0+cGFnZUlE
KCkpOwotfQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEp
Ci17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobW9k
ZSwgZmluaXNoZWRXaXRoTWVkaWEpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5N
b2RlKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KHZpZGVvRnVsbHNjcmVlbk1vZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgQVNTRVJU
KG1fcGFnZSk7Ci0gICAgUGxhdGZvcm1MYXllciogdmlkZW9MYXllciA9IFtDQUxheWVyIGxheWVy
XTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgW3ZpZGVvTGF5ZXIgc2V0TmFtZTpAIldlYiB2aWRlbyBm
dWxsc2NyZWVuIG1hbmFnZXIgbGF5ZXIiXTsKLSNlbmRpZgotCi0gICAgW0NBVHJhbnNhY3Rpb24g
YmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0KLSAg
ICBbdmlkZW9MYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgwLCAwKV07Ci0gICAgW3ZpZGVv
TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3I6OnRy
YW5zcGFyZW50KV07Ci0KLSAgICAvLyBTZXQgYSBzY2FsZSBmYWN0b3IgaGVyZSB0byBtYWtlIGNv
bnZlcnRSZWN0OnRvTGF5ZXI6bmlsIHRha2Ugc2NhbGUgZmFjdG9yIGludG8gYWNjb3VudC4gPHJk
YXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KLSAgICAvLyBUaGlzIHNjYWxlIGZhY3RvciBpcyBpbnZl
cnRlZCBpbiB0aGUgaG9zdGluZyBwcm9jZXNzLgotICAgIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3Rv
ciA9IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBbdmlkZW9MYXllciBzZXRUcmFu
c2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0b3IsIGhvc3RpbmdT
Y2FsZUZhY3RvciwgMSldOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+bGF5ZXJI
b3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIodmlkZW9MYXllcik7Ci0KLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAKLSAg
ICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9MYXllciwgW3Byb3RlY3RlZFRo
aXMsIHRoaXMsIGNvbnRleHRJZF0gewotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7Ci0gICAg
ICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1
bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19
Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2Up
ID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+
c2V0SXNBbmltYXRpbmcoZmFsc2UpOwotICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZh
bHNlKTsKLQotICAgIGlmIChpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0g
bW9kZWwtPnZpZGVvRWxlbWVudCgpOwotICAgIGlmICghdmlkZW9FbGVtZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5
IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnRdIHsK
LSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKLSAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50
ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgCi0g
ICAgbW9kZWwtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oW3Byb3RlY3RlZFRoaXMsIGNv
bnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0gewotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZh
Y2UsIG1vZGVsXSB7Ci0gICAgICAgICAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
bmlsLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKLSAgICAgICAgICAg
ICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVk
VGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlu
dGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9vdExheWVyKG51bGxwdHIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250
ZXh0KG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9w
YWdlLT5wYWdlSUQoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3Rk
Ojp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0
SWQpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7Ci0gICAgaW50ZXJm
YWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOwot
ICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuID0gaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3Jl
ZW4oKTsKLQotICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwotICAgIFJl
ZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50
KCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIHJlbW92ZUNsaWVudEZvckNvbnRl
eHQoY29udGV4dElkKTsKLQotICAgIGlmICghdmlkZW9FbGVtZW50IHx8ICF0YXJnZXRJc0Z1bGxz
Y3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnQsIG1vZGVdIHsK
LSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKLSAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQs
IG1vZGUpOwotICAgIH0pOwotfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBn
cmF2aXR5KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdyYXZp
dHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7Ci19Ci0g
ICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKLXsKLSAgICBp
ZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgbW9kZWwgPSBlbnN1cmVN
b2RlbChjb250ZXh0SWQpOwotCi0gICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQotICAgICAgICBtb2Rl
bC52aWRlb0VsZW1lbnQoKS0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2UpOwotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpQ
cmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVlLCBpbmxpbmVWaWRlb0ZyYW1l
KCptb2RlbC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLSAgICAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2ht
ZW50IGZlbmNlUG9ydCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1
cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oYm91
bmRzLngoKSkgfHwgc3RkOjppc25hbihib3VuZHMueSgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy53
aWR0aCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy5oZWlnaHQoKSkpIHsKLSAgICAgICAgYXV0byB2
aWRlb1JlY3QgPSBpbmxpbmVWaWRlb0ZyYW1lKCptb2RlbC0+dmlkZW9FbGVtZW50KCkpOwotICAg
ICAgICBib3VuZHMgPSBGbG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZpZGVvUmVj
dC5oZWlnaHQoKSk7Ci0gICAgfQotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAg
ICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsKLSAgICBpZiAoaW50ZXJm
YWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpCi0gICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0
aW5nQ29udGV4dCgpLT5zZXRGZW5jZVBvcnQoZmVuY2VQb3J0LnBvcnQoKSk7Ci0gICAgbW9kZWwt
PnNldFZpZGVvTGF5ZXJGcmFtZShib3VuZHMpOwotICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1h
Y2hfdGFza19zZWxmKCksIGZlbmNlUG9ydC5wb3J0KCkpOwotICAgIFtDQVRyYW5zYWN0aW9uIGNv
bW1pdF07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315368</attachid>
            <date>2017-07-13 12:23:20 -0700</date>
            <delta_ts>2017-07-13 18:19:30 -0700</delta_ts>
            <desc>Better diff. No filename change.</desc>
            <filename>bug-174437-20170713122320.patch</filename>
            <type>text/plain</type>
            <size>415480</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzEzM2RmMjEzZGVlMTNk
OTE5MTFjYWUxYTQwMzUzNzRhMjliODdlOC4uYTJhODMxNThhNmQ0ZWNiZDRjZmE4YWY0MmRhMzNh
Yjc2OTIyM2FmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1MCBAQAorMjAxNy0wNy0xMiAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVm
aXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgcmVkdW5kYW50
ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFuZCBXZWJQbGF5YmFj
a1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAgIFRoaXMgcHJlZml4IGlzIHJlZHVu
ZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9yIFdlYkNvcmUgbmFt
ZXNwYWNlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmguCisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6flBsYXliYWNrU2Vzc2lvbk1v
ZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojp+UGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlh
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpi
ZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0
b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5Q
bGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI6On5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgu
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6flZpZGVvRnVsbHNjcmVl
bk1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ojp+
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
LgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbS4KKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcyk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENs
aWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3Zl
Q2xpZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zp
c2libGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhh
c1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmguCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
LgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJh
bmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICgtW1dlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSBmdWxsc2NyZWVuSW50ZXJmYWNlXSk6CisgICAgICAgICgtW1dl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0p
OgorICAgICAgICAoY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckxheWVyIGZ1bGxzY3JlZW5JbnRlcmZhY2VdKToKKyAgICAgICAgKC1bV2ViQVZQ
bGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0pOgorICAgICAgICAoLVtXZWJBVlBs
YXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpdKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpjcmVhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIp
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNj
cmVlbk1vZGVsKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVs
bHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
clBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRU
b1N0YXJ0UGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVT
dG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dl
YkFWUGxheWVyQ29udHJvbGxlci5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0No
YW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZCk6Cisg
ICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnBhdXNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKToK
KyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmR1cmF0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpjdXJyZW50VGltZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRl
cnZhbCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxh
eUZhc3RSZXZlcnNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxz
Y3JlZW46bW9kZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRGaW5pc2hGdWxsc2NyZWVuOl0pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENs
ZWFudXBGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hh
bmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdl
c0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
Om11dGVkQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVu
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnBsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnBhdXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YmVnaW5TY3J1YmJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpj
dXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2Fi
bGVSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJ
bnRlcnZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxs
c2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJiaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjph
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0uCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6XSk6Cisg
ICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgaW52YWxpZGF0ZV0p
OgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIHNldFVwUElQ
Rm9yVmlkZW9WaWV3OndpdGhGcmFtZTppbldpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250
YWluZXI6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
cGlwU2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hY09iakMgcGlwRGlkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgcGlwQWN0aW9uUGxheTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25QYXVzZTpdKToKKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25TdG9wOl0pOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhck1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlk
ZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4pOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZWVrVG9UaW1lOnRvbGVyYW5jZUJlZm9yZTp0b2xl
cmFuY2VBZnRlcjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgYmVn
aW5Ub3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlciBlbmRUb3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOl0p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDdXJyZW50TGVnaWJs
ZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hY10pOgorICAgICAgICAo
LVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHRvZ2dsZVBsYXli
YWNrXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6
XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGlzUGxheWluZ10pOgor
ICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciB0b2dnbGVQaWN0dXJlSW5QaWN0
dXJlXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hY10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6XSk6IERlbGV0
ZWQuCisKIDIwMTctMDctMTMgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBzdHlsZS4gVXNlICNwcmFnbWEgb25jZSBpbiBWaWRlb0Z1bGxzY3JlZW4gYW5k
IFBsYXliYWNrU2Vzc2lvbiBoZWFkZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDViOGVjMjFjZmQ3
OGRlMDlkODc5MjlmNWJhNjk4ZjA4OWU1ZGRlYWYuLmNkNDY1Y2Y0NjUwYWZiMmIzZGMwODA0YTdk
ODdmZmFkMTNlYWU5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNy0w
Ny0xMiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lv
biBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc0NDM3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMzMjI3NDIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVtb3ZlcyB0
aGUgcmVkdW5kYW50ICJXZWIiIHByZWZpeCBmcm9tIHRoZSBXZWJWaWRlb0Z1bGxzY3JlZW4qIGFu
ZCBXZWJQbGF5YmFja1Nlc2lvbiogZmFtaWx5IG9mIGNsYXNzZXMuCisgICAgICAgIFRoaXMgcHJl
Zml4IGlzIHJlZHVuZGFudCBzaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBpbiB0aGUgV2ViS2l0IG9y
IFdlYkNvcmUgbmFtZXNwYWNlcy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxl
bWVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAgICogV2Vi
Vmlldy9XZWJWaWV3RGF0YS5tbToKKwogMjAxNy0wNy0xMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFzeW5jIGltYWdlIGRlY29kaW5nIGZv
ciBsYXJnZSBpbWFnZXMgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCAyMDNlNTE1YTJmYTY0N2I4MWE4NzM0Nzk3ODUxMGJlNjEyNGE0ZmJiLi4zMjUyNzc1NzVmYWVj
ZmZiYjU5NjNlYTRhNDRkMjUwNDA2ZTE1NzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYzIEBA
CisyMDE3LTA3LTEyICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgV2ViIHByZWZpeCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJh
Y2tTZXNzaW9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQ0MzcKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMzMyMjc0MjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBy
ZW1vdmVzIHRoZSByZWR1bmRhbnQgIldlYiIgcHJlZml4IGZyb20gdGhlIFdlYlZpZGVvRnVsbHNj
cmVlbiogYW5kIFdlYlBsYXliYWNrU2VzaW9uKiBmYW1pbHkgb2YgY2xhc3Nlcy4KKyAgICAgICAg
VGhpcyBwcmVmaXggaXMgcmVkdW5kYW50IHNpbmNlIHRoZXNlIGFyZSBhbHJlYWR5IGluIHRoZSBX
ZWJLaXQgb3IgV2ViQ29yZSBuYW1lc3BhY2VzLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMu
bWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5LmguCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4u
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5t
bTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWtUb1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAg
IChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3
YXJkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRT
Y2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVNdXRl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0TXV0
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjptdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjppbnZhbGlkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVN
b2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92ZUNs
aWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJl
c2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
ZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om11
dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6cGxheSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
cGF1c2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRv
Z2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjYW5u
aW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRNdXRlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENv
bnRyb2xsZWRFbGVtZW50SUQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
LgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW06IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1tLgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6aGFzTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6aXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZENsZWFudXBGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6flZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5X
aXRoSUQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNl
dEhhc1ZpZGVvKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4
aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2
aXR5KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxs
c2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmlzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOiBSZW1vdmVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnVwZGF0ZU1lZGlhVG91Y2hCYXIpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjptX3dlYWtQdHJGYWN0b3J5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29h
L1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oLgorICAgICAgICAqIFdl
YlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpuZXh0Q29udGV4dElk
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmVz
ZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJhdGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJl
dmVyc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjptdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6flBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9k
ZWwpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVJbnRl
cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xp
ZW50Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnJlbW92ZUNsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1l
ZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJl
c2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1l
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWspOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9y
d2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUlu
UGljdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2ds
ZU11dGVkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0
ZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLmguCisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbS4KKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0No
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6flZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNW
aWRlb0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1l
bnQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1
cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpk
aWRFbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXll
ckZyYW1lRmVuY2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW06IFJlbW92ZWQuCisKIDIwMTctMDctMTMgIEplcmVteSBKb25lcyAgPGpl
cmVteWpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBzdHlsZS4gVXNlICNwcmFnbWEgb25jZSBp
biBWaWRlb0Z1bGxzY3JlZW4gYW5kIFBsYXliYWNrU2Vzc2lvbiBoZWFkZXJzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI4NDNj
MTc0MmZhNWEzMmNlNTkzYjQzYzJjZTllYjI5MDViNmIxZDguLmM5ZDY3Mzk0ODMyYzg1ZDA3YTRk
NjJkNDFiYTk0NmMwNmJlYjgyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2ODUsOCArMTY4NSw4IEBACiAJCTNGODAyMDM2
MUU5RTQ3QzMwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODAyMDMxMUU5RTM4MUQwMERF
QzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmNwcCAqLzsgfTsKIAkJM0Y4MDIwMzcxRTlF
NDdDNTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjgwMjAzNDFFOUUzODFEMDBE
RUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKIAkJM0Y4MDIw
MzgxRTlFNDdDOTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODAyMDMzMUU5
RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi87IH07
Ci0JCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5tbSAqLzsgfTsKLQkJM0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW0gKi87IH07CisJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJM0ZGMUZBNjYxRTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0YzQkI1ODIxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwICov
OyB9OwogCQkzRkY4MTNBNzFEQkE4NjQwMDA5QkYwMDEgLyogUG9pbnRlckxvY2tDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0
RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZGRkY5QTgxNTlEOUE1NTAw
MjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlLmNwcCAqLzsgfTsKQEAgLTI0NzUsMTEgKzI0NzUsMTEgQEAKIAkJ
NTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjEx
NzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLzsgfTsKIAkJNTFGQjY3REIxQUU2QjgyQjAwRDA2QzVB
IC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250
ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi87IH07CiAJCTUxRkI2N0RDMUFFNkI4MkYwMEQw
NkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENv
bnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMubW0gKi87IH07CisJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovOyB9OwogCQk1MjY3MjRGMzFDQjJGRUFEMDA3NTk3
NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovOyB9OwogCQk1MkIwRDRCRTFDNTdGRDFF
MDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJC
MEQ0QzAxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRC
RjFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkIwRDRD
MjFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdG
RjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJCMEQ0QzAxQzU3RkQ2
NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRjFDNTdGRDY2MDA3N0NF
NTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMg
LyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJCNkM5QzIxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJCNkM5QkQxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24u
Y3BwICovOyB9OwogCQk1MkI2QzlDMzE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29s
bGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCNkM5QkUxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsg
fTsKIAkJNTJCNkM5QzUxNUUzRjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QzAx
NUUzRjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwpAQCAtMjQ4
Nyw5ICsyNDg3LDkgQEAKIAkJNTJDQ0E5RTIxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkNDQTlFMDE1RTNGNjJDMDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0
aW9uLmNwcCAqLzsgfTsKIAkJNTJDQ0E5RTMxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJDQ0E5RTExNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlv
bi5oICovOyB9OwogCQk1MkQ1QTE4RjFDNTQ1OTIzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TGF5ZXJNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFu
YWdlci5tbSAqLzsgfTsKLQkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1
QTFBODFDNTc0OEEzMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVB
MUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUy
RDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
RDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSAqLzsgfTsKKwkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkQ1QTFBODFD
NTc0OEEzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE1MUM1NzQ4
ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyRDVBMUE5MUM1NzQ4
QTkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE2MUM1NzQ4ODkw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLzsgfTsKIAkJ
NTJFMkNBRkMxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0
RiAvKiBNZWRpYVByb2R1Y2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTJGMTA4NjUxNjJCNkRBNDAwOUFDODFFIC8qIE1peGVkQ29udGVudENo
ZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJGMTA4NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovOyB9
OwogCQk1MkYxMDg2NjE2MkI2REE4MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjMxNjJC
NkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjIwMCwxNSArNjIwMCwxNSBAQAogCQlD
REEwN0ZCRTE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQkMxOEUwQTE2QTAw
NDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREEwN0ZDMTE4RTBBMjJCMDA0Njk5RkEgLyogU3lz
dGVtU2xlZXBMaXN0ZW5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTA3RkJGMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3Rl
bmVyTWFjLm1tICovOyB9OwogCQlDREEwN0ZDMjE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xl
ZXBMaXN0ZW5lck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMDdGQzAxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMu
aCAqLzsgfTsKLQkJQ0RBMjlBMDkxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNE
QTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEExQ0JEOUE3
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9OwotCQlDREEy
OUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNE
QTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
NDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICov
OyB9OwotCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RB
MjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lm1tICovOyB9OworCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlB
MEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwQTFDQkQ5QTc0MDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87IH07CisJCUNEQTI5QTBGMUNCRDlDRkUwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi87IH07CisJCUNEQTI5QTE3MUNCREE1NkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQubW0gKi87IH07CiAJCUNEQTI5QTMxMUNCRjc0REEwMDkwMUNDRiAv
KiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRDFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJD
b250cm9sbGVyLm1tICovOyB9OwotCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNEQTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0RBNzk4MjQxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMzE3MEEy
NTgzMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmNwcCAqLzsgfTsKIAkJQ0RBNzk4MjcxNzBBMjc5
MTAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTc5ODI1MTcwQTI3OTAwMEQ0NUM1NSAvKiBBdWRpb1Nl
c3Npb25JT1MubW0gKi87IH07CiAJCUNEQTc5ODJBMTcwQTNEMDAwMEQ0NUM1NSAvKiBBdWRpb1Nl
c3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTc5ODIxMTcwQTIyREMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTMyNiw4ICs5MzI2LDggQEAKIAkJ
M0Y4MDIwMzIxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyog
Q29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1
ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZC
QzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUw
MDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QTcxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1Zp
ZXdwb3J0UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QUIxNTlE
OUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAyMjksMTIgKzEwMjI5LDEyIEBACiAJCTUxRkI1NTAz
MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNDbG9zZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFGQjY3RDkxQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHls
ZVNoZWV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRF
eHRlbnNpb25TdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFG
QjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgw
MiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjIxQ0IyRkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJl
c2VudGF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMEQ0QkYxQzU3
RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyQjZDOUJEMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlC
RTE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjZDOUJGMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1l
ZEZsb3dDb2xsZWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01OYW1lZEZsb3dD
b2xsZWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjQ0LDkgKzEw
MjQ0LDkgQEAKIAkJNTJDQ0E5RTExNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29s
bGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEQxQzU0
NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEUxQzU0NTkwMzAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE1
MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBNjFD
NTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
NUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQcm9kdWNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4
ZWRDb250ZW50Q2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNaXhlZENvbnRlbnRDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJGMTA4NjMxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWl4ZWRDb250ZW50Q2hlY2tlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ3MzcsMTYgKzE0NzM3LDE2IEBACiAJCUNEQTA3RkJD
MThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVNsZWVwTGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQkYxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlz
dGVuZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeXN0
ZW1TbGVlcExpc3RlbmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEw
N0ZDMDE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEQxQ0JE
OUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE0MUNCREE1
NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE1MUNCREE1NkMw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5
QTJDMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5QTJEMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBs
YXllckNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJBVlBsYXllckNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEy
RjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlB
MkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJGMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUg
LyogQXVkaW9TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREE3OTgyMzE3MEEyNTgzMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2Vz
c2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTc5ODI1MTcwQTI3OTAw
MEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBBdWRpb1Nlc3Npb25JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTEzNywxNCArMTkxMzcsMTQgQEAKIAkJCQlFMUEzMTYyQzEzNEJDMzJEMDA3QzlB
NEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tICovLAogCQkJCUNENTg5NkUwMUNE
MkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oICovLAogCQkJCUNE
NTg5NkRGMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSAq
LywKLQkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggKi8sCi0JCQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLywKKwkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8sCisJCQkJQ0RBMjlBMTQxQ0JE
QTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLywKIAkJCQlD
RDgyMDMwNjEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
ICovLAogCQkJCUNEODIwMzA3MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tICovLAogCQkJCUNEODIwMzA4MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8sCiAJCQkJQ0Q4MjAzMDkxMzk1QUI2
QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8s
Ci0JCQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5oICovLAotCQkJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8sCisJCQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUz
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovLAorCQkJCTUyMTMxRTVBMUM0RjE1
NjEwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4
MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovLAogCQkJCUNE
ODIwMzBGMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gKi8sCiAJCQkJ
OTM4MEY0NzcwOUExMUFDQzAwMUZEQjM0IC8qIFdpZGdldE1hYy5tbSAqLywKQEAgLTIxMTQ5LDE0
ICsyMTE0OSwxNCBAQAogCQkJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5t
bSAqLywKIAkJCQlGNDgyMjMwRjFFMzg2OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFz
dGVib2FyZC5oICovLAogCQkJCUY0ODIyMzBFMUUzODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJv
dmlkZXJQYXN0ZWJvYXJkLm1tICovLAotCQkJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovLAotCQkJCUNEQTI5QTJGMUNCRjcz
RkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJ
CQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaCAqLywKKwkJCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJMUY4NzU2QjExRTIyQkVFRjAwNDJDNDBEIC8qIFdl
YlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oICovLAogCQkJCTFGODc1NkIwMUUyMkJFRUYw
MDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0gKi8sCiAJCQkJM0Y0
MkIzMUIxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktp
dC5oICovLAogCQkJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQVZLaXQubW0gKi8sCi0JCQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8sCi0JCQkJM0ZCQzRBRjExODk4
ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovLAor
CQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oICovLAorCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyog
V2lkZ2V0SU9TLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBpb3M7CkBAIC0yMTIwMywxNCArMjEy
MDMsMTQgQEAKIAkJCQlDREM5NzlGMzFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJyb3JF
eHRyYXMuaCAqLywKIAkJCQlDREM5NzlGMjFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJy
b3JFeHRyYXMubW0gKi8sCiAJCQkJNURGRUJBQjYxODU5MkI2RDAwQzc1QkVCIC8qIFdlYktpdEF2
YWlsYWJpbGl0eS5oICovLAotCQkJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLywKLQkJCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLywKLQkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKLQkJCQlD
REEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi8sCi0JCQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8sCi0JCQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8sCi0JCQkJNTJENUExQTUxQzU3NDg4OTAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCi0JCQkJ
NTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50Lm1tICovLAorCQkJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UuaCAqLywKKwkJCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCAqLywKKwkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKKwkJCQlDREEyOUEwQzFDQkQ5
Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJ
CQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmggKi8sCisJCQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsLmggKi8sCisJCQkJNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCisJCQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDExNiwxMSArMzAx
MTYsMTEgQEAKIAkJCQkwNzA5RDc5MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBMzE2MkQxMzRCQzMyRDAwN0M5QTRG
IC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1
ODk2RTIxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEzMjFDQzAxQTk1MDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMEYx
Q0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEzMjFDQzAxQTk1MDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMEYxQ0JEOUNGRTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQ0FGMzQ4MTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQ0FGMzQ4MzBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMUIwRDdFMkI4MjAwN0MzOTgz
IC8qIFdlYlNjcmlwdE9iamVjdFByb3RvY29sLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMTM3LDE0
ICszMDEzNywxNCBAQAogCQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJCMEQ0QzAxQzU3RkQ2
NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRDgyMDMwQTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0Y0MkIzMUQxODgxMTkxQjAwMjc4QUFDIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q4MjAzMEMxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFBODFDNTc0OEEz
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdD
RTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIw
MDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEz
RUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBC
Njk4MDE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAt
MzM4MzQsOSArMzM4MzQsOSBAQAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTMxNjJFMTM0
QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlDRDU4OTZFMTFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTBFMUNC
RDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFDQUYzNDgyMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmpl
Y3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk5N0FBQkQxQTE0RkEwOUQ1MDA3NDU3QUUgLyogV2Vi
U29ja2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QUFCRDFEMTRGQTA5RDUwMDc0NTdBRSAv
KiBXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM4NTIsOSArMzM4NTIs
OSBAQAogCQkJCUNEODIwMzBCMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJM0Y0MkIzMUUxODgxMTkxQjAwMjc4QUFD
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUNEODIwMzBEMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZF
RTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAvKiBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFB
OTFDNTc0OEE5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQlGMTIxNzFGNTE2QThDRUQyMDAwMDUzQ0EgLyogV2ViVlRURWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RDIxQTgwMjEzRUNFNURGMDBCQjcwNjQgLyog
V2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIxMEI2OTgxMTQwQzE3NDAwMEJD
MUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAyNjYwMjY5MjhmMzY1YjNjZjY4ODUzYzM1
NDhjMDg0MDRiMWJmYjA1Li4wZDQ2MTFjNTA5NjJlYjg4MTBhMjFjMjRmOWRjZTkxZjIzMzZhYmQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTExNyw3ICsx
MTcsNyBAQAogCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmgi
CisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKQEAgLTE1Niw3ICsxNTYsNyBAQAog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKICNkZWZp
bmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoZG9jdW1l
bnQoKS5wYWdlKCkgJiYgZG9jdW1lbnQoKS5wYWdlKCktPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dl
ZCgpLCBNZWRpYSwgIiVwIC0gSFRNTE1lZGlhRWxlbWVudDo6IiBmbXQsIHRoaXMsICMjX19WQV9B
UkdTX18pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAppbmRleCAzNmNm
NDk3Yjk5Yjg5N2E4YWFkZGVhZjYyNmI5YWFiMzhmZmMyYmExLi42NTg5NWY5Mzg5N2YwNjg0MTQ3
YjlkMGNjZjE1NzBjYjc5Njg3Y2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogI2lmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSNpbmNsdWRlICJXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgi
CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaAppbmRl
eCAzMDllNzk3NDRiNDk4OWEzYTdiOTM1NzBhYWViN2U4MmViMDdlOTMwLi40MTA1ZWY2ZGIzMjcw
ZjMxNWI3NzVjNzQyZjM1MTVjZTAxODY3MDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaApAQCAt
MzcsOSArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVSYW5nZXM7CiAK
LWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSB7CitjbGFzcyBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSgpIHsgfTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UoKSB7
IH07CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpID0gMDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oCmluZGV4IDA2ZDUzZjBmNzc2OTM3NzVhZDQ4NjFjMjIzMDRhYzkzODAwOWM4MjMuLmE4
NzQ0MTU3NDY5YTJhN2IyZTc2MzllMWY5YTNhZTcxNGRmMjg2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaApA
QCAtMzQsMTQgKzM0LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVSYW5n
ZXM7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDsKK2NsYXNzIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50Owogc3RydWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9uOwogCi1jbGFz
cyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCB7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbCB7
CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07Ci0g
ICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgeyB9
OworICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBwYXVzZSgpID0gMDsKQEAgLTgzLDkgKzgzLDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc011dGVkKCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQgeworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgewogcHVi
bGljOgotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50KCkgeyB9Owor
ICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50KCkgeyB9OwogICAgIHZpcnR1
YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY3Vy
cmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKiBjdXJyZW50VGltZSAqLywgZG91YmxlIC8qIGFuY2hv
clRpbWUgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSkgeyB9CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0
X3QpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3QpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdl
ZChib29sIC8qIGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICov
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBl
bmFibGVkICovLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIHsgfQogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oCmluZGV4IGFkODk1MTM3NTg4NGQ2YzgxYTdmMjM4OTZk
OGM0ZjY1MzM5MDM4YzUuLjNhNzMxNDNiNGJmOWJkZWUzNzM4MjY5ZDE4MjAxYjg5ZDMwZDJiMWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaApAQCAtMjksNyArMjksNyBA
QAogCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zOSwxNSAr
MzksMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQXVkaW9UcmFjazsKIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBUZXh0VHJhY2s7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2U7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAKLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50IGZpbmFsIDogcHVibGljIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitjbGFzcyBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2Rl
bCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
KCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudCgpKTsKICAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKICAgICBIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21lZGlhRWxlbWVudC5n
ZXQoKTsgfQogCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZvckV2
ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOwogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBFdmVudExpc3RlbmVyJiByaHMpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92
ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcGxheSgpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGF1c2UoKSBmaW5h
bDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOwpAQCAt
OTQsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc011dGVkKCkgY29uc3QgZmluYWw7CiAK
IHByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwcm9ncmVzc0V2ZW50VGltZXJGaXJl
ZCgpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8SFRNTE1lZGlh
RWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CiAgICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2Ug
fTsKLSAgICBIYXNoU2V0PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRz
OworICAgIEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CiAg
ICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51OwogICAg
IFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCmluZGV4IGNmY2RlNDMzZjAzNzAyMWU1
MWEwYjQ2ODZlMmZiNTE3ZDdlOTdmNzQuLjg3NGRmZjcwMTAyNGIzYmQ4YjJhMDkxZjZmNjU2N2Nh
ZTg0ZTMxYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQuaCIKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKIApAQCAtNDcsMTYgKzQ3LDE2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKK1BsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dCgpCiAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJU
eXBlKQogewogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKK1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKQogewogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQogICAgICAg
ICByZXR1cm47CkBAIC04NSwxMiArODUsMTIgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGkKICAg
ICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKIHsKICAgICB1cGRhdGVGb3JFdmVu
dE5hbWUoZXZlbnQtPnR5cGUoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
ZXZlbnROYW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRl
Rm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAg
aWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3Niw3OSArMTc2
LDc5IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZv
ckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0CiAgICAgICAgICAgICBjbGllbnQtPm11dGVk
Q2hhbmdlZChpc011dGVkKCkpOwogICAgIH0KIH0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYg
Y2xpZW50KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50
KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKCFtX2Ns
aWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnJlbW92ZUNsaWVu
dChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7CiAgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCiAgICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5wbGF5KCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnBhdXNlKCkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5wYXVzZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5U3RhdGUoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQog
ewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2lu
U2NydWJiaW5nKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmVuZFNjcnViYmluZygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjplbmRTY3J1YmJpbmcoKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9t
ZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKIHsKICAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50
VGltZSh0aW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1lbnQp
CiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0Zvcndh
cmQoKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0Jh
Y2t3YXJkKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCgpCiB7CiAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQogICAgICAgICBtX21l
ZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3
YXJkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5k
U2Nhbm5pbmcoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Nh
bm5pbmcoKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmVuZFNjYW5uaW5nKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgc2VsZWN0ZWRBdWRpb0lu
ZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbih1aW50NjRfdCBzZWxlY3RlZEF1ZGlvSW5kZXgpCiB7CiAgICAgaWYgKCFtX21l
ZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24o
dWludDY0X3Qgc2VsZWN0CiAgICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51W2ldLT5zZXRFbmFi
bGVkKGkgPT0gc2VsZWN0ZWRBdWRpb0luZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGlu
ZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJs
ZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAgIGlmICghbV9tZWRpYUVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qg
aW5kZQogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2sp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudC0+ZnVs
bHNjcmVlbk1vZGUoKSA9PSBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGlj
dHVyZUluUGljdHVyZSkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7
CkBAIC0yNzksMTggKzI3OSwxOCBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PmVudGVyRnVsbHNjcmVlbihNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGlj
dHVyZUluUGljdHVyZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnRvZ2dsZU11dGVkKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnRvZ2dsZU11dGVkKCkKIHsKICAgICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRl
ZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE11dGVkKGJvb2wg
bXV0ZWQpCiB7CiAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVu
dC0+c2V0TXV0ZWQobXV0ZWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKQordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkKIHsK
ICAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC0zMjIsNyArMzIy
LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCkKICAgICB9CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGlj
ZXMoKQogewogICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7
CiAgICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CkBA
IC0zMzMsNyArMzMzLDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkKICAgICB9CiB9CiAKLWRvdWJsZSBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tTdGFydGVkVGltZSgpIGNv
bnN0Citkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrU3Rh
cnRlZFRpbWUoKSBjb25zdAogewogICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMzQxLDcgKzM0MSw3IEBAIGRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6cGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
bWVkaWFFbGVtZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCk7CiB9CiAKLWNvbnN0IFZlY3RvcjxB
dG9taWNTdHJpbmc+JiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2
ZWRFdmVudE5hbWVzKCkKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKIHsKICAgICAvLyBGSVhN
RSgxNTc0NTIpOiBSZW1vdmUgdGhlIHJpZ2h0LWhhbmQgY29uc3RydWN0b3Igbm90YXRpb24gb25j
ZSBOZXZlckRlc3Ryb3llZCBzdXBwb3J0cyBpbml0aWFsaXplcl9saXN0cy4KICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IG5hbWVzID0gVmVjdG9yPEF0b21p
Y1N0cmluZz4oewpAQCAtMzU5LDYwICszNTksNjAgQEAgY29uc3QgVmVjdG9yPEF0b21pY1N0cmlu
Zz4mIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmEK
ICAgICByZXR1cm4gbmFtZXMuZ2V0KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQorY29uc3QgQXRv
bWljU3RyaW5nJiAgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFs
bCgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZXZlbnROYW1l
QWxsKCJhbGxFdmVudHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAg
ICByZXR1cm4gZXZlbnROYW1lQWxsOwogfQogCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmR1cmF0aW9uKCkgY29uc3QKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6ZHVyYXRpb24oKSBjb25zdAogewogICAgIGlmICghbV9tZWRpYUVs
ZW1lbnQpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+c3Vw
cG9ydHNTZWVraW5nKCkgPyBtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSA6IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CiB9CiAKLWRvdWJsZSBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3VycmVudFRpbWUoKSBjb25zdAorZG91YmxlIFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjdXJyZW50VGltZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkgOiAw
OwogfQogCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZl
cmVkVGltZSgpIGNvbnN0Citkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmJ1ZmZlcmVkVGltZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9t
ZWRpYUVsZW1lbnQtPm1heEJ1ZmZlcmVkVGltZSgpIDogMDsKIH0KIAotYm9vbCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNQbGF5aW5nKCkgY29uc3QKK2Jvb2wgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50ID8gIW1fbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA6IGZhbHNlOwog
fQogCi1mbG9hdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tS
YXRlKCkgY29uc3QKK2Zsb2F0IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5
YmFja1JhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFF
bGVtZW50LT5wbGF5YmFja1JhdGUoKSA6IDA7CiB9CiAKLVJlZjxUaW1lUmFuZ2VzPiBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAorUmVm
PFRpbWVSYW5nZXM+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJh
bmdlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1l
bnQtPnNlZWthYmxlKCkgOiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAotZG91YmxlIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9k
aWZpZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlVGltZVJhbmdlc0xh
c3RNb2RpZmllZFRpbWUoKSA6IDA7CiB9CiAKLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKK2RvdWJsZSBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bGl2ZVVwZGF0ZUlu
dGVydmFsKCkgOiAwOwogfQogICAgIAotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKK2Jvb2wgUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0ZSgp
IDwgMC4wIDogZmFsc2U7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
KCkgY29uc3QKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKIHsKICAg
ICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvT3B0aW9uczsKIApAQCAtNDI4LDcg
KzQyOCw3IEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlCiAgICAgcmV0dXJuIGF1ZGlvT3B0aW9u
czsKIH0KIAotdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1
ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKK3VpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUo
KTsgKytpbmRleCkgewogICAgICAgICBpZiAobV9hdWRpb1RyYWNrc0Zvck1lbnVbaW5kZXhdLT5l
bmFibGVkKCkpCkBAIC00MzcsNyArNDM3LDcgQEAgdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOwogfQogCi1WZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK1ZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAogewogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gbGVnaWJsZU9wdGlvbnM7CiAKQEAgLTQ1Miw3ICs0NTIsNyBAQCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdp
YmxlTWVkaWFTZQogICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKIH0KIAotdWludDY0X3QgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdAordWludDY0X3QgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6Omxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAogewogICAgIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CiAgICAgdWludDY0
X3Qgb2ZmSW5kZXggPSAwOwpAQCAtNDg5LDEyICs0ODksMTIgQEAgdWludDY0X3QgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBj
b25zdAogICAgIHJldHVybiBzZWxlY3RlZEluZGV4OwogfQogCi1ib29sIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Citi
b29sIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5h
YmxlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVt
ZW50LT53ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7CiB9CiAKLVdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBj
b25zdAorUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQt
Pm1lZGlhQ29udHJvbHNIb3N0KCkpCiAgICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsKQEAg
LTUxMiwxOSArNTEyLDE5IEBAIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhCiAgICAgfQogfQogCi1T
dHJpbmcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJh
Y2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QKK1N0cmluZyBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25z
dAogewogICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250
cm9sc0hvc3QoKSkKICAgICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xz
SG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CiAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiB9CiAKLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6Ondp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK2Jvb2wgUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vz
c2lvbigpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7CiB9
CiAKLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBj
b25zdAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNNdXRlZCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm11dGVk
KCkgOiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCmluZGV4IDZmMzJi
NDM5MzVkMmIyODFkODE2M2ZiMTc2NThhMWM3Y2U0NGEzNmYuLmM1YzE1YjExOTg3MjExM2Y0ODBj
OTgzMWFiYTg2OGQ4ZWZlYjA5NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApA
QCAtMzAsOSArMzAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcigpIHsgfTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cigpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKaW5kZXggYTUyNzAyZGI4NmI1
OTI2NDkyMmFlYjQwMWNkYjIyMjE5ZDlmZGU0Ny4uYWM4NDlmYzIwZGEwY2I0MmJkOTI3NjE3ZjE0
MThmOWI3NzMwYzI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCkBAIC0zMCwxNyArMzAsMTcgQEAKIAogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgot
I2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVkZSAiUGxheWJhY2tT
ZXNzaW9uTW9kZWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Owog
Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5N
b2RlbCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSB7
IH07Ci0gICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50Jik9IDA7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWwo
KSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Jik9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5N
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5p
c2hlZFdpdGhNZWRpYSA9IGZhbHNlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJGcmFtZShGbG9hdFJlY3QpID0gMDsKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKIH07CiAKLWNsYXNzIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsK
IHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCgpIHsg
fQorICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KCkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAwOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmluZGV4IDk2MjUyOWVmYTBkMWIwOTM2YzM3YWJm
ZGVmZGEwMDgxMTQ4ZDQyOTkuLjdlZmJjMTlhODdjNzRmZTlhNWM2MmEzZWNkMWQxYzQxNGZhZGY5
YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaApAQCAtMzIsNyArMzIs
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRF
bnVtcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CkBAIC00MywxNSArNDMsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQXVkaW9UcmFjazsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBjbGFzcyBUZXh0VHJh
Y2s7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDsKK2NsYXNzIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVi
bGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBjcmVhdGUoKQorICAgIHN0YXRpYyBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKSk7CiAgICAg
fQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRWxl
bWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0VsZW1lbnQuZ2V0KCk7IH0KICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtdIHsgfSk7CkBAIC02MSw4
ICs2MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6
OkF0b21pY1N0cmluZyYpOwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVy
JiByaHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6
OkV2ZW50TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQo
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRl
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRp
YSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5
ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKQEAgLTczLDcgKzczLDcg
QEAgcHVibGljOgogCiAKIHByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRIYXNW
aWRlbyhib29sKTsKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SFRNTFZp
ZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+
IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiAgICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2Ug
fTsKLSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRz
OworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CiAg
ICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKICAgICBGbG9hdFNpemUgbV92aWRlb0RpbWVu
c2lvbnM7CiAgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW0KaW5kZXggY2E0ZmJlMDE3MDJjYzUwZTRhNDM5Zjg2ODVkNjQyYjc5
Y2Q5YTQwNy4uMDgxNmVhOWNiZjE3NTY1MTg1YjBlYzY5ZWIxYzVhYzZlZDgzMmE4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KQEAgLTI2LDEzICsyNiwxMyBAQAog
I2ltcG9ydCAiY29uZmlnLmgiCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaCIKIAogI2ltcG9ydCAiRE9NV2luZG93LmgiCiAjaW1wb3J0ICJIaXN0
b3J5LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5o
IgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKKyNpbXBv
cnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCiAjaW1wb3J0IDxRdWFydHpD
b3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgpAQCAtNDcsMTYgKzQ3LDE2IEBACiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQorVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKICAgICA6
IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiB7CiB9
CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQorVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
On5WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCiB7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9F
bGVtZW50KiB2aWRlb0VsZW1lbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQogewog
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCA9PSB2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
QEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZQogICAgIHVwZGF0ZUZv
ckV2ZW50TmFtZShldmVudE5hbWVBbGwoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQogewogICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVu
dC0+dHlwZSgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5h
bWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBpZiAobV9jbGll
bnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShj
b25zdCBXVEY6OkF0b21pY1N0CiAgICAgfQogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2
aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxh
eWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZp
ZGVvTGF5ZXIpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTEyMyw3ICsxMjMs
NyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKgogICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbV92aWRlb0VsZW1lbnQpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVU
aGVuKFdURjo6RnVuYwogICAgIG1fdmlkZW9FbGVtZW50LT53YWl0Rm9yUHJlcGFyZWRGb3JJbmxp
bmVUaGVuKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0
aE1lZGlhKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQogewogICAgIGlmIChtX3ZpZGVvRWxlbWVudCAm
JiBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSAhPSBtb2RlKQogICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAg
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEZ1bGxzY3Jl
ZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnQKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFt
ZShGbG9hdFJlY3QgcmVjdCkKIHsKICAgICBtX3ZpZGVvRnJhbWUgPSByZWN0OwogICAgIFttX3Zp
ZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczpDR1JlY3QocmVjdCldOwpAQCAtMTU2LDE0ICsx
NTYsMTQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0Vmlk
ZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0KQogICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKICAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5IHZp
ZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7Ci0gICAg
aWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6
ZSkKKyAgICBpZiAoZ3Jhdml0eSA9PSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5
UmVzaXplKQogICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5
UmVzaXplOwotICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpCiAgICAgICAgIHZpZGVv
R3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7Ci0gICAgZWxz
ZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0RmlsbCkKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQogICAgICAgICB2aWRlb0dyYXZpdHkg
PSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKICAgICBlbHNlCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdl
YlZpZGVvRnVsbHNjcmVlCiAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdy
YXZpdHkodmlkZW9HcmF2aXR5KTsKIH0KIAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQor
Y29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxW
ZWN0b3I8QXRvbWljU3RyaW5nPj4gc0V2ZW50TmFtZXM7CiAKQEAgLTE4MCwzMSArMTgwLDMxIEBA
IGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hCiAgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpldmVudE5hbWVBbGwoKQorY29uc3QgQXRvbWljU3RyaW5nJiBWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7CiAgICAgcmV0
dXJuIHNFdmVudE5hbWVBbGw7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKIHsKICAg
ICBpZiAobV92aWRlb0VsZW1lbnQpCiAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVu
TW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
YWRkQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNT
RVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fY2xpZW50cy5hZGQoJmNs
aWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJl
bW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlu
cygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAotYm9vbCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKK2Jv
b2wgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE1
LDcgKzIxNSw3IEBAIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Omlz
VmlzaWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRIYXNWaWRlbyhib29sIGhhc1ZpZGVvKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8oYm9vbCBoYXNW
aWRlbykKIHsKICAgICBpZiAoaGFzVmlkZW8gPT0gbV9oYXNWaWRlbykKICAgICAgICAgcmV0dXJu
OwpAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OnNldEhhc1ZpZGVvKGJvb2wgaGFzVmlkZW8pCiAgICAgICAgIGNsaWVudC0+aGFzVmlk
ZW9DaGFuZ2VkKG1faGFzVmlkZW8pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpzZXRWaWRlb0RpbWVuc2lvbnMoY29uc3QgRmxvYXRTaXplJiB2aWRlb0Rp
bWVuc2lvbnMpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0RpbWVuc2lvbnMoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAgaWYg
KG1fdmlkZW9EaW1lbnNpb25zID09IHZpZGVvRGltZW5zaW9ucykKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxl
ci5oCmluZGV4IGU1Y2ZmMTJiYmFmYWU2OTExODMxMjdiZjI4MGZhOTNjZTkwZjI1MTIuLjFiMTBm
YmEwZDQyMTlmMDkxZjczYjhjNzk3MDYwNGJiNWQyMGMwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgKQEAgLTI4LDggKzI4
LDggQEAKICNpbXBvcnQgIkFWS2l0U1BJLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKK2NsYXNzIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OwogfQogCiBAaW50ZXJmYWNlIFdlYkFWTWVkaWFTZWxlY3Rpb25P
cHRpb24gOiBOU09iamVjdApAQCAtNDQsOCArNDQsOCBAQCBjbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDsKIH0KIAogQHByb3BlcnR5IChyZXRhaW4pIEFWUGxheWVyQ29udHJv
bGxlciogcGxheWVyQ29udHJvbGxlclByb3h5OwotQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6
OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBkZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAoYXNzaWduKSBX
ZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCogcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlOworQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiBkZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdCogcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogCiBAcHJvcGVydHkg
KHJlYWRvbmx5KSBCT09MIGNhblNjYW5Gb3J3YXJkOwogQHByb3BlcnR5IEJPT0wgY2FuU2NhbkJh
Y2t3YXJkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxh
eWVyQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXll
ckNvbnRyb2xsZXIubW0KaW5kZXggNmJmYzVjYTFhYTI2YjIzZTVlOGE0N2EyZjY4YzIyODdmMzE4
YWEwMS4uODUwMzA2YWMxNWVkMGExOGJjOGYxN2I0ZjJiN2E2NGMxMGRlZDMyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1t
CkBAIC0zMSw5ICszMSw5IEBACiAKICNpbXBvcnQgIkFWS2l0U1BJLmgiCiAjaW1wb3J0ICJMb2dn
aW5nLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorI2ltcG9y
dCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2lt
cG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCmluZGV4IGFiMzdkNGU1NjMxODkxMDEwYWE4YTdi
YTVkYjk2OTgxNjJjMjdjZDguLjlmY2Q3YjRiY2YxNGJjNzRhNjUyNTIwOGNiZjMxMmNlNjI1ZDM2
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCkBAIC0zMCw5ICszMCw5IEBACiAKICNp
bmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1z
LmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIldlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxvYmpjL29iamMuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNTEsMjYgKzUxLDI2IEBAIGNsYXNzIFN0cmlu
ZzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKLWNsYXNzIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWw7CiBjbGFzcyBXZWJQ
bGF5YmFja1Nlc3Npb25DaGFuZ2VPYnNlcnZlcjsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQKLSAgICA6IHB1YmxpYyBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dAotICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ+IHsKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
CisgICAgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgLCBwdWJsaWMgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0PiB7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwmIG1vZGVsKQorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+
IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChtb2RlbCkp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdChtb2RlbCkpOwogICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdCgpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KKyAg
ICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpOworICAgIFBsYXliYWNr
U2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWw7IH0KIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZQorICAgIC8vIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVzZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENsaWVudAorICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUs
IGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJ1
ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKQEAgLTc5LDcgKzc5LDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChi
b29sKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92
ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
Ym9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJs
ZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29u
c3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVy
cmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlk
ZTsKIApAQCAtODgsMTAgKzg4LDEwIEBAIHB1YmxpYzoKICAgICBXZWJBVlBsYXllckNvbnRyb2xs
ZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllckNvbnRyb2xsZXIu
Z2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoUGxheWJhY2tTZXNzaW9uTW9k
ZWwmKTsKIAogICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29u
dHJvbGxlcjsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25N
b2RlbCB7IG51bGxwdHIgfTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbCB7IG51bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5tbQppbmRleCAyN2QxNmRiMWVmNGRkZmEzZWZiMDUzZWUwZjg1MGI5NTliZmUyYjM3Li45NWJh
OTA1YTcwMTk0OTY1NzczMTdiMTBkNTMwMDI3ZmMxYzUxNTEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Lm1tCkBAIC0yNSw3ICsyNSw3IEBACiAKIAogI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorI2ltcG9ydCAiUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKIAogI2lmIFBMQVRGT1JNKElPUykKICNpZiBI
QVZFKEFWS0lUKQpAQCAtMzMsOSArMzMsOSBAQAogI2ltcG9ydCAiQVZLaXRTUEkuaCIKICNpbXBv
cnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisjaW1wb3J0
ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgogI2ltcG9y
dCAiV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNDgsNyArNDgsNyBA
QCBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OldlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2Rl
bCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdChQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCiAgICAgOiBtX3BsYXllckNvbnRy
b2xsZXIoYWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF0pKQogICAg
ICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCiB7CkBAIC02OCw3ICs2OCw3IEBAIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdChXZWJQbGF5YmFja1NlCiAgICAgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRD
aGFuZ2VkKG1vZGVsLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkpOwogfQogCi1XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0KCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQoKQogewogICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlOm51bGxwdHJdOwogICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RXh0
ZXJuYWxQbGF5YmFja0FjdGl2ZTpmYWxzZV07CkBAIC03NiwxMiArNzYsMTIgQEAgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dCgpCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpyZXNldE1lZGlhU3RhdGUoKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdDo6cmVzZXRNZWRpYVN0YXRlKCkKIHsKICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHJl
c2V0TWVkaWFTdGF0ZV07CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogewogICAg
IFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJv
bGxlci5nZXQoKTsKIApAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogICAgIHBsYXll
ckNvbnRyb2xsZXIuc3RhdHVzID0gQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzUmVhZHlUb1BsYXk7
CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmN1cnJlbnRUaW1l
Q2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQordm9pZCBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7CiAgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9y
VGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1l
OwogICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2
YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQpAQCAtMTA2LDcgKzEwNiw3IEBA
IHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmN1cnJlbnRUaW1lQ2hhbmdl
ZChkb3VibGUgY3VycmVudFRpbWUsIGRvCiAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRUaW1p
bmc6dGltaW5nXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQordm9pZCBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRU
aW1lKQogewogICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1f
cGxheWVyQ29udHJvbGxlci5nZXQoKTsKICAgICBkb3VibGUgZHVyYXRpb24gPSBwbGF5ZXJDb250
cm9sbGVyLmNvbnRlbnREdXJhdGlvbjsKQEAgLTExOCwxMiArMTE4LDEyIEBAIHZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1
ZmZlcmVkVGltZSkKICAgICBwbGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0Aw
LCBAKG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUpXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXli
YWNrUmF0ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2Vk
KGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5nZXNDaGFuZ2Vk
KGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMs
IGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQogewog
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gc2Vla2FibGVSYW5nZXMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChj
b25zdCBUaW1lUmFuZ2VzJiB0CiAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRMaXZlVXBkYXRl
SW50ZXJ2YWw6bGl2ZVVwZGF0ZUludGVydmFsXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlG
YXN0UmV2ZXJzZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCiB7CiAgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKIH0K
QEAgLTE1Niw3ICsxNTYsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRp
YVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aQogICAgIHJldHVybiB3
ZWJPcHRpb25zOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojph
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQogewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9u
cyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKICAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwpAQCAt
MTY0LDcgKzE2NCw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWCiAgICAgICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlv
bnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1d
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBt
ZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CiAgICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwpAQCAtMTcy
LDEyICsxNzIsMTIgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QKICAgICAgICAgW21fcGxheWVy
Q29udHJvbGxlciBzZXRDdXJyZW50TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRp
b25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCld
XTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXZpY2VOYW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXZpY2VOYW1lKQogewogICAgIEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tU
eXBlIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5
YmFja1R5cGVOb25lOwotICAgIGlmICh0YXJnZXRUeXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpUYXJnZXRUeXBlQWlyUGxheSkKKyAgICBpZiAodGFyZ2V0VHlwZSA9PSBQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCiAgICAgICAgIGV4dGVybmFsUGxheWJhY2tU
eXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVBaXJQbGF5OwotICAg
IGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5
cGVUVk91dCkKKyAgICBlbHNlIGlmICh0YXJnZXRUeXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpUYXJnZXRUeXBlVFZPdXQpCiAgICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5
ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKIAogICAgIFdlYkFWUGxheWVy
Q29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsK
QEAgLTE4NiwxNyArMTg2LDE3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViCiAgICAgcGxheWVy
Q29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxl
ZCkKIHsKICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEFsbG93c0V4dGVybmFsUGxheWJhY2s6
IWRpc2FibGVkXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKIHsKICAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldE11dGVkOm11dGVkXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6aW52YWxpZGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojpp
bnZhbGlkYXRlKCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCmluZGV4IGViYzlhNjc2NjQx
Yzk3OWFiNzgzYTBkZTFjZDUxMGU0ZWY5ODNkMTYuLjI2ODRkZGRiMmZmMjkxNzdhZDk0Yjc3ZWUw
MmE0MTc3NmUyZDc1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQpAQCAtMzEs
MTMgKzMxLDEzIEBACiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhU2VsZWN0
aW9uT3B0aW9uLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgor
I2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKICNpbXBvcnQgIlF1
YXJ0ekNvcmVTUEkuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCi0j
aW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgorI2ltcG9ydCAi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxV
SUtpdC9VSVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CkBAIC05MiwyNCAr
OTIsMjQgQEAgc3RhdGljIEludFJlY3QgZWxlbWVudFJlY3RJbldpbmRvdyhIVE1MVmlkZW9FbGVt
ZW50KiB2aWRlb0VsZW1lbnQpCiAgICAgcmV0dXJuIHZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdX
aW5kb3cocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogfQogCi1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OwogCiBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgKGRlbGVnYXRlKQotLSh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46KFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0OworLSh2b2lkKWRpZEZpbmlzaEZ1bGxz
Y3JlZW46KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0OwogQGVuZAog
Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCBmaW5hbAotICAgIDog
cHJpdmF0ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgICwgcHJpdmF0ZSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudAotICAgICwgcHJpdmF0ZSBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcgotICAgICwgcHJpdmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAotICAgICwg
cHJpdmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiB7Citj
bGFzcyBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCBmaW5hbAorICAgIDogcHJpdmF0
ZSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgICwgcHJpdmF0ZSBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudAorICAgICwgcHJpdmF0ZSBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAg
ICwgcHJpdmF0ZSBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgICwgcHJpdmF0ZSBQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiB7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBjcmVhdGUoKQorICAgIHN0YXRp
YyBSZWY8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IGNyZWF0ZSgpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0KTsKICAgICB9CiAKICAgICB2b2lkIHNldENvbnRyb2xsZXIoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOyB9CkBAIC0xMTksMjIgKzExOSwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlk
YXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQoKSB7IH0KKyAgICBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCgpIHsgfQogCi0g
ICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICAvLyBWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcgogICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZSB7IH0KICAgICB2b2lk
IGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNj
cmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkg
b3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIC8v
IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CiAgICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9v
bCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0
U2l6ZSYpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKLSAgICB2
b2lkIGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3Zl
cnJpZGU7CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQ2xp
ZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwbGF5
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdG9nZ2xl
UGxheVN0YXRlKCkgb3ZlcnJpZGU7CkBAIC0xNzAsNyArMTcwLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHRvZ2dsZU11dGVkKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRNdXRlZChib29sKSBmaW5h
bDsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLy8gUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQKICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIG92
ZXJyaWRlOwogICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwg
ZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdl
ZChkb3VibGUpIG92ZXJyaWRlOwpAQCAtMTc5LDM5ICsxNzksMzkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBv
dmVycmlkZTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25z
dCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworICAgIHZvaWQgZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFt
ZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7
CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgIHZvaWQgYWRkQ2xpZW50KFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVD
bGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICAvLyBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVDbGllbnQoVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJh
bWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKICAgICBib29sIGlzVmlzaWJs
ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZTsK
ICAgICBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9v
bCBpc011dGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBIYXNoU2V0PFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50Kj4gbV9wbGF5YmFja0NsaWVudHM7Ci0gICAgSGFzaFNldDxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1fZnVsbHNjcmVlbkNsaWVudHM7Ci0gICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1fZnVsbHNjcmVlbk1vZGVs
OwotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbV9wbGF5
YmFja01vZGVsOworICAgIEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX3Bs
YXliYWNrQ2xpZW50czsKKyAgICBIYXNoU2V0PFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4g
bV9mdWxsc2NyZWVuQ2xpZW50czsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IG1faW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudD4gbV9mdWxsc2NyZWVuTW9kZWw7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50PiBtX3BsYXliYWNrTW9kZWw7CiAgICAgUmVmUHRyPEhUTUxWaWRlb0Vs
ZW1lbnQ+IG1fdmlkZW9FbGVtZW50OwogICAgIFJldGFpblB0cjxVSVZpZXc+IG1fdmlkZW9GdWxs
c2NyZWVuVmlldzsKICAgICBSZXRhaW5QdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcj4g
bV9jb250cm9sbGVyOwogfTsKIAotI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyCisjcHJhZ21hIG1hcmsgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2Ny
ZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVs
bHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgUmV0YWluUHRyPENB
TGF5ZXI+IHZpZGVvRnVsbHNjcmVlbkxheWVyID0gW21fdmlkZW9GdWxsc2NyZWVuVmlldyBsYXll
cl07Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRo
aXMsIHRoaXMsIHZpZGVvRnVsbHNjcmVlbkxheWVyXSB7CiAgICAgICAgIFt2aWRlb0Z1bGxzY3Jl
ZW5MYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6
dHJhbnNwYXJlbnQpXTsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRnVsbHNj
cmVlbkxheWVyKHZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBbcHJvdGVjdGVkVGhpcywgdGhp
c10gewpAQCAtMjIyLDEwICsyMjIsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKICAgICB9KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQog
ewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
V2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIG1fZnVsbHNjcmVl
bk1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0ZWRUaGlzLCB0aGlz
XSB7CiAgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewpAQCAtMjM1LDE1ICsyMzUsMTUgQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRD
bGVhbnVwRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0g
ICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIpOwotICAg
IG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRy
KTsKKyAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0cik7Cisg
ICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKG51bGxwdHIp
OwogICAgIG1faW50ZXJmYWNlID0gbnVsbHB0cjsKICAgICBtX3ZpZGVvRnVsbHNjcmVlblZpZXcg
PSBuaWw7CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVj
dGVkVGhpcywgdGhpc10gewogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxs
c2NyZWVuTGF5ZXIobmlsKTsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRWxl
bWVudChudWxscHRyKTsKQEAgLTI1NiwxMCArMjU2LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRo
aXMsIHRoaXNdIHsKICAgICAgICAgSW50UmVjdCBjbGllbnRSZWN0ID0gZWxlbWVudFJlY3RJbldp
bmRvdyhtX3ZpZGVvRWxlbWVudC5nZXQoKSk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjbGllbnRSZWN0XSB7
CkBAIC0yNjgsMTIgKzI2OCwxMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQogICAgIH0pOwogfQogCi0jcHJh
Z21hIG1hcmsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyNwcmFnbWEgbWFyayBQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlv
bikKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBkdXJhdGlvbl0gewogICAgICAgICAgICAgcHJvdGVjdGVk
VGhpcy0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKICAgICAgICAgfSk7CkBAIC0yODQsMTAg
KzI4NCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkdXJh
dGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogICAgICAgICBjbGllbnQtPmR1cmF0aW9uQ2hh
bmdlZChkdXJhdGlvbik7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRp
bWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7CiAgICAg
aWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJv
dGVjdGVkVGhpcywgY3VycmVudFRpbWUsIGFuY2hvclRpbWVdIHsKICAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7CiAg
ICAgICAgIH0pOwpAQCAtMjk4LDEwICsyOTgsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwK
ICAgICAgICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hvclRp
bWUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZm
ZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRp
bWUpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgYnVmZmVyZWRUaW1lXSB7CiAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiAgICAgICAgIH0p
OwpAQCAtMzEyLDEwICszMTIsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW0KICAgICAgICAg
Y2xpZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5
aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQog
ewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3Byb3RlY3RlZFRoaXMsIGlzUGxheWluZywgcGxheWJhY2tSYXRlXSB7CiAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CiAg
ICAgICAgIH0pOwpAQCAtMzI2LDEwICszMjYsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXkK
ICAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvQ2hh
bmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCiB7CiAgICAgaWYgKFdlYlRocmVhZElz
Q3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgaGFz
VmlkZW9dIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmhhc1ZpZGVvQ2hhbmdlZChoYXNW
aWRlbyk7CiAgICAgICAgIH0pOwpAQCAtMzQwLDEwICszNDAsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8p
CiAgICAgICAgIGNsaWVudC0+aGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXpl
JiB2aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9EaW1lbnNpb25zID0g
dmlkZW9EaW1lbnNpb25zXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT52aWRlb0RpbWVu
c2lvbnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7CiAgICAgICAgIH0pOwpAQCAtMzU0LDEwICsz
NTQsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9E
aW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUKICAgICAgICAgY2xpZW50LT52aWRlb0Rp
bWVuc2lvbnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1l
UmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVV
cGRhdGVJbnRlcnZhbCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
ZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKIHsKICAgICBpZiAo
V2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0
ZWRUaGlzLCBwbGF0Zm9ybVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLCBsYXN0TW9k
aWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWxdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChUaW1lUmFuZ2VzOjpjcmVhdGUocGxhdGZvcm1UaW1l
UmFuZ2VzKSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKICAgICAgICAg
fSk7CkBAIC0zNjgsMTAgKzM2OCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcwogICAgICAg
ICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRU
aW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZh
c3RSZXZlcnNlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxh
eUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKIHsKICAgICBpZiAo
V2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0
ZWRUaGlzLCBjYW5QbGF5RmFzdFJldmVyc2VdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
PmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKICAgICAgICAg
fSk7CkBAIC0zOTEsMTAgKzM5MSwxMCBAQCBzdGF0aWMgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiBpc29sYXRlZENvcHkoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aQogICAgIHJl
dHVybiBvcHRpb25zQ29weTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50
KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBvcHRpb25zID0g
aXNvbGF0ZWRDb3B5KG9wdGlvbnMpLCBzZWxlY3RlZEluZGV4XSB7CiAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2Vs
ZWN0ZWRJbmRleCk7CiAgICAgICAgIH0pOwpAQCAtNDA1LDEwICs0MDUsMTAgQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnMKICAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojps
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGlm
IChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3Rl
Y3RlZFRoaXMsIG9wdGlvbnMgPSBpc29sYXRlZENvcHkob3B0aW9ucyksIHNlbGVjdGVkSW5kZXhd
IHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogICAgICAgICB9KTsKQEAgLTQxOSw3
ICs0MTksNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjbwogICAgICAgICBjbGllbnQtPmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmlj
ZU5hbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5h
bWUpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7CiAgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGhpcywgZW5hYmxlZCwg
dHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZERldmljZU5hbWUuaXNvbGF0ZWRD
b3B5KCldIHsKQEAgLTQzMywxMCArNDMzLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwKICAg
ICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2Nh
bGl6ZWREZXZpY2VOYW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJs
ZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBpZiAoV2ViVGhy
ZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlz
LCBkaXNhYmxlZF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKTsKICAgICAgICAgfSk7CkBAIC00NDcsMTAg
KzQ0NywxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYgogICAgICAgICBjbGllbnQtPndpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVk
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJv
b2wgbXV0ZWQpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgbXV0ZWRdIHsKICAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPm11dGVkQ2hhbmdlZChtdXRlZCk7CiAgICAgICAgIH0pOwpAQCAtNDYxLDM0ICs0
NjEsMzQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRD
aGFuZ2VkKGJvb2wgbXV0ZWQpCiAgICAgICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKG11dGVkKTsK
IH0KIAotI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCisjcHJhZ21hIG1hcmsg
VmlkZW9GdWxsc2NyZWVuTW9kZWwKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQoVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fZnVsbHNjcmVl
bkNsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fZnVsbHNjcmVlbkNsaWVudHMuYWRk
KCZjbGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpyZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVChtX2Z1bGxzY3JlZW5D
bGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2Z1bGxzY3JlZW5DbGllbnRzLnJlbW92
ZSgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1l
ZGlhKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBtb2RlLCBmaW5pc2hlZFdp
dGhNZWRpYV0gewogICAgICAgICBpZiAobV9mdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgICAgICBt
X2Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1vZGUsIGZpbmlzaGVkV2l0
aE1lZGlhKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3Qg
ZnJhbWUpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSBbbV92aWRl
b0Z1bGxzY3JlZW5WaWV3IGxheWVyXTsKICAgICAKICAgICBbdmlkZW9GdWxsc2NyZWVuTGF5ZXIg
c2V0U3VibGF5ZXJUcmFuc2Zvcm06W3ZpZGVvRnVsbHNjcmVlbkxheWVyIHRyYW5zZm9ybV1dOwpA
QCAtNTA4LDEwNSArNTA4LDEwNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IGZyYW1lKQogICAgIH0pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVy
R3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0
eSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJH
cmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5KQog
ewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
V2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB2aWRlb0dyYXZpdHldIHsKICAgICAg
ICAgaWYgKG1fZnVsbHNjcmVlbk1vZGVsKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwt
PnNldFZpZGVvTGF5ZXJHcmF2aXR5KHZpZGVvR3Jhdml0eSk7CiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVh
ZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgbW9kZV0gewogICAgICAgICBpZiAobV9mdWxsc2Ny
ZWVuTW9kZWwpCiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKG1vZGUpOwogICAgIH0pOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1bGxzY3JlZW5Nb2RlbC0+
aXNWaXNpYmxlKCkgOiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVlbk1vZGVsLT5oYXNW
aWRlbygpIDogZmFsc2U7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmlzTXV0ZWQoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6aXNNdXRlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAg
cmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+aXNNdXRlZCgpIDogZmFs
c2U7CiB9CiAKLUZsb2F0U2l6ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
dmlkZW9EaW1lbnNpb25zKCkgY29uc3QKK0Zsb2F0U2l6ZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1bGxzY3JlZW5Nb2Rl
bC0+dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKTsKIH0KIAotI3ByYWdtYSBtYXJrIC0g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVu
dChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKCFtX3BsYXliYWNrQ2xpZW50cy5jb250YWlucygm
Y2xpZW50KSk7CiAgICAgbV9wbGF5YmFja0NsaWVudHMuYWRkKCZjbGllbnQpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQoV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYg
Y2xpZW50KQogewogICAgIEFTU0VSVChtX3BsYXliYWNrQ2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7CiAgICAgbV9wbGF5YmFja0NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KCkKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFk
KCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRU
aGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBt
X3BsYXliYWNrTW9kZWwtPnBsYXkoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGF1c2UoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6cGF1c2UoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlz
XSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNr
TW9kZWwtPnBhdXNlKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0
ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAg
ICBtX3BsYXliYWNrTW9kZWwtPnRvZ2dsZVBsYXlTdGF0ZSgpOwogICAgIH0pOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVNdXRlZCgpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVNdXRlZCgpCiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2Rl
bCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+dG9nZ2xlTXV0ZWQoKTsKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TXV0ZWQo
Ym9vbCBtdXRlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldE11
dGVkKGJvb2wgbXV0ZWQpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgV2ViVGhy
ZWFkUnVuKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlzKSwgdGhpcywgbXV0ZWRdIHsK
QEAgLTYxNSwxNTEgKzYxNSwxNTEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQogewogICAgIEFT
U0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFk
UnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwp
CiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2NydWJiaW5nKCk7CiAgICAgfSk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnVi
YmluZygpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY3J1YmJp
bmcoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmICht
X3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmVuZFNjcnViYmlu
ZygpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVj
dGVkVGhpcywgdGhpcywgdGltZV0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAg
ICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWVrVG9UaW1lKHRpbWUpOwogICAgIH0pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayhkb3Vi
bGUgdGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZhc3RTZWVr
KGRvdWJsZSB0aW1lKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB0aW1lXSB7
CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9k
ZWwtPmZhc3RTZWVrKHRpbWUpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2Rl
bCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+YmVnaW5TY2FubmluZ0ZvcndhcmQoKTsK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRo
aXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1f
cGxheWJhY2tNb2RlbC0+YmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7CiAgICAgfSk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKCkKIHsKICAg
ICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01v
ZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5lbmRTY2FubmluZygpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RB
dWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKIHsK
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdl
YlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgaW5kZXhdIHsKICAgICAgICAgaWYgKG1f
cGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbihpbmRleCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRl
eCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywg
dGhpcywgaW5kZXhdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAg
IG1fcGxheWJhY2tNb2RlbC0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKICAgICB9
KTsKIH0KIAotZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkdXJh
dGlvbigpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1
cmF0aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4g
bV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5kdXJhdGlvbigpIDogMDsKIH0KIAot
ZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZSgp
IGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRU
aW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9w
bGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5jdXJyZW50VGltZSgpIDogMDsKIH0KIAot
ZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWUo
KSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJl
ZFRpbWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBt
X3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmJ1ZmZlcmVkVGltZSgpIDogMDsKIH0K
IAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNQbGF5aW5nKCkg
Y29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzUGxheWluZygp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJh
Y2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+aXNQbGF5aW5nKCkgOiBmYWxzZTsKIH0KIAotZmxv
YXQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSgpIGNv
bnN0CitmbG9hdCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheWJhY2tSYXRl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5
YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5wbGF5YmFja1JhdGUoKSA6IDA7CiB9CiAKLVJl
ZjxUaW1lUmFuZ2VzPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2Fi
bGVSYW5nZXMoKSBjb25zdAorUmVmPFRpbWVSYW5nZXM+IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+c2Vl
a2FibGVSYW5nZXMoKSA6IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogfQogCi1kb3VibGUgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2Rp
ZmllZFRpbWUoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFj
a01vZGVsLT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgOiAwOwogfQogCi1k
b3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxpdmVVcGRhdGVJbnRl
cnZhbCgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxp
dmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAg
ICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+bGl2ZVVwZGF0ZUlu
dGVydmFsKCkgOiAwOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01v
ZGVsLT5jYW5QbGF5RmFzdFJldmVyc2UoKSA6IGZhbHNlOwogfQogCi1WZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9ucygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgaWYgKG1fcGxh
eWJhY2tNb2RlbCkKQEAgLTc2NywxMyArNzY3LDEzIEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxl
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdWludDY0X3QgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKK3VpbnQ2NF90IFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJh
Y2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSA6IC0x
OwogfQogCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK1Zl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOwogICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCkBAIC03ODEsMzEgKzc4MSwz
MSBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZQogICAgIHJldHVybiB7IH07CiB9CiAKLXVpbnQ2
NF90IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxl
Y3RlZEluZGV4KCkgY29uc3QKK3VpbnQ2NF90IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVs
LT5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgOiAtMTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25z
dAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFj
a0VuYWJsZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVy
biBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFsUGxheWJhY2tFbmFi
bGVkKCkgOiBmYWxzZTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CitQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5l
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIDogVGFyZ2V0VHlwZU5vbmU7CiB9CiAKLVN0cmlu
ZyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xv
Y2FsaXplZERldmljZU5hbWUoKSBjb25zdAorU3RyaW5nIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/
IG1fcGxheWJhY2tNb2RlbC0+ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSA6
IFN0cmluZygpOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tN
b2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSA6
IHRydWU7CkBAIC04MTMsMTYgKzgxMywxNiBAQCBib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0CiAKICNw
cmFnbWEgbWFyayBPdGhlcgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBVSVZp
ZXcgKnZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVu
KEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgVUlWaWV3ICp2aWV3LCBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIFJldGFpblB0cjxVSVZpZXc+IHZpZXdSZWYgPSB2aWV3OwogICAg
IG1fdmlkZW9FbGVtZW50ID0gJnZpZGVvRWxlbWVudDsKLSAgICBtX3BsYXliYWNrTW9kZWwgPSBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgbV9wbGF5
YmFja01vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOwog
ICAgIG1fcGxheWJhY2tNb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBtX3BsYXliYWNrTW9k
ZWwtPnNldE1lZGlhRWxlbWVudChtX3ZpZGVvRWxlbWVudC5nZXQoKSk7CiAKLSAgICBtX2Z1bGxz
Y3JlZW5Nb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUo
KTsKKyAgICBtX2Z1bGxzY3JlZW5Nb2RlbCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpjcmVhdGUoKTsKICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsK
ICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9FbGVtZW50KG1fdmlkZW9FbGVtZW50Lmdl
dCgpKTsKIApAQCAtODMyLDE1ICs4MzIsMTUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGUKICAg
ICBGbG9hdFJlY3QgdmlkZW9MYXllckZyYW1lID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdmlk
ZW9FbGVtZW50Q2xpZW50UmVjdC5zaXplKCkpOwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRW
aWRlb0xheWVyRnJhbWUodmlkZW9MYXllckZyYW1lKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3Rl
ZFRoaXMsIHRoaXMsIHZpZGVvRWxlbWVudENsaWVudFJlY3QsIHZpZXdSZWYsIG1vZGUsIGFsbG93
c1BpY3R1cmVJblBpY3R1cmVdIHsKICAgICAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAKLSAg
ICAgICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBzZXNzaW9uSW50ZXJm
YWNlID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZSgqdGhpcyk7Ci0g
ICAgICAgIG1faW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNy
ZWF0ZShzZXNzaW9uSW50ZXJmYWNlLmdldCgpKTsKLSAgICAgICAgbV9pbnRlcmZhY2UtPnNldFdl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOwotICAgICAgICBtX2ludGVyZmFj
ZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwodGhpcyk7Ci0gICAgICAgIG1faW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgUmVm
PFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBzZXNzaW9uSW50ZXJmYWNlID0gUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1faW50ZXJm
YWNlID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZShzZXNzaW9uSW50ZXJm
YWNlLmdldCgpKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKHRoaXMpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVu
TW9kZWwodGhpcyk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcih0aGlzKTsKIAogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlblZpZXcgPSBhZG9w
dE5TKFthbGxvY1VJVmlld0luc3RhbmNlKCkgaW5pdF0pOwogICAgICAgICAKQEAgLTg0OCwyNSAr
ODQ4LDI1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVw
RnVsbHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlCiAgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKCkKIHsKICAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwgaXNNYWluVGhyZWFkKCkpOwogICAgIElu
dFJlY3QgY2xpZW50UmVjdCA9IGVsZW1lbnRSZWN0SW5XaW5kb3cobV92aWRlb0VsZW1lbnQuZ2V0
KCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNsaWVudFJlY3RdIHsKICAg
ICAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgICAgIG1faW50ZXJmYWNlLT5leGl0RnVs
bHNjcmVlbihjbGllbnRSZWN0KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxs
c2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBtX2ludGVyZmFjZS0+
cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwogfQogCiBAaW1wbGVtZW50YXRpb24gV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBfY29udGV4dDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IF9jb250ZXh0OwogICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50
PiBfdmlkZW9FbGVtZW50OwogfQogCkBAIC04OTEsNyArODkxLDcgQEAgLSAoSFRNTFZpZGVvRWxl
bWVudCopdmlkZW9FbGVtZW50CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmll
dyBtb2RlOihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpbW9kZQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgX2NvbnRleHQgPSBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3JlYXRlKCk7CisgICAgX2NvbnRleHQgPSBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3JlYXRlKCk7CiAgICAgX2NvbnRleHQtPnNl
dENvbnRyb2xsZXIoc2VsZik7CiAgICAgX2NvbnRleHQtPnNldFVwRnVsbHNjcmVlbigqX3ZpZGVv
RWxlbWVudC5nZXQoKSwgdmlldywgbW9kZSk7CiB9CkBAIC05MDksNyArOTA5LDcgQEAgLSAodm9p
ZClyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuCiAgICAgICAgIF9jb250ZXh0LT5yZXF1ZXN0
SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKLS0gKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVl
bjooV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQKKy0gKHZvaWQp
ZGlkRmluaXNoRnVsbHNjcmVlbjooVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNv
bnRleHQKIHsKICAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwogICAgIEFTU0VSVF9V
TlVTRUQoY29udGV4dCwgY29udGV4dCA9PSBfY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oCmluZGV4IDRhYzcwNDdhYjcyY2IzNGRmNjE4YzY0ZTA2NjMyOTI1YjZkZTc4ZGUuLjEy
NzcxMDNjMzQxMWE5MzA5YzhmYzUyNDkzNjViZjA1ODUxNDY1YjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
TGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgot
I2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSAiUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
IgogI2luY2x1ZGUgPG9iamMvb2JqYy5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01NywyNyArNTcsMjcgQEAgY2xhc3MgU3RyaW5n
OwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEZsb2F0U2l6ZTsK
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXI7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbDsKK2NsYXNzIFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOwogICAgIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgZmluYWwKLSAgICA6IHB1YmxpYyBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0IGZpbmFsCisgICAgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQKKyAgICAsIHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwg
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiB7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKLSAgICB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7Ci0gICAgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
KCk7IH0KKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVh
dGUoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Vmlk
ZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKik7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vz
c2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBs
YXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CiAK
LSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9j
YWxpemVkRGV2aWNlTmFtZSkgZmluYWw7CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wg
ZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
LCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihVSVZpZXcmLCBjb25zdCBJbnRS
ZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsKQEAgLTk1LDcg
Kzk1LDcgQEAgcHVibGljOgogICAgICAgICBQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZAogICAgIH07
CiAKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwoKSBjb25zdCB7IHJldHVybiBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVs
KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQogICAgIGJvb2wgc2hv
dWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKEV4aXRGdWxsU2NyZWVuUmVhc29uKTsKICAgICBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNr
KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KQEAg
LTExNywxOCArMTE3LDE4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
ID09IG1vZGU7IH0KIAogcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Jik7
CisgICAgV0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKICAgICB2b2lkIGJlZ2luU2Vzc2lvbigpOwogICAg
IHZvaWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7CiAgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5T
dGFuZGFyZCgpOwogICAgIHZvaWQgd2F0Y2hkb2dUaW1lckZpcmVkKCk7CiAgICAgV2ViQVZQbGF5
ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3Q7CiAKLSAgICBSZWY8V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwor
ICAgIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2U7CiAgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZT4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlOwogICAgIFJldGFpblB0cjxBVlBsYXll
clZpZXdDb250cm9sbGVyPiBtX3BsYXllclZpZXdDb250cm9sbGVyOwotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0ciB9OwotICAgIFdl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ciB7IG51bGxwdHIgfTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCB7IG51bGxwdHIgfTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciog
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CiAKICAgICAvLyBUaGVzZSBh
cmUgb25seSB1c2VkIHdoZW4gZnVsbHNjcmVlbiBpcyBwcmVzZW50ZWQgaW4gYSBzZXBhcmF0ZSB3
aW5kb3cuCiAgICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3dpbmRvdzsKQEAgLTEzOCw3ICsxMzgs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyTGF5ZXJWaWV3PiBtX3Bs
YXllckxheWVyVmlldzsKICAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
Tm9uZSB9OwogICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gbV9wcmVwYXJlVG9JbmxpbmVD
YWxsYmFjazsKLSAgICBSdW5Mb29wOjpUaW1lcjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gbV93YXRjaGRvZ1RpbWVyOworICAgIFJ1bkxvb3A6OlRpbWVyPFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBtX3dhdGNoZG9nVGltZXI7CiAgICAgYm9vbCBtX2FsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjayB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2V4aXRSZXF1ZXN0ZWQg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9leGl0Q29tcGxldGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbQppbmRleCBiZTQ4ZGM1NThlODM0Yjc4YmMzMjMyZjA3YTQ2MzU4
ZjY0OTE5YTFkLi4yNWVjZTYzNjYwOGUxNGFiNjliNjMwNjE1ZmZmMGI1NjAwYjBhZjU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCkBAIC0yMywyNSArMjMsMjMgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotCiAjaW1wb3J0ICJjb25maWcuaCIKIAogI2lmIFBMQVRGT1JNKElPUykK
LQotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBvcnQg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCiAKICNpZiBIQVZFKEFWS0lUKQogCiAj
aW1wb3J0ICJBVktpdFNQSS5oIgogI2ltcG9ydCAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmgi
CiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbXBvcnQgIlRpbWVSYW5n
ZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCisjaW1wb3J0
ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVy
LmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCiAj
aW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgog
I2ltcG9ydCA8b2JqYy9tZXNzYWdlLmg+CkBAIC05MiwxOSArOTAsMTkgQEAgc3RhdGljIGNvbnN0
IFNlY29uZHMgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCB7IDFfcyB9OwogQGNsYXNzIFdl
YkFWTWVkaWFTZWxlY3Rpb25PcHRpb247CiAKIEBpbnRlcmZhY2UgV2ViQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QgPEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZV9XZWJLaXRPbmx5PiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOwogfQotQHByb3BlcnR5IChhc3NpZ24p
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOwor
QHByb3BlcnR5IChhc3NpZ24pIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2Ny
ZWVuSW50ZXJmYWNlOwogLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3
Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0
aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNv
bjsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZQotLSAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRl
cmZhY2UKKy0gKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJm
YWNlCiB7CiAgICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNlLmdldCgpOwogfQogCi0tICh2
b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6
KFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCiB7CiAg
ICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOwogfQpAQCAtMTQw
LDE5ICsxMzgsMTkgQEAgLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0b3BQaWN0dXJl
SW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGwKICAgICBzZWxmLmZ1bGxzY3Jl
ZW5JbnRlcmZhY2UtPmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7CiB9CiAKLXN0YXRpYyBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gY29udmVy
dFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24oQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2Ny
ZWVuUmVhc29uIHJlYXNvbikKK3N0YXRpYyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
RXhpdEZ1bGxTY3JlZW5SZWFzb24gY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24oQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKIHsKICAgICBzd2l0
Y2ggKHJlYXNvbikgewogICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2Ny
ZWVuUmVhc29uRG9uZUJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBl
ZDsKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVs
bFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZDsKICAgICBjYXNlIEFWUGxheWVyVmlld0Nv
bnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ6Ci0gICAg
ICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3Jl
ZW5SZWFzb246OkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ7CisgICAgICAgIHJldHVybiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkZ1bGxTY3JlZW5C
dXR0b25UYXBwZWQ7CiAgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3Jl
ZW5SZWFzb25QaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUlu
UGljdHVyZVN0YXJ0ZWQ7CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVkOwogICAg
IGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGluY2hHZXN0
dXJlSGFuZGxlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGluY2hHZXN0dXJlSGFuZGxlZDsKKyAgICAgICAg
cmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNv
bjo6UGluY2hHZXN0dXJlSGFuZGxlZDsKICAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJF
eGl0RnVsbFNjcmVlblJlYXNvblJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZDoKLSAgICAg
ICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVl
blJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkOworICAgICAgICByZXR1cm4g
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1v
dGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ7CiAgICAgfQogfQogCkBAIC0xNzIsNyArMTcwLDcg
QEAgQGVuZAogQGludGVyZmFjZSBXZWJBVlBsYXllckxheWVyIDogQ0FMYXllcgogQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbikgTlNTdHJpbmcgKnZpZGVvR3Jhdml0eTsKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBnZXR0ZXI9aXNSZWFkeUZvckRpc3BsYXkpIEJPT0wgcmVhZHlGb3JEaXNwbGF5
OwotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVy
Q29udHJvbGxlcjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIENBTGF5ZXIgKnZpZGVv
U3VibGF5ZXI7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgbnVsbGFibGUpIE5TRGljdGlv
bmFyeSAqcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOwpAQCAtMTgxLDcgKzE3OSw3IEBAIEBwcm9wZXJ0
eSBDR1JlY3QgbW9kZWxWaWRlb0xheWVyRnJhbWU7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJBVlBsYXllckxheWVyIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7CiAgICAgUmV0YWluUHRyPFdlYkFW
UGxheWVyQ29udHJvbGxlcj4gX2F2UGxheWVyQ29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8Q0FM
YXllcj4gX3ZpZGVvU3VibGF5ZXI7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfdmlkZW9HcmF2
aXR5OwpAQCAtMjA0LDEyICsyMDIsMTIgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgW3N1cGVyIGRl
YWxsb2NdOwogfQogCi0tIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNj
cmVlbkludGVyZmFjZQorLSAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3Jl
ZW5JbnRlcmZhY2UKIHsKICAgICByZXR1cm4gX2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCk7CiB9
CiAKLS0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKKy0gKHZvaWQpc2V0RnVsbHNjcmVlbklu
dGVyZmFjZTooVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZh
Y2UKIHsKICAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7CiB9
CkBAIC0zMTIsMTMgKzMxMCwxMyBAQCAtICh2b2lkKXNldFZpZGVvR3Jhdml0eTooTlNTdHJpbmcg
Kil2aWRlb0dyYXZpdHkKICAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eSBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwogICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0
QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpKQotICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKKyAgICAgICAgZ3Jh
dml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemU7
CiAgICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0KCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OworICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKICAgICBlbHNl
IGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZp
bGwoKSkKLSAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOworICAgICAgICBncmF2aXR5ID0gV2ViQ29y
ZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7CiAg
ICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAKQEAgLTQ5MSwzNSAr
NDg5LDM1IEBAIHN0YXRpYyBDbGFzcyBnZXRXZWJBVlBsYXllckxheWVyVmlld0NsYXNzKCkKICAg
ICByZXR1cm4gdGhlQ2xhc3M7CiB9CiAKLVJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZShXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorUmVmPFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6Y3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UpCiB7Ci0gICAgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBp
bnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdChwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKICAgICBbaW50ZXJmYWNlLT5t
X3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgc2V0RnVsbHNjcmVlbkludGVyZmFjZTppbnRl
cmZhY2UucHRyKCldOwogICAgIHJldHVybiBpbnRlcmZhY2U7CiB9CiAKLVdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQor
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UpCiAgICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UpCiAgICAgLCBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pKQotICAgICwgbV93
YXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQpCisgICAgLCBtX3dhdGNoZG9nVGltZXIo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Ondh
dGNoZG9nVGltZXJGaXJlZCkKIHsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCitWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6flZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCkKIHsKICAgICBX
ZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSB0aGlzLT5wbGF5ZXJDb250
cm9sbGVyKCk7CiAgICAgaWYgKHBsYXllckNvbnRyb2xsZXIgJiYgcGxheWVyQ29udHJvbGxlci5l
eHRlcm5hbFBsYXliYWNrQWN0aXZlKQotICAgICAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChm
YWxzZSwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lLCAiIik7CisgICAg
ICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGZhbHNlLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
VGFyZ2V0VHlwZU5vbmUsICIiKTsKICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKICAg
ICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAot
V2ViQVZQbGF5ZXJDb250cm9sbGVyICpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
cGxheWVyQ29udHJvbGxlcigpIGNvbnN0CitXZWJBVlBsYXllckNvbnRyb2xsZXIgKlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXllckNvbnRyb2xsZXIoKTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxs
c2NyZWVuTW9kZWwqIG1vZGVsKQogewogICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQog
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwpAQCAt
NTMzLDE4ICs1MzEsMTggQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2MKICAgICB2aWRlb0RpbWVu
c2lvbnNDaGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6IEZsb2F0U2l6ZSgpKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogewogICAgIG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gb2JzZXJ2ZXI7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wg
aGFzVmlkZW8pCiB7CiAgICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNFbmFibGVkVmlkZW86
aGFzVmlkZW9dOwogICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0SGFzVmlkZW86aGFzVmlkZW9d
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVu
c2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBG
bG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBXZWJBVlBsYXllckxheWVyICpwbGF5
ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxh
eWVyXTsKIApAQCAtNTU4LDE0ICs1NTYsMTQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHYKICAg
ICBbcGlwVmlldyBzZXROZWVkc0xheW91dF07CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgW21fcGxheWVyTGF5ZXJW
aWV3IHNldEhpZGRlbjplbmFibGVkXTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQogewotICAg
IExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxp
Y2F0aW9uRGlkQmVjb21lQWN0aXZlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZl
KCVwKSIsIHRoaXMpOwogICAgIGlmIChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50
ZXJpbmdGb3JlZ3JvdW5kICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbC0+aXNWaXNpYmxlKCkpIHsKICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwogICAgICAgICByZXR1cm47CkBAIC01NzQsNyArNTcy
LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25E
aWRCZWNvbWVBY3RpdmUoKQogICAgIC8vIElmIHdlIGFyZSBib3RoIGluIFBpUCBhbmQgaW4gRnVs
bHNjcmVlbiAoaS5lLiwgdmlhIGF1dG8tUGlQKSwgYW5kIHdlIGRpZCBub3Qgc3RvcCBmdWxsc2Ny
ZWVuIHVwb24gcmV0dXJuaW5nLCBpdCBtdXN0IGJlCiAgICAgLy8gYmVjYXVzZSB0aGUgb3JpZ2lu
YXRpbmcgdmlldyBpcyBub3QgdmlzaWJsZSwgc28gaGlkZSB0aGUgZnVsbHNjcmVlbiB3aW5kb3cu
CiAgICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVTdGFuZGFyZCB8IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBp
Y3R1cmVJblBpY3R1cmUpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25I
YW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKICAgICAgICAg
ICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKQEAgLTU5MCwxMCArNTg4LDEwIEBAIEBp
bnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAoKQogQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
biwgc2V0dGVyPV9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6KSBCT09MIF9pZ25v
cmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM7CiBAZW5kCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmlldywgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dz
UGljdHVyZUluUGljdHVyZVBsYXliYWNrKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0dXBGdWxsc2NyZWVuKFVJVmlldyYgdmlkZW9WaWV3LCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0
dXJlUGxheWJhY2spCiB7CiAgICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVw
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAogICAgIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBs
YXliYWNrID0gYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOwogCkBAIC02NTksMTYgKzY1
NywxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxz
Y3JlZW4oVUlWaWV3JiB2aWRlb1ZpZXcsIGNvbnN0CiAKICAgICBbQ0FUcmFuc2FjdGlvbiBjb21t
aXRdOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQogewotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVl
biglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAKICAgICBtX2V4aXRDb21w
bGV0ZWQgPSBmYWxzZTsKICAgICBtX2V4aXRSZXF1ZXN0ZWQgPSBmYWxzZTsKQEAgLTY4Miw5ICs2
ODAsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxz
Y3JlZW4oKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSgpCiB7
Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSglcCki
LCB0aGlzKTsKICAgICAKICAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJl
SW5QaWN0dXJlUG9zc2libGVdKQogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdGFy
dFBpY3R1cmVJblBpY3R1cmVdOwpAQCAtNjkyLDEwICs2OTAsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCkKICAgICAgICAg
ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQogewot
ICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVu
dGVyRnVsbHNjcmVlblN0YW5kYXJkKCVwKSIsIHRoaXMpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBMT0coRnVs
bHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5T
dGFuZGFyZCglcCkiLCB0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAKICAgICBpZiAoW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlXSkgewogICAgICAgICAvLyBOT1RFOiBUaGUg
ZnVsbHNjcmVlbiBtb2RlIHdpbGwgYmUgcmVzdG9yZWQgaW4gcHJlcGFyZUZvclBpY3R1cmVJblBp
Y3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCkuCkBAIC03MDYsNyArNzA0LDcgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRh
cmQoKQogCiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0
ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOlt0aGlzLCBwcm90ZWN0ZWRUaGlzXSAoQk9PTCBzdWNj
ZWVkZWQsIE5TRXJyb3IqKSB7CiAgICAgICAgIFVOVVNFRF9QQVJBTShzdWNjZWVkZWQpOwotICAg
ICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpl
bnRlckZ1bGxzY3JlZW5TdGFuZGFyZCAtIGxhbWJkYSglcCkgLSBzdWNjZWVkZWQoJXMpIiwgdGhp
cywgYm9vbFN0cmluZyhzdWNjZWVkZWQpKTsKKyAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQgLSBsYW1i
ZGEoJXApIC0gc3VjY2VlZGVkKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcoc3VjY2VlZGVkKSk7CiAg
ICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZ
RVNdOwogCiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKQEAgLTcxNCw3
ICs3MTIsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1
bGxzY3JlZW5TdGFuZGFyZCgpCiAgICAgfV07CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZp
bmFsUmVjdCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2Ny
ZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsUmVjdCkKIHsKICAgICBtX3dhdGNoZG9n
VGltZXIuc3RvcCgpOwogCkBAIC03MjUsNyArNzIzLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbiglcCkiLCB0aGlz
KTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpl
eGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
ZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwogICAgIAogICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJlY3Qg
dG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CkBAIC03NDAs
MTQgKzczOCwxNCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0
RnVsbHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaQogICAgICAgICBbbV93aW5kb3cg
c2V0SGlkZGVuOk5PXTsKICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1
cmVJblBpY3R1cmVdOwogICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgfCBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKLSAgICAgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
ICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5p
bWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBO
U0Vycm9yKikgewogICAgICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKICAgICAgICAgICAgIFttX3dpbmRvdyBzZXRI
aWRkZW46Tk9dOwogICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1
cmVJblBpY3R1cmVdOwogICAgICAgICB9XTsKICAgICB9IGVsc2UgaWYgKGlzTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKLSAgICAgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxs
U2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlz
XSAoQk9PTCwgTlNFcnJvciopIHsKICAgICAgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7
CiAKQEAgLTc3Myw5ICs3NzEsOSBAQCBAaW50ZXJmYWNlIFVJV2luZG93ICgpCiAtIChVSUludGVy
ZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9yaWVudGF0aW9uOwogQGVuZAogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCiB7Ci0gICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51
cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAgICAg
aWYgKG1fd2luZG93KSB7CiAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAg
ICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOwpAQCAtODEwLDcgKzgwOCw3
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2Ny
ZWVuKCkKICAgICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCiB7CiAgICAgbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCA9IG5pbDsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKQEAgLTgx
OCw3ICs4MTYsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjppbnZh
bGlkYXRlKCkKICAgICBjbGVhbnVwRnVsbHNjcmVlbigpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxz
Y3JlZW4oKQogewogICAgIGlmICghbV9lbnRlclJlcXVlc3RlZCkKICAgICAgICAgcmV0dXJuOwpA
QCAtODI2LDIwICs4MjQsMjAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCiAgICAgaWYgKGhhc01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCVwKSIsIHRo
aXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAKICAgICBbbV93aW5k
b3cgc2V0SGlkZGVuOllFU107CiAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNl
dEhpZGRlbjpZRVNdOwogCi0gICAgaWYgKHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgJiYgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiAhbV9leGl0UmVxdWVzdGVkKSB7Ci0gICAgICAgIHdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAgaWYgKHBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiAhbV9leGl0UmVxdWVzdGVkKSB7Cisg
ICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CiAgICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZp
c2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCit2b2lkIFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25z
dCBJbnRSZWN0JiBpbmxpbmVSZWN0KQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCkgLSB2
aXNpYmxlKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSkpOworICAgIExPRyhGdWxsc2Ny
ZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lu
bGluZSglcCkgLSB2aXNpYmxlKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSkpOwogICAg
IGlmIChtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7CiAgICAgICAgIAogICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJl
Y3Q6aW5saW5lUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2
aWV3XTsKQEAgLTg0OSwzMyArODQ3LDMzIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvCiAgICAg
fQogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0
aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGlj
dHVyZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFtwbGF5ZXJDb250cm9sbGVyKCkgaXNQbGF5aW5n
XSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShX
VEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlv
bjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQogewogICAgIG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCiAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5mdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUoKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKIHsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7
CiAgICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQ
aWN0dXJlSW5QaWN0dXJlKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCiB7Ci0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsK
ICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0g
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50
ZXJpbmdCYWNrZ3JvdW5kXTsKICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1Bs
YXliYWNrQ29udHJvbHM6WUVTXTsKIAogICAgIGlmIChtX21vZGUgJiBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgewogICAgICAgICBpZiAoIVttX3Bs
YXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5n
QmFja2dyb3VuZF0pIHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAg
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNv
bXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsK
ICAgICAgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CiAgICAgICAgICAgICAg
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwpAQCAtODkw
LDkgKzg4OCw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0
YXJ0UGljdHVyZUluUGljdHVyZSgpCiAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKQog
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxs
c2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0
dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwogICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNl
dFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwogCiAgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQpAQCAtOTA3LDEyICs5
MDUsMTIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9T
dGFydFBpY3R1cmVJblBpY3R1cmUoKQogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5y
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlTm9uZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKQogewogICAgIG1fc2hvdWxkUmV0dXJu
VG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7CiAgICAgbV9zaG91bGRSZXR1cm5U
b0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOwogCi0gICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0
dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlz
KTsKICAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVy
ZVN0b3ApCiAgICAgICAgIHJldHVybjsKIApAQCAtOTIzLDkgKzkyMSw5IEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpCiAg
ICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUo
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBp
Y3R1cmUoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIExPRyhG
dWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJl
SW5QaWN0dXJlKCVwKSIsIHRoaXMpOwogICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3Jl
ZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkgewogICAgICAgICAvLyBBU1NVTVBUSU9OOiB3ZSBh
cmUgZXhpdGluZyBwaXAgYmVjYXVzZSB3ZSBhcmUgZW50ZXJpbmcgZnVsbHNjcmVlbgogICAgICAg
ICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGlj
dHVyZUluUGljdHVyZSk7CkBAIC05NDQsOSArOTQyLDkgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKQogICAgICAgICBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1
cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9P
TCByZXN0b3JlZCkpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJl
Rm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBs
ZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVy
ZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoJXApIiwgdGhpcyk7CisgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBp
Y3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMpOwogICAgIGlmIChtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB8fCBtX3Nob3VsZFJldHVyblRv
RnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kKSB7CiAgICAgICAgIG1fc2hvdWxkUmV0
dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxk
UmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxzZTsKQEAgLTk2
NSwxNiArOTYzLDE2IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBy
ZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFJldGFpblB0cjxpZD4gc3Ryb25nQ29tcGxl
dGlvbkhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CiAgICAgZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKFtwcm90ZWN0ZWRUaGlzLCBzdHJvbmdDb21wbGV0aW9u
SGFuZGxlcl0oYm9vbCByZXN0b3JlZCkgIHsKLSAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVT
dG9wV2l0aENvbXBsZXRpb25IYW5kbGVyIGxhbWJkYSglcCkgLSByZXN0b3JlZCglcykiLCBwcm90
ZWN0ZWRUaGlzLmdldCgpLCBib29sU3RyaW5nKHJlc3RvcmVkKSk7CisgICAgICAgIExPRyhGdWxs
c2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJl
SW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciBsYW1iZGEoJXApIC0gcmVzdG9yZWQo
JXMpIiwgcHJvdGVjdGVkVGhpcy5nZXQoKSwgYm9vbFN0cmluZyhyZXN0b3JlZCkpOwogICAgICAg
ICB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpID0gc3Ryb25nQ29tcGxl
dGlvbkhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3RvcmVkKTsK
ICAgICB9KTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2hv
dWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCitib29sIFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKIHsKICAgICBp
ZiAoIW1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTg4
LDggKzk4Niw4IEBAIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3Vs
ZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihXZWJWaWRlb0Z1CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIGlmICh3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIChyZWFzb24g
PT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4
aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQpKQotICAg
ICAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOworICAgIGlmIChwbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpICYmIChyZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVC
dXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250
cm9sU3RvcEV2ZW50UmVjZWl2ZWQpKQorICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5w
YXVzZSgpOwogICAgIAogICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lLCBy
ZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQpOwogCkBAIC05
OTksMTUgKzk5NywxNSBAQCBib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpz
aG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oV2ViVmlkZW9GdQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCkKK05PX1JFVFVSTl9EVUVfVE9fQVNT
RVJUIHZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJl
ZCgpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCVwKSAtIG5vIGV4aXQgZnVsbHNjcmVlbiByZXNwb25z
ZSBpbiAlZ3M7IGZvcmNpbmcgZnVsbHNjcmVlbiBoaWRkZW4uIiwgdGhpcywgZGVmYXVsdFdhdGNo
ZG9nVGltZXJJbnRlcnZhbC52YWx1ZSgpKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoJXApIC0gbm8gZXhpdCBm
dWxsc2NyZWVuIHJlc3BvbnNlIGluICVnczsgZm9yY2luZyBmdWxsc2NyZWVuIGhpZGRlbi4iLCB0
aGlzLCBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsLnZhbHVlKCkpOwogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKICAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCkBA
IC0xMDE4LDcgKzEwMTYsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxscwogICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7CiAgICAgaWYgKG1fbW9k
ZSA9PSBuZXdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaAppbmRleCA3MDVkNjNiNDhhOTlhZWUxZTg5Mzk2
NTYyNDAxMzIyNDNlNDcyYzRkLi43NjdmMDEyODczMDAwMWFiNGQ3OWZlNjAzYzEyMjc3NGFmNzEz
ZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIuaApAQCAtMzAsNyArMzAsNyBAQAogI2ltcG9ydCA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiBzdHJ1Y3Qg
TWVkaWFTZWxlY3Rpb25PcHRpb247CiB9CiAKQEAgLTU4LDEwICs1OCwxMCBAQCBXRUJDT1JFX0VY
UE9SVAogICAgIGZsb2F0IF9yYXRlOwogICAgIEJPT0wgX2NhblRvZ2dsZVBsYXliYWNrOwogCi0g
ICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gX3dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjPiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwogfQogCi1A
cHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
KiB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitAcHJvcGVydHkgKGFzc2lnbikgV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKiBwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM7CiBAcHJvcGVydHkgKHJlYWR3cml0ZSkgTlNUaW1lSW50ZXJ2YWwgY29udGVudER1cmF0
aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgcmVhZHdyaXRlKSBBVlZhbHVlVGlt
aW5nICp0aW1pbmc7CiBAcHJvcGVydHkgKG5vbmF0b21pYykgTlNUaW1lSW50ZXJ2YWwgc2Vla1Rv
VGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5tbQppbmRleCA3YjQ0YTA3NGRmMjk4MDYyZjgwNTNlOWViYzdk
MzE0NTFlODJlNWU1Li5hYmJkYjUyNzcyMDcyNGFmZTU0NzMxMTc0MDhiNDM3YTA5NDkyYWU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLm1tCkBAIC0yOSw4ICsyOSw4IEBACiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tf
Q09OVFJPTFNfTUFOQUdFUikKIAogI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKLSNp
bXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgotI2ltcG9ydCAiV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPHd0Zi9Tb2Z0
TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU5LDggKzU5
LDggQEAgQHN5bnRoZXNpemUgY2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZTsKIAogLSAodm9pZClk
ZWFsbG9jCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCi0gICAg
ICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNN
YW5hZ2VyKG51bGxwdHIpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQor
ICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xz
TWFuYWdlcihudWxscHRyKTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTkzLDcgKzkz
LDcgQEAgLSAodm9pZClzZWVrVG9UaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lIHRvbGVyYW5jZUJl
Zm9yZTooTlNUaW1lSW50ZXJ2YWwpdG9sZXJhbmMKIHsKICAgICBVTlVTRURfUEFSQU0odG9sZXJh
bmNlQmVmb3JlKTsKICAgICBVTlVTRURfUEFSQU0odG9sZXJhbmNlQWZ0ZXIpOwotICAgIF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNl
ZWtUb1RpbWUodGltZSk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKS0+c2Vla1RvVGltZSh0aW1lKTsKIH0KIAogLSAodm9pZCljYW5jZWxU
aHVtYm5haWxBbmRBdWRpb0FtcGxpdHVkZVNhbXBsZUdlbmVyYXRpb24KQEAgLTEyNSwxMiArMTI1
LDEyIEBAIC0gKEJPT0wpY2FuQmVnaW5Ub3VjaEJhclNjcnViYmluZwogCiAtICh2b2lkKWJlZ2lu
VG91Y2hCYXJTY3J1YmJpbmcKIHsKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT5iZWdpblNjcnViYmluZygpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPmJl
Z2luU2NydWJiaW5nKCk7CiB9CiAKIC0gKHZvaWQpZW5kVG91Y2hCYXJTY3J1YmJpbmcKIHsKLSAg
ICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5lbmRTY3J1YmJpbmcoKTsKKyAgICBf
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5lbmRTY3J1YmJpbmcoKTsKIH0KIAogI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDAKQEAgLTE5Miw3ICsxOTIsNyBA
QCAtICh2b2lkKXNldEN1cnJlbnRBdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246KEFW
VG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdAogICAgIGlmIChhdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uICYmIF9hdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zKQogICAgICAgICBpbmRl
eCA9IFtfYXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucyBpbmRleE9mT2JqZWN0OmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25dOwogCi0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0QXVkaW9NZWRpYU9wdGlv
bihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5UNjRfTUFYKTsKKyAgICBfcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWxlY3RBdWRp
b01lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOwog
fQogCiAtIChOU0FycmF5PEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbiAqPiAqKWxlZ2li
bGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucwpAQCAtMjIyLDcgKzIyMiw3IEBAIC0gKHZv
aWQpc2V0Q3VycmVudExlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOihBVlRvdWNo
QmFyTWVkaWFTZWxlY3Rpb25PCiAgICAgaWYgKGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbiAm
JiBfbGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zKQogICAgICAgICBpbmRleCA9
IFtfbGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zIGluZGV4T2ZPYmplY3Q6bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uXTsKIAotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5UNjRfTUFYKTsKKyAgICBfcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4IDogVUlOVDY0X01B
WCk7CiB9CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMApA
QCAtMjkyLDQ3ICsyOTIsNDcgQEAgLSAodm9pZClzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiAgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JL
ZXk6QCJjdXJyZW50TGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24iXTsKIH0KIAot
LSAoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKil3ZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMKKy0gKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjCiB7Ci0gICAgcmV0dXJuIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMuZ2V0KCk7CisgICAgcmV0dXJuIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuZ2V0KCk7
CiB9CiAKLS0gKHZvaWQpc2V0V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOihXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYwor
LSAodm9pZClzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6KFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYyopcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjCiB7Ci0gICAgaWYgKF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPT0gd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjKQorICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjID09IHBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKF93ZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxwdHIpOworICAgIGlmIChfcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihudWxscHRyKTsKIAotICAgIF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPSB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9IHBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzsKIAotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQot
ICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRy
b2xzTWFuYWdlcihzZWxmKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykK
KyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9s
c01hbmFnZXIoc2VsZik7CiB9CiAKIC0gKHZvaWQpdG9nZ2xlUGxheWJhY2sKIHsKLSAgICBpZiAo
X3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfd2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT50b2dnbGVQ
bGF5U3RhdGUoKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAg
ICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT50
b2dnbGVQbGF5U3RhdGUoKTsKIH0KIAogLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmcK
IHsKLSAgICBpZiAoIV93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgfHwgIV93ZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAg
aWYgKCFfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIHx8ICFfcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBCT09MIGlzQ3VycmVudGx5UGxheWluZyA9IHNlbGYucGxheWluZzsKICAgICBpZiAoIWlzQ3Vy
cmVudGx5UGxheWluZyAmJiBwbGF5aW5nKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7CisgICAgICAgIF9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXko
KTsKICAgICBlbHNlIGlmIChpc0N1cnJlbnRseVBsYXlpbmcgJiYgIXBsYXlpbmcpCi0gICAgICAg
IF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
KCktPnBhdXNlKCk7CisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXli
YWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CiB9CiAKIC0gKEJPT0wpaXNQbGF5aW5nCiB7Ci0g
ICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgcmV0
dXJuIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCktPmlzUGxheWluZygpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
ICYmIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkp
CisgICAgICAgIHJldHVybiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbCgpLT5pc1BsYXlpbmcoKTsKIAogICAgIHJldHVybiBOTzsKIH0KQEAgLTM0MCw4
ICszNDAsOCBAQCAtIChCT09MKWlzUGxheWluZwogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxMzAwCiAtICh2b2lkKXRvZ2dsZVBpY3R1cmVJblBpY3R1cmUKIHsKLSAg
ICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfd2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT50
b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMgJiYgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSkKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNz
aW9uTW9kZWwoKS0+dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOwogfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMuaAppbmRleCBiODEyNGMxZTFiZmUwMTViZDI5YzBlZjA3YTcwZTM3MWMx
OWI1MWU2Li4wOGI4ZDEzNWI1NWEyNjdjMWIyZGFhZGIxM2VjOGY3NDMxMGFiYmM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5oCkBAIC0yOCw4ICsyOCw4IEBACiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAKICNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIK
LSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2luY2x1ZGUgIlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zOCwyMSArMzgsMjEgQEAgT0JKQ19D
TEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgSW50UmVjdDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOworY2xhc3MgUGxh
eWJhY2tTZXNzaW9uTW9kZWw7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYyBmaW5hbAotICAgIDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAg
LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IHsKK2Ns
YXNzIFdFQkNPUkVfRVhQT1JUIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBmaW5hbAorICAg
IDogcHVibGljIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgICwgcHVibGljIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYz4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0gICAg
dmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCk7Ci0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjPiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKKyAgICB2aXJ0dWFs
IH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2Rl
bCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lv
bk1vZGVsOyB9CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAvLyBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0TWVk
aWFTdGF0ZSgpIGZpbmFsIHsgfQogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIC8qY3VycmVudFRpbWUqLywgZG91YmxlIC8q
YW5jaG9yVGltZSovKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2Vk
KGJvb2wgLyppc1BsYXlpbmcqLywgZmxvYXQgLypwbGF5YmFja1JhdGUqLykgZmluYWw7CkBAIC02
MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIC8qb3B0aW9ucyovLCB1aW50NjRfdCAvKnNlbGVjdGVkSW5kZXgqLykgZmluYWw7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2
NF90KSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlv
bkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBs
b2NhbGl6ZWREZXZpY2VOYW1lICovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgUGxheWJhY2tTZXNzaW9u
TW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIC8qIGxvY2Fs
aXplZERldmljZU5hbWUgKi8pIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZh
bGlkYXRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIo
KTsKQEAgLTczLDggKzczLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5k
U2NydWJiaW5nKCk7CiAKIHByaXZhdGU6Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxscHRyIH07CisgICAgICAgIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOworICAgICAgICBQbGF5
YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51bGxwdHIgfTsKICNp
ZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAgICAgV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIgKm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgIHsgbnVsbHB0ciB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQppbmRleCA4YjQ0YTYxYzUwZTAxNjJjM2MxMGU3MTc1
ZDgxYzZmMmEyNDg0Y2VhLi41OWVmMjIzMDY5YTljZWU5ZjExMjUxM2JiZmVmMGIxMmM2N2IyNGUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAj
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCiAKICNpZiBQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKIApAQCAtMzIsOSAr
MzIsOSBAQAogI2ltcG9ydCAiSW50UmVjdC5oIgogI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRp
b24uaCIKICNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgorI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKICNpbXBvcnQgIldlYlBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogCiAjaW1wb3J0ICJDb3JlTWVk
aWFTb2Z0TGluay5oIgpAQCAtNDYsMjQgKzQ2LDI0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM+IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsJiBtb2RlbCkKK1JlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKFBsYXliYWNrU2Vzc2lvbk1vZGVsJiBt
b2RlbCkKIHsKLSAgICBhdXRvIGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKG1vZGVsKSk7CisgICAgYXV0byBpbnRlcmZhY2UgPSBhZG9wdFJl
ZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhtb2RlbCkpOwogICAgIG1vZGVsLmFk
ZENsaWVudChpbnRlcmZhY2UpOwogICAgIHJldHVybiBpbnRlcmZhY2U7CiB9CiAKLVdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2Rl
bCkKICAgICA6IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQogewogfQogCi1XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMo
KQorUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjKCkKIHsKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQordm9pZCBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24p
CiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIFdlYlBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xz
TWFuYWdlcigpOwpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKICNlbmRpZgogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVDaGFuZ2VkKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91
YmxlIGFuY2hvclRpbWUpCiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQogICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwpAQCAtODksNyArODksNyBAQCB2b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50
VGltZSwgZG91YgogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQordm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQogICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFn
ZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwpAQCAtMTAyLDE3ICsxMDIsMTcgQEAgdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5
aW5nLCBmbG9hdCBwbGF5YmFja1IKICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKCkKIHsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCiAgICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmco
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRU
aW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0sIDAs
IGZhbHNlKTsKICNlbmRpZgotICAgIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmJlZ2luU2Ny
dWJiaW5nKCk7CisgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+YmVnaW5TY3J1YmJpbmcoKTsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuZFNjcnViYmluZygp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJiaW5nKCkKIHsKLSAg
ICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5lbmRTY3J1YmJpbmcoKTsKKyAgICBwbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpLT5lbmRTY3J1YmJpbmcoKTsKIH0KIAogI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PiB0aW1lUmFuZ2VzVG9BcnJheShjb25zdCBUaW1lUmFuZ2VzJiB0
aW1lUmFuZ2VzKQogfQogI2VuZGlmCiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywg
ZG91YmxlLCBkb3VibGUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2Fi
bGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSwgZG91
YmxlKQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBb
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6dGltZVJhbmdl
c1RvQXJyYXkodGltZVJhbmdlcykuZ2V0KCldOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3Qg
VGltZVJhbmdlcyYgdGltCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKICAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRBdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uczpvcHRpb25zIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5T
VUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXTsKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlYwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQogICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFYKICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFT
ZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICNpZiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAgICAgW3BsYXlCYWNrQ29udHJvbHNN
YW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5kZXhdOwpAQCAt
MTY4LDcgKzE2OCw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlCiAjZW5kaWYKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKICAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25JbmRleDpzZWxlY3RlZEluZGV4XTsKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KHVpbnQ2NF90CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQordm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlLCBjb25zdCBTdHJpbmcmKQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKICAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRDYW5Ub2dnbGVQaWN0
dXJlSW5QaWN0dXJlOiFlbmFibGVkXTsKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFi
bGVkLCBXZWJQbAogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjppbnZhbGlkYXRlKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjppbnZh
bGlkYXRlKCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6aW52YWxpZGF0ZSgpCiAgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7
CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbnN1cmVDb250cm9s
c01hbmFnZXIoKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRy
b2xzTWFuYWdlcigpCiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VS
KQogICAgIHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CkBAIC0yMDQsMTIgKzIwNCwxMiBAQCB2
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2Vy
KCkKIAogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKIAotV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIgKldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxh
eUJhY2tDb250cm9sc01hbmFnZXIoKQorV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIoKQogewogICAg
IHJldHVybiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwogfQogCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFn
ZXIgKm1hbmFnZXIpCiB7CiAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciA9IG1hbmFnZXI7
CiAKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyCiAgICAgW21h
bmFnZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6c3Rh
dGljX2Nhc3Q8TlNVSW50ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleCgpKV07CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjp1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVudFRp
bWUsIGRvdWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxheWlu
ZykKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp1cGRhdGVQbGF5YmFja0NvbnRy
b2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lLCBk
b3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxheWluZykKIHsKICAgICBXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CiAgICAg
aWYgKCFtYW5hZ2VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCAqbW9kZWwgPSB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOworICAgIFBsYXliYWNrU2Vz
c2lvbk1vZGVsICptb2RlbCA9IHBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CiAgICAgaWYgKCFtb2Rl
bCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKaW5kZXggYTg1MWIy
Y2UzYTJlOWU0NTU5YTEyMTM2MDRkMTI2MGJmZTkzMGI0ZC4uMWM3NGI4NDhmYWY5YjI5MGVlZjg2
YTcyOTAyYjYzMGRkZGJlYzE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaApAQCAtMjgsOSAr
MjgsOSBAQAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKQogCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1
ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQxLDMxICs0MSwzMSBAQCBPQkpDX0NMQVNTIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBJbnRSZWN0OwogY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7Citj
bGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcjsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjCi0gICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQK
LSAgICAsIHByaXZhdGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1Ymxp
YyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4geworY2xhc3MgV0VC
Q09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCisgICAgOiBwdWJsaWMgVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAsIHByaXZhdGUgUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQKKyAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYz4gewogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZSkKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYz4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKSk7CiAgICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYygpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB3ZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7
IH0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwoKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKLSAgICBXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciogd2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBj
b25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMoKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogdmlkZW9GdWxsc2NyZWVu
TW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9CisgICAgUGxh
eWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVvRnVsbHNj
cmVlbk1vZGVsKik7CisgICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIHZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXI7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7CiAKLSAgICAvLyBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1l
KSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAg
Ly8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhh
c1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpZGVv
RGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CiAKQEAgLTkzLDEwICs5
MywxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjT2JqQyAqdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpOwogCiBwcml2YXRl
OgotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMmKTsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBt
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCog
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsKLSAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07
CisgICAgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYyYpOworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IG1fcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlOworICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsIHsgbnVsbHB0ciB9OworICAgIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIgfTsKICAgICBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OwogICAgIFJldGFpblB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDPiBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KaW5kZXggOTJlNjQyYzhlYzBjYmY5
NDc1ZTg0OTZkZjdjODcwMmMyNDg2NTUzYi4uYjUyM2YxMjk5M2Q3ODJjODkwNzY5ZDU2MDIzYjBj
NmZlNTE2MWU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCkBAIC0yNCw3ICsyNCw3IEBA
CiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIgog
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAK
QEAgLTMzLDExICszMywxMSBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFU
aW1lQVZGb3VuZGF0aW9uLmgiCiAjaW1wb3J0ICJQSVBTUEkuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVl
bk1vZGVsLmgiCiAjaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgotI2ltcG9y
dCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KIAogI2ltcG9ydCAiQ29yZU1l
ZGlhU29mdExpbmsuaCIKQEAgLTk0LDcgKzk0LDcgQEAgZW51bSBjbGFzcyBQSVBTdGF0ZSB7CiB9
OwogCiBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgOiBOU09i
amVjdCA8UElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSwgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVs
ZWdhdGU+IHsKLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqIF93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7CisgICAgV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjKiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwogICAgIE5TU2l6
ZSBfdmlkZW9EaW1lbnNpb25zOwogICAgIFJldGFpblB0cjxQSVBWaWV3Q29udHJvbGxlcj4gX3Bp
cFZpZXdDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxOU1ZpZXdDb250cm9sbGVyPiBfdmlkZW9W
aWV3Q29udGFpbmVyQ29udHJvbGxlcjsKQEAgLTEwNyw3ICsxMDcsNyBAQCBAaW50ZXJmYWNlIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgOiBOU09iamVjdCA8UElQVmlld0NvbnRy
b2xsZXJEZWxlZwogICAgIEJPT0wgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKIH0KIAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihX
ZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzooV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil2aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM7CiAtICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGU7
CiAtICh2b2lkKWludmFsaWRhdGU7CiAKQEAgLTEzNCwxMiArMTM0LDEyIEBAIEBzeW50aGVzaXpl
IHZpZGVvRGltZW5zaW9ucz1fdmlkZW9EaW1lbnNpb25zOwogQHN5bnRoZXNpemUgZGlkUmVxdWVz
dEV4aXRpbmdQSVA9X2RpZFJlcXVlc3RFeGl0aW5nUElQOwogQHN5bnRoZXNpemUgZXhpdGluZ1Rv
U3RhbmRhcmRGdWxsc2NyZWVuPV9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47CiAKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzooV2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzooV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil2aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMKIHsKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSB3
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7CisgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYyA9IHZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKICAgICBfcGlwU3RhdGUgPSBQ
SVBTdGF0ZTo6Tm90SW5QSVA7CiAKICAgICByZXR1cm4gc2VsZjsKQEAgLTE2Myw3ICsxNjMsNyBA
QCAtICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGUKIC0gKHZvaWQpaW52YWxpZGF0ZQog
ewogICAgIFtzZWxmIGludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGVdOwotICAgIF93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSBudWxscHRyOworICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMgPSBudWxscHRyOwogICAgIF92aWRlb0RpbWVuc2lvbnMgPSBOU1plcm9TaXplOwog
fQogCkBAIC0xOTIsOCArMTkyLDggQEAgLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNW
aWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG8KICAgICBbX3Bp
cFZpZXdDb250cm9sbGVyIHNldFVzZXJDYW5SZXNpemU6WUVTXTsKICAgICBbX3BpcFZpZXdDb250
cm9sbGVyIHNldFBsYXlpbmc6X3BsYXlpbmddOwogICAgIFtzZWxmIHNldFZpZGVvRGltZW5zaW9u
czpOU0VxdWFsU2l6ZXMoX3ZpZGVvRGltZW5zaW9ucywgTlNaZXJvU2l6ZSkgPyBmcmFtZS5zaXpl
IDogX3ZpZGVvRGltZW5zaW9uc107Ci0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpOworICAgIGlmIChfdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMt
PnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKTsKIAogICAgIF92
aWRlb1ZpZXdDb250YWluZXIgPSBhZG9wdE5TKFtbV2ViVmlkZW9WaWV3Q29udGFpbmVyIGFsbG9j
XSBpbml0V2l0aEZyYW1lOmZyYW1lXSk7CiAgICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0Vmlk
ZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU6c2VsZl07CkBAIC0yNDcsOCArMjQ3LDggQEAgLSAodm9p
ZClib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRh
aW5lciAqKXZpZGVvVmlld0MKIAogICAgIEFTU0VSVF9VTlVTRUQodmlkZW9WaWV3Q29udGFpbmVy
LCB2aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7CiAKLSAgICBpZiAo
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRl
b0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7CisgICAgaWYgKF92aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+
dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtfdmlkZW9W
aWV3Q29udGFpbmVyIGJvdW5kc10pOwogfQogCiAtICh2b2lkKXN1cGVydmlld0RpZENoYW5nZUZv
clZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29u
dGFpbmVyCkBAIC0yNzIsMTEgKzI3MiwxMSBAQCAtIChCT09MKXBpcFNob3VsZENsb3NlOihQSVBW
aWV3Q29udHJvbGxlciAqKXBpcAogewogICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3Bp
cFZpZXdDb250cm9sbGVyKTsKIAotICAgIGlmICghX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYyB8fCAhX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKKyAgICBpZiAoIV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMgfHwgIV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKCkpCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBfZGlkUmVxdWVzdEV4aXRp
bmdQSVAgPSBZRVM7Ci0gICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KCk7CisgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIoKS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7CiAKICAgICByZXR1
cm4gTk87CiB9CkBAIC0yODUsMjggKzI4NSwyOCBAQCAtICh2b2lkKXBpcERpZENsb3NlOihQSVBW
aWV3Q29udHJvbGxlciAqKXBpcAogewogICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3Bp
cFZpZXdDb250cm9sbGVyKTsKIAotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsKCkgJiYgX3ZpZGVvVmlld0NvbnRhaW5lciAmJiBfcmV0dXJuaW5nV2luZG93ICYmICFO
U0VxdWFsUmVjdHMoX3JldHVybmluZ1JlY3QsIE5TWmVyb1JlY3QpKSB7CisgICAgaWYgKF92aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+
dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSAmJiBfdmlkZW9WaWV3Q29udGFpbmVyICYmIF9yZXR1cm5p
bmdXaW5kb3cgJiYgIU5TRXF1YWxSZWN0cyhfcmV0dXJuaW5nUmVjdCwgTlNaZXJvUmVjdCkpIHsK
ICAgICAgICAgW05TQW5pbWF0aW9uQ29udGV4dCBydW5BbmltYXRpb25Hcm91cDpeKE5TQW5pbWF0
aW9uQ29udGV4dCAqY29udGV4dCkgewogICAgICAgICAgICAgY29udGV4dC5hbGxvd3NJbXBsaWNp
dEFuaW1hdGlvbiA9IE5POwogICAgICAgICAgICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0RnJh
bWU6X3JldHVybmluZ1JlY3RdOwotICAgICAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtf
dmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOwotICAgICAgICAgICAgX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXll
ckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dCk7CisgICAgICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91
bmRzXSk7CisgICAgICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1
bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKIAogICAgICAgICAgICAgW1tfcmV0dXJuaW5n
V2luZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkg
cG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsKICAgICAgICAgfSBjb21w
bGV0aW9uSGFuZGxlcjpuaWxdOwogICAgIH0KIAotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjKSB7CisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpIHsK
ICAgICAgICAgaWYgKCFzZWxmLmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSB7Ci0gICAg
ICAgICAgICBpZiAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIHZpZGVvRnVsbHNjcmVlbk1vZGVs
ID0gX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwoKSkgeworICAgICAgICAgICAgaWYgKFZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVl
bk1vZGVsKCkpIHsKICAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZU5vbmUpOwotICAgICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0xh
eWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0KTsKKyAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9MYXll
ckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKIAotICAgICAgICBpZiAoV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIqIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCisg
ICAgICAgIGlmIChWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyID0gX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIoKSkKICAgICAgICAgICAgIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+
ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKICAgICB9CiB9CkBAIC0zMTUsMjYgKzMxNSwyNyBAQCAtICh2
b2lkKXBpcEFjdGlvblBsYXk6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwogCi0gICAgaWYgKF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOworICAg
IGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKIH0KIAogLSAo
dm9pZClwaXBBY3Rpb25QYXVzZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKIHsKICAgICBBU1NF
UlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CiAKLSAgICBpZiAoX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwor
ICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CiB9CiAK
IC0gKHZvaWQpcGlwQWN0aW9uU3RvcDooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKIHsKICAgICBB
U1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CiAKLSAgICBpZiAo
IV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpCisgICAgaWYgKCFfdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsID0gX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICBQbGF5YmFja1Nlc3Np
b25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOworICAgIGlmIChwbGF5YmFja1Nlc3Npb25Nb2Rl
bCkKICAgICAgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBhdXNlKCk7CiAKICAgICAvLyBGSVhN
RSAyNTA5NjE3MDogU2hvdWxkIGFuaW1hdGUgb25seSBpZiB0aGUgcGFnZSB3aXRoIHRoZSB2aWRl
byBpcyB1bm9ic2N1cmVkLiBGb3Igbm93LCBhbHdheXMgY2xvc2Ugd2l0aG91dCBhbmltYXRpb24u
CkBAIC0zNDUsMjQgKzM0NiwyNCBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UpCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYyhQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSkKICAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSkKIHsKLSAgICBBU1NFUlQobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsKCkpOwotICAgIGF1dG8gbW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKKyAgICBBU1NFUlQobV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpOworICAgIGF1dG8gbW9k
ZWwgPSBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKTsK
ICAgICBtb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzptb2RlbC0+aXNQbGF5aW5nKCkgbmV3UGxheWJhY2tS
YXRlOm1vZGVsLT5wbGF5YmFja1JhdGUoKV07CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpCitWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKQogewotICAgIGlm
IChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkK
LSAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCktPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgaWYgKG1fcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICBtX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsK
ICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKiBtb2RlbCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRW
aWRlb0Z1bGxzY3JlZW5Nb2RlbChWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCiB7CiAgICAg
aWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CkBAIC0zNzEsMTIgKzM3MiwxMiBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2Vi
VmlkZW9GdWxsc2NyZQogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQo
KnRoaXMpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0V2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KiBvYnNlcnZlcikKIHsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVy
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKICAgICBpZiAobV9tb2Rl
ID09IG5ld01vZGUpCkBAIC0zODcsNyArMzg4LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3IK
ICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1f
bW9kZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhck1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7CiAgICAg
aWYgKG1fbW9kZSA9PSBuZXdNb2RlKQpAQCAtMzk4LDI3ICszOTksMjcgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHMKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKG1fbW9kZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9i
akMoKSB1cGRhdGVJc1BsYXlpbmc6aXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTpwbGF5YmFja1Jh
dGVdOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29u
dHJvbHNNYW5hZ2VyKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnN1cmVD
b250cm9sc01hbmFnZXIoKQogewogICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5lbnN1
cmVDb250cm9sc01hbmFnZXIoKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
T2JqQyAqV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDKCkKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpCiB7CiAg
ICAgaWYgKCFtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMpCi0gICAgICAgIG1fd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyA9IGFkb3B0TlMoW1tXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWNPYmpDIGFsbG9jXSBpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzp0aGlzXSk7CisgICAgICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyA9IGFkb3B0TlMoW1tXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIGFsbG9jXSBp
bml0V2l0aFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzp0aGlzXSk7CiAKICAgICByZXR1cm4g
bV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDLmdldCgpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKE5TVmlldyYgbGF5ZXJI
b3N0ZWRWaWV3LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdp
bmRvdywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJv
b2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywgY29u
c3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjaykKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5pdGlhbFJlY3Q6eyVk
LCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhpcywgaW5pdGlhbFJl
Y3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxSZWN0
LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oJXApLCBpbml0aWFsUmVj
dDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAsIG1vZGU6JWQiLCB0aGlzLCBpbml0
aWFsUmVjdC54KCksIGluaXRpYWxSZWN0LnkoKSwgaW5pdGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlh
bFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdywgbW9kZSk7CiAKICAgICBVTlVTRURfUEFSQU0o
YWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKICAgICBBU1NFUlQobW9kZSA9PSBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsK
QEAgLTQyNywxNiArNDI4LDE2IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvCiAKICAgICBbdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHNldFVwUElQRm9yVmlkZW9WaWV3OiZsYXllckhv
c3RlZFZpZXcgd2l0aEZyYW1lOihOU1JlY3QpaW5pdGlhbFJlY3QgaW5XaW5kb3c6cGFyZW50V2lu
ZG93XTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIpCiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbigpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4s
ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0
aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogCiAgICAgaWYgKG1vZGUoKSA9PSBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSB7CiAg
ICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZW50ZXJQSVBdOwpAQCAt
NDUwLDkgKzQ1MSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRl
ckZ1bGxzY3JlZW4oKQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCwgTlNXaW5kb3cg
KnBhcmVudFdpbmRvdykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVs
bHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cp
CiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmV4aXRGdWxsc2NyZWVuKCVwKSwgZmluYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdp
bmRvdzolcCIsIHRoaXMsIGZpbmFsUmVjdC54KCksIGZpbmFsUmVjdC55KCksIGZpbmFsUmVjdC53
aWR0aCgpLCBmaW5hbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7CisgICAgTE9HKEZ1bGxz
Y3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKCVwKSwg
ZmluYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGZpbmFs
UmVjdC54KCksIGZpbmFsUmVjdC55KCksIGZpbmFsUmVjdC53aWR0aCgpLCBmaW5hbFJlY3QuaGVp
Z2h0KCksIHBhcmVudFdpbmRvdyk7CiAKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCiAgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRy
b2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOwpAQCAtNDY3LDkgKzQ2
OCw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVl
bihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TCiAgICAgICAgIFttX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDpmaW5hbFJlY3QgaW5XaW5k
b3c6cGFyZW50V2luZG93XTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7Ci0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0
aG91dEFuaW1hdGlvblRvTW9kZSglcCksIG1vZGU6JWQiLCB0aGlzLCBtb2RlKTsKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5X
aXRob3V0QW5pbWF0aW9uVG9Nb2RlKCVwKSwgbW9kZTolZCIsIHRoaXMsIG1vZGUpOwogCiAjaWYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIFttX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0
dXJlQWN0aXZlOk5PXTsKQEAgLTQ3OSw3ICs0ODAsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxN
ZQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2Ny
ZWVuID0gbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZDsKLSAgICAvLyBPbiBNYWMsIHN0YW5kYXJkIGZ1bGxzY3JlZW4gaXMgaGFuZGxlZCBi
eSB0aGUgRnVsbHNjcmVlbiBBUEkgYW5kIG5vdCBieSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
LgorICAgIC8vIE9uIE1hYywgc3RhbmRhcmQgZnVsbHNjcmVlbiBpcyBoYW5kbGVkIGJ5IHRoZSBG
dWxsc2NyZWVuIEFQSSBhbmQgbm90IGJ5IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuCiAgICAgLy8g
SnVzdCB1cGRhdGUgbV9tb2RlIGRpcmVjdGx5IHRvIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIGluIHRoYXQgY2FzZSB0byBrZWVwCiAgICAgLy8gbV9t
b2RlIGluIHN5bmMgd2l0aCB0aGUgZnVsbHNjcmVlbiBtb2RlIGluIEhUTUxNZWRpYUVsZW1lbnQu
CiAgICAgaWYgKGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKQpAQCAtNDg5LDkgKzQ5MCw5
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldp
dGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lCiAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlT2JqQyBleGl0UElQXTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpjbGVhbnVwRnVsbHNjcmVlbigpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVw
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAogICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgZXhpdFBJUF07CiAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKQEAgLTUwMCw5ICs1MDEsOSBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQogICAgICAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQogewotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCVw
KSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjppbnZhbGlkYXRlKCVwKSIsIHRoaXMpOwogCiAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCA9IG5pbDsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKQEAgLTUyMCw5
ICs1MjEsOSBAQCBzdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKIH0KICNl
bmRpZgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1Jl
dHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwgTlNX
aW5kb3cgKnBhcmVudFdpbmRvdykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpw
cmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxp
bmVSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQogewotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
JXApLCB2aXNpYmxlOiVzLCBpbmxpbmVSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRv
dzolcCIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSksIGlubGluZVJlY3QueCgpLCBpbmxpbmVS
ZWN0LnkoKSwgaW5saW5lUmVjdC53aWR0aCgpLCBpbmxpbmVSZWN0LmhlaWdodCgpLCBwYXJlbnRX
aW5kb3cpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApLCB2aXNpYmxlOiVzLCBpbmxpbmVSZWN0Onsl
ZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJs
ZSksIGlubGluZVJlY3QueCgpLCBpbmxpbmVSZWN0LnkoKSwgaW5saW5lUmVjdC53aWR0aCgpLCBp
bmxpbmVSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOwogCiAgICAgaWYgKCF2aXNpYmxlKSB7
CiAgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07CkBA
IC01MzMsMzIgKzUzNCwzMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29ucwogICAgIFttX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0
KWlubGluZVJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBj
b25zdCBTdHJpbmcmKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQogewotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZCglcCksIGVuYWJsZWQ6JXMiLCB0aGlzLCBib29sU3RyaW5nKGVuYWJsZWQpKTsKKyAgICBM
T0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoJXApLCBlbmFibGVkOiVzIiwgdGhpcywgYm9vbFN0cmluZyhlbmFibGVkKSk7
CiAKICAgICBpZiAoZW5hYmxlZCAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKICAgICAgICAgZXhpdEZ1bGxzY3Jl
ZW4oSW50UmVjdCgpLCBuaWwpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCiB7Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hh
bmdlZCglcCk6JXMiLCB0aGlzLCBib29sU3RyaW5nKGhhc1ZpZGVvKSk7CisgICAgTE9HKEZ1bGxz
Y3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZCglcCk6
JXMiLCB0aGlzLCBib29sU3RyaW5nKGhhc1ZpZGVvKSk7CiAKICAgICBpZiAoIWhhc1ZpZGVvKQog
ICAgICAgICBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0
U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMp
CiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoJXApLCB3aWR0aDolLjBmLCBoZWlnaHQ6JS4wZiIsIHRo
aXMsIHZpZGVvRGltZW5zaW9ucy53aWR0aCgpLCB2aWRlb0RpbWVuc2lvbnMuaGVpZ2h0KCkpOwor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0Rp
bWVuc2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6JS4wZiwgaGVpZ2h0OiUuMGYiLCB0aGlzLCB2aWRl
b0RpbWVuc2lvbnMud2lkdGgoKSwgdmlkZW9EaW1lbnNpb25zLmhlaWdodCgpKTsKIAogICAgIC8v
IFdpZHRoIGFuZCBoZWlnaHQgY2FuIGJlIHplcm8gd2hlbiB3ZSBhcmUgdHJhbnNpdGlvbmluZyBm
cm9tIG9uZSB2aWRlbyB0byBhbm90aGVyLiBJZ25vcmUgemVybyB2YWx1ZXMuCiAgICAgaWYgKCF2
aWRlb0RpbWVuc2lvbnMuaXNaZXJvKCkpCiAgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU9iakMgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107CiB9CiAKLWJv
b2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppc1BsYXlpbmdWaWRlb0luRW5oYW5j
ZWRGdWxsc2NyZWVuKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpp
c1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4g
aGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVQaWN0dXJlSW5QaWN0dXJlKSAmJiBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpD
IGlzUGxheWluZ107CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggNGEx
NzBhMzY3NmExOTAzZDQ3NGI5MDkxY2NjOTEyMTQ2YzdmMTg4MS4uODg2OWMwMTdjYjdkY2YzMWYz
NjQ3ZTNkYTQ2MGZhOWE3MDQyNmNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQpAQCAtMzE5LDggKzMxOSw4IEBACiAKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lmg+CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpAQCAtOTI2Miwx
MSArOTI2MiwxMSBAQCAtICh2b2lkKV9zZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyRm9yTWVk
aWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JgogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAgICAgX3ByaXZh
dGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmNyZWF0ZSgpOworICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwg
PSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CiAgICAgX3ByaXZh
dGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7
CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0gICAgICAg
IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKTsKKyAg
ICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6Y3JlYXRlKCpfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwpOwog
CiAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3RGF0YS5oCmluZGV4IGE3OGIwOTBlMDdiZTQzNjE5NmE2OTVjYTEyODdlODc4ZDI2NjYx
Y2MuLmJkZWRmNzczZGRmZGUwNjZmYTUyZTE3NTZjYjY4MjIyNzQ2Y2Y0Y2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKQEAgLTU0LDggKzU0LDggQEAgY2xhc3MgUGFn
ZTsKIGNsYXNzIFRleHRJbmRpY2F0b3JXaW5kb3c7CiBjbGFzcyBWYWxpZGF0aW9uQnViYmxlOwog
I2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotY2xh
c3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7
CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDsKICNlbmRpZgogfQogCkBA
IC0zMzgsOCArMzM4LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgUmVmUHRyPFdlYkNvcmU6Oldl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBwbGF5YmFja1Nlc3Npb25Nb2RlbDsK
LSAgICBSZWZQdHI8V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBwbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50PiBwbGF5YmFja1Nlc3Npb25Nb2RlbDsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2U7CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQppbmRleCA3Nzk3MzZhMTZhZmY2MGUzZmE1YTBh
YzdlYTM2NDA2ZGMzNjRmMmU0Li5mOTMwZmE5NmM4ODViYmZmNzQwNGYwNzIzNTk2NzU5NTVmYzRi
ODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KQEAgLTUxLDgg
KzUxLDggQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCi0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4K
ICNlbmRpZgogCiBCT09MIGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZyA9IE5POwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggODNhZDBlOGE1NzhlMTJkNjg3NTU2MGIwODc4MWE3NzQ3
MTg0NDYxNS4uZTI0ZTMwNThiNjcyYjc4MGVjZDQ5NzdlNjcyNjI0YmM4NGQxMzBjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xNTQsOCArMTU0LDggQEAgTUVTU0FHRV9SRUNF
SVZFUlMgPSBcCiAgICAgV2ViUGFzdGVib2FyZFByb3h5IFwKICAgICBXZWJQYXltZW50Q29vcmRp
bmF0b3IgXAogICAgIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5IFwKLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyIFwKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgXAor
ICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgXAorICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSBcCiAgICAgV2ViUHJvY2VzcyBcCiAgICAgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24gXAogICAg
IFdlYlByb2Nlc3NQb29sIFwKQEAgLTE2OCw4ICsxNjgsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9
IFwKICAgICBXZWJTb2NrZXRTdHJlYW0gXAogICAgIFdlYlVzZXJDb250ZW50Q29udHJvbGxlciBc
CiAgICAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkgXAotICAgIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIgXAotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSBcCisgICAg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlciBcCisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
IFwKICMKIAogU0NSSVBUUyA9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0KaW5kZXggMzIyMWQ3NWE4ZWExZTEwODIzZjcxZjc4ZWViZGNlODVm
N2ZhMDc1My4uZjk5ZTQyYjMzMDIwMWIyMjZhM2NmM2U3NGJlMDYzY2JkMDZmMTFhNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTEy
NiwxMiArMTI2LDEyIEBACiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
LmgiCiAjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCiAjaW1wb3J0
ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAj
aW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCIKICNpbXBvcnQgIldLUERGVmlldy5o
IgogI2ltcG9ydCAiV0tQYXNzd29yZFZpZXcuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmlldy5oIgog
I2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKLSNpbXBvcnQgIldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiX1dLRHJhZ2dhYmxlRWxl
bWVudEluZm9JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyLmgi
CiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5LmgKaW5kZXggNmMzM2JlNjVhOThjMjE5YzBkYjkxZDAzMjg0Mjk1ZWNlNWY1NDczZC4uMTU4
MGY5NTc3ZjA0NDMwY2NjNjRjZjMzY2VlN2U3YTg5Yjk1M2Y2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaApAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTZWxlY3Rpb25PcHRpb24uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgpAQCAtNDAsMzUgKzQwLDM1IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
CiAjaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Lmg+CiAjZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotdHlwZWRlZiBXZWJDb3JlOjpX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZTsKK3R5cGVkZWYgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAjZWxzZQotdHlwZWRlZiBXZWJD
b3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2U7Cit0eXBlZGVmIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYyBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwogCi1j
bGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCAgeworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
IGZpbmFsOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBw
dWJsaWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWwgIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gY3JlYXRlKFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIHN0
YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBjcmVhdGUoUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQo
bWFuYWdlciwgY29udGV4dElkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKICAgICB9Ci0gICAg
dmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KCkgeyB9CisgICAgdmlydHVh
bCB+UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KCkgeyB9CiAKICAgICB2b2lkIGludmFsaWRh
dGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpZmluYWw7CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9k
ZWwKKyAgICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50JilmaW5hbDsKIAogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSk7
CiAgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlKTsKQEAgLTgxLDIwICs4MSwyMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBpbmRleCk7CiAgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpOwogICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoYm9vbCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQoYm9vbCk7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCk7CiAKIHByaXZh
dGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKKyAg
ICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OwogCi0gICAgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYg
bWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dChQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRl
eHRJZCkKICAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCiAgICAgICAgICwgbV9jb250ZXh0
SWQoY29udGV4dElkKQogICAgIHsKICAgICB9CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbAorICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsCiAgICAgdm9pZCBwbGF5KCkgZmluYWw7
CiAgICAgdm9pZCBwYXVzZSgpIGZpbmFsOwogICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgZmlu
YWw7CkBAIC0xMjcsMTQgKzEyNywxNCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQogICAgIHVp
bnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7IH0KICAgICBib29sIGV4dGVybmFsUGxheWJhY2tF
bmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZDsg
fQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU7IH0KKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlOyB9CiAgICAgU3Ry
aW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsgfQogICAgIGJvb2wg
d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3dp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOyB9CiAgICAgYm9vbCBpc011dGVkKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9tdXRlZDsgfQogCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5KiBtX21hbmFnZXI7CisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBtX21h
bmFnZXI7CiAgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKKyAgICBIYXNoU2V0PFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwogICAgIGRvdWJs
ZSBtX3BsYXliYWNrU3RhcnRlZFRpbWUgeyAwIH07CiAgICAgYm9vbCBtX3BsYXliYWNrU3RhcnRl
ZFRpbWVOZWVkc1VwZGF0ZSB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fZHVyYXRpb24geyAwIH07
CkBAIC0xNTIsMzggKzE1MiwzOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOwogICAgIHVp
bnQ2NF90IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKICAgICBib29sIG1fZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQgeyBmYWxzZSB9OwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lIH07CisgICAgUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIG1fZXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUgeyBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUg
fTsKICAgICBTdHJpbmcgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsKICAg
ICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9tdXRlZCB7IGZhbHNlIH07CiB9OwogCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCk7Cisg
ICAgc3RhdGljIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQ
YWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKTsK
IAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCi0gICAgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpOworICAgIFBsYXRmb3JtUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKTsKICAgICB2
b2lkIHJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCk7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OworICAgIGZyaWVuZCBjbGFzcyBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTsKIAotICAgIGV4cGxpY2l0IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eShXZWJQYWdlUHJveHkmKTsKKyAgICBleHBsaWNpdCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkoV2ViUGFnZVByb3h5Jik7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKIAotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxS
ZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRmb3JtV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICB0eXBl
ZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIFJlZlB0
cjxQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7
CiAgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRf
dCBjb250ZXh0SWQpOwogICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFBsYXRmb3JtV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIGVu
c3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgYWRkQ2xpZW50Rm9y
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29u
dGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyCisgICAgLy8gTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyCiAgICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2
NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7
CiAgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKQEAgLTIwMyw3
ICsyMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJl
c3BvbnNlKHVpbnQ2NF90LCBTdHJpbmcpIGNvbnN0OwogICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7CiAKLSAgICAvLyBNZXNzYWdlcyB0byBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyCisgICAgLy8gTWVzc2FnZXMgdG8gUGxheWJhY2tTZXNzaW9u
TWFuYWdlcgogICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcGF1
c2UodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRf
dCBjb250ZXh0SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4KaW5kZXggZjYzNmE4MzI3M2ViOGUxNDRhNmExMDM1MDU1Nzg5YzIzZTA5MTI3ZC4uM2Fj
OGY3OWQxYjI0NTVhNzgwZjgyMjdhM2VmYTQ5MTY5ZmQwNWVhOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMSw3ICsyMSw3IEBACiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkgeworbWVzc2FnZXMgLT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
IHsKICAgICBSZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQogICAgIEN1cnJlbnRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGhvc3RUaW1lKQogICAgIEJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgYnVmZmVyZWRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KaW5kZXgg
ZGY5ZDMzZjlmYzA4OTNhODIwOTdhNWVlYzhmODZmNWFhODY1M2NmZi4uNDJjMzk5ZThkYjg2YTkx
NTA1YTJhZGQ2NjQ0ZGQ4OTAzNjIyN2U3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1tCkBAIC0yNCwxMyArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5LmgiCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAKKyNpbXBvcnQgIlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAi
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5
LmgiCiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIApAQCAtMzgsMzkgKzM4LDM5
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotI3By
YWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0CisjcHJhZ21hIG1hcmsg
LSBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQKIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xp
ZW50KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmFkZENsaWVudChQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCghbV9jbGllbnRzLmNv
bnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7
CiAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRz
LnJlbW92ZSgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnBsYXkoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXkoKQogewog
ICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+cGxheShtX2NvbnRleHRJZCk7
CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSgpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGF1c2UoKQogewogICAgIGlmIChtX21hbmFn
ZXIpCiAgICAgICAgIG1fbWFuYWdlci0+cGF1c2UobV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQogewogICAgIGlmICht
X21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGxheVN0YXRlKG1fY29udGV4dElk
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2NydWJi
aW5nKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygp
CiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmlu
ZyhtX2NvbnRleHRJZCk7CkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCiAgICAgbV9pc1NjcnViYmluZyA9IHRydWU7
CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY3J1YmJpbmco
KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZygpCiB7CiAg
ICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY3J1YmJpbmcobV9jb250
ZXh0SWQpOwpAQCAtODcsODAgKzg3LDgwIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjplbmRTY3J1YmJpbmcoKQogICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBk
YXRlID0gaXNQbGF5aW5nKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAg
ICAgICAgbV9tYW5hZ2VyLT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQog
ewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWsobV9jb250
ZXh0SWQsIHRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
YmVnaW5TY2FubmluZ0ZvcndhcmQoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBt
X21hbmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkK
IHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdC
YWNrd2FyZChtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjplbmRTY2FubmluZygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
ZW5kU2Nhbm5pbmcoKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+
ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVp
bnQ2NF90IG9wdGlvbklkKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdl
ci0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKHVpbnQ2NF90IG9wdGlvbklkKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKIHsKICAgICBpZiAo
bV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbiht
X2NvbnRleHRJZCwgb3B0aW9uSWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCiB7CiAgICAgaWYgKG1fbWFuYWdl
cikKICAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKG1fY29udGV4dElk
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZU11dGVk
KCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVNdXRlZCgpCiB7CiAg
ICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVNdXRlZChtX2NvbnRl
eHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZXRNdXRl
ZChib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNldE11dGVk
KGJvb2wgbXV0ZWQpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5z
ZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNr
U3RhcnRlZFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCiB7CiAgICAgbV9w
bGF5YmFja1N0YXJ0ZWRUaW1lID0gcGxheWJhY2tTdGFydGVkVGltZTsKICAgICBtX3BsYXliYWNr
U3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGZhbHNlOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0
aW9uKQogewogICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IG1fY2xpZW50cykKICAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24p
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRpbWVD
aGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lKQogewogICAgIG1fY3Vy
cmVudFRpbWUgPSBjdXJyZW50VGltZTsKICAgICBhdXRvIGFuY2hvclRpbWUgPSBbW05TUHJvY2Vz
c0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07CkBAIC0xNzEsMTQgKzE3MSwxNCBAQCB2
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRv
dWJsZSBjdXJyZW50VGltZSkKICAgICAgICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3Vy
cmVudFRpbWUsIGFuY2hvclRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1
ZmZlcmVkVGltZSkKIHsKICAgICBtX2J1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZTsKICAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKICAgICAgICAgY2xpZW50LT5idWZmZXJlZFRp
bWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRl
KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAgbV9pc1BsYXlpbmcgPSBpc1BsYXlp
bmc7CiAgICAgbV9wbGF5YmFja1JhdGUgPSBwbGF5YmFja1JhdGU7CkBAIC0xODYsNyArMTg2LDcg
QEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wg
aXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1IKICAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChp
c1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYgc2Vl
a2FibGVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiBzZWVrYWJsZVJhbmdlcywgZG91YmxlIGxhc3RN
b2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCiB7CiAgICAgbV9zZWVrYWJs
ZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2VzOwogICAgIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1v
ZGlmaWVkVGltZSA9IGxhc3RNb2RpZmllZFRpbWU7CkBAIC0xOTUsMTQgKzE5NSwxNCBAQCB2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKFdl
YkNvcmU6OlRpbWVSYW5nZXMmCiAgICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2Vk
KHNlZWthYmxlUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZl
cnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RS
ZXZlcnNlKQogewogICAgIG1fY2FuUGxheUZhc3RSZXZlcnNlID0gY2FuUGxheUZhc3RSZXZlcnNl
OwogICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQogICAgICAgICBjbGllbnQtPmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBhdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9ucywgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zLCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCkKIHsKICAgICBtX2F1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7CiAg
ICAgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OwpA
QCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojph
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjCiAgICAgICAgIGNsaWVu
dC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zLCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zLCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMsIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpCiB7CiAgICAgbV9s
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
czsKICAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3Rl
ZEluZGV4OwpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWCiAgICAg
ICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9ucywgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQogewogICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZElu
ZGV4OwogCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2UKICAgICAg
ICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4ID0gc2VsZWN0ZWRJbmRleDsKIApAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3QKICAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQoc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IGxvY2FsaXplZE5hbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWROYW1l
KQogewogICAgIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBlbmFibGVkOwogICAgIG1fZXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgPSB0eXBlOwpAQCAtMjQ1LDQ4ICsyNDUsNDggQEAgdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGJvb2wgZW5hYmxlZCwgV2ViUGwKICAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWROYW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZChib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQordm9pZCBQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29s
IHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQogewogICAgIG1fd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQgPSB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsKICAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKICAgICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJv
b2wgbXV0ZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2Vk
KGJvb2wgbXV0ZWQpCiB7CiAgICAgbV9tdXRlZCA9IG11dGVkOwogICAgIGZvciAoYXV0byogY2xp
ZW50IDogbV9jbGllbnRzKQogICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChtdXRlZCk7CiB9
CiAKLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQorI3ByYWdt
YSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5CiAKLVJlZlB0cjxXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3Jl
YXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkKK1JlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFn
ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eShwYWdlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkocGFnZSkpOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCitQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdl
UHJveHkmIHBhZ2UpCiAgICAgOiBtX3BhZ2UoJnBhZ2UpCiB7Ci0gICAgbV9wYWdlLT5wcm9jZXNz
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwor
ICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFn
ZUlEKCksICp0aGlzKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCkKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6flBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSgpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCiAg
ICAgICAgIHJldHVybjsKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX3BhZ2UtPnByb2Nlc3MoKS5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnBy
b2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAg
ICBtX3BhZ2UgPSBudWxscHRyOwogCiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1h
cC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlPiBpbnRlcmZhY2U7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2U+IGludGVyZmFjZTsKICAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0
dXBsZTsKIAogICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKQEAgLTI5NiwxNSArMjk2
LDE1IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
ICAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
CiB7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAg
ICBSZWY8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBs
YXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9kZWwpOworICAgIFJl
ZjxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7CisgICAgUmVmPFBsYXRmb3JtUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZTo6Y3JlYXRlKG1vZGVsKTsKIAogICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUo
V1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7CiB9CiAKLVdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
CitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250
ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQpAQCAtMzEyLDIyICszMTIsMjIgQEAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHIKICAgICBy
ZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVs
KHVpbnQ2NF90IGNvbnRleHRJZCkKK1BsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCiB7
CiAgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0
SWQpKTsKIH0KIAotUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK1BsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgcmV0
dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKIH0K
IAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRl
eHQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQogewogICAgIG1fY2xpZW50
Q291bnRzLmFkZChjb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgaWYgKCFtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4
dElkKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzM2LDkgKzMzNiw5IEBAIHZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCkKICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7CiB9CiAKLSNwcmFn
bWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKyNwcmFnbWEg
bWFyayBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKIAotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRo
SUQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQog
ewogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQg
PT0gY29udGV4dElkKQpAQCAtMzU3LDcgKzM1Nyw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90
CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFy
UGxheWJhY2tDb250cm9sc01hbmFnZXIoKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQogewogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQpAQCAtMzY5LDIyICszNjksMjIg
QEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250
cm9sc01hbmFnZXIoKQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQp
CiB7CiAgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkucmVzZXRNZWRpYVN0YXRlKCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjdXJyZW50VGltZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGlt
ZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjdXJyZW50VGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSkK
IHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50
VGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpidWZmZXJl
ZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKIHsKICAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiBy
YW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFs
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWthYmxlUmFuZ2VzVmVjdG9y
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3Vi
bGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKQogewogICAgIFJlZjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6
Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdlcykgewpAQCAtMzk3
LDY2ICszOTcsNjYgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWth
YmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXgKICAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRU
aW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgdmFsdWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2FuUGxheUZh
c3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCiB7CiAgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHZhbHVlKTsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5h
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7
CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVk
SW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9N
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5k
ZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQ
bGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVk
LCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpleHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0No
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5
cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQogewotICAgIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8V2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlPih0YXJnZXRU
eXBlKTsKLSAgICBBU1NFUlQodHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0
VHlwZUFpclBsYXkgfHwgdHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlw
ZVRWT3V0IHx8IHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25l
KTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUg
dHlwZSA9IHN0YXRpY19jYXN0PFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7CisgICAgQVNTRVJUKHR5cGUgPT0gUGxheWJhY2tTZXNz
aW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJn
ZXRUeXBlTm9uZSk7CiAKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQogewogICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2Fi
bGVkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om11dGVkQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRl
ZCkKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm11dGVkQ2hhbmdlZChtdXRlZCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpkdXJhdGlvbkNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IGR1cmF0aW9uKQogewogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZHVyYXRpb25DaGFuZ2Vk
KGR1cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBs
YXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXli
YWNrU3RhcnRlZFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJh
Y2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tT
dGFydGVkVGltZSkKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXliYWNrU3RhcnRl
ZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IGlzUGxheWluZywgZG91YmxlIHJhdGUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91Ymxl
IHJhdGUpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yYXRlQ2hhbmdlZChpc1BsYXlp
bmcsIHJhdGUpOwogfQogCiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpo
YW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJp
bmcgaWRlbnRpZmllcikgY29uc3QKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpo
YW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJp
bmcgaWRlbnRpZmllcikgY29uc3QKIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKGNvbnRl
eHRJZCA9PSBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKQEAgLTQ2OCw5MCArNDY4LDkwIEBA
IHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVzcG9uc2UodWludDY0X3QKIH0KIAogCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8g
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgorI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIKIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OnBsYXkodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OlBsYXkoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQog
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
UGF1c2UoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRv
Z2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBs
YXlTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZShjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQp
CiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpCZWdpblNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2NydWJiaW5n
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6RW5kU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2NydWJiaW5n
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0
aW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElkLCB0aW1lKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlE
KCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWso
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQogewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RmFz
dFNlZWsoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpGYXN0U2Vlayhjb250ZXh0SWQs
IHRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50
NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OkJlZ2luU2Nhbm5pbmdGb3J3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2Fubmlu
Z0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQogewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5T
Y2FubmluZ0JhY2t3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0Jh
Y2t3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OkVuZFNjYW5uaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2Nhbm5p
bmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4
KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6U2VsZWN0QXVkaW9NZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBpY3R1cmVJblBpY3R1
cmUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJlSW5QaWN0dXJlKGNvbnRl
eHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRv
Z2dsZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlTXV0ZWQoY29udGV4dElk
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIG11dGVkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1fcGFnZS0+cGFnZUlEKCkp
OworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2V0
TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQo
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlcXVlc3RDb250cm9sbGVkRWxl
bWVudElEKCkKIHsKICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6SGFuZGxl
Q29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdChtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi1QbGF0Zm9ybVdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKQorUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UqIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y29udHJvbHNNYW5hZ2VySW50ZXJm
YWNlKCkKIHsKICAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaAppbmRleCBlZTA0MGNh
MDUxMTQ1M2NhNzA5MDRhNWE0ZGNkZWZlOWQ5ZWY1MjFjLi5jMTc3MjU2ZTRhZWU4MWVkNDZjY2Fk
NmZkZTI2MDliM2ViYzQ5NmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCkBAIC0z
MCw0MiArMzAsNDIgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8V2ViQ29y
ZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaD4KICNlbHNlCi0jaW5jbHVkZSA8V2ViQ29y
ZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oPgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1Mp
Ci10eXBlZGVmIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IFBsYXRm
b3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwordHlwZWRlZiBXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsK
ICNlbHNlCi10eXBlZGVmIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyBQ
bGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKK3R5cGVkZWYgV2ViQ29yZTo6Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjIFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1j
bGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7
CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CiAKLWNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCBmaW5hbAotICAgIDogcHVibGljIFJl
ZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PgotICAgICwgcHVibGljIFdl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgIHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dCBmaW5hbAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0PgorICAgICwgcHVibGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVs
CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4g
Y3JlYXRlKFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29u
dGV4dElkKQorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBjcmVh
dGUoVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiBtYW5hZ2VyLCBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQmIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQobWFuYWdlciwgcGxheWJhY2tTZXNzaW9uTW9kZWwsIGNvbnRleHRJZCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQobWFu
YWdlciwgcGxheWJhY2tTZXNzaW9uTW9kZWwsIGNvbnRleHRJZCkpOwogICAgIH0KLSAgICB2aXJ0
dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5WaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9t
YW5hZ2VyID0gbnVsbHB0cjsgfQogCkBAIC03MywxMSArNzMsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0TGF5ZXJIb3N0VmlldyhSZXRhaW5QdHI8UGxhdGZvcm1WaWV3PiYmIGxheWVySG9zdFZp
ZXcpIHsgbV9sYXllckhvc3RWaWV3ID0gV1RGTW92ZShsYXllckhvc3RWaWV3KTsgfQogCiBwcml2
YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmLCB1aW50NjRf
dCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSYsIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYsIHVpbnQ2NF90KTsKIAotICAg
IC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92
ZUNsaWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRl
OworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgdm9pZCBhZGRDbGllbnQoV2ViQ29y
ZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92
ZUNsaWVudChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNl
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJl
Y3QpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5
KSBvdmVycmlkZTsKQEAgLTg2LDI2ICs4NiwyNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzVmlk
ZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9CiAgICAgV2ViQ29yZTo6
RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlk
ZW9EaW1lbnNpb25zOyB9CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cgorICAgIC8vIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCiAgICAgdm9pZCBkaWRTZXR1
cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92
ZXJyaWRlOwogICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lk
IGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKIAotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSogbV9tYW5hZ2VyOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ+IG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5KiBtX21hbmFnZXI7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbDsKICAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKICAgICBSZXRh
aW5QdHI8UGxhdGZvcm1WaWV3ICo+IG1fbGF5ZXJIb3N0VmlldzsKLSAgICBIYXNoU2V0PFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIEhhc2hT
ZXQ8V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CiAgICAg
V2ViQ29yZTo6RmxvYXRTaXplIG1fdmlkZW9EaW1lbnNpb25zOwogICAgIGJvb2wgbV9oYXNWaWRl
byB7IGZhbHNlIH07CiB9OwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkg
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+LCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4sIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5KCk7CisgICAgc3RhdGljIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkmKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKTsKIAog
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCkBAIC0xMjAsMjAgKzEyMCwyMCBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7
CiAKLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVBy
b3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7CisgICAgZXhwbGljaXQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYsIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAgdHlwZWRl
ZiBzdGQ6OnR1cGxlPFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+LCBSZWZQdHI8
UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxlOwog
ICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKTsKICAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBQbGF0Zm9ybVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpOworICAgIFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBlbnN1
cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIGFkZENsaWVudEZvckNv
bnRleHQodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRl
eHQodWludDY0X3QgY29udGV4dElkKTsKIAotICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcgorICAgIC8vIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcgogICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVj
dCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7CiAg
ICAgdm9pZCBzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwogICAgIHZvaWQg
c2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJik7CkBAIC0xNDUsMTkgKzE0NSwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhpdEZ1
bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKICNlbmRpZgog
Ci0gICAgLy8gTWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIC8vIE1l
c3NhZ2VzIHRvIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKICAgICB2b2lkIHJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKTsK
ICAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7Ci0gICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZp
dHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5KTsKICAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSk7CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4
dElkKTsKIAogICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OworICAgIFJl
ZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OwogICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4
dE1hcDsKICAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1fY2xpZW50Q291bnRzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KaW5kZXggZjI4MTVkNjcyMzhlOWQzYWZm
Y2YwMWY0ZjRkYmQ0MDUyNDA4NDRjZi4uZWZjM2I1MDQ3ZWY0N2FiYTE5NTcxZTc2NDNhMDcyZWNl
ODIyMGFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC0yMSw3ICsyMSw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICNpZiAoUExBVEZPUk0oSU9T
KSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eSB7CittZXNzYWdlcyAtPiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgewogICAgIFNldEhh
c1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKICAgICBTZXRWaWRlb0Rp
bWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1l
bnNpb25zKQogICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVp
bnQzMl90IHZpZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0aWFsUmVjdCwgZmxvYXQg
aG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KaW5kZXggNjEyOWFkOWExNDFk
NDE2YjFiOWJlZDJlMzM3YWU2YWFlMWRhZTFjNS4uZWNjYjliMjkyMTk2ODI2ODY0ZjAwOTEwMDhm
OTMwODk4ODhhMThhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCkBAIC0yNCwx
NyArMjQsMTcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5LmgiCiAKICNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAKICNpbXBvcnQgIkFQ
SVVJQ2xpZW50LmgiCiAjaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0ICJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQg
IldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29y
ZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL01lZGlhUGxheWVyRW51bXMuaD4KQEAgLTg0LDE0OSArODQsMTQ5IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiAjaWYgUExBVEZPUk0oSU9TKSAmJiAhSEFWRShBVktJVCkKIAotUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKK1JlZlB0cjxWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQ
cm94eSYpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjppbnZhbGlkYXRlKCkKIHsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdAogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1h
eUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKK2Jvb2wgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVy
ZUluUGljdHVyZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVs
bHNjcmVlbigpCiB7CiAKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCiB7CiAKIH0KICNlbHNlCiAKLSNw
cmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAorI3ByYWdtYSBtYXJr
IC0gVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eSYgbWFuYWdlciwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBw
bGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQorVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5JiBtYW5hZ2VyLCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIHBsYXli
YWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgOiBtX21hbmFnZXIoJm1h
bmFnZXIpCiAgICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKHBsYXliYWNrU2Vzc2lvbk1vZGVs
KQogICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQogewogfQogCi1XZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKQorVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCkKIHsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OmFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50
KQogewogICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2Ns
aWVudHMuYWRkKCZjbGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250
YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5p
c2hlZFdpdGhNZWRpYSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAg
ICAgICAgbV9tYW5hZ2VyLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobV9jb250ZXh0SWQsIG1vZGUs
IGZpbmlzaGVkV2l0aE1lZGlhKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6
OkZsb2F0UmVjdCBmcmFtZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFn
ZXItPnNldFZpZGVvTGF5ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJhbWUpOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6
OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKICAgICBpZiAo
bV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJHcmF2aXR5KG1fY29u
dGV4dElkLCBncmF2aXR5KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAg
ICAgbV9tYW5hZ2VyLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9jb250ZXh0SWQsIG1vZGUpOwog
fQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6aXNWaXNpYmxlKCkgY29u
c3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAog
ewogICAgIHJldHVybiBtX21hbmFnZXIgPyBtX21hbmFnZXItPmlzVmlzaWJsZSgpIDogZmFsc2U7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1bGxz
Y3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNj
cmVlbigpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5kaWRTZXR1
cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4oKQogewogICAgIGlmIChtX21hbmFnZXIpCiAg
ICAgICAgIG1fbWFuYWdlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCiB7
CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5kaWRFeGl0RnVsbHNjcmVl
bihtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAg
IG1fbWFuYWdlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUoKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+
ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29udGV4dElkKTsKIH0KIAotI3ByYWdtYSBt
YXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisjcHJhZ21hIG1hcmsgLSBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKIAotUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSkKK1JlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFn
ZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5KSk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCitWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJv
eHkmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5KQogICAgIDogbV9wYWdlKCZwYWdlKQogICAgICwgbV9wbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkocGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQogewotICAgIG1fcGFnZS0+
cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0
aGlzKTsKKyAgICBtX3BhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpLCAqdGhpcyk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpCitWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQogewogICAgIGlmICghbV9w
YWdlKQogICAgICAgICByZXR1cm47CiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCku
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CiAgICAgbV9wYWdlID0gbnVsbHB0cjsKIAogICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nv
bnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICAgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CiAgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZh
Y2UpID0gdHVwbGU7CiAKICAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CkBAIC0yMzgs
MTMgKzIzOCwxMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxp
ZGF0ZSgpCiAgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3Jl
ZW4oKQogewogICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpCiAg
ICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigp
OwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKK2Jvb2wg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAogewogICAgIGZvciAoYXV0byYgdHVw
bGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1
cGxlKS0+aGFzTW9kZShtb2RlKSkKQEAgLTI1Myw3ICsyNTMsNyBAQCBib29sIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkg
Y29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5
U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiB0dXBs
ZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewogICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVw
bGUpLT5tYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpKQpAQCAtMjYz
LDcgKzI2Myw3IEBAIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpCiB9CiAKICNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkg
Y29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1BsYXlpbmdWaWRlb0lu
RW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9j
b250ZXh0TWFwLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmlz
UGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSkKQEAgLTI3NCwyNyArMjc0LDI3IEBA
IGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1BsYXlpbmdWaWRlb0luRW5o
YW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKIH0KICNlbmRpZgogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKIHsK
ICAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQogICAgICAgICBz
dGQ6OmdldDwxPih0dXBsZSktPmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7CiB9CiAKLVdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VU
dXBsZSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVNb2RlbChjb250ZXh0SWQpOwot
ICAgIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsID0gV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1vZGVs
LCBjb250ZXh0SWQpOworICAgIFJlZjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVs
ID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vz
c2lvbk1vZGVsLCBjb250ZXh0SWQpOwogICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKTsKLSAgICBSZWY8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVy
ZmFjZSA9IFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpjcmVhdGUocGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKTsKKyAgICBSZWY8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U+IGludGVyZmFjZSA9IFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpjcmVh
dGUocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwogCi0gICAgaW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkpOwotICAgIGludGVyZmFj
ZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsKKyAg
ICBpbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKCZtb2RlbC5nZXQoKSk7CisgICAg
aW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigmbW9kZWwuZ2V0KCkp
OwogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShp
bnRlcmZhY2UpKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbElu
dGVyZmFjZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpl
bnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBs
ZSgpKTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCkBAIC0zMDIsMjQgKzMwMiwyNCBA
QCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcgogICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQorVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVu
c3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+
KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwogfQogCi1QbGF0Zm9ybVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpl
bnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorUGxhdGZvcm1WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2UmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50cy5h
ZGQoY29udGV4dElkLCAxKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250
ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBBU1NFUlQobV9jbGllbnRDb3VudHMuY29u
dGFpbnMoY29udGV4dElkKSk7CiAKQEAgLTMzNywxMyArMzM3LDEzIEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCkKICAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7
CiB9CiAKLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJ
RCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3Rvciwg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVl
bk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1
aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0
LCBmbG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1
cmVJblBpY3R1cmUpCiB7CiAgICAgQVNTRVJUKHZpZGVvTGF5ZXJJRCk7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFBsYXRmb3Jt
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CiAKICAgICBzdGQ6OnRpZShtb2RlbCwgaW50
ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CiAgICAgYWRkQ2xp
ZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwpAQCAtMzc0LDE3ICszNzQsMTcgQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRf
dCBjb250ZXh0SWQsIHUKICAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJ
blBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCB2aWRlb0Z1bGxzY3JlZW5Nb2RlICYgTWVkaWFQbGF5
ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0SGFzVmlkZW8odWludDY0X3QgY29u
dGV4dElkLCBib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKIHsKICAgICBl
bnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5oYXNWaWRlb0NoYW5nZWQoaGFzVmlkZW8pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9EaW1lbnNpb25z
KHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2
NF90IGNvbnRleHRJZCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkudmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh2aWRlb0Rp
bWVuc2lvbnMpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW50
ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewogICAgIGF1
dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOwogICAgIGludGVyZmFj
ZS5lbnRlckZ1bGxzY3JlZW4oKTsKQEAgLTQwMSw3ICs0MDEsNyBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
ICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCiB7CiAjaWYgUExBVEZPUk0o
SU9TKQogICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFs
UmVjdCk7CkBAIC00MTMsMTggKzQxMywxOCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOgogfQog
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0
QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCiB7CiAgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHRhcmdldE1vZGUpOwog
fQogI2VuZGlmCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjbGVhbnVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewogICAgIGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpLmNsZWFudXBGdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5l
UmVjdCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJl
Y3QgaW5saW5lUmVjdCkKIHsKICAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpOwogCkBAIC00MzcsNDcgKzQzNyw0NyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZAogI2Vu
ZGlmCiB9CiAKLSNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit2b2lkIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0RnVsbHNjcmVlbk1vZGUo
Y29udGV4dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKGNvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OkRpZFNldHVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVs
bHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OkRpZEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogICAgIG1fcGFnZS0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKICAgICBtX3BhZ2UtPmRpZEVudGVyRnVsbHNjcmVlbigpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U+IGludGVyZmFjZTsKIAogICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKIAogICAgIFtDQVRyYW5zYWN0aW9uIGZs
dXNoXTsKICAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
ICAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0VmlldyhudWxscHRyKTsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2NyZWVu
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkQ2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElk
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAKICAgICBpbnRlcmZhY2UtPnNldE1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiAgICAgcmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dChjb250ZXh0SWQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
RmxvYXRSZWN0IGZyYW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZp
ZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFt
ZSkKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICNpZiBQTEFURk9STShJT1MpCkBAIC00ODks
MzAgKzQ4OSwzMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Vmlk
ZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQwogICAgICAgICBtYWNoX3BvcnRf
bmFtZV90IGZlbmNlUG9ydCA9IGZlbmNlU2VuZFJpZ2h0LmxlYWtTZW5kUmlnaHQoKTsKICNlbmRp
ZgogCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6U2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKGNvbnRleHRJZCwgZnJhbWUsIElQQzo6QXR0
YWNobWVudChmZW5jZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250ZXh0SWQsIGZyYW1lLCBJUEM6OkF0
dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQsICh1bnNpZ25lZClncmF2aXR5KSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElkLCAodW5zaWdu
ZWQpZ3Jhdml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7CiAgICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1Zp
ZGVvSW5QaWN0dXJlSW5QaWN0dXJlRGlkQ2hhbmdlKG1fcGFnZSwgbW9kZSAmIE1lZGlhUGxheWVy
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZChjb250ZXh0SWQsIG1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hh
bmdlZChjb250ZXh0SWQsIG1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotYm9vbCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzVmlzaWJsZSgpIGNvbnN0Citib29sIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNWaXNpYmxlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCkgJiYgbV9wYWdlLT5pc0luV2luZG93KCk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUodWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAg
ICAgYm9vbCBpc1ZpZXdWaXNpYmxlID0gbV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCk7Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCBpc1ZpZXdWaXNpYmxlKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCBpc1ZpZXdWaXNpYmxlKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4IDdmMWU5ODU5ODZlNTM1OGM0NTQ4Y2E1OTkz
ZWFhNjNlYzFiYTljMDMuLjlhZWRlNzBhZTE3MTM3ZmFhMTIzY2I1MGU4ZTYzODQ5YTVlMjJkODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAg
LTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGll
bnRJbXBsLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJl
bW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCIKQEAgLTYyLDcgKzYzLDYgQEAKICNpbXBvcnQg
IldlYkV2ZW50RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbXBv
cnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1By
b3h5LmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFsLmgiCkBAIC0x
MTcwLDggKzExNzAsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNoQmFyKCkK
ICAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0Q2FuVG9nZ2xlUGljdHVyZUlu
UGljdHVyZTpZRVNdOwogICAgIH0KIAotICAgIGlmIChQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZSogaW50ZXJmYWNlID0gbV9wYWdlLT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkt
PmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpKQotICAgICAgICBbbV9wbGF5YmFja0NvbnRyb2xz
TWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6aW50ZXJmYWNlXTsKKyAg
ICBpZiAoUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGludGVyZmFjZSA9IG1fcGFn
ZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKSkK
KyAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOmludGVyZmFjZV07CiAKICAgICBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0
UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlci5nZXQo
KV07CiAgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xz
Q29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYTY0YTFjNmYzNDZiOWY1NWNiYTY0
OTdkOTQ5Y2I0ZmY3YWY0MGJiNi4uMmU4MDY2M2FiNjdhZWQ5N2ZjOTYyZGU5MmI3MjY5YjE1M2Iy
YjgyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE1
Miw5ICsxNTIsOSBAQAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIlJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVTY3JvbGxp
bmdQZXJmb3JtYW5jZURhdGEuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1J1bkxvb3BPYnNlcnZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dElu
ZGljYXRvcldpbmRvdy5oPgpAQCAtMTgwLDcgKzE4MCw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKKyNpbmNs
dWRlICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKQEAgLTM5NCw4ICszOTQsOCBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQ
cm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIHVp
bgogICAgIG1fZnVsbFNjcmVlbk1hbmFnZXIgPSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Ojpj
cmVhdGUoKnRoaXMsIG1fcGFnZUNsaWVudC5mdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkp
OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlciA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0
aGlzKTsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7Cisg
ICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpjcmVhdGUoKnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTYzNiw4ICs2MzYsOCBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3MoKQogICAgIG1fZnVsbFNj
cmVlbk1hbmFnZXIgPSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsIG1f
cGFnZUNsaWVudC5mdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkpOwogI2VuZGlmCiAjaWYg
UExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsKLSAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNy
ZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CisgICAgbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMp
OworICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKICNlbmRpZgog
CiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTQyOTUsMTIgKzQyOTUsMTIgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldEZ1bGxzY3JlZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RnVsbHNj
cmVlbkNsaWVudD4mJgogI2VuZGlmCiAgICAgCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShB
VktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6cGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQ
cm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCiB7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5nZXQoKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
KiBXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQorVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5KiBXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewog
ICAgIHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuZ2V0KCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYTkwODgwM2ZkNWUyMjgxOGNiMDRlMTY3
M2M1N2U4YmY4NzIwMTdmMS4uZmQwZmQ3ZWRmZTZlZGMyNTdlODhiNDNkNDcwYzhiZjJiZWZhNjI2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjAwLDkgKzIw
MCw5IEBAIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJDb250ZXh0TWVu
dVByb3h5OwogY2xhc3MgV2ViRWRpdENvbW1hbmRQcm94eTsKIGNsYXNzIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CitjbGFz
cyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJOYXZpZ2F0aW9uU3RhdGU7
Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CitjbGFzcyBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViVVJM
U2NoZW1lSGFuZGxlcjsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CkBAIC0zNDIsOCArMzQyLDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0RnVsbHNjcmVlbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpGdWxsc2NyZWVuQ2xpZW50PiYmKTsKICNlbmRpZgogI2lmIChQTEFURk9STShJT1MpICYmIEhB
VkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxheWJhY2tTZXNz
aW9uTWFuYWdlcigpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogdmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxh
eWJhY2tTZXNzaW9uTWFuYWdlcigpOworICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSog
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkBA
IC0xNjc4LDggKzE2NzgsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiAoUExBVEZPUk0oSU9T
KSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
PiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eT4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOworICAgIFJlZlB0cjxQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggYzFiYTc2NGYwMTU0MjcxMWUyOWFk
NWY5YTA3MzQyNzc2ODI4YWJiYS4uYzkyZWE5ZjRjM2IzM2YzYThmY2M5YTIwZGRmMjYyODA1ZTQ5
YzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJv
eHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJ
T1MubW0KQEAgLTQxLDExICs0MSwxMSBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb24uaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0ICJVc2VyRGF0YS5oIgorI2lt
cG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJWaWV3VXBkYXRl
RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xs
ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQ
cm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
IgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ZWFm
NDZmZGViNWE4YWE5OWI1MGQwNmYxZGY1MGYxYzQxZTY4YmZkLi40ODBkZWRjYWQxYWRlMTRjYjRh
OGNiMTBmNDFmMmM5ODA5NzI5OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NzEsOCArODcxLDggQEAKIAkJMzdGQzE5NDcx
ODUwRkJGMjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5NDYx
ODUwRkJGMjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RkMx
OTRBMTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0ODE4
NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICovOyB9
OwogCQkzN0ZDMTk0QjE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
N0ZDMTk0OTE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LmggKi87IH07Ci0JCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJM0Y0MThFRkIxODg3
QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
RjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZE
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkz
RjQxOEVGQjE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkzRjg3QjlCRDE1ODk0MDEyMDA5MEZG
NjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDNGODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29z
ZXIuY3BwICovOyB9OwogCQkzRjg3QjlCRTE1ODk0MDE5MDA5MEZGNjIgLyogV2ViQ29sb3JDaG9v
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3
QjlCQjE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi87IH07CiAJCTNGODdC
OUMwMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8q
IFdlYkNvbG9yUGlja2VyLmggKi87IH07CkBAIC0xMTE0LDkgKzExMTQsOSBAQAogCQk1MjcyRDRD
OTFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkQ0QzcxRTczNUYwOTAwRUI0Mjkw
IC8qIFdLUHJvdGVjdGlvblNwYWNlTlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MjcyRDRDQTFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0
aW9uU3BhY2VOUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyNzJENEM4MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tICov
OyB9OwogCQk1MjhDMzdDMTE5NUNCQjFBMDBEOEI5Q0MgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTlG
MjgxMDE5NThGNDc4MDA4Q0FDNzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQjAxQzU3
NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0RTAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OwotCQk1MkQ1
QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMx
QzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsg
fTsKLQkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1
QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsg
fTsKKwkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJE
NUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICov
OyB9OworCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
bSAqLzsgfTsKKwkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsg
fTsKIAkJNTMwMjU4M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4
MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovOyB9Owog
CQk1MzAyNTgzQzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkYxRENC
QkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLzsgfTsKIAkJNTMwMjU4
M0QxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzAxRENCQkQxRDAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovOyB9OwpAQCAtMTkyOSwxNCArMTkyOSwx
NCBAQAogCQlDRDc4RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTYx
REI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLzsgfTsKIAkJQ0Q3OEUx
MTkxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTgxREI3RTVBRDAwMTRB
MkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNr
Qm9hcmRTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RBMDQxRjMxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJ
LmggKi87IH07Ci0JCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW0gKi87IH07Ci0JCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5o
ICovOyB9OwotCQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmggKi87IH07Ci0JCUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lm1tICovOyB9OwotCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNDFDQkVCNjdBMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07
Ci0JCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVz
c2FnZXMuaCAqLzsgfTsKLQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
LQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZXMuaCAqLzsgfTsKKwkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tbSAqLzsgfTsKKwkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
LmggKi87IH07CisJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCAqLzsgfTsKKwkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubW0gKi87IH07CisJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQ0RBMjlBMjkxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OworCQlDREEy
OUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQlDREMzODJG
RTE3MjExNzk5MDA4QTJGQzMgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0
IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5tbSAqLzsgfTsKIAkJQ0RDMzgzMDcxNzIxMTdERDAwOEEy
RkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29v
a2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCAqLzsgfTsKIAkJQ0RDMzgzMEMxNzIxMjI4MjAwOEEy
RkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDMzgzMEIxNzIxMjFDRTAwOEEyRkMzIC8qIENvb2tp
ZVN0b3JhZ2VTaGltTGlicmFyeS5oICovOyB9OwpAQCAtMzA5OCwxMCArMzA5OCwxMCBAQAogCQkz
N0ZDMTk0NjE4NTBGQkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250
ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
N0ZDMTk0ODE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tOU1VSTEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZD
MTk0OTE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTlNVUkxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNTE4ODdCRDk3
MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
M0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNz
YWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThF
RjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVG
RCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjgxODg3QkQ5
NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJBMTU4OTNGNjMw
MDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViQ29sb3JDaG9vc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0Y4N0I5QkIxNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvckNob29zZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9y
UGlja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzg1LDEyICszMzg1LDEyIEBACiAJ
CTUyNzJCMjg5MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MjcyRDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3Bh
Y2VOUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Byb3RlY3Rpb25TcGFj
ZU5TLmg7IHBhdGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MjcyRDRDODFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3Bh
Y2VOUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUHJvdGVj
dGlvblNwYWNlTlMubW07IHBhdGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjMxQzU3NDlG
MjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQUMx
QzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQjIxQzU3NDlGMjAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFC
NDFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODJFMURDQkJEMUQwMERBODlDMiAv
KiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVz
b3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVS
ZXNvdXJjZS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJl
c291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODMwMURDQkJEMUQw
MERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyNzIsMTYgKzQyNzIsMTYgQEAKIAkJQ0Q3OEUxMTYxREI3REMwQTAwMTRB
MkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVBJRnVsbHNjcmVlbkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRDc4RTExODFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEwNDFGMzFBQ0UyMTA1MDA0QTEzRUMgLyog
QmFja0JvYXJkU2VydmljZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmFja0JvYXJkU2VydmljZXNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RB
MjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExOTFDQkRCRjQx
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5
QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTIy
MUNCRUI2MUEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNDFD
QkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
Q0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFDMUNCREJGNUIw
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5
QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNDFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RB
MjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjYxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0RDMzgyRjcxNzIxMTUwNjAwOEEyRkMzIC8qIENGTmV0d29yay5mcmFtZXdvcmsgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1l
d29yazsgbmFtZSA9IENGTmV0d29yay5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9DRk5ldHdvcmsuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4i
OyB9OwogCQlDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJy
YXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MzA2MTcyMTE3OTkwMDhBMkZDMyAv
KiBXZWJQcm9jZXNzU2hpbS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IFdlYlByb2Nlc3NTaGltLmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwpAQCAtNTIxNywxNyArNTIxNywxNyBAQAogCQkJCTJEMUI1RDVBMTg1ODY1OTkw
MDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUFD
MDI3M0UxOTY2MjJENjAwQzEyQjc1IC8qIFdlYlBhZ2VQcm94eUNvY29hLm1tICovLAogCQkJCTdD
NDY5NENCMUE0QjUxMEEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSAqLywK
LQkJCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmggKi8sCi0JCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUExRjFDQkVCNUZC
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAorCQkJCUNE
QTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAq
LywKKwkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJN0NFNEQyMTUxQTQ5MTQ4NDAw
QzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sQ29jb2EubW0gKi8sCiAJCQkJMUEwNEY2MTcxQTRBM0E3
QTAwQTIxQjZFIC8qIFdlYlByb2Nlc3NQcm94eUNvY29hLm1tICovLAogCQkJCTdBQUQxNzVFMUVB
NkFGMzcwMDNCMDg5NCAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAq
LywKIAkJCQk1MUQxMjQzMTFFNkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlckNv
Y29hLmggKi8sCiAJCQkJNTFEMTI0MzIxRTZERTUyMTAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhh
bmRsZXJDb2NvYS5tbSAqLywKLQkJCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi8sCi0JCQkJNTJENUExQUIxQzU3NDk0RTAwREUz
NEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJ
CQk1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1tICovLAorCQkJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCAqLywKKwkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTUyRDVBMUFDMUM1
NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJ
MkRGQzdEQjkxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggKi8sCiAJCQkJMkRGQzdE
QkExQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tICovLAogCQkJCTFBRDAxQkNCMTkw
NUQ1NDkwMEM5QzQ1RiAvKiBXS1JlbG9hZEZyYW1lRXJyb3JSZWNvdmVyeUF0dGVtcHRlci5oICov
LApAQCAtNjQxMSwxNCArNjQxMSwxNCBAQAogCQkJCUNENDkxQjA1MUU3MEQwNUYwMDAwOTA2NiAv
KiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHAgKi8sCiAJCQkJQ0Q0OTFCMDYxRTcwRDA1RjAw
MDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q0OTFCMEExRTcz
MkQxMjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAot
CQkJCUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
LmggKi8sCi0JCQkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8sCisJCQkJQ0RBMjlBMTkxQ0JEQkY0MTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLywKKwkJCQlDREEyOUExQzFDQkRC
RjVCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKKwkJ
CQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAq
LywKIAkJCQlFQ0E2ODBENzFFNjkwREY4MDA3MzFEMjAgLyogV2ViUHJvY2Vzc0NvY29hLmggKi8s
CiAJCQkJN0M2RTcwRjkxOEIyRDRBMDAwRjI0RTJFIC8qIFdlYlByb2Nlc3NDb2NvYS5tbSAqLywK
LQkJCQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5oICovLAotCQkJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovLAorCQkJCTUyRDVBMUIyMUM1NzQ5RjIw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8sCisJCQkJNTJENUExQjMxQzU3
NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCisJ
CQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0g
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTc5MDMsMTAgKzc5MDMsMTAgQEAKIAkJCQkxQUIxRjc5MzFEMUIzNjEzMDA3QzlCRDEgLyog
V2ViUGF5bWVudENvb3JkaW5hdG9yTWVzc2FnZXMuaCAqLywKIAkJCQkxQUIxRjc5NDFEMUIzNjEz
MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovLAogCQkJCTFBQjFGNzk1MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eU1lc3NhZ2VzLmggKi8sCi0JCQkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCUNEQTI5
QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMu
aCAqLywKLQkJCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlDREEyOUEyNzFDQkVCNjdB
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywK
KwkJCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5QTI2MUNCRUI2N0Ew
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovLAorCQkJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHlNZXNzYWdlcy5oICovLAogCQkJCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBX
ZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUEwNDNGNjgx
MjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJ
CQlCQzMwNjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5j
cHAgKi8sCkBAIC03OTI4LDEwICs3OTI4LDEwIEBACiAJCQkJMUFBRjA4QjYxOTI2OUU2RDAwQjYz
OTBDIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2VzLmggKi8sCiAJCQkJN0MzNjFE
NzYxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLywKIAkJCQk3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovLAotCQkJCTNGNDE4RUY1MTg4N0JE
OTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNw
cCAqLywKLQkJCQkzRjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlck1lc3NhZ2VzLmggKi8sCi0JCQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJ
M0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eU1lc3NhZ2VzLmggKi8sCisJCQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTNGNDE4RUY2MTg4N0JE
OTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLywKKwkJCQkz
RjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCSk7CiAJCQluYW1lID0g
IkRlcml2ZWQgU291cmNlcyI7CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0MjsKQEAg
LTg3NzIsMTAgKzg3NzIsMTAgQEAKIAkJCQkxQUIxRjc5OTFEMUIzNjEzMDA3QzlCRDEgLyogV2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
NTBGRTcxRUQ3QzM5RjAwRkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUEzRTczNjExMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5
QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTJCMUNC
RUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTI5MUNCRUI2N0EwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFE
NTkyOUYxNjZFMDYwMDAwRTZCRjAyIC8qIFdlYlBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM1NzQ0RjAxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNkE1MDgwQkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTg4MjksNyArODgyOSw3IEBACiAJCQkJN0MzNjFE
NzkxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThDMSAvKiBXZWJV
c2VyTWVkaWFDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRUU1NzVDMURCN0Q2MTEwMEM3
NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRGQzdEQkIxQkND
QzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUNENTVB
QTEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTI5MjMyREY0MThCMjlENjgwMEQwNTk2RiAvKiBXS0FjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzg0LDEwICsxMDM4
NCwxMCBAQAogCQkJCTFBM0U3MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEREQxMjdBNTIxQzAwOEZGNEY0IC8q
IFdlYlBsYXRmb3JtVG91Y2hQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDRBMjE4
ODRFNEYwMDBFRDg2REIgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMUQ1OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDhGRUU0MUQ1OTNFMkEwMDhCQThDQiAvKiBXZWJQ
bHVnaW5JbmZvUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZC
MzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDYwLDEw
ICsxMDQ2MCwxMCBAQAogCQkJCTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNTczOUJCRTFCNDIwNDY2MDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTgzRUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9u
TWVzc2FnZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBE
RTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywK
LQkJCQkzRjQxOEVGQjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyRDVBMUI3MUM1
NzRBMDIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjExQzU3NDk2MjAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTNGNDE4RUZCMTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGQzdEQkMxQkNDQzE5
NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDEx
MjdBMjk4MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODY4MTYwRDAxODc2NDU1NzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA0ZDIyYWZmMTI4OWY3MDJl
OGU1ODRhNjcyM2I1YzZhZTllZGQ5YjhmLi5mZWUwZDI4Njc3ZDAwMGE1YTc5NzBkYWQ0OWE1MTkw
ZjRkMjhhZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC03OCw4ICs3OCw4IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1ZGUg
IldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorI2luY2x1
ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAppbmRleCAwODU5ZjY2NWY3MGVlNjFiZTUyMDdkNTJhNTgzOWJiZWRjYTEzNzQ2Li44ODNm
NjFiYWUzZjFkN2MyZDBhY2UzOGU4NTdiNzBjMmQ1NDMzZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUERGUGx1Z2luLmgiCisjaW5jbHVkZSAi
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUg
IldLU3RyaW5nQ0YuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0j
aW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
TGVnYWN5V2ViQXJjaGl2ZS5oPgogI2VuZGlmCiAKQEAgLTM0NzAsMTcgKzM0NzAsMTcgQEAgUmVt
b3RlV2ViSW5zcGVjdG9yVUkqIFdlYlBhZ2U6OnJlbW90ZUluc3BlY3RvclVJKCkKIH0KIAogI2lm
IChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYg
V2ViUGFnZTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBXZWJQYWdlOjpwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fcGxheWJh
Y2tTZXNzaW9uTWFuYWdlcikKLSAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9wbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsK
ICAgICByZXR1cm4gKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKIH0KIAotV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciYgV2ViUGFnZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyJiBXZWJQYWdlOjp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAg
ICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcikKLSAgICAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKCp0aGlzLCBwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKCkpOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIg
PSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIoKSk7CiAgICAgcmV0dXJuICptX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiB9CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDE0
MmY1N2Q1NzVhNmE2ZjEzMTQ2YTliZjQyMjQyZTkyYzcxODRjNjEuLmI3ZWJiZTgxYWQ4YmJjNTFm
MmVmMjhhNWY4YWZmN2IwNTBmNGU0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTg2LDExICsxODYsMTEgQEAgY2xhc3MgV2ViTm90aWZpY2F0
aW9uQ2xpZW50OwogY2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7CiBjbGFzcyBXZWJQ
YWdlR3JvdXBQcm94eTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5OwotY2xhc3MgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CiBjbGFzcyBXZWJQ
b3B1cE1lbnU7CiBjbGFzcyBXZWJVbmRvU3RlcDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlcjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOwogY2xhc3MgV2ViV2hlZWxFdmVudDsKIGVudW0gRmluZE9wdGlvbnMgOiB1
aW50MTZfdDsKIHN0cnVjdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjsKQEAgLTI2Niw4ICsyNjYs
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0luc3BlY3RvclBhZ2UoKSB7IHJldHVybiAhIW1faW5z
cGVjdG9yVUkgfHwgISFtX3JlbW90ZUluc3BlY3RvclVJOyB9CiAKICNpZiBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0g
ICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwot
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsK
KyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7Cisg
ICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZvaWQgc2V0QWxsb3dzTWVkaWFEb2N1bWVudElu
bGluZVBsYXliYWNrKGJvb2wpOwpAQCAtMTQwMCw4ICsxNDAwLDggQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8UmVtb3RlV2ViSW5zcGVjdG9yVUk+IG1fcmVtb3RlSW5zcGVjdG9yVUk7CiAKICNpZiAo
UExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyPiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGJvb2wgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5s
aW5lUGxheWJhY2sgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaAppbmRleCA3NTNjYjE2
OThiZGIxNTVmOTY2OTgxMTFmMDUxNWYyMzg4N2Y1ZGEyLi4yMzZhMjgxN2I5MDJkZGEyOTZiYTM2
YmIxY2U4YWNlNjI3OTAxM2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApAQCAtMzEsOCArMzEs
OCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNB
TGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01MiwyOCArNTIsMjggQEAgY2xhc3MgTm9kZTsKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlOwotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CiAKLWNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQgZmluYWwKLSAgICA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJsaWMgV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgeworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dCBmaW5hbAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWlu
dDY0X3QgY29udGV4dElkKQorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90
IGNvbnRleHRJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFu
YWdlciwgY29udGV4dElkKSk7CiAgICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxw
dHI7IH0KIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgIC8vIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZQogICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgZmluYWw7
CiAKLSAgICAvLyBXZWJQbGF5YmFja01vZGVsQ2xpZW50CisgICAgLy8gUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQKICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOwogICAg
IHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hv
clRpbWUpIGZpbmFsOwogICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIGZpbmFs
OwpAQCAtODUsMjAgKzg1LDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKICAgICB2b2lk
IGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwogICAgIHZv
aWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAg
ICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNl
TmFtZSkgZmluYWw7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQoYm9vbCkgZmluYWw7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgZmluYWw7CiAKLSAg
ICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQoUGxheWJhY2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CiAK
LSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlciogbV9tYW5hZ2VyOwogICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwogfTsK
IAotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
K2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBjcmVhdGUoV2ViUGFn
ZSYpOwotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKyAgICBzdGF0
aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJik7CisgICAgdmly
dHVhbCB+UGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKIApAQCAtMTA3LDIx
ICsxMDcsMjEgQEAgcHVibGljOgogICAgIHVpbnQ2NF90IGNvbnRleHRJZEZvck1lZGlhRWxlbWVu
dChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7CiAKIHByb3RlY3RlZDoKLSAgICBmcmllbmQg
Y2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLSAgICBmcmllbmQgY2xh
c3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKKyAgICBmcmllbmQgY2xhc3MgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjsKIAotICAgIGV4cGxpY2l0IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFn
ZSYpOworICAgIGV4cGxpY2l0IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOwogCi0g
ICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudD4sIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRy
PFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiwgUmVmUHRyPFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1cGxlOwogICAgIE1v
ZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKTsKICAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAg
IHZvaWQgcmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgYWRkQ2xp
ZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQKKyAgICAvLyBJbnRlcmZhY2UgdG8gUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAogICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVp
bnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUpOwogICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSk7CkBAIC0xMzQs
MTEgKzEzNCwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwog
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwogICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9p
ZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxl
ZCwgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKICAgICB2
b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwogCi0gICAgLy8gTWVz
c2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKKyAgICAvLyBNZXNzYWdl
cyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQogICAgIHZvaWQgcGxheSh1aW50NjRf
dCBjb250ZXh0SWQpOwogICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKICAgICB2
b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4IDk1NjY2YTcxNTRjYzRhOTQ0ZDA0ZWNhODZj
YjMwMzAwNmJkNzc4YTEuLjJlNThkYzk4NDdjZWRjOTIyOWI3YTNkZTIzMjE3YzQ3ZmVjY2YzMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIy
LDcgQEAKICMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQotbWVzc2FnZXMgLT4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciB7CittZXNzYWdlcyAtPiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyIHsKICAgICBQbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKICAg
ICBQYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgVG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90
IGNvbnRleHRJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQppbmRleCAyODVhMjdlNDhiMmE0Mjgy
OWZiNDQyMjRjMTc0ZDliMjM4MzU1YjVmLi45MTQxZTM4ZjU0NDUzZGIxNTJiMzFkMmFiZTFmNGNi
YjA2MDM4YmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCkBAIC0yNCwxNSArMjQsMTUgQEAK
ICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKIAogI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKIAogI2ltcG9ydCAiQXR0YWNobWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9u
TWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0ICJX
ZWJQYWdlLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCIK
LSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW1w
b3J0ICJXZWJQcm9jZXNzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0V2ZW50Lmg+CkBAIC01MywxMjYgKzUzLDEyNiBAQCBzdGF0aWMgdWludDY0X3QgbmV4
dENvbnRleHRJZCgpCiAgICAgcmV0dXJuICsrY29udGV4dElkOwogfQogCi0jcHJhZ21hIG1hcmsg
LSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0CisjcHJhZ21hIG1hcmsgLSBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0CiAKLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgOiBt
X21hbmFnZXIoJm1hbmFnZXIpCiAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCiB7CiB9CiAK
LVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0KCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KCkKIHsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQordm9pZCBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQogewogICAgIGlmIChtX21h
bmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+cmVzZXRNZWRpYVN0YXRlKG1fY29udGV4dElkKTsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpkdXJhdGlvbkNo
YW5nZWQoZG91YmxlIGR1cmF0aW9uKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogewogICAgIGlmIChtX21hbmFn
ZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZHVyYXRpb25DaGFuZ2VkKG1fY29udGV4dElkLCBkdXJh
dGlvbik7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3Vy
cmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChk
b3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQogewogICAgIGlmIChtX21hbmFn
ZXIpCiAgICAgICAgIG1fbWFuYWdlci0+Y3VycmVudFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBj
dXJyZW50VGltZSwgYW5jaG9yVGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2Vk
KGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9t
YW5hZ2VyLT5idWZmZXJlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBidWZmZXJlZFRpbWUpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJhdGVDaGFuZ2Vk
KGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5
YmFja1JhdGUpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5yYXRl
Q2hhbmdlZChtX2NvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVD
aGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJh
Y2tTdGFydGVkVGltZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXIt
PnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRU
aW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpzZWVr
YWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgcmFuZ2VzLCBkb3Vi
bGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0
IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRv
dWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAg
bV9tYW5hZ2VyLT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQobV9jb250ZXh0SWQsIHJhbmdlcywgbGFz
dE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wg
dmFsdWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNhblBsYXlGYXN0
UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAg
ICBtX21hbmFnZXItPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQobV9jb250ZXh0SWQsIHZhbHVl
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5hdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVj
dGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9t
YW5hZ2VyLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwg
b3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAg
ICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2Vy
LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNlbGVjdGVk
SW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkRGV2aWNlTmFtZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQobV9jb250ZXh0SWQsIGVuYWJsZWQsIHR5cGUsIGxvY2FsaXpl
ZERldmljZU5hbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQog
ICAgICAgICBtX21hbmFnZXItPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCht
X2NvbnRleHRJZCwgZGlzYWJsZWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKIHsKICAgICBpZiAo
bV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPm11dGVkQ2hhbmdlZChtX2NvbnRleHRJZCwg
bXV0ZWQpOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisj
cHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCiAKLVJlZjxXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyPiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUoV2ViUGFnZSYg
cGFnZSkKK1JlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBhZ2UpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBhZ2UpKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQorUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQogICAg
IDogbV9wYWdlKCZwYWdlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlEKCksICp0aGlzKTsKIH0KIAot
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6fldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQor
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6flBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQogewogICAg
IGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVm
UHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKLSAgICAgICAg
UmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAg
ICAgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKKyAg
ICAgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
ICAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKICAgICAgICAgbW9k
ZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKICAgICAgICAgbW9kZWwtPnNldE1lZGlhRWxl
bWVudChudWxscHRyKTsKQEAgLTE4NCwxOSArMTg0LDE5IEBAIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6On5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKICAgICBtX21lZGlhRWxlbWVudHMu
Y2xlYXIoKTsKICAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwogCi0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZh
Y2VUdXBsZSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVy
ZmFjZVR1cGxlIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ+IG1vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0PiBpbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjcmVh
dGUoKnRoaXMsIGNvbnRleHRJZCk7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50PiBtb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250
ZXh0SWQpOwogICAgIG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFjZSk7CiAKICAgICByZXR1cm4g
c3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwogfQog
Ci1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJ
ZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
CkBAIC0yMDQsMjAgKzIwNCwyMCBAQCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbElu
dGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cgogICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1XZWJDb3JlOjpXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJl
TW9kZWwodWludDY0X3QgY29udGV4dElkKQorV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90
IGNvbnRleHRJZCkKIHsKICAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCkpOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQorUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBy
ZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0
X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dD4gaW50ZXJmYWNlOwogICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKIAogICAgIFJlZlB0cjxIVE1MTWVkaWFF
bGVtZW50PiBtZWRpYUVsZW1lbnQgPSBtb2RlbC0+bWVkaWFFbGVtZW50KCk7CkBAIC0yMjgsMTkg
KzIyOCwxOSBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQo
dWludDY0X3QgY29udGV4dElkKQogICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xp
ZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgbV9jbGllbnRDb3VudHMu
YWRkKGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVt
b3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQog
ewogICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKICAgICBp
ZiAobV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCiAgICAgICAgIHJlbW92ZUNvbnRl
eHQoY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRV
cFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlh
RWxlbWVudCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRy
b2xzTWFuYWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCiB7CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgIGF1dG8gZm91bmRJdGVyYXRvciA9IG1fbWVkaWFFbGVtZW50
cy5maW5kKCZtZWRpYUVsZW1lbnQpOwpAQCAtMjYyLDExICsyNjIsMTEgQEAgdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6
OkhUTUxNZWRpYUUKICAgICB9CiAKICAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6U2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCht
X2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZXRVcFBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpCiB7CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIGlmICghbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCkBAIC0yNzQsMTEgKzI3
NCwxMSBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tDb250
cm9sc01hbmFnZXIoKQogCiAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCk7CiAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOwotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpD
bGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogI2VuZGlmCiB9CiAK
LXVpbnQ2NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1lZGlhRWxl
bWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCit1aW50NjRfdCBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9tZWRpYUVsZW1lbnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENv
bnRleHRJZCgpOyB9KTsKICAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwpAQCAtMjg2LDM5ICsyODYsMzkgQEAgdWludDY0X3QgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUUK
ICAgICByZXR1cm4gY29udGV4dElkOwogfQogCi0jcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6CisjcHJhZ21hIG1hcmsgSW50ZXJmYWNl
IHRvIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpS
ZXNldE1lZGlhU3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGR1cmF0aW9uKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpkdXJh
dGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1
cmF0aW9uQ2hhbmdlZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1
cmF0aW9uQ2hhbmdlZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRp
bWUsIGFuY2hvclRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YnVmZmVy
ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OkJ1ZmZlcmVkVGltZUNoYW5nZWQoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6QnVmZmVyZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBs
YXliYWNrU3RhcnRlZFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXliYWNr
U3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3Rh
cnRlZFRpbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgcGxh
eWJhY2tTdGFydGVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpQbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZChjb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyYXRlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5nZWQoY29u
dGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSYXRl
Q2hhbmdlZChjb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5n
ZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYg
dGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50
ZXJ2YWwpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVSYW5n
ZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQog
ewogICAgIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewpA
QCAtMzI2LDE0MyArMzI2LDE0MyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNl
ZWthYmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0CiAgICAgICAgIGRv
dWJsZSBlbmQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLmVuZChpKS50b0RvdWJsZSgpOwogICAgICAg
ICByYW5nZXNWZWN0b3IuYXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsKICAgICB9Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNlZWthYmxl
UmFuZ2VzVmVjdG9yQ2hhbmdlZChjb250ZXh0SWQsIFdURk1vdmUocmFuZ2VzVmVjdG9yKSwgbGFz
dE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNl
ZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZChjb250ZXh0SWQsIFdURk1vdmUocmFuZ2VzVmVjdG9y
KSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZl
cnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBib29sIHZhbHVlKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNvbnRleHRJ
ZCwgdmFsdWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChj
b250ZXh0SWQsIHZhbHVlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJ
ZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9u
cywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5
cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5h
YmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRh
cmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQogewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpFeHRlcm5hbFBsYXli
YWNrUHJvcGVydGllc0NoYW5nZWQoY29udGV4dElkLCBlbmFibGVkLCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4odGFyZ2V0VHlwZSksIGxvY2FsaXplZERldmljZU5hbWUpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKGNvbnRleHRJZCwgZW5hYmxlZCwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRhcmdldFR5cGUpLCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJ
ZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVk
SW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkQ2hhbmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7CiB9CiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBtdXRlZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFuZ2VkKGNvbnRl
eHRJZCwgbXV0ZWQpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFuZ2VkKGNvbnRleHRJZCwgbXV0ZWQpKTsKIH0KIAotI3By
YWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ogor
I3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ogog
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXkodWludDY0X3QgY29udGV4dElk
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkK
IHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXkoKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBhdXNlKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBsYXlTdGF0ZSgpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2NydWJiaW5nKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJp
bmcodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGlj
YXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
YmVnaW5TY3J1YmJpbmcoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpl
bmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjplbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuZW5kU2NydWJiaW5nKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIHRpbWUpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9U
aW1lKHRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVr
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCiB7CiAgICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAg
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mYXN0U2Vlayh0aW1lKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250
ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJk
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0
b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJl
Z2luU2Nhbm5pbmdGb3J3YXJkKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5p
bmcodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGlj
YXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
ZW5kU2Nhbm5pbmcoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkK
IHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdExlZ2libGVNZWRpYU9wdGlv
bihpbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6aGFuZGxlQ29u
dHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRf
dCBjb250ZXh0SWQpCiB7CiAgICAgYXV0byBlbGVtZW50ID0gZW5zdXJlTW9kZWwoY29udGV4dElk
KS5tZWRpYUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkhhbmRsZUNvbnRyb2xs
ZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQsIGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCkp
KTsKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQsIGVsZW1l
bnQtPmdldElkQXR0cmlidXRlKCkpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250
ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQaWN0dXJlSW5Q
aWN0dXJlKCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlTXV0
ZWQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dn
bGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS50b2dnbGVNdXRlZCgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQog
ewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TXV0ZWQobXV0ZWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIuaAppbmRleCBmYTlhMDBmMTFhZWE0NDRmOTY4NTEzNWI5OTcwY2NhMmQ4YWU3
MzI4Li5mOGQzYzI0OTI1NTEyYmEzMzhkYjA5YzJjMTJmNzVjNzUyOTIzY2Q2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRM
aXN0ZW5lci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9W
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkBAIC01MiwxOSArNTIsMTkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIExheWVySG9z
dGluZ0NvbnRleHQ7CiBjbGFzcyBXZWJQYWdlOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
Ci0gICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0PgotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKKyAgICA6IHB1YmxpYyBS
ZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+CisgICAgLCBwdWJsaWMg
V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBzdGF0
aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGNyZWF0ZShWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwogICAgIH0K
LSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCk7CisgICAg
dmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpOwogCiAgICAgdm9pZCBp
bnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CiAKQEAgLTg0LDEzICs4NCwxMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1faXNGdWxs
c2NyZWVuID0gZmxhZzsgfQogCiBwcml2YXRlOgotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKICAgICB2b2lkIGhh
c1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0No
YW5nZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CiAKLSAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImLCB1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQo
VmlkZW9GdWxsc2NyZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CiAKLSAgICBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlciogbV9tYW5hZ2VyOwogICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRleHQ7CiAgICAg
Ym9vbCBtX2lzQW5pbWF0aW5nIHsgZmFsc2UgfTsKQEAgLTk5LDEwICs5OSwxMCBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4geyBmYWxzZSB9OwogfTsKIAotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYsIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXImKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
KCk7CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBjcmVhdGUoV2ViUGFn
ZSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKCk7CiAgICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgCkBAIC0xMTUs
MjQgKzExNSwyNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2Rl
V2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKIAogcHJvdGVjdGVkOgot
ICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OworICAg
IGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OwogCi0gICAgZXhw
bGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiwgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlciYpOworICAgIGV4cGxpY2l0IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFn
ZSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKIAotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxS
ZWZQdHI8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+LCBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVw
bGU7CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudD4sIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKICAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0
ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgTW9kZWxJbnRlcmZh
Y2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgZW5zdXJlTW9k
ZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJDb3Jl
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHJlbW92ZUNvbnRleHQodWlu
dDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKIAotICAgIC8vIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0CisgICAgLy8gSW50ZXJmYWNlIHRvIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQKICAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
aGFzVmlkZW8pOwogICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogCi0gICAgLy8gTWVzc2FnZXMgZnJv
bSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQogICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKTsKICAgICB2b2lkIGRpZFNl
dHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgZGlkRXhpdEZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElk
LCBib29sIGlzUGFnZVZpc2libGUpOwogICAgIAogICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBS
ZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwor
ICAgIFJlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7
CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiwgdWludDY0X3Q+IG1fdmlk
ZW9FbGVtZW50czsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBt
X2NvbnRleHRNYXA7CiAgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAw
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KaW5kZXggMTM1OWMy
NWFhZTdiMDE1ZTMwMTNkOWExYjE1MDdiNjEwYTJmYmNhNS4uNWM0YjU2ODk1NTllZTc1ZDk5NDE2
ZTgwNGM3ZmNmNjk3YmIwMjUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNz
YWdlcy5pbgpAQCAtMjEsNyArMjEsNyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAjaWYgKFBMQVRGT1JN
KElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
IHsKK21lc3NhZ2VzIC0+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgewogICAgIFJlcXVlc3RGdWxs
c2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlz
aGVkV2l0aE1lZGlhKQogICAgIERpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
CiAgICAgRGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLm1tCmluZGV4IDI0Yzk4Y2E4ZWM2MzNhZTY4Njg5NTk2NTBlZTgyMTI5ZTIzOGViNzEu
LmVmNjgwYjlkYWI0NmIyZmM2NTVmNzMyMGU3YTU1ZDA5MjExODIxNDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW0KQEAgLTIzLDE3ICsyMywxNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKIAog
I2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCiAjaW1wb3J0ICJBdHRhY2htZW50Lmgi
CisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBv
cnQgIldlYlBhZ2UuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKICNp
bXBvcnQgIldlYlByb2Nlc3MuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJN
ZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Db2xvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgpAQCAtNjQsNTQgKzY0LDU0
IEBAIHN0YXRpYyBJbnRSZWN0IGlubGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxlbWVudCYgZWxl
bWVudCkKICAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jv
b3RWaWV3KHJlY3QpOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0CisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwg
dWludDY0X3QgY29udGV4dElkKQorVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5h
Z2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCiAgICAg
LCBtX2NvbnRleHRJZChjb250ZXh0SWQpCiB7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCkKK1ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0KCkKIHsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojpz
ZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0
PiYmIGNvbnRleHQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExh
eWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYg
Y29udGV4dCkKIHsKICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhhc1ZpZGVv
Q2hhbmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKIHsKICAgICBpZiAobV9tYW5hZ2Vy
KQogICAgICAgICBtX21hbmFnZXItPmhhc1ZpZGVvQ2hhbmdlZChtX2NvbnRleHRJZCwgaGFzVmlk
ZW8pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZpZGVv
RGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
Y29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikK
ICAgICAgICAgbV9tYW5hZ2VyLT52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fY29udGV4dElkLCB2
aWRlb0RpbWVuc2lvbnMpOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCiAKLVJlZjxXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUo
V2ViUGFnZSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9u
TWFuYWdlcikKK1JlZjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJh
Y2tTZXNzaW9uTWFuYWdlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyKHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKHBhZ2UsIHBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIpKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBw
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKQogICAgIDogbV9wYWdlKCZwYWdlKQogICAgICwgbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlEKCksICp0
aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFn
ZS5wYWdlSUQoKSwgKnRoaXMpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpCiB7CiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1h
cC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwogICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJm
YWNlKSA9IHR1cGxlOwogCiAgICAgICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7
CkBAIC0xMjUsMjAgKzEyNSwyMCBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcigpCiAgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKICAgICAK
ICAgICBpZiAobV9wYWdlKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSgpCiB7CiAgICAgQVNTRVJUKG1fcGFnZSk7
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAgICBtX3BhZ2UgPSBudWxscHRyOwogfQog
Ci1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
bW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4
dElkKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVs
ID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7CiAgICAgbV9w
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5hZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CiAK
ICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5nQ29udGV4
dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKQEAgLTE0Nyw3ICsxNDcsNyBA
QCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZQogICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RG
TW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK1ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1
cGxlKCkpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTE1NSwyMCArMTU1LDIw
IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiB9CiAKLVdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250
ZXh0SWQpCitXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQogewogICAg
IHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7
CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIHJldHVybiAqc3RkOjpnZXQ8MT4o
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElk
KQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVs
OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7
CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpOwogCiAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5yZW1vdmVDbGll
bnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CkBAIC0xODEsMTQgKzE4MSwxNCBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQog
ICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRf
dCBjb250ZXh0SWQpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50cy5hZGQo
Y29udGV4dElkLCAxKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKQogewogICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0
SWQpKTsKIApAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCiAKICNwcmFnbWEg
bWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50OgogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKIHsKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIGJv
b2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVuCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9F
bGVtZW50JiB2aWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEFT
U0VSVChtX3BhZ2UpOwogICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwpAQCAtMjI3LDggKzIyNyw4IEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQo
SFRNTFZpZGVvRWxlCiAgICAgVU5VU0VEX1BBUkFNKGFkZFJlc3VsdCk7CiAgICAgQVNTRVJUKGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPT0gY29udGV4dElkKTsKIAotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CiAgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogICAgIGFk
ZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKICAgICBpZiAoIWludGVyZmFjZS0+bGF5ZXJI
b3N0aW5nQ29udGV4dCgpKQpAQCAtMjUwLDEwICsyNTAsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlk
ZW9FbGUKIAogICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSA9IHZpZGVvRWxlbWVudC53
ZWJraXRTdXBwb3J0c1ByZXNlbnRhdGlvbk1vZGUoSFRNTFZpZGVvRWxlbWVudDo6VmlkZW9QcmVz
ZW50YXRpb25Nb2RlOjpQaWN0dXJlSW5QaWN0dXJlKTsKICAgICAKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVu
V2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPmNvbnRl
eHRJRCgpLCB2aWRlb1JlY3QsIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgaW50ZXJmYWNl
LT5mdWxsc2NyZWVuTW9kZSgpLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChjb250ZXh0SWQsIGludGVyZmFjZS0+bGF5ZXJI
b3N0aW5nQ29udGV4dCgpLT5jb250ZXh0SUQoKSwgdmlkZW9SZWN0LCBtX3BhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKSwgYWxsb3dzUGljdHVyZUlu
UGljdHVyZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRN
TFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQmIHZpZGVvRWxlbWVudCkKIHsKICAgICBBU1NFUlQobV9wYWdlKTsKICAgICBBU1NFUlQo
bV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKQEAgLTI2NywxMCArMjY3
LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVl
bkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MCiAgICAgICAgIHJldHVybjsKIAogICAgIGlu
dGVyZmFjZS5zZXRJc0FuaW1hdGluZyh0cnVlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY29udGV4dElk
LCBpbmxpbmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhp
dEZ1bGxzY3JlZW4oY29udGV4dElkLCBpbmxpbmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCkpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpl
eGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQogewogI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogICAgIEFTU0VSVChtX3BhZ2Up
OwpAQCAtMjgxLDQwICsyODEsNDAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpl
eGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3IKIAogICAgIGlu
dGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwogCi0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVu
V2l0aG91dEFuaW1hdGlvblRvTW9kZShjb250ZXh0SWQsIHRhcmdldE1vZGUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKGNvbnRleHRJZCwg
dGFyZ2V0TW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
dmlkZW9FbGVtZW50KTsKICAgICBVTlVTRURfUEFSQU0odGFyZ2V0TW9kZSk7CiAjZW5kaWYKIH0K
IAotI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OgorI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0OgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFz
VmlkZW8pCiB7CiAgICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNvbnRleHRJZCwg
aGFzVmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNvbnRleHRJZCwg
aGFzVmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29u
c3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9h
dFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0Vmlk
ZW9EaW1lbnNpb25zKGNvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoY29udGV4dElkLCB2aWRlb0RpbWVuc2lvbnMpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OgorI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlz
aGVkV2l0aE1lZGlhKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RnVsbHNj
cmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKIHsK
ICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtb2RlLCBm
aW5pc2hlZFdpdGhNZWRpYSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQogewogICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAgICAgUGxh
dGZvcm1MYXllciogdmlkZW9MYXllciA9IFtDQUxheWVyIGxheWVyXTsKQEAgLTMzMywyOCArMzMz
LDI4IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IgPSBtX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgW3ZpZGVvTGF5ZXIgc2V0VHJhbnNmb3JtOkNB
VHJhbnNmb3JtM0RNYWtlU2NhbGUoaG9zdGluZ1NjYWxlRmFjdG9yLCBob3N0aW5nU2NhbGVGYWN0
b3IsIDEpXTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+
IGludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRl
cmZhY2U7CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpOwogCiAgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0
KCktPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIAogICAgIG1vZGVsLT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29u
dGV4dElkXSB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKICAgICAgICAgICAgIGlmIChw
cm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVlbihjb250
ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgICAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RW50
ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+cGFnZUlEKCkp
OwogICAgICAgICB9KTsKICAgICB9KTsKICAgICAKICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpk
aWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CiAgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogCiAgICAg
aW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CkBAIC0zNjgsMTkgKzM2OCwxOSBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIGV4aXQgZnVsbHNjcmVlbiBu
b3cgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1cmluZyBhbiBhbmltYXRpb24uCi0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3Rl
ZFRoaXMsIHZpZGVvRWxlbWVudF0gewogICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdl
KQogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVv
RWxlbWVudCgqdmlkZW9FbGVtZW50KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBt
b2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlOwogICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAKICAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVkRm9y
SW5saW5lVGhlbihbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7
CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90
ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKQEAgLTM5MSwxNyArMzkx
LDE3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5z
ZXRMYXllckhvc3RpbmdDb250ZXh0KG51bGxwdHIpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwg
cHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+
bV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
bW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGlu
dGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZh
Y2U7CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOwogCiAgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7
CkBAIC00MTgsMTkgKzQxOCwxOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRp
ZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBpZiAoIXZpZGVvRWxl
bWVudCB8fCAhdGFyZ2V0SXNGdWxsc2NyZWVuKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywg
dmlkZW9FbGVtZW50LCBtb2RlXSB7CiAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2Up
CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVv
RWxlbWVudCgqdmlkZW9FbGVtZW50LCBtb2RlKTsKICAgICB9KTsKIH0KICAgICAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90
IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQg
Z3Jhdml0eSkKIHsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldFZpZGVvTGF5ZXJHcmF2
aXR5KChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KWdyYXZpdHkpOworICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdyYXZpdHkoKFZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBp
c1BhZ2VWaXNpYmxlKQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CkBAIC00
MzksMTMgKzQzOSwxMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3Jl
ZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsCiAKICAgICBpZiAoIWlzUGFn
ZVZpc2libGUpCiAgICAgICAgIG1vZGVsLnZpZGVvRWxlbWVudCgpLT5zY3JvbGxJbnRvVmlld0lm
Tm90VmlzaWJsZShmYWxzZSk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShjb250ZXh0SWQs
IHRydWUsIGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLnZpZGVvRWxlbWVudCgpKSksIG1fcGFnZS0+
cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVlLCBpbmxp
bmVWaWRlb0ZyYW1lKCptb2RlbC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZy
YW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywg
SVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKIHsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwogICAgIHN0ZDo6dGllKG1v
ZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKIAog
ICAgIGlmIChzdGQ6OmlzbmFuKGJvdW5kcy54KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLnkoKSkg
fHwgc3RkOjppc25hbihib3VuZHMud2lkdGgoKSkgfHwgc3RkOjppc25hbihib3VuZHMuaGVpZ2h0
KCkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315390</attachid>
            <date>2017-07-13 18:19:31 -0700</date>
            <delta_ts>2017-07-13 19:15:47 -0700</delta_ts>
            <desc>Part1: File name changes.</desc>
            <filename>bug-174437-20170713181930.patch</filename>
            <type>text/plain</type>
            <size>640383</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzkyMTQ4YjgwMDU2ODU2
MWEzZGY4NDhhYmFkY2E3NzMxZGI3NmUyMi4uNGYxZWFlNTQ3NzM1ZjZkNGQ2MGY5YjU2NDQ5OGJi
ZWE5Yjg0MDE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMTE4LDYgKzExOCwzOCBAQAogCiAyMDE3LTA3LTEz
ICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgV2Vi
IHByZWZpeCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNzaW9uIGNs
YXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzQ0MzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXJ0IDE6IFJlbmFtZSBmaWxlcyBhbmQgdXBkYXRlIHByb2plY3QsIGltcG9ydHMgYW5kIGluY2x1
ZGVzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVmlk
ZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Bs
YXliYWNrU2Vzc2lvbk1vZGVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oLgorICAgICAgICAqIHBsYXRmb3JtL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0uCisgICAgICAgICogcGxhdGZv
cm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmguCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmguCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmguCisgICAgICAgICogcGxh
dGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW06IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5t
bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9WaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06CisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5o
LgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW06
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLm1tLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW06CisKKzIw
MTctMDctMTMgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgorCiAgICAgICAgIEZp
eCBzdHlsZS4gVXNlICNwcmFnbWEgb25jZSBpbiBWaWRlb0Z1bGxzY3JlZW4gYW5kIFBsYXliYWNr
U2Vzc2lvbiBoZWFkZXJzLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0NDQ4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1YjhlYzIxY2ZkNzhkZTA5ZDg3
OTI5ZjViYTY5OGYwODllNWRkZWFmLi43NjQ3NjU4M2ZmZmM3Nzc4MjA1NDk0N2ExNTI2ZTIzNTA0
NDYxOTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMDctMTMgIEpl
cmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBXZWIgcHJl
Zml4IGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuIGFuZCBXZWJQbGF5YmFja1Nlc3Npb24gY2xhc3Nl
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDQz
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnQg
MTogUmVuYW1lIGZpbGVzIGFuZCB1cGRhdGUgcHJvamVjdCwgaW1wb3J0cyBhbmQgaW5jbHVkZXMu
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3RGF0YS5tbToKKwogMjAxNy0wNy0xMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFzeW5jIGltYWdlIGRlY29kaW5nIGZvciBsYXJnZSBp
bWFnZXMgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBlMDUyYjJk
MTliYTU0OTNmNWRjMWViZDNmZmFmMzFiZGNjZjlmYWYxLi4xMWQ5YjVjMmI3NDAzMDUyMjBhMGJh
ZWNjOGEzM2VmOWNhMzM3NGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC01NCw2ICs1NCwzNiBAQAogCiAyMDE3
LTA3LTEzICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1v
dmUgV2ViIHByZWZpeCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNz
aW9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQ0MzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQYXJ0IDE6IFJlbmFtZSBmaWxlcyBhbmQgdXBkYXRlIHByb2plY3QsIGltcG9ydHMgYW5k
IGluY2x1ZGVzLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmguCisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNz
YWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbTogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubW0uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9W
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tLgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAg
ICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0uCisgICAgICAgICogV2ViUHJvY2Vzcy9j
b2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW46IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tLgorCisyMDE3LTA3LTEzICBK
ZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKwogICAgICAgICBGaXggc3R5bGUuIFVz
ZSAjcHJhZ21hIG9uY2UgaW4gVmlkZW9GdWxsc2NyZWVuIGFuZCBQbGF5YmFja1Nlc3Npb24gaGVh
ZGVycy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NDQ0OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggOWZjMjE4YzFhNzU5YzAyOTY0Y2M0MmRmOWY0YmQyNGVkOTllMjliMC4uMTk4
YTg4MzNlNmQ0Nzc0MDU5NGM1MGE3NTY2MTA0YWJiYThhZDMxOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY4NSw4ICsxNjg1
LDggQEAKIAkJM0Y4MDIwMzYxRTlFNDdDMzAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZp
Y2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4
MDIwMzExRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3BwICovOyB9
OwogCQkzRjgwMjAzNzFFOUU0N0M1MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
ODAyMDM0MUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5o
ICovOyB9OwogCQkzRjgwMjAzODFFOUU0N0M5MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0Y4MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyLmNwcCAqLzsgfTsKLQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OwotCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVF
MzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKKwkJM0ZCQzRBRjQxODk4ODE1NjAw
NDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzgg
LyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzRkYxRkE2NjFFNzM1MEZEMDBDMTAwMkYgLyog
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5jcHAgKi87IH07CiAJCTNGRjgxM0E3MURCQTg2NDAwMDlCRjAwMSAvKiBQb2lu
dGVyTG9ja0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDRkM0MzRGMTkyNDA2QTkwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0NvbnRyb2xs
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkz
RkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE2MTU5RDlB
NTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovOyB9OwpAQCAtMjQ3NSwx
MSArMjQ3NSwxMSBAQAogCQk1MUZCNTUwNTExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI1
NTAzMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovOyB9OwogCQk1MUZCNjdE
QjFBRTZCODJCMDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjY3RDkxQUU2QjVF
NDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcCAqLzsgfTsKIAkJNTFG
QjY3REMxQUU2QjgyRjAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNjdEQTFBRTZC
NUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MjEzMUU1QjFDNEYxNTc2MDAz
M0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzFFNUExQzRGMTU2MTAwMzNGODAy
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLzsgfTsKKwkJNTIxMzFFNUIx
QzRGMTU3NjAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMxRTVBMUM0RjE1NjEw
MDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi87IH07CiAJCTUyNjcy
NEYzMUNCMkZFQUQwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzI0RjExQ0Iy
RkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0gKi87IH07CiAJ
CTUyQjBENEJFMUM1N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjBENEJEMUM1N0ZEMUUwMDc3Q0U1
MyAvKiBQbGF0Zm9ybVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjBE
NEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQjBENEMy
MUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjBENEMxMUM1N0ZGOTEw
MDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkI2QzlDMjE1RTNGNERGMDA2OTBC
MDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkI2QzlCRDE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTUyQjZDOUMzMTVFM0Y0REYwMDY5MEIwNSAv
KiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkI2QzlCRTE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93
Q29sbGVjdGlvbi5oICovOyB9OwogCQk1MkI2QzlDNTE1RTNGNERGMDA2OTBCMDUgLyogTmFtZWRG
bG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkI2QzlDMDE1RTNGNERGMDA2OTBCMDUgLyogTmFtZWRGbG93Q29sbGVjdGlvbi5j
cHAgKi87IH07CkBAIC0yNDg3LDkgKzI0ODcsOSBAQAogCQk1MkNDQTlFMjE1RTNGNjJDMDA1M0M3
N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0NBOUUwMTVFM0Y2MkMwMDUzQzc3RiAvKiBKU0RP
TU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk1MkNDQTlFMzE1RTNGNjJDMDA1M0M3
N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNDQTlFMTE1RTNGNjJDMDA1M0M3N0YgLyogSlNET01O
YW1lZEZsb3dDb2xsZWN0aW9uLmggKi87IH07CiAJCTUyRDVBMThGMUM1NDU5MjMwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTE4RDFDNTQ1OTAzMDBERTM0QTMgLyogVmlkZW9G
dWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1tICovOyB9OwotCQk1MkQ1QTFBNzFDNTc0ODlEMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OworCQk1MkQ1QTFBNzFDNTc0ODlEMDBERTM0
QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tICovOyB9OwogCQk1MkUyQ0FGQzE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFMkNB
RkIxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkYxMDg2NTE2MkI2REE0MDA5QUM4MUUg
LyogTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50
Q2hlY2tlci5jcHAgKi87IH07CiAJCTUyRjEwODY2MTYyQjZEQTgwMDlBQzgxRSAvKiBNaXhlZENv
bnRlbnRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MjAwLDE1
ICs2MjAwLDE1IEBACiAJCUNEQTA3RkJFMThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExp
c3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEwN0ZCQzE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTA3RkMxMThFMEEy
MkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQkYxOEUwQTIyQjAwNDY5OUZBIC8q
IFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gKi87IH07CiAJCUNEQTA3RkMyMThFMEEyMkIwMDQ2
OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwN0ZDMDE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVt
U2xlZXBMaXN0ZW5lck1hYy5oICovOyB9OwotCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUEw
RTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEw
QzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW0gKi87IH07Ci0JCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMubW0gKi87IH07Ci0JCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQubW0gKi87IH07CisJCUNEQTI5QTA5MUNCRDk5RjQwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9k
ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNEQTI5QTBFMUNCRDlDRkUw
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTBDMUNCRDlDRkUwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSAqLzsgfTsKKwkJQ0RB
MjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEw
RDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEx
NjFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTQxQ0JEQTU2
QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLzsgfTsKKwkJQ0RB
MjlBMTcxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTUxQ0JE
QTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNEQTI5QTMwMUNCRjc0RDQw
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJGMUNCRjczRkMwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKIAkJQ0RBMjlBMzEx
Q0JGNzREQTAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJEMUNCRjczRkMwMDkwMUND
RiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0gKi87IH07Ci0JCUNEQTI5QTMyMUNDMDFBOTUw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkUxQ0JGNzNGQzAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREE3OTgyNDE3MEEyNTgzMDBENDVDNTUgLyogQXVk
aW9TZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTc5ODIzMTcwQTI1ODMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uY3BwICovOyB9Owog
CQlDREE3OTgyNzE3MEEyNzkxMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNzk4MjUxNzBBMjc5MDAw
RDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSAqLzsgfTsKIAkJQ0RBNzk4MkExNzBBM0QwMDAw
RDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MzI2
LDggKzkzMjYsOCBAQAogCQkzRjgwMjAzMjFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3JlQXVkaW9D
YXB0dXJlRGV2aWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODAyMDMzMUU5
RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODAyMDM0MUU5RTM4MUQw
MERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
M0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkZGRjlBNzE1OUQ5QTU1MDAyMEJC
RDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzRkZGRjlBQjE1OUQ5QjA2MDAyMEJCRDUgLyogVmlld3BvcnRTdHlsZVJlc29sdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdwb3J0U3R5bGVSZXNv
bHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDIyOSwxMiArMTAyMjks
MTIgQEAKIAkJNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nsb3NlRXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNjdEOTFBRTZCNUU0MDBEMDZDNUEgLyogQ29u
dGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUZCNjdEQTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lv
blN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudEV4
dGVuc2lvblN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTIxMzFF
NUExQzRGMTU2MTAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTIxMzFFNUEx
QzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjExQ0IyRkRGNjAw
NzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMjFDQjJGREY2MDA3NTk3NEQg
LyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyQjBENEJEMUM1N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1WaWV3Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMEQ0QzEx
QzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkQxNUUzRjRERjAwNjkwQjA1IC8q
IERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyQjZDOUJFMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkYxNUUzRjRERjAw
NjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTAyNDQsOSArMTAyNDQsOSBAQAogCQk1MkNDQTlFMTE1RTNGNjJDMDA1M0M3N0YgLyog
SlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkQ1QTE4RDFDNTQ1OTAzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5h
Z2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxs
c2NyZWVuTGF5ZXJNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQ1
QTE4RTFDNTQ1OTAzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBNDFDNTc0ODg5MDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQTUxQzU3NDg4OTAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkUyQ0FGQjE5RkYwMjA3MDAxRUVCNEYg
LyogTWVkaWFQcm9kdWNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YVByb2R1Y2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjEwODYyMTYyQjZE
ODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1peGVkQ29udGVudENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50
Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaXhlZENvbnRlbnRD
aGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDczNywxNiArMTQ3Mzcs
MTYgQEAKIAkJQ0RBMDdGQkMxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtU2xlZXBMaXN0ZW5lci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEwN0ZCRjE4RTBBMjJCMDA0Njk5RkEg
LyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNEQTA3RkMwMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3Rl
bmVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVNsZWVwTGlz
dGVuZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMDgxQ0JEOTlG
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNE
QTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
Q0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMDgxQ0JE
OTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNr
U2Vzc2lvbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTBDMUNC
RDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwRDFD
QkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTQxQ0JEQTU2QzAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0RBMjlBMkMxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBVlBsYXllckNvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMjlBMkQxQ0JGNzNGQzAw
OTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkFWUGxheWVyQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RB
MjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTc5ODIx
MTcwQTIyREMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9T
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTc5ODIzMTcwQTI1ODMw
MEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQXVkaW9TZXNzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBNzk4MjUxNzBBMjc5MDAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbklPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MTM3LDE0ICsxOTEzNywxNCBAQAogCQkJCUUxQTMx
NjJDMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gKi8s
CiAJCQkJQ0Q1ODk2RTAxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyLmggKi8sCiAJCQkJQ0Q1ODk2REYxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyLm1tICovLAotCQkJCUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLywKLQkJCQlDREEyOUExNDFDQkRBNTZDMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovLAorCQkJCUNEQTI5
QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLywK
KwkJCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tICovLAogCQkJCUNEODIwMzA2MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmggKi8sCiAJCQkJQ0Q4MjAzMDcxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCiAJCQkJQ0Q4MjAzMDgxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLywKIAkJ
CQlDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlci5tbSAqLywKLQkJCQk1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi8sCi0JCQkJNTIxMzFFNUExQzRGMTU2MTAwMzNG
ODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLywKKwkJCQk1MkIwRDRD
MTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi8sCisJ
CQkJNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbSAqLywKIAkJCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0
aW9uLmggKi8sCiAJCQkJQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1h
dGlvbi5tbSAqLywKIAkJCQk5MzgwRjQ3NzA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFjLm1t
ICovLApAQCAtMjExNDksMTQgKzIxMTQ5LDE0IEBACiAJCQkJRkUwRDg0RUExMDQ4NDM2RTAwMUEx
NzlFIC8qIFdlYkV2ZW50Lm1tICovLAogCQkJCUY0ODIyMzBGMUUzODY5QjgwMDY2RkM3OSAvKiBX
ZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggKi8sCiAJCQkJRjQ4MjIzMEUxRTM4NjlCODAwNjZG
Qzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0gKi8sCi0JCQkJQ0RBMjlBMkUxQ0JG
NzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8sCi0J
CQkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0Lm1tICovLAorCQkJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oICovLAorCQkJCUNEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQkxRjg3NTZCMTFFMjJC
RUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJ
MUY4NzU2QjAxRTIyQkVFRjAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVu
dC5tbSAqLywKIAkJCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckFWS2l0LmggKi8sCiAJCQkJM0Y0MkIzMUMxODgxMTkxQjAwMjc4QUFDIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLywKLQkJCQkzRkJDNEFGMjE4
OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLywK
LQkJCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW0gKi8sCisJCQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8sCisJCQkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovLAogCQkJCUU0NTM5MDNDMEVB
RkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGlvczsK
QEAgLTIxMjAzLDE0ICsyMTIwMywxNCBAQAogCQkJCUNEQzk3OUYzMUM0OThDMDkwMERCNTBENCAv
KiBXZWJDb3JlTlNFcnJvckV4dHJhcy5oICovLAogCQkJCUNEQzk3OUYyMUM0OThDMDkwMERCNTBE
NCAvKiBXZWJDb3JlTlNFcnJvckV4dHJhcy5tbSAqLywKIAkJCQk1REZFQkFCNjE4NTkyQjZEMDBD
NzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8sCi0JCQkJQ0RBMjlBMDgxQ0JEOTlGNDAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovLAotCQkJCUNEQTI5QTBB
MUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovLAotCQkJCUNE
QTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oICovLAotCQkJCUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSAqLywKLQkJCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NF
NTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLywKLQkJCQk1MkQ1QTFB
NDFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywKLQkJCQk1
MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaCAqLywKLQkJCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi8sCisJCQkJQ0RBMjlBMDgxQ0JEOTlGNDAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovLAorCQkJCUNEQTI5QTBBMUNCRDlB
NzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovLAorCQkJCUNEQTI5QTBEMUNC
RDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oICovLAor
CQkJCUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbSAqLywKKwkJCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLywKKwkJCQk1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMg
LyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywKKwkJCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0
QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLywKKwkJCQk1MkQ1QTFB
NjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0g
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTMwMTE2LDExICszMDExNiwxMSBAQAogCQkJCTA3MDlENzkzMUFFNTU1N0UwMDRFNDJGOCAv
KiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUEzMTYy
RDEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDU4OTZFMjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTA5MUNCRDk5RjQwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUNE
QTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMEIx
Q0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAq
LywKLQkJCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTA5MUNCRDk5RjQwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUNE
QTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMEIxQ0JEOUE3
NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
REEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQUYzNDgxMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJT
Y3JpcHRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQUYzNDgzMEE2QzQwNTIwMEFCRTA2
RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQx
QjBEN0UyQjgyMDA3QzM5ODMgLyogV2ViU2NyaXB0T2JqZWN0UHJvdG9jb2wuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzAxMzcsMTQgKzMwMTM3LDE0IEBACiAJCQkJMUY4NzU2QjIxRTIyQzMzNTAwNDJD
NDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzFERUE0NTYxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJh
Y2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJCMEQ0QzAxQzU3RkQ2NjAwNzdDRTUz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBBMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjQyQjMxRDE4
ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxs
c2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJM0ZCQzRBRjQx
ODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4g
SGVhZGVycyAqLywKLQkJCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFBNzFDNTc0ODlE
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8q
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkIw
RDRDMjFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MkQ1QTFBNzFDNTc0ODlEMDBERTM0QTMgLyogVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjEyMTcxRjYxNkE4Q0YwQjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVEMjFBODAzMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIxMEI2OTgwMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMzgzNCw5ICszMzgzNCw5IEBACiAJCQkJMDcwOUQ3OTIxQUU1NTU3
RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTFBMzE2MkUxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4
dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENTg5NkUxMUNEMkIxNTEwMEIzQkNDOCAvKiBX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTMw
MUNCRjc0RDQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBp
biBTb3VyY2VzICovLAotCQkJCUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUEwRTFDQkQ5
Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4g
U291cmNlcyAqLywKKwkJCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUExNjFDQkRBNTZD
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBRjM0ODIwQTZDNDA1MjAwQUJFMDZF
IC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3QUFCRDFBMTRGQTA5
RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdBQUJEMUQx
NEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMzg1Miw5ICszMzg1Miw5IEBACiAJCQkJQ0Q4MjAzMEIxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkzRjQyQjMx
RTE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQkzRkJD
NEFGMzE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
bW0gaW4gU291cmNlcyAqLywKLQkJCQk1MjEzMUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTJENUExQTkx
QzU3NDhBOTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTIxMzFFNUIxQzRG
MTU3NjAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIwMDAw
NTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAyMTNF
Q0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjEw
QjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDI2NjAyNjky
OGYzNjViM2NmNjg4NTNjMzU0OGMwODQwNGIxYmZiMDUuLjBkNDYxMWM1MDk2MmViODgxMGEyMWMy
NGY5ZGNlOTFmMjMzNmFiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcApAQCAtMTE3LDcgKzExNyw3IEBACiAKICNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAi
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQpAQCAt
MTU2LDcgKzE1Niw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgi
CiAjZW5kaWYKIAogI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19JRihkb2N1bWVudCgpLnBhZ2UoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+aXNBbHdh
eXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBIVE1MTWVkaWFFbGVtZW50OjoiIGZt
dCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1l
bnQuY3BwCmluZGV4IDM2Y2Y0OTdiOTliODk3YThhYWRkZWFmNjI2YjlhYWIzOGZmYzJiYTEuLjY1
ODk1ZjkzODk3ZjA2ODQxNDdiOWQwY2NmMTU3MGNiNzk2ODdjYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAjaWYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KQotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSAiVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMwOWU3OTc0NGI0OTg5YTNhN2I5MzU3MGFhZWI3ZTgyZWIwN2U5
MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFRpbWVSYW5nZXM7CisKK2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKCkg
eyB9OworICAgIHZpcnR1YWwgdm9pZCByZXNldE1lZGlhU3RhdGUoKSA9IDA7Cit9OworCit9CisK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2ZDUzZjBmNzc2OTM3
NzVhZDQ4NjFjMjIzMDRhYzkzODAwOWM4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbC5oCkBAIC0wLDAgKzEsMTA3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKwor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaW1lUmFuZ2Vz
OworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ7CitzdHJ1Y3QgTWVkaWFTZWxl
Y3Rpb25PcHRpb247CisKK2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIHsgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQm
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGF1c2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVu
ZFNjcnViYmluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGlt
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmRTY2Fu
bmluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50
NjRfdCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRp
b24odWludDY0X3QgaW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGljdHVyZUlu
UGljdHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlTXV0ZWQoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wpID0gMDsKKworICAgIGVudW0gRXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUgeyBUYXJnZXRUeXBlTm9uZSwgVGFyZ2V0VHlwZUFpclBsYXksIFRhcmdl
dFR5cGVUVk91dCB9OworCisgICAgdmlydHVhbCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRv
dWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUGxheWlu
ZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBmbG9hdCBwbGF5YmFja1JhdGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBSZWY8VGltZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBkb3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRl
eCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4g
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVp
bnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERl
dmljZU5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc011dGVkKCkgY29u
c3QgPSAwOworfTsKKworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50KCkgeyB9Owor
ICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKiBjdXJyZW50VGltZSAqLywgZG91Ymxl
IC8qIGFuY2hvclRpbWUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBidWZmZXJlZFRpbWVDaGFu
Z2VkKGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFu
Z2VkKGRvdWJsZSAvKiBwbGF5YmFja1N0YXJ0ZWRUaW1lICovKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcmF0ZUNoYW5nZWQoYm9vbCAvKiBpc1BsYXlpbmcgKi8sIGZsb2F0IC8qIHBsYXliYWNrUmF0
ZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBU
aW1lUmFuZ2VzJiwgZG91YmxlIC8qIGxhc3RNb2RpZmllZCAqLywgZG91YmxlIC8qIGxpdmVJbnRl
cnZhbCAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQo
Ym9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1
aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4ICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9
CisgICAgdmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0
X3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdl
ZChib29sIC8qIGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICov
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFu
Z2VkKGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgeyB9Cit9
OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hMzAzOWM1NTViODRhNzJhNjU5ODYxNTg0NjdhNzM0OWYxNjMyMWNh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJFdmVu
dExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9UcmFjazsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7
CitjbGFzcyBUZXh0VHJhY2s7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisK
K2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50IGZpbmFsIDogcHVibGlj
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50KCkpOworICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21lZGlhRWxlbWVu
dC5nZXQoKTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVFdmVudChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqKSBmaW5hbDsKKyAgICB2
b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqPih0aGlzKSA9PSAm
cmhzOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50
KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBwbGF5KCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwYXVzZSgpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBiZWdpblNjcnViYmluZygpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5kU2NydWJiaW5nKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZh
c3RTZWVrKGRvdWJsZSB0aW1lKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNj
YW5uaW5nQmFja3dhcmQoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjYW5u
aW5nKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0
aW9uKHVpbnQ2NF90IGluZGV4KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0b2dnbGVNdXRlZCgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0TXV0ZWQoYm9vbCkgZmluYWw7CisKKyAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBmaW5h
bDsKKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgYnVm
ZmVyZWRUaW1lKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBmbG9hdCBwbGF5YmFja1JhdGUoKSBjb25zdCBmaW5hbDsKKyAgICBSZWY8VGltZVJhbmdl
cz4gc2Vla2FibGVSYW5nZXMoKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgc2Vla2FibGVUaW1l
UmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBsaXZlVXBk
YXRlSW50ZXJ2YWwoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSgp
IGNvbnN0IGZpbmFsOworICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICB1aW50NjRfdCBhdWRpb01lZGlh
U2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsOworICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsOworICAgIHVp
bnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbDsKKyAgICBib29s
IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgZmluYWw7CisgICAgRXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdCBmaW5hbDsK
KyAgICBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc011dGVkKCkgY29uc3QgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICBX
RUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpOworCitw
cml2YXRlOgorICAgIHZvaWQgcHJvZ3Jlc3NFdmVudFRpbWVyRmlyZWQoKTsKKyAgICBzdGF0aWMg
Y29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2ZWRFdmVudE5hbWVzKCk7Cisg
ICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFsbCgpOworCisgICAgUmVmUHRy
PEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OworICAgIGJvb2wgbV9pc0xpc3Rlbmlu
ZyB7IGZhbHNlIH07CisgICAgSGFzaFNldDxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+
IG1fY2xpZW50czsKKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNr
c0Zvck1lbnU7CisgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zv
ck1lbnU7CisKKyAgICBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0OworICAgIHZv
aWQgdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7CisgICAgdm9pZCB1cGRhdGVNZWRpYVNl
bGVjdGlvbkluZGljZXMoKTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZjg1ZGE5MzI0MWZhYmM0MGVmYTkwMWI0MjBhMDg0
ZWYwZjBiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpAQCAtMCwwICsxLDUzNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJB
dWRpb1RyYWNrTGlzdC5oIgorI2ltcG9ydCAiRXZlbnQuaCIKKyNpbXBvcnQgIkV2ZW50TGlzdGVu
ZXIuaCIKKyNpbXBvcnQgIkV2ZW50TmFtZXMuaCIKKyNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCisj
aW1wb3J0ICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0
ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIK
KyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiVGV4dFRy
YWNrTGlzdC5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9D
b3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudCgpCisgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVu
ZXJUeXBlKQoreworfQorCitXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6fldl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKK3sKK30KKwordm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWxlbWVudCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFF
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9p
c0xpc3RlbmluZykgeworICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZl
bnROYW1lcygpKQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+YXVk
aW9UcmFja3MoKS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwg
KnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5yZW1v
dmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsK
KyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisgICAgaWYgKG1fbWVkaWFFbGVt
ZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVzZXRQbGF5YmFja1Nlc3Npb25TdGF0ZSgp
OworCisgICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisKKyAgICBpZiAobV9tZWRp
YUVsZW1lbnQpIHsKKyAgICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50
TmFtZXMoKSkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2
ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJh
Y2tzKCkuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBm
YWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkuYWRkRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7CisgICAgICAgIG1f
aXNMaXN0ZW5pbmcgPSB0cnVlOworICAgIH0KKworICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVu
dE5hbWVBbGwoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3Jl
OjpFdmVudCogZXZlbnQpCit7CisgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LT50eXBlKCkp
OworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVG
b3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKK3sKKyAgICBp
ZiAobV9jbGllbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBhbGwg
PSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8
IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgeworICAgICAg
ICBkb3VibGUgZHVyYXRpb24gPSB0aGlzLT5kdXJhdGlvbigpOworICAgICAgICBmb3IgKGF1dG8g
Y2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQo
ZHVyYXRpb24pOworICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWlu
RmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHBy
b3h5IGZvciBpdC4KKyAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0g
YmVjb21lcyByZWFkeSB0byBwbGF5LgorICAgICAgICBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSA9
IHRoaXMtPmNhblBsYXlGYXN0UmV2ZXJzZSgpOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDog
bV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2Vk
KGNhblBsYXlGYXN0UmV2ZXJzZSk7CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBl
dmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBsYXlFdmVudAorICAgICAgICB8fCBldmVudE5hbWUg
PT0gZXZlbnROYW1lcygpLnBsYXlpbmdFdmVudCkgeworICAgICAgICBmb3IgKGF1dG8gY2xpZW50
IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lQ2hh
bmdlZChwbGF5YmFja1N0YXJ0ZWRUaW1lKCkpOworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAg
ICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50CisgICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheUV2ZW50CisgICAgICAgIHx8IGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50KSB7CisgICAgICAgIGJvb2wgaXNQbGF5aW5n
ID0gdGhpcy0+aXNQbGF5aW5nKCk7CisgICAgICAgIGZsb2F0IHBsYXliYWNrUmF0ZSA9IHRoaXMt
PnBsYXliYWNrUmF0ZSgpOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQor
ICAgICAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7
CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLnRpbWV1cGRhdGVFdmVudCkgeworICAgICAgICBhdXRvIGN1cnJlbnRUaW1lID0gdGhpcy0+
Y3VycmVudFRpbWUoKTsKKyAgICAgICAgYXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDog
bV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVu
dFRpbWUsIGFuY2hvclRpbWUpOworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZl
bnROYW1lID09IGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50KSB7CisgICAgICAgIGF1dG8gYnVm
ZmVyZWRUaW1lID0gdGhpcy0+YnVmZmVyZWRUaW1lKCk7CisgICAgICAgIGF1dG8gc2Vla2FibGVS
YW5nZXMgPSB0aGlzLT5zZWVrYWJsZVJhbmdlcygpOworICAgICAgICBhdXRvIHNlZWthYmxlVGlt
ZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSB0aGlzLT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9k
aWZpZWRUaW1lKCk7CisgICAgICAgIGF1dG8gbGl2ZVVwZGF0ZUludGVydmFsID0gdGhpcy0+bGl2
ZVVwZGF0ZUludGVydmFsKCk7CisgICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMp
IHsKKyAgICAgICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUp
OworICAgICAgICAgICAgY2xpZW50LT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQoc2Vla2FibGVSYW5n
ZXMsIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZh
bCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFt
ZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0g
ZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCisgICAgICAgIHVwZGF0ZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucygpOworCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZl
bnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZl
bnQpIHsKKyAgICAgICAgYm9vbCBlbmFibGVkID0gZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKTsK
KyAgICAgICAgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSA9IGV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlKCk7CisgICAgICAgIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1l
ID0gZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKTsKKworICAgICAgICBib29s
IHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gdGhpcy0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKTsKKworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7
CisgICAgICAgICAgICBjbGllbnQtPmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHRh
cmdldFR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOworICAgICAgICAgICAgY2xpZW50LT53aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3QgY2FsbCB1cGRhdGVN
ZWRpYVNlbGVjdGlvbkluZGljZXMoKSBpbiB0aGUgYWxsIGNhc2UsIHNpbmNlCisgICAgLy8gdXBk
YXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgc2VsZWN0aW9u
IGluZGljZXMuCisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQp
CisgICAgICAgIHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpOworCisgICAgaWYgKGFsbAor
ICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50KSB7
CisgICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGll
bnQtPm11dGVkQ2hhbmdlZChpc011dGVkKCkpOworICAgIH0KK30KK3ZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGll
bnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQorCit2b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZj
bGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOworfQorCit2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkKK3sKKyAgICBpZiAobV9tZWRp
YUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5wbGF5KCk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKK3sKKyAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5wYXVzZSgpOworfQorCit2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5U3RhdGUoKQor
eworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRvZ2ds
ZVBsYXlTdGF0ZSgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpiZWdpblNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAg
ICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKK30KKwordm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKK3sKKyAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY3J1YmJpbmcoKTsKK30K
Kwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla1RvVGltZShk
b3VibGUgdGltZSkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1f
bWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7Cit9
CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7
Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21l
ZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3
YXJkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5k
U2Nhbm5pbmcoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmVuZFNjYW5uaW5nKCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgc2VsZWN0ZWRBdWRp
b0luZGV4KQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgp
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudVtpXS0+c2V0RW5h
YmxlZChpID09IHNlbGVjdGVkQXVkaW9JbmRleCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBp
bmRleCkKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBUZXh0VHJhY2sqIHRleHRUcmFjazsKKyAgICBpZiAoaW5kZXggPCBtX2xlZ2libGVUcmFja3NG
b3JNZW51LnNpemUoKSkKKyAgICAgICAgdGV4dFRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVu
dVtzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KV0uZ2V0KCk7CisgICAgZWxzZQorICAgICAgICB0
ZXh0VHJhY2sgPSBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOworCisgICAgbV9tZWRp
YUVsZW1lbnQtPnNldFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjayk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUo
KQoreworICAgIGlmIChtX21lZGlhRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSA9PSBNZWRpYVBs
YXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKKyAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgZWxzZQorICAgICAgICBtX21l
ZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlTXV0ZWQoKQoreworICAgIHNldE11dGVkKCFpc011dGVk
KCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRN
dXRlZChib29sIG11dGVkKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9t
ZWRpYUVsZW1lbnQtPnNldE11dGVkKG11dGVkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkKK3sKKyAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbWVk
aWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
LT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOworICAgIGF1dG8mIHRleHRUcmFja3MgPSBt
X21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpOworICAgIGlmICh0ZXh0VHJhY2tzLmxlbmd0aCgp
KQorICAgICAgICBtX2xlZ2libGVUcmFja3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNv
cnRlZFRyYWNrTGlzdEZvck1lbnUoJnRleHRUcmFja3MpOworICAgIGVsc2UKKyAgICAgICAgbV9s
ZWdpYmxlVHJhY2tzRm9yTWVudS5jbGVhcigpOworCisgICAgYXV0byYgYXVkaW9UcmFja3MgPSBt
X21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKTsKKyAgICBpZiAoYXVkaW9UcmFja3MubGVuZ3Ro
KCkgPiAxKQorICAgICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNl
cy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZhdWRpb1RyYWNrcyk7CisgICAgZWxzZQorICAgICAg
ICBtX2F1ZGlvVHJhY2tzRm9yTWVudS5jbGVhcigpOworCisgICAgYXV0byBhdWRpb09wdGlvbnMg
PSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpOworICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1
ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7CisgICAgYXV0byBsZWdpYmxlT3B0aW9ucyA9IGxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKKyAgICBhdXRvIGxlZ2libGVJbmRleCA9IGxlZ2li
bGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsKKworICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVu
dHMpIHsKKyAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
YXVkaW9PcHRpb25zLCBhdWRpb0luZGV4KTsKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChsZWdpYmxlT3B0aW9ucywgbGVnaWJsZUluZGV4KTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpCit7CisgICAgYXV0byBhdWRpb0luZGV4ID0gYXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXgoKTsKKyAgICBhdXRvIGxlZ2libGVJbmRleCA9IGxlZ2libGVNZWRp
YVNlbGVjdGVkSW5kZXgoKTsKKworICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsK
KyAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGF1ZGlvSW5k
ZXgpOworICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChs
ZWdpYmxlSW5kZXgpOworICAgIH0KK30KKworZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX21lZGlhRWxl
bWVudC0+cGxheWJhY2tTdGFydGVkVGltZSgpOworfQorCitjb25zdCBWZWN0b3I8QXRvbWljU3Ry
aW5nPiYgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6Om9ic2VydmVkRXZlbnRO
YW1lcygpCit7CisgICAgLy8gRklYTUUoMTU3NDUyKTogUmVtb3ZlIHRoZSByaWdodC1oYW5kIGNv
bnN0cnVjdG9yIG5vdGF0aW9uIG9uY2UgTmV2ZXJEZXN0cm95ZWQgc3VwcG9ydHMgaW5pdGlhbGl6
ZXJfbGlzdHMuCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxBdG9taWNTdHJpbmc+
PiBuYW1lcyA9IFZlY3RvcjxBdG9taWNTdHJpbmc+KHsKKyAgICAgICAgZXZlbnROYW1lcygpLmR1
cmF0aW9uY2hhbmdlRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50LAorICAg
ICAgICBldmVudE5hbWVzKCkucGxheUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucmF0ZWNo
YW5nZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50LAorICAgICAg
ICBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLmFkZHRy
YWNrRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2ZW50LAorICAgICAg
ICBldmVudE5hbWVzKCkudm9sdW1lY2hhbmdlRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS53
ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50LAorICAgIH0p
OworICAgIHJldHVybiBuYW1lcy5nZXQoKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiAgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZXZlbnROYW1lQWxsKCJhbGxFdmVu
dHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICByZXR1cm4gZXZl
bnROYW1lQWxsOworfQorCitkb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnN1cHBvcnRzU2Vla2luZygp
ID8gbV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpOworfQorCitkb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQgPyBtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSA6IDA7Cit9CisKK2RvdWJsZSBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YnVmZmVyZWRUaW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWF4QnVmZmVyZWRU
aW1lKCkgOiAwOworfQorCitib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Ojppc1BsYXlpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/ICFtX21l
ZGlhRWxlbWVudC0+cGF1c2VkKCkgOiBmYWxzZTsKK30KKworZmxvYXQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUmF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrUmF0ZSgpIDogMDsKK30K
KworUmVmPFRpbWVSYW5nZXM+IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpz
ZWVrYWJsZVJhbmdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9t
ZWRpYUVsZW1lbnQtPnNlZWthYmxlKCkgOiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKK30KKworZG91
YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5n
ZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQg
PyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDog
MDsKK30KKworZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsaXZl
VXBkYXRlSW50ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1f
bWVkaWFFbGVtZW50LT5saXZlVXBkYXRlSW50ZXJ2YWwoKSA6IDA7Cit9CisgICAgCitib29sIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBj
b25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5taW5G
YXN0UmV2ZXJzZVJhdGUoKSA8IDAuMCA6IGZhbHNlOworfQorCitWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiBhdWRpb09wdGlvbnM7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlh
RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBhdWRpb09wdGlvbnM7
CisKKyAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CisKKyAgICBhdWRpb09w
dGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCkp
OworICAgIGZvciAoYXV0byYgYXVkaW9UcmFjayA6IG1fYXVkaW9UcmFja3NGb3JNZW51KQorICAg
ICAgICBhdWRpb09wdGlvbnMudW5jaGVja2VkQXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRp
YVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpKTsKKworICAgIHJldHVy
biBhdWRpb09wdGlvbnM7Cit9CisKK3VpbnQ2NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit7CisgICAgZm9yIChz
aXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICBpZiAobV9hdWRpb1RyYWNrc0Zvck1lbnVbaW5kZXhdLT5lbmFibGVk
KCkpCisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7Cit9CisKK1ZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gbGVnaWJsZU9wdGlvbnM7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21l
ZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBsZWdpYmxlT3B0
aW9uczsKKworICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5k
b2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKworICAgIGZv
ciAoYXV0byYgdHJhY2sgOiBtX2xlZ2libGVUcmFja3NGb3JNZW51KQorICAgICAgICBsZWdpYmxl
T3B0aW9ucy5hcHBlbmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9y
VHJhY2sodHJhY2suZ2V0KCkpKTsKKworICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKK30KKwor
dWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRp
YVNlbGVjdGVkSW5kZXgoKSBjb25zdAoreworICAgIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXggPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgdWludDY0X3Qgb2ZmSW5k
ZXggPSAwOworICAgIGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7CisKKyAgICBh
dXRvIGhvc3QgPSBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xz
SG9zdCgpIDogbnVsbHB0cjsKKworICAgIGlmICghaG9zdCkKKyAgICAgICAgcmV0dXJuIHNlbGVj
dGVkSW5kZXg7CisKKyAgICBBdG9taWNTdHJpbmcgZGlzcGxheU1vZGUgPSBob3N0LT5jYXB0aW9u
RGlzcGxheU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBob3N0LT5jYXB0aW9uTWVu
dU9mZkl0ZW0oKTsKKyAgICBUZXh0VHJhY2sqIGF1dG9tYXRpY0l0ZW0gPSBob3N0LT5jYXB0aW9u
TWVudUF1dG9tYXRpY0l0ZW0oKTsKKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBtX2xlZ2libGVUcmFja3NGb3JNZW51LnNpemUoKTsgaW5kZXgrKykgeworICAgICAgICBhdXRv
JiB0cmFjayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnVbaW5kZXhdOworICAgICAgICBpZiAodHJh
Y2sgPT0gb2ZmSXRlbSkKKyAgICAgICAgICAgIG9mZkluZGV4ID0gaW5kZXg7CisKKyAgICAgICAg
aWYgKHRyYWNrID09IGF1dG9tYXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9s
c0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9
IGluZGV4OworICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChkaXNwbGF5TW9kZSAhPSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0
b21hdGljS2V5d29yZCgpICYmIHRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93
aW5nKSB7CisgICAgICAgICAgICBzZWxlY3RlZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICB0
cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KG9mZkl0ZW0gJiYgIXRyYWNrTWVudUl0ZW1TZWxlY3RlZCAmJiBkaXNwbGF5TW9kZSA9PSBNZWRp
YUNvbnRyb2xzSG9zdDo6Zm9yY2VkT25seUtleXdvcmQoKSkKKyAgICAgICAgc2VsZWN0ZWRJbmRl
eCA9IG9mZkluZGV4OworCisgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7Cit9CisKK2Jvb2wgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQt
PndlYmtpdEN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKTsKK30KKworV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29u
dHJvbHNIb3N0KCkpCisgICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsKKworICAgIHN3aXRj
aCAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlw
ZSgpKSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsKKyAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpE
ZXZpY2VUeXBlOjpOb25lOgorICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7CisgICAgY2Fz
ZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6QWlycGxheToKKyAgICAgICAgcmV0dXJu
IFRhcmdldFR5cGVBaXJQbGF5OworICAgIGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5
cGU6OlR2b3V0OgorICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZVRWT3V0OworICAgIH0KK30KKwor
U3RyaW5nIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50
ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQorICAgICAgICByZXR1cm4g
bV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlzcGxh
eU5hbWUoKTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKworYm9vbCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQo
KSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+
bWVkaWFTZXNzaW9uKCkud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKm1fbWVkaWFFbGVt
ZW50KTsKK30KKworYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNN
dXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1l
bnQtPm11dGVkKCkgOiBmYWxzZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZmMzJiNDM5MzVkMmIyODFkODE2M2ZiMTc2NThhMWM3Y2U0NGEz
NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcigpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxs
c2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKCkgPSAwOworfTsKKworfQorCisjZW5kaWYKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGUxYWU2ODY0YWVlYzJlZGY5Njg3YzQzOTMyOGJlMDU2NDU5Mjk4NQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1vZGVsLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIK
KyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50OworCitjbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jik9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpID0gMDsKKyAgICBlbnVtIFZpZGVvR3Jh
dml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsIH07CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVu
TW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSA9
IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVmlkZW8oKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNp
emUmKSA9IDA7Cit9OworCitXRUJDT1JFX0VYUE9SVCBib29sIHN1cHBvcnRzUGljdHVyZUluUGlj
dHVyZSgpOworICAgIAorfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzJlMzljMjA0NjYyYjVjNGQ1ZDRmZjcwYTQ3NzUxOWFhOGM5OWQ3NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXVkaW9UcmFjazsKK2NsYXNz
IEhUTUxWaWRlb0VsZW1lbnQ7CitjbGFzcyBUZXh0VHJhY2s7CitjbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDsKKworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVu
dExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKSk7CisgICAgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZp
ZGVvRWxlbWVudCopOworICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50LmdldCgpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIgPSBbXSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgd2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlciA9IFtdIHsgfSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29y
ZTo6RXZlbnQqKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBX
VEY6OkF0b21pY1N0cmluZyYpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3Rl
bmVyJiByaHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNv
cmU6OkV2ZW50TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzOyB9CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRl
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpIG92
ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CisgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc1Zp
ZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQorCisKK3Byb3RlY3Rl
ZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dCgpOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0SGFzVmlkZW8oYm9vbCk7CisgICAgdm9pZCBz
ZXRWaWRlb0RpbWVuc2lvbnMoY29uc3QgRmxvYXRTaXplJik7CisKKyAgICBzdGF0aWMgY29uc3Qg
VmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2ZWRFdmVudE5hbWVzKCk7CisgICAgY29u
c3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFsbCgpOworCisgICAgUmVmUHRyPEhUTUxW
aWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVy
PiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyOworICAgIGJvb2wgbV9pc0xpc3RlbmluZyB7IGZhbHNl
IH07CisgICAgSGFzaFNldDxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1fY2xpZW50
czsKKyAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OworICAgIEZsb2F0U2l6ZSBtX3ZpZGVv
RGltZW5zaW9uczsKKyAgICBGbG9hdFJlY3QgbV92aWRlb0ZyYW1lOworICAgIFZlY3RvcjxSZWZQ
dHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudTsKKyAgICBWZWN0b3I8UmVmUHRy
PEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVudTsKK307CisKK30KKworI2VuZGlmCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2UxZmIzZTBkMzBh
MTBiYWNhNTE4YTRkOWIzZTEwNTcxYjQwZDM5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1t
CkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisjaW1wb3J0ICJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgorCisjaW1wb3J0ICJET01XaW5kb3cu
aCIKKyNpbXBvcnQgIkhpc3RvcnkuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1l
ZGlhQ29udHJvbHNIb3N0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZl
bnRMaXN0ZW5lclR5cGUpCit7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQoreworfQorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRN
TFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQoreworICAgIGlmIChtX3ZpZGVvRWxlbWVudCA9
PSB2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCAmJiBtX3ZpZGVvRWxlbWVudC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKKyAgICAgICAgbV92
aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOworCisgICAgaWYg
KG1fdmlkZW9FbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKKyAgICAgICAgZm9yIChhdXRvJiBl
dmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVt
ZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKKyAgICB9
CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisgICAgbV92aWRlb0VsZW1lbnQgPSB2aWRl
b0VsZW1lbnQ7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAgIG1fdmlkZW9F
bGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKKyAgICAg
ICAgbV9pc0xpc3RlbmluZyA9IHRydWU7CisgICAgfQorCisgICAgdXBkYXRlRm9yRXZlbnROYW1l
KGV2ZW50TmFtZUFsbCgpKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkNvcmU6OkV2ZW50KiBldmVudCkKK3sKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQtPnR5
cGUoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVw
ZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQorewor
ICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ym9vbCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisg
ICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpIHsKKyAgICAg
ICAgc2V0SGFzVmlkZW8obV92aWRlb0VsZW1lbnQpOworICAgICAgICBzZXRWaWRlb0RpbWVuc2lv
bnMobV92aWRlb0VsZW1lbnQgPyBGbG9hdFNpemUobV92aWRlb0VsZW1lbnQtPnZpZGVvV2lkdGgo
KSwgbV92aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpIDogRmxvYXRTaXplKCkpOworICAgIH0K
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9G
dWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciogdmlkZW9MYXllciwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgPT0gdmlkZW9MYXllcikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2
aWRlb0xheWVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXll
ciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLCAwKV07CisjZWxzZQorICAgIFttX3ZpZGVv
RnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAuNSwgMC41KV07Cisj
ZW5kaWYKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3VuZHM6bV92aWRlb0ZyYW1l
XTsKKyAgICAKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50KSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3ZpZGVvRWxlbWVudC0+
c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURjo6RnVuY3Rp
b248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghbV92aWRlb0VsZW1l
bnQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fdmlkZW9FbGVtZW50LT53YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQor
eworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1v
ZGUoKSAhPSBtb2RlKQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0RnVsbHNjcmVlbk1vZGUo
bW9kZSk7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgZmluaXNoZWRXaXRoTWVkaWEgJiYg
bW9kZSA9PSBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSkgeworICAg
ICAgICBpZiAobV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIChET01XaW5kb3cqIHdpbmRvdyA9IG1fdmlkZW9FbGVtZW50LT5kb2N1
bWVudCgpLmRvbVdpbmRvdygpKSB7CisgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnkqIGhpc3Rv
cnkgPSB3aW5kb3ctPmhpc3RvcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS0+YmFj
aygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0
IHJlY3QpCit7CisgICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3Jl
ZW5MYXllciBzZXRCb3VuZHM6Q0dSZWN0KHJlY3QpXTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQp
CisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9M
YXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5
KQoreworICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQ
bGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jhdml0eSA9PSBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAgICAgICB2aWRlb0dy
YXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgIGVsc2UgaWYgKGdy
YXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6
ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgICAgICB2aWRlb0dyYXZpdHkgPSBN
ZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAgICBlbHNlCisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIG1fdmlkZW9FbGVtZW50LT5zZXRW
aWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Cit9CisKK2NvbnN0IFZlY3RvcjxB
dG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2
ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21p
Y1N0cmluZz4+IHNFdmVudE5hbWVzOworCisgICAgaWYgKCFzRXZlbnROYW1lcy5nZXQoKS5zaXpl
KCkpCisgICAgICAgIHNFdmVudE5hbWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkucmVzaXpl
RXZlbnQpOworICAgIHJldHVybiBzRXZlbnROYW1lcy5nZXQoKTsKK30KKworY29uc3QgQXRvbWlj
U3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxs
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1l
QWxsID0gImFsbEV2ZW50cyI7CisgICAgcmV0dXJuIHNFdmVudE5hbWVBbGw7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2Ny
ZWVuTW9kZSkKK3sKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVt
ZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENsaWVudChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnRz
LmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZW1vdmVDbGllbnQoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGll
bnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwor
fQorCitib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zpc2libGUo
KSBjb25zdAoreworICAgIGlmICghbV92aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChQYWdlKiBwYWdlID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkucGFn
ZSgpKQorICAgICAgICByZXR1cm4gcGFnZS0+aXNWaXNpYmxlKCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhh
c1ZpZGVvKGJvb2wgaGFzVmlkZW8pCit7CisgICAgaWYgKGhhc1ZpZGVvID09IG1faGFzVmlkZW8p
CisgICAgICAgIHJldHVybjsKKworICAgIG1faGFzVmlkZW8gPSBoYXNWaWRlbzsKKworICAgIGZv
ciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmhhc1ZpZGVvQ2hh
bmdlZChtX2hhc1ZpZGVvKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6c2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNp
b25zKQoreworICAgIGlmIChtX3ZpZGVvRGltZW5zaW9ucyA9PSB2aWRlb0RpbWVuc2lvbnMpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fdmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1lbnNpb25z
OworCisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+
dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX3ZpZGVvRGltZW5zaW9ucyk7Cit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA5ZTc5
NzQ0YjQ5ODlhM2E3YjkzNTcwYWFlYjdlODJlYjA3ZTkzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGltZVJhbmdlczsKLQotY2xhc3MgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0
ZSgpID0gMDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZDUzZjBmNzc2OTM3NzVhZDQ4NjFjMjIz
MDRhYzkzODAwOWM4MjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBUaW1lUmFuZ2VzOwotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQ7Ci1zdHJ1Y3QgTWVkaWFTZWxlY3Rpb25PcHRpb247Ci0KLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGll
bnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcGxheSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY3J1
YmJpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFNjcnViYmluZygpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5u
aW5nRm9yd2FyZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJk
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRTY2FubmluZygpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgdG9nZ2xlTXV0ZWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJv
b2wpID0gMDsKLQotICAgIGVudW0gRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgeyBUYXJnZXRU
eXBlTm9uZSwgVGFyZ2V0VHlwZUFpclBsYXksIFRhcmdldFR5cGVUVk91dCB9OwotCi0gICAgdmly
dHVhbCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBjdXJyZW50
VGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUGxheWluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9hdCBwbGF5
YmFja1JhdGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWY8VGltZVJhbmdlcz4gc2Vla2Fi
bGVSYW5nZXMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgc2Vla2FibGVUaW1lUmFu
Z2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBsaXZl
VXBkYXRlSW50ZXJ2YWwoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhblBsYXlGYXN0
UmV2ZXJzZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9ucygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVj
dGVkSW5kZXgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGV4dGVybmFsUGxheWJhY2tF
bmFibGVkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBpc011dGVkKCkgY29uc3QgPSAwOwotfTsKLQotY2xhc3MgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlv
bkNoYW5nZWQoZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFRpbWVDaGFuZ2Vk
KGRvdWJsZSAvKiBjdXJyZW50VGltZSAqLywgZG91YmxlIC8qIGFuY2hvclRpbWUgKi8pIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSAvKiBwbGF5YmFja1N0
YXJ0ZWRUaW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAvKiBp
c1BsYXlpbmcgKi8sIGZsb2F0IC8qIHBsYXliYWNrUmF0ZSAqLykgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIC8qIGxh
c3RNb2RpZmllZCAqLywgZG91YmxlIC8qIGxpdmVJbnRlcnZhbCAqLykgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4
ICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywg
dWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGF1ZGlv
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3Qg
U3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgeyB9Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWQ4OTUxMzc1ODg0ZDZjODFhN2YyMzg5NmQ4YzRmNjUzMzkwMzhj
NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEF1ZGlvVHJhY2s7Ci1jbGFzcyBIVE1MTWVkaWFFbGVtZW50OwotY2xhc3Mg
VGV4dFRyYWNrOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotCi1jbGFzcyBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudCgpKTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KikgZmluYWw7Ci0gICAgdm9pZCB1cGRh
dGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxheSgp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGF1c2UoKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGVuZFNjcnViYmluZygpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla1RvVGlt
ZShkb3VibGUgdGltZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmYXN0U2Vlayhk
b3VibGUgdGltZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNjYW5uaW5n
Rm9yd2FyZCgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY2FubmluZ0Jh
Y2t3YXJkKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY2FubmluZygpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50
NjRfdCBpbmRleCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE11dGVk
KGJvb2wpIGZpbmFsOwotCi0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAg
ZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGJ1ZmZlcmVkVGlt
ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBpc1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgZmxv
YXQgcGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmPFRpbWVSYW5nZXM+IHNlZWth
YmxlUmFuZ2VzKCkgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xh
c3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUgbGl2ZVVwZGF0ZUludGVy
dmFsKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCBm
aW5hbDsKLSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCkgY29uc3QgZmluYWw7Ci0gICAgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVk
SW5kZXgoKSBjb25zdCBmaW5hbDsKLSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICB1aW50NjRfdCBs
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBleHRlcm5h
bFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsOwotICAgIEV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWw7Ci0gICAgU3Ry
aW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsOwotICAg
IGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsOwotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKLQotcHJpdmF0ZToK
LSAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7Ci0gICAgc3RhdGljIGNvbnN0IFZl
Y3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0
IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKLQotICAgIFJlZlB0cjxIVE1MTWVk
aWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKLSAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxz
ZSB9OwotICAgIEhhc2hTZXQ8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVu
dHM7Ci0gICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51
OwotICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51Owot
Ci0gICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0
ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOwotICAgIHZvaWQgdXBkYXRlTWVkaWFTZWxlY3Rpb25J
bmRpY2VzKCk7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjZGU0MzNmMDM3MDIx
ZTUxYTBiNDY4NmUyZmI1MTdkN2U5N2Y3NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDUzNCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNp
bXBvcnQgIkF1ZGlvVHJhY2tMaXN0LmgiCi0jaW1wb3J0ICJFdmVudC5oIgotI2ltcG9ydCAiRXZl
bnRMaXN0ZW5lci5oIgotI2ltcG9ydCAiRXZlbnROYW1lcy5oIgotI2ltcG9ydCAiSFRNTEVsZW1l
bnQuaCIKLSNpbXBvcnQgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIK
LSNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCi0jaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9w
dGlvbi5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUGFnZUdyb3VwLmgiCi0jaW1wb3J0
ICJUZXh0VHJhY2tMaXN0LmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0IDxRdWFy
dHpDb3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZl
bnRMaXN0ZW5lclR5cGUpCi17Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Ojp+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKQotewotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCA9
PSBtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX21lZGlhRWxlbWVu
dCAmJiBtX2lzTGlzdGVuaW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2Jz
ZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1fbWVkaWFFbGVt
ZW50LT5hdWRpb1RyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5n
ZUV2ZW50LCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNr
cygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywg
ZmFsc2UpOwotICAgIH0KLSAgICBtX2lzTGlzdGVuaW5nID0gZmFsc2U7Ci0KLSAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZXNldFBsYXliYWNrU2Vzc2lv
blN0YXRlKCk7Ci0KLSAgICBtX21lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudDsKLQotICAgIGlm
IChtX21lZGlhRWxlbWVudCkgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2Vy
dmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX21lZGlhRWxlbWVudC0+
YXVkaW9UcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwg
KnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5hZGRF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAg
ICAgICAgbV9pc0xpc3RlbmluZyA9IHRydWU7Ci0gICAgfQotCi0gICAgdXBkYXRlRm9yRXZlbnRO
YW1lKGV2ZW50TmFtZUFsbCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYkNvcmU6OkV2ZW50KiBldmVudCkKLXsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQt
PnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQot
ewotICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
b29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVBbGwoKTsKLQotICAgIGlmIChhbGwKLSAg
ICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KSB7
Ci0gICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IHRoaXMtPmR1cmF0aW9uKCk7Ci0gICAgICAgIGZv
ciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPmR1cmF0aW9u
Q2hhbmdlZChkdXJhdGlvbik7Ci0gICAgICAgIC8vIFRoZXNlIGlzIG5vIHN0YW5kYXJkIGV2ZW50
IGZvciBtaW5GYXN0UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9uIGNoYW5nZSBpcyBhIHJlYXNv
bmFibGUgcHJveHkgZm9yIGl0LgotICAgICAgICAvLyBJdCBoYXBwZW5zIGV2ZXJ5IHRpbWUgYSBu
ZXcgaXRlbSBiZWNvbWVzIHJlYWR5IHRvIHBsYXkuCi0gICAgICAgIGJvb2wgY2FuUGxheUZhc3RS
ZXZlcnNlID0gdGhpcy0+Y2FuUGxheUZhc3RSZXZlcnNlKCk7Ci0gICAgICAgIGZvciAoYXV0byBj
bGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPmNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAg
ICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheUV2ZW50Ci0gICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheWluZ0V2ZW50KSB7Ci0gICAgICAgIGZvciAoYXV0
byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPnBsYXliYWNrU3RhcnRl
ZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKGFs
bAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKLSAgICAg
ICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKLSAgICAgICAgfHwgZXZl
bnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQpIHsKLSAgICAgICAgYm9vbCBp
c1BsYXlpbmcgPSB0aGlzLT5pc1BsYXlpbmcoKTsKLSAgICAgICAgZmxvYXQgcGxheWJhY2tSYXRl
ID0gdGhpcy0+cGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2Ns
aWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJh
Y2tSYXRlKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7Ci0gICAgICAgIGF1dG8gY3VycmVudFRpbWUg
PSB0aGlzLT5jdXJyZW50VGltZSgpOwotICAgICAgICBhdXRvIGFuY2hvclRpbWUgPSBbW05TUHJv
Y2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07Ci0gICAgICAgIGZvciAoYXV0byBj
bGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdl
ZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAg
ICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpIHsKLSAgICAgICAg
YXV0byBidWZmZXJlZFRpbWUgPSB0aGlzLT5idWZmZXJlZFRpbWUoKTsKLSAgICAgICAgYXV0byBz
ZWVrYWJsZVJhbmdlcyA9IHRoaXMtPnNlZWthYmxlUmFuZ2VzKCk7Ci0gICAgICAgIGF1dG8gc2Vl
a2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IHRoaXMtPnNlZWthYmxlVGltZVJhbmdl
c0xhc3RNb2RpZmllZFRpbWUoKTsKLSAgICAgICAgYXV0byBsaXZlVXBkYXRlSW50ZXJ2YWwgPSB0
aGlzLT5saXZlVXBkYXRlSW50ZXJ2YWwoKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1f
Y2xpZW50cykgewotICAgICAgICAgICAgY2xpZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZl
cmVkVGltZSk7Ci0gICAgICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChzZWVr
YWJsZVJhbmdlcywgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0
ZUludGVydmFsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwg
ZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50Ci0gICAgICAgIHx8IGV2ZW50
TmFtZSA9PSBldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCkKLSAgICAgICAgdXBkYXRlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFt
ZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2No
YW5nZWRFdmVudCkgewotICAgICAgICBib29sIGVuYWJsZWQgPSBleHRlcm5hbFBsYXliYWNrRW5h
YmxlZCgpOwotICAgICAgICBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlID0g
ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKTsKLSAgICAgICAgU3RyaW5nIGxvY2FsaXplZERl
dmljZU5hbWUgPSBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpOwotCi0gICAg
ICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgPSB0aGlzLT53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCgpOwotCi0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2Ns
aWVudHMpIHsKLSAgICAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5h
YmxlZCwgdGFyZ2V0VHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgICAgICAgICBjbGll
bnQtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh3aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBjYWxs
IHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpIGluIHRoZSBhbGwgY2FzZSwgc2luY2UKLSAg
ICAvLyB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSB3aWxsIGFsc28gdXBkYXRlIHRoZSBz
ZWxlY3Rpb24gaW5kaWNlcy4KLSAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5jaGFu
Z2VFdmVudCkKLSAgICAgICAgdXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCk7Ci0KLSAgICBp
ZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudm9sdW1lY2hhbmdl
RXZlbnQpIHsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAg
ICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKGlzTXV0ZWQoKSk7Ci0gICAgfQotfQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFp
bnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29u
dGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkoKQotewotICAgIGlm
IChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2UoKQotewotICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBsYXlT
dGF0ZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVu
dC0+dG9nZ2xlUGxheVN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQp
Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjcnViYmluZygpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcoKQotewotICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmlu
ZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVr
VG9UaW1lKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5mYXN0U2Vlayh0
aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVn
aW5TY2FubmluZ0ZvcndhcmQoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpG
b3J3YXJkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFj
ZTo6QmFja3dhcmQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjplbmRTY2FubmluZygpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBt
X21lZGlhRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBzZWxl
Y3RlZEF1ZGlvSW5kZXgpCi17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBtX2F1ZGlvVHJhY2tzRm9yTWVu
dS5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51W2ld
LT5zZXRFbmFibGVkKGkgPT0gc2VsZWN0ZWRBdWRpb0luZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVp
bnQ2NF90IGluZGV4KQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFRleHRUcmFjayogdGV4dFRyYWNrOwotICAgIGlmIChpbmRleCA8IG1fbGVnaWJs
ZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVUcmFj
a3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKLSAgICBlbHNlCi0g
ICAgICAgIHRleHRUcmFjayA9IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCk7Ci0KLSAg
ICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGljdHVyZUlu
UGljdHVyZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpID09
IE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQot
ICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5lbnRlckZ1bGxzY3JlZW4oTWVkaWFQbGF5ZXJFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVNdXRlZCgpCi17Ci0gICAgc2V0TXV0ZWQo
IWlzTXV0ZWQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAg
ICAgICBtX21lZGlhRWxlbWVudC0+c2V0TXV0ZWQobXV0ZWQpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0gICAgYXV0byYgdGV4dFRy
YWNrcyA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKHRleHRUcmFja3Mu
bGVuZ3RoKCkpCi0gICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVy
ZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSgmdGV4dFRyYWNrcyk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2xlZ2libGVUcmFja3NGb3JNZW51LmNsZWFyKCk7Ci0KLSAgICBhdXRvJiBhdWRpb1Ry
YWNrcyA9IG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpOwotICAgIGlmIChhdWRpb1RyYWNr
cy5sZW5ndGgoKSA+IDEpCi0gICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51ID0gY2FwdGlvblBy
ZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoJmF1ZGlvVHJhY2tzKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51LmNsZWFyKCk7Ci0KLSAgICBhdXRvIGF1ZGlv
T3B0aW9ucyA9IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7Ci0gICAgYXV0byBhdWRpb0lu
ZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKLSAgICBhdXRvIGxlZ2libGVPcHRpb25z
ID0gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOwotICAgIGF1dG8gbGVnaWJsZUluZGV4
ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpOwotCi0gICAgZm9yIChhdXRvIGNsaWVudCA6
IG1fY2xpZW50cykgewotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChhdWRpb09wdGlvbnMsIGF1ZGlvSW5kZXgpOwotICAgICAgICBjbGllbnQtPmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVPcHRpb25zLCBsZWdpYmxlSW5k
ZXgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkKLXsKLSAgICBhdXRvIGF1ZGlvSW5kZXgg
PSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpOwotICAgIGF1dG8gbGVnaWJsZUluZGV4ID0gbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpOwotCi0gICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xp
ZW50cykgewotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
YXVkaW9JbmRleCk7Ci0gICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKGxlZ2libGVJbmRleCk7Ci0gICAgfQotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdAotewotICAg
IGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1f
bWVkaWFFbGVtZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCk7Ci19Ci0KLWNvbnN0IFZlY3RvcjxB
dG9taWNTdHJpbmc+JiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2
ZWRFdmVudE5hbWVzKCkKLXsKLSAgICAvLyBGSVhNRSgxNTc0NTIpOiBSZW1vdmUgdGhlIHJpZ2h0
LWhhbmQgY29uc3RydWN0b3Igbm90YXRpb24gb25jZSBOZXZlckRlc3Ryb3llZCBzdXBwb3J0cyBp
bml0aWFsaXplcl9saXN0cy4KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21p
Y1N0cmluZz4+IG5hbWVzID0gVmVjdG9yPEF0b21pY1N0cmluZz4oewotICAgICAgICBldmVudE5h
bWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnBhdXNlRXZl
bnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMo
KS5yYXRlY2hhbmdlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQs
Ci0gICAgICAgIGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LAotICAgICAgICBldmVudE5hbWVz
KCkuYWRkdHJhY2tFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQs
Ci0gICAgICAgIGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCwKLSAgICAgICAgZXZlbnRO
YW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQs
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJp
bmcmICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBldmVudE5hbWVBbGwo
ImFsbEV2ZW50cyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJl
dHVybiBldmVudE5hbWVBbGw7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+c3VwcG9ydHNT
ZWVraW5nKCkgPyBtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSA6IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6Y3VycmVudFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX21l
ZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpIDogMDsKLX0KLQotZG91
YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUoKSBj
b25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tYXhC
dWZmZXJlZFRpbWUoKSA6IDA7Ci19Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OmlzUGxheWluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50
ID8gIW1fbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA6IGZhbHNlOwotfQotCi1mbG9hdCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tSYXRlKCkg
OiAwOwotfQotCi1SZWY8VGltZVJhbmdlcz4gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQgPyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGUoKSA6IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwot
fQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxl
VGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlh
RWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRU
aW1lKCkgOiAwOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVt
ZW50ID8gbV9tZWRpYUVsZW1lbnQtPmxpdmVVcGRhdGVJbnRlcnZhbCgpIDogMDsKLX0KLSAgICAK
LWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNhblBsYXlGYXN0UmV2
ZXJzZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1l
bnQtPm1pbkZhc3RSZXZlcnNlUmF0ZSgpIDwgMC4wIDogZmFsc2U7Ci19Ci0KLVZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IGF1ZGlvT3B0aW9uczsKLQotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwg
IW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGF1ZGlv
T3B0aW9uczsKLQotICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKLQotICAg
IGF1ZGlvT3B0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYXVkaW9UcmFja3NGb3JNZW51
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDogbV9hdWRpb1RyYWNrc0Zvck1l
bnUpCi0gICAgICAgIGF1ZGlvT3B0aW9ucy51bmNoZWNrZWRBcHBlbmQoY2FwdGlvblByZWZlcmVu
Y2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSkpOwotCi0g
ICAgcmV0dXJuIGF1ZGlvT3B0aW9uczsKLX0KLQotdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKLXsKLSAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6
ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChtX2F1ZGlvVHJhY2tzRm9yTWVudVtpbmRleF0t
PmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0gICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKLX0KLQotVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBsZWdpYmxlT3B0aW9uczsKLQotICAgIGlmICghbV9tZWRpYUVsZW1lbnQg
fHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGxl
Z2libGVPcHRpb25zOwotCi0gICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOwot
Ci0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUpCi0gICAgICAg
IGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25P
cHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGxlZ2libGVPcHRpb25z
OwotfQotCi11aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Ci17Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKLSAgICB1aW50NjRf
dCBvZmZJbmRleCA9IDA7Ci0gICAgYm9vbCB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSBmYWxzZTsK
LQotICAgIGF1dG8gaG9zdCA9IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1lZGlh
Q29udHJvbHNIb3N0KCkgOiBudWxscHRyOwotCi0gICAgaWYgKCFob3N0KQotICAgICAgICByZXR1
cm4gc2VsZWN0ZWRJbmRleDsKLQotICAgIEF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9IGhvc3Qt
PmNhcHRpb25EaXNwbGF5TW9kZSgpOwotICAgIFRleHRUcmFjayogb2ZmSXRlbSA9IGhvc3QtPmNh
cHRpb25NZW51T2ZmSXRlbSgpOwotICAgIFRleHRUcmFjayogYXV0b21hdGljSXRlbSA9IGhvc3Qt
PmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOwotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAw
OyBpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAg
ICAgIGF1dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAg
IGlmICh0cmFjayA9PSBvZmZJdGVtKQotICAgICAgICAgICAgb2ZmSW5kZXggPSBpbmRleDsKLQot
ICAgICAgICBpZiAodHJhY2sgPT0gYXV0b21hdGljSXRlbSAmJiBkaXNwbGF5TW9kZSA9PSBNZWRp
YUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3Rl
ZEluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNI
b3N0OjphdXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1v
ZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAg
ICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAob2ZmSXRlbSAmJiAhdHJhY2tNZW51SXRlbVNlbGVjdGVkICYmIGRpc3BsYXlNb2Rl
ID09IE1lZGlhQ29udHJvbHNIb3N0Ojpmb3JjZWRPbmx5S2V5d29yZCgpKQotICAgICAgICBzZWxl
Y3RlZEluZGV4ID0gb2ZmSW5kZXg7Ci0KLSAgICByZXR1cm4gc2VsZWN0ZWRJbmRleDsKLX0KLQot
Ym9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFj
a0VuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCAmJiBtX21lZGlh
RWxlbWVudC0+d2Via2l0Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygpOwotfQotCi1X
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+
bWVkaWFDb250cm9sc0hvc3QoKSkKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwotCi0g
ICAgc3dpdGNoIChtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxE
ZXZpY2VUeXBlKCkpIHsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwotICAgIGNhc2UgTWVkaWFDb250cm9s
c0hvc3Q6OkRldmljZVR5cGU6Ok5vbmU6Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsK
LSAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpBaXJwbGF5OgotICAgICAg
ICByZXR1cm4gVGFyZ2V0VHlwZUFpclBsYXk7Ci0gICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6
RGV2aWNlVHlwZTo6VHZvdXQ6Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBlVFZPdXQ7Ci0gICAg
fQotfQotCi1TdHJpbmcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVy
bmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QKLXsKLSAgICBpZiAobV9tZWRp
YUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAg
IHJldHVybiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZp
Y2VEaXNwbGF5TmFtZSgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotCi1ib29sIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFF
bGVtZW50LT5tZWRpYVNlc3Npb24oKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgqbV9t
ZWRpYUVsZW1lbnQpOwotfQotCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Ojppc011dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21l
ZGlhRWxlbWVudC0+bXV0ZWQoKSA6IGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMzJi
NDM5MzVkMmIyODFkODE2M2ZiMTc2NThhMWM3Y2U0NGEzNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIHsgfTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRF
bnRlckZ1bGxzY3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVu
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgPSAwOwotfTsKLQot
fQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGE1MjcwMmRiODZiNTkyNjQ5MjJhZWI0MDFjZGIyMjIxOWQ5ZmRlNDcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0j
aW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudDsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwgewot
cHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgeyB9OwotICAg
IHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCYpPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRX
aXRoTWVkaWEgPSBmYWxzZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyRnJh
bWUoRmxvYXRSZWN0KSA9IDA7Ci0gICAgZW51bSBWaWRlb0dyYXZpdHkgeyBWaWRlb0dyYXZpdHlS
ZXNpemUsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
RmlsbCB9OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZp
dHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgPSAwOwotCi0gICAgdmlydHVhbCBi
b29sIGlzVmlzaWJsZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWRlb0Rp
bWVuc2lvbnMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3Qg
PSAwOwotfTsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAwOwotfTsKLQotV0VC
Q09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKLSAgICAKLX0KLQot
I2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5NjI1MjllZmEwZDFiMDkzNmMzN2FiZmRlZmRhMDA4MTE0OGQ0
Mjk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxh
eWVyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBBdWRpb1RyYWNrOwotY2xhc3MgSFRN
TFZpZGVvRWxlbWVudDsKLWNsYXNzIFRleHRUcmFjazsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlz
dGVuZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpKTsKLSAgICB9Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9F
bGVtZW50Kik7Ci0gICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92aWRlb0VsZW1lbnQuZ2V0KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtdIHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyID0gW10geyB9KTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpF
dmVudCopIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6
QXRvbWljU3RyaW5nJik7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXIm
IHJocykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6
RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RGdWxs
c2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJv
b2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX3ZpZGVvRGltZW5zaW9uczsgfQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzVmlkZW8o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9Ci0KLQotcHJvdGVjdGVkOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRIYXNWaWRlbyhib29sKTsKLSAgICB2b2lkIHNldFZp
ZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmKTsKLQotICAgIHN0YXRpYyBjb25zdCBWZWN0
b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKLSAgICBjb25zdCBX
VEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBSZWZQdHI8SFRNTFZpZGVv
RWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1f
dmlkZW9GdWxsc2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsK
LSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwot
ICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07Ci0gICAgRmxvYXRTaXplIG1fdmlkZW9EaW1l
bnNpb25zOwotICAgIEZsb2F0UmVjdCBtX3ZpZGVvRnJhbWU7Ci0gICAgVmVjdG9yPFJlZlB0cjxU
ZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51OwotICAgIFZlY3RvcjxSZWZQdHI8QXVk
aW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51OwotfTsKLQotfQotCi0jZW5kaWYKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2E0ZmJlMDE3MDJjYzUwZTRhNDM5Zjg2ODVkNjQyYjc5Y2Q5YTQwNy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0j
aW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgotCi0jaW1wb3J0
ICJET01XaW5kb3cuaCIKLSNpbXBvcnQgIkhpc3RvcnkuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIK
LSNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9u
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50TGlz
dGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRM
aXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi17Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQo
KQotewotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQotewotICAgIGlmICht
X3ZpZGVvRWxlbWVudCA9PSB2aWRlb0VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIo
KSkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG51bGxw
dHIpOwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAg
ICAgIG1fdmlkZW9FbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMs
IGZhbHNlKTsKLSAgICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgbV92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7Ci0KLSAgICBpZiAobV92aWRlb0VsZW1lbnQpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAg
ICAgICAgIG1fdmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMs
IGZhbHNlKTsKLSAgICAgICAgbV9pc0xpc3RlbmluZyA9IHRydWU7Ci0gICAgfQotCi0gICAgdXBk
YXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKLXsKLSAgICB1cGRhdGVGb3JFdmVu
dE5hbWUoZXZlbnQtPnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
ZXZlbnROYW1lKQotewotICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7Ci0K
LSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmVzaXpl
RXZlbnQpIHsKLSAgICAgICAgc2V0SGFzVmlkZW8obV92aWRlb0VsZW1lbnQpOwotICAgICAgICBz
ZXRWaWRlb0RpbWVuc2lvbnMobV92aWRlb0VsZW1lbnQgPyBGbG9hdFNpemUobV92aWRlb0VsZW1l
bnQtPnZpZGVvV2lkdGgoKSwgbV92aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpIDogRmxvYXRT
aXplKCkpOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciogdmlkZW9MYXllciwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKG1f
dmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikgewotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fdmlkZW9GdWxs
c2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbbV92aWRl
b0Z1bGxzY3JlZW5MYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLCAwKV07Ci0jZWxz
ZQotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtl
KDAuNSwgMC41KV07Ci0jZW5kaWYKLSAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3Vu
ZHM6bV92aWRlb0ZyYW1lXTsKLSAgICAKLSAgICBpZiAoIW1fdmlkZW9FbGVtZW50KSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRlb0Z1bGxzY3JlZW5M
YXllci5nZXQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVU
aGVuKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlm
ICghbV92aWRlb0VsZW1lbnQpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdmlkZW9FbGVtZW50LT53YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlz
aGVkV2l0aE1lZGlhKQotewotICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVu
dC0+ZnVsbHNjcmVlbk1vZGUoKSAhPSBtb2RlKQotICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
RnVsbHNjcmVlbk1vZGUobW9kZSk7Ci0KLSAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgZmluaXNo
ZWRXaXRoTWVkaWEgJiYgbW9kZSA9PSBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlTm9uZSkgewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRp
YURvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChET01XaW5kb3cqIHdpbmRvdyA9IG1fdmlk
ZW9FbGVtZW50LT5kb2N1bWVudCgpLmRvbVdpbmRvdygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KEhpc3RvcnkqIGhpc3RvcnkgPSB3aW5kb3ctPmhpc3RvcnkoKSkKLSAgICAgICAgICAgICAgICAg
ICAgaGlzdG9yeS0+YmFjaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVy
RnJhbWUoRmxvYXRSZWN0IHJlY3QpCi17Ci0gICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKLSAgICBb
bV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3VuZHM6Q0dSZWN0KHJlY3QpXTsKLSAgICBpZiAo
bV92aWRlb0VsZW1lbnQpCi0gICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5GcmFtZShyZWN0KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSBncmF2aXR5KQotewotICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9H
cmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAo
Z3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQot
ICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOwot
ICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdCkKLSAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQotICAgICAgICB2
aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsK
LSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIG1fdmlk
ZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Ci19Ci0K
LWNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOwotCi0gICAgaWYgKCFzRXZlbnRO
YW1lcy5nZXQoKS5zaXplKCkpCi0gICAgICAgIHNFdmVudE5hbWVzLmdldCgpLmFwcGVuZChldmVu
dE5hbWVzKCkucmVzaXplRXZlbnQpOwotICAgIHJldHVybiBzRXZlbnROYW1lcy5nZXQoKTsKLX0K
LQotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6ZXZlbnROYW1lQWxsKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7Ci0gICAgcmV0dXJuIHNFdmVudE5hbWVB
bGw7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLXsKLSAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAg
ICAgIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVu
TW9kZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFk
ZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFT
U0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMuYWRkKCZj
bGllbnQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpy
ZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAg
ICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMucmVt
b3ZlKCZjbGllbnQpOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Ojppc1Zpc2libGUoKSBjb25zdAotewotICAgIGlmICghbV92aWRlb0VsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gbV92aWRlb0VsZW1lbnQt
PmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gcGFnZS0+aXNWaXNpYmxlKCk7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OnNldEhhc1ZpZGVvKGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgaWYgKGhhc1ZpZGVv
ID09IG1faGFzVmlkZW8pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFzVmlkZW8gPSBoYXNW
aWRlbzsKLQotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGll
bnQtPmhhc1ZpZGVvQ2hhbmdlZChtX2hhc1ZpZGVvKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6
ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAgIGlmIChtX3ZpZGVvRGltZW5zaW9ucyA9PSB2aWRl
b0RpbWVuc2lvbnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlkZW9EaW1lbnNpb25zID0g
dmlkZW9EaW1lbnNpb25zOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCi0g
ICAgICAgIGNsaWVudC0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX3ZpZGVvRGltZW5zaW9ucyk7
Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNmVjMTdhN2Q4
MWE3Zjk3ZTkxMzkwMDM4ZTUxMGNhNGJhZDNmYjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKQEAg
LTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1
ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lv
bk1vZGVsLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2lu
Y2x1ZGUgPG9iamMvb2JqYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworT0JKQ19DTEFT
UyBXZWJBVlBsYXllckNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIEFWUGxheWVyVmlld0NvbnRyb2xs
ZXI7CitPQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFVJV2luZG93Owor
T0JKQ19DTEFTUyBVSVZpZXc7CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWw7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25DaGFuZ2VPYnNlcnZlcjsKKwor
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQKKyAg
ICA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHsKKworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCYgbW9kZWwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChtb2RlbCkpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpOworICAgIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWw7IH0KKworICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7CisK
KyAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5j
aG9yVGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBidWZmZXJlZFRpbWVD
aGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hh
bmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2Vz
JiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpIG92
ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZChib29sKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5n
ZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtdXRlZENoYW5n
ZWQoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZSgpOworCisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVy
KCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOworCisgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29u
dHJvbGxlcj4gbV9wbGF5ZXJDb250cm9sbGVyOworICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
KiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0ciB9OworfTsKKworfQorCisjZW5kaWYK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4YTg5ZTliMzQ2MWYxYWM0ZDM1
OTQ0ZjAwZTRlODNmYjBjMzJjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KQEAgLTAsMCArMSwy
MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKyNpZiBIQVZFKEFWS0lUKQorCisjaW1wb3J0
ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFTZWxlY3Rp
b25PcHRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW1wb3J0ICJU
aW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJXZWJBVlBsYXllckNvbnRyb2xsZXIuaCIKKyNpbXBvcnQg
PEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBv
cnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09Q
VElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGlt
aW5nKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCYgbW9kZWwpCisgICAgOiBtX3BsYXllckNvbnRyb2xsZXIoYWRvcHROUyhbW1dlYkFW
UGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF0pKQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25N
b2RlbCgmbW9kZWwpCit7CisgICAgbW9kZWwuYWRkQ2xpZW50KCp0aGlzKTsKKyAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTp0aGlzXTsKKyAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOiZtb2RlbF07CisKKyAgICBkdXJhdGlvbkNoYW5n
ZWQobW9kZWwuZHVyYXRpb24oKSk7CisgICAgY3VycmVudFRpbWVDaGFuZ2VkKG1vZGVsLmN1cnJl
bnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSk7Cisg
ICAgYnVmZmVyZWRUaW1lQ2hhbmdlZChtb2RlbC5idWZmZXJlZFRpbWUoKSk7CisgICAgcmF0ZUNo
YW5nZWQobW9kZWwuaXNQbGF5aW5nKCksIG1vZGVsLnBsYXliYWNrUmF0ZSgpKTsKKyAgICBzZWVr
YWJsZVJhbmdlc0NoYW5nZWQobW9kZWwuc2Vla2FibGVSYW5nZXMoKSwgbW9kZWwuc2Vla2FibGVU
aW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpLCBtb2RlbC5saXZlVXBkYXRlSW50ZXJ2YWwoKSk7
CisgICAgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtb2RlbC5jYW5QbGF5RmFzdFJldmVyc2Uo
KSk7CisgICAgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCksIG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkpOwor
ICAgIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpKTsK
KyAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtb2RlbC5leHRlcm5hbFBsYXliYWNrRW5hYmxl
ZCgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpLCBtb2RlbC5leHRlcm5hbFBs
YXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpKTsKKyAgICB3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQobW9kZWwud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSk7Cit9
CisKK1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+V2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQoKQoreworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlOm51bGxwdHJdOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RXh0
ZXJuYWxQbGF5YmFja0FjdGl2ZTpmYWxzZV07CisKKyAgICBpbnZhbGlkYXRlKCk7Cit9CisKK3Zv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCit7
CisgICAgW21fcGxheWVyQ29udHJvbGxlciByZXNldE1lZGlhU3RhdGVdOworfQorCit2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1
cmF0aW9uKQoreworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9
IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKKworICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVu
dER1cmF0aW9uID0gZHVyYXRpb247CisgICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRp
b25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOworCisgICAgLy8gRklYTUU6IHdlIHRha2UgdGhp
cyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCisgICAgcGxheWVyQ29u
dHJvbGxlci5jYW5QbGF5ID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGF1c2UgPSBZ
RVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKKyAgICBw
bGF5ZXJDb250cm9sbGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9s
bGVyLmNhblNlZWsgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXll
ckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwg
ZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1w
ID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOworICAgIEFW
VmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWlu
Z1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQorICAgICAgICBhbmNob3JUaW1lU3RhbXA6YW5j
aG9yVGltZVN0YW1wIHJhdGU6MF07CisKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFRpbWlu
Zzp0aW1pbmddOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojpi
dWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgV2ViQVZQbGF5
ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgp
OworICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9u
OworICAgIGRvdWJsZSBub3JtYWxpemVkQnVmZmVyZWRUaW1lOworICAgIGlmICghZHVyYXRpb24p
CisgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOworICAgIGVsc2UKKyAgICAgICAg
bm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZSAvIGR1cmF0aW9uOworICAgIHBs
YXllckNvbnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFsaXplZEJ1ZmZl
cmVkVGltZSldOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojpy
YXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07
Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlm
aWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHNlZWthYmxlUmFuZ2VzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5s
ZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5nZXMuc3RhcnQo
aSkucmVsZWFzZVJldHVyblZhbHVlKCk7CisgICAgICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2Vz
LmVuZChpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKworICAgICAgICBDTVRpbWVSYW5nZSByYW5n
ZSA9IENNVGltZVJhbmdlTWFrZShDTVRpbWVNYWtlV2l0aFNlY29uZHMoc3RhcnQsIDEwMDApLCBD
TVRpbWVNYWtlV2l0aFNlY29uZHMoZW5kLXN0YXJ0LCAxMDAwKSk7CisgICAgICAgIFtzZWVrYWJs
ZVJhbmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsK
KyAgICB9CisKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdlczpz
ZWVrYWJsZVJhbmdlcy5nZXQoKV07CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJs
ZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lOiBsYXN0TW9kaWZpZWRUaW1lXTsKKyAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldExpdmVVcGRhdGVJbnRlcnZhbDpsaXZlVXBkYXRlSW50ZXJ2YWxd
OworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjYW5QbGF5RmFz
dFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQoreworICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlGYXN0UmV2ZXJzZV07Cit9CisK
K3N0YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQoreworICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV0pOworICAgIGZvciAoYXV0
byYgb3B0aW9uIDogb3B0aW9ucykgeworICAgICAgICBSZXRhaW5QdHI8V2ViQVZNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFWTWVkaWFTZWxlY3Rpb25PcHRp
b24gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3dlYk9wdGlvbiBzZXRMb2NhbGl6ZWREaXNwbGF5
TmFtZTpvcHRpb24uZGlzcGxheU5hbWVdOworICAgICAgICBbd2ViT3B0aW9ucyBhZGRPYmplY3Q6
d2ViT3B0aW9uLmdldCgpXTsKKyAgICB9CisgICAgcmV0dXJuIHdlYk9wdGlvbnM7Cit9CisKK3Zv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMu
Z2V0KCldOworICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAg
ICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2Vs
ZWN0ZWRJbmRleCldXTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9w
dGlvbnMob3B0aW9ucyk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOworICAgIGlmIChzZWxlY3RlZEluZGV4
IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1
cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRl
eDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOworfQorCit2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChi
b29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSB0YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCit7
CisgICAgQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGUgZXh0ZXJuYWxQbGF5
YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZU5vbmU7Cisg
ICAgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVB
aXJQbGF5KQorICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29udHJvbGxl
ckV4dGVybmFsUGxheWJhY2tUeXBlQWlyUGxheTsKKyAgICBlbHNlIGlmICh0YXJnZXRUeXBlID09
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQpCisgICAgICAgIGV4dGVy
bmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVU
Vk91dDsKKworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1f
cGxheWVyQ29udHJvbGxlci5nZXQoKTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxh
eWJhY2tBaXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2FsaXplZERldmljZU5hbWU7Cisg
ICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJh
Y2tUeXBlOworICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSA9IGVu
YWJsZWQ7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OndpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQoreworICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0QWxsb3dzRXh0ZXJuYWxQbGF5YmFjazohZGlzYWJsZWRdOwor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjptdXRlZENoYW5nZWQo
Ym9vbCBtdXRlZCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldE11dGVkOm11dGVkXTsK
K30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgp
Cit7CisgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQorICAgICAgICByZXR1cm47CisK
KyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm51bGxwdHJdOworICAgIG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbCA9IG51bGxwdHI7Cit9CisKK30KKworI2VuZGlmIC8vIEhBVkUoQVZLSVQpCisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
YjFlYWM1MDQ2YTdkYjhhOGMyODYzMmFlOGY5ZmI2NGM4YTllMmE0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5j
bHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5j
bHVkZSA8b2JqYy9vYmpjLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK09CSkNfQ0xBU1MgQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKK09CSkNf
Q0xBU1MgVUlXaW5kb3c7CitPQkpDX0NMQVNTIFVJVmlldzsKK09CSkNfQ0xBU1MgQ0FMYXllcjsK
K09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9sbGVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXll
ckxheWVyVmlldzsKK09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJMYXllcjsKK09CSkNfQ0xBU1MgV2Vi
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlOworCituYW1lc3BhY2UgV1RGIHsKK2NsYXNz
IFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UmVjdDsKK2NsYXNz
IEZsb2F0U2l6ZTsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOworY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7CisgICAgCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBmaW5hbAorICAgIDogcHVibGljIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4geworCitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0Jik7CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlciopOworICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9CisKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChj
b25zdCBGbG9hdFNpemUmKSBmaW5hbDsKKworICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChi
b29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiwgY29u
c3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyAqLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNr
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKGNvbnN0IEludFJl
Y3QmIGZpbmFsUmVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBG
dWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVs
bHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwcmVwYXJlZFRvUmV0
dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KTsKKwor
ICAgIGVudW0gY2xhc3MgRXhpdEZ1bGxTY3JlZW5SZWFzb24geworICAgICAgICBEb25lQnV0dG9u
VGFwcGVkLAorICAgICAgICBGdWxsU2NyZWVuQnV0dG9uVGFwcGVkLAorICAgICAgICBQaW5jaEdl
c3R1cmVIYW5kbGVkLAorICAgICAgICBSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQsCisg
ICAgICAgIFBpY3R1cmVJblBpY3R1cmVTdGFydGVkCisgICAgfTsKKworICAgIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKiBtb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWw7IH0KKyAgICBib29sIHNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihFeGl0RnVsbFNj
cmVlblJlYXNvbik7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBib29sIGFsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzUGljdHVyZUluUGlj
dHVyZVBsYXliYWNrOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBtYXlBdXRvbWF0aWNhbGx5
U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0OworICAgIHZvaWQgZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChib29sKT4mJiBjYWxsYmFjayk7Cisg
ICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0OworICAgIHZvaWQg
YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKKworICAgIHZvaWQgd2lsbFN0YXJ0UGljdHVy
ZUluUGljdHVyZSgpOworICAgIHZvaWQgZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAg
dm9pZCBmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOworICAgIHZvaWQgd2lsbFN0b3BQ
aWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBkaWRTdG9wUGljdHVyZUluUGljdHVyZSgpOwor
ICAgIHZvaWQgcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5k
bGVyKHZvaWQgKF4pKEJPT0wpKTsKKworICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgYm9vbCBoYXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJl
dHVybiBtX21vZGUgJiBtb2RlOyB9CisgICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBt
b2RlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOworICAg
IHZvaWQgYmVnaW5TZXNzaW9uKCk7CisgICAgdm9pZCBlbnRlclBpY3R1cmVJblBpY3R1cmUoKTsK
KyAgICB2b2lkIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7CisgICAgdm9pZCB3YXRjaGRvZ1Rp
bWVyRmlyZWQoKTsKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIo
KSBjb25zdDsKKworICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gbV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZT4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlOworICAgIFJl
dGFpblB0cjxBVlBsYXllclZpZXdDb250cm9sbGVyPiBtX3BsYXllclZpZXdDb250cm9sbGVyOwor
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVs
bHB0ciB9OworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIgfTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVz
ZWQgd2hlbiBmdWxsc2NyZWVuIGlzIHByZXNlbnRlZCBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KKyAg
ICBSZXRhaW5QdHI8VUlXaW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0cjxVSVZpZXdDb250
cm9sbGVyPiBtX3ZpZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxVSVZpZXc+IG1fcGFyZW50
VmlldzsKKyAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IG1fcGFyZW50V2luZG93OworICAgIFJldGFp
blB0cjxXZWJBVlBsYXllckxheWVyVmlldz4gbV9wbGF5ZXJMYXllclZpZXc7CisgICAgSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKKyAgICBXVEY6OkZ1bmN0aW9u
PHZvaWQoYm9vbCk+IG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2s7CisgICAgUnVuTG9vcDo6VGlt
ZXI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1fd2F0Y2hkb2dUaW1lcjsKKyAg
ICBib29sIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fZXhpdFJlcXVlc3RlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2V4aXRDb21wbGV0ZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9lbnRlclJlcXVlc3RlZCB7IGZhbHNlIH07CisgICAgYm9v
bCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9z
aG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJl
U3RvcCB7IGZhbHNlIH07CisKKyAgICB2b2lkIGRvRW50ZXJGdWxsc2NyZWVuKCk7Cit9OworCit9
CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ5YWFjNjVi
NzVjZWI1NDAwODQ1NzNiYjZiMzQ1YjdhZmE5ODVhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpA
QCAtMCwwICsxLDEwNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKyNp
bXBvcnQgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCisKKyNpZiBIQVZFKEFWS0lU
KQorCisjaW1wb3J0ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiR2VvbWV0cnlVdGlsaXRpZXMuaCIK
KyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0LmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKKyNpbXBvcnQgIlRp
bWVSYW5nZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCisj
aW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250
cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxB
VkZvdW5kYXRpb24vQVZUaW1lLmg+CisjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2ltcG9ydCA8
b2JqYy9tZXNzYWdlLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gU29mdC1s
aW5raW5nIGhlYWRlcnMgbXVzdCBiZSBpbmNsdWRlZCBsYXN0IHNpbmNlIHRoZXkgI2RlZmluZSBm
dW5jdGlvbnMsIGNvbnN0YW50cywgZXRjLgorI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIK
KworU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZG
b3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQorU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlv
biwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19DT05T
VEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIE5TU3Ry
aW5nICopCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2
aXR5UmVzaXplQXNwZWN0RmlsbCwgTlNTdHJpbmcgKikKKworU09GVF9MSU5LX0ZSQU1FV09SS19P
UFRJT05BTChBVktpdCkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZQaWN0dXJl
SW5QaWN0dXJlQ29udHJvbGxlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgX19B
VlBsYXllckxheWVyVmlldykKKworU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKK1NPRlRfTElO
S19DTEFTUyhVSUtpdCwgVUlBcHBsaWNhdGlvbikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlT
Y3JlZW4pCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJV2luZG93KQorU09GVF9MSU5LX0NMQVNT
KFVJS2l0LCBVSVZpZXcpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJVmlld0NvbnRyb2xsZXIp
CitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJQ29sb3IpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlL
aXQsIFVJVGV4dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwsIFVJV2luZG93TGV2
ZWwpCisKK3N0YXRpYyBVSUNvbG9yICpjbGVhclVJQ29sb3IoKQoreworICAgIHJldHVybiAoVUlD
b2xvciAqKVtnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXTsKK30KKworI2lmICFMT0dfRElT
QUJMRUQKK3N0YXRpYyBjb25zdCBjaGFyKiBib29sU3RyaW5nKGJvb2wgdmFsKQoreworICAgIHJl
dHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBT
ZWNvbmRzIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwgeyAxX3MgfTsKKworQGNsYXNzIFdl
YkFWTWVkaWFTZWxlY3Rpb25PcHRpb247CisKK0BpbnRlcmZhY2UgV2ViQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QgPEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZV9XZWJLaXRPbmx5PiB7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsKK30KK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsKKy0gKEJPT0wp
cGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3
Q29udHJvbGxlciBzaG91bGRFeGl0RnVsbFNjcmVlbldpdGhSZWFzb246KEFWUGxheWVyVmlld0Nv
bnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbilyZWFzb247CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUKKy0gKFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgcmV0dXJuIF9m
dWxsc2NyZWVuSW50ZXJmYWNlLmdldCgpOworfQorCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRl
cmZhY2U6KFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJm
YWNlCit7CisgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOwor
fQorCistICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0YXJ0UGljdHVyZUluUGljdHVy
ZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAg
VU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5J
bnRlcmZhY2UtPndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9pZClwbGF5
ZXJWaWV3Q29udHJvbGxlckRpZFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXll
clZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0YXJ0
UGljdHVyZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyRmFp
bGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5
ZXJWaWV3Q29udHJvbGxlciB3aXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIFVOVVNF
RF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsK
KyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0
dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3RvcFBpY3R1cmVJ
blBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgor
eworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgc2VsZi5mdWxs
c2NyZWVuSW50ZXJmYWNlLT53aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9p
ZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZp
ZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0o
cGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlk
U3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworc3RhdGljIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiBjb252ZXJ0VG9FeGl0RnVsbFNjcmVl
blJlYXNvbihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29u
KQoreworICAgIHN3aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9s
bGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25Eb25lQnV0dG9uVGFwcGVkOgorICAgICAgICByZXR1cm4g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpE
b25lQnV0dG9uVGFwcGVkOworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxs
U2NyZWVuUmVhc29uRnVsbFNjcmVlbkJ1dHRvblRhcHBlZDoKKyAgICAgICAgcmV0dXJuIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RnVsbFNj
cmVlbkJ1dHRvblRhcHBlZDsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVs
bFNjcmVlblJlYXNvblBpY3R1cmVJblBpY3R1cmVTdGFydGVkOgorICAgICAgICByZXR1cm4gV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0
dXJlSW5QaWN0dXJlU3RhcnRlZDsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0
RnVsbFNjcmVlblJlYXNvblBpbmNoR2VzdHVyZUhhbmRsZWQ6CisgICAgICAgIHJldHVybiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpbmNo
R2VzdHVyZUhhbmRsZWQ7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxT
Y3JlZW5SZWFzb25SZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ6CisgICAgICAgIHJldHVy
biBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246
OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZDsKKyAgICB9Cit9CisKKy0gKEJPT0wpcGxh
eWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29u
dHJvbGxlciBzaG91bGRFeGl0RnVsbFNjcmVlbldpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRy
b2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbilyZWFzb24KK3sKKyAgICBVTlVTRURfUEFSQU0ocGxh
eWVyVmlld0NvbnRyb2xsZXIpOworICAgIHJldHVybiBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2Ut
PnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihjb252ZXJ0VG9FeGl0RnVsbFNjcmVlblJl
YXNvbihyZWFzb24pKTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5
ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHJlc3RvcmVVc2VySW50ZXJm
YWNlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KEJPT0wgcmVzdG9yZWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHBs
YXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPnByZXBh
cmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9u
SGFuZGxlcik7Cit9CitAZW5kCisKK0BpbnRlcmZhY2UgV2ViQVZQbGF5ZXJMYXllciA6IENBTGF5
ZXIKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIE5TU3RyaW5nICp2aWRlb0dyYXZpdHk7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzUmVhZHlGb3JEaXNwbGF5KSBCT09MIHJl
YWR5Rm9yRGlzcGxheTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOworQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyOwor
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgQ0FMYXllciAqdmlkZW9TdWJsYXllcjsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBudWxsYWJsZSkgTlNEaWN0aW9uYXJ5ICpwaXhlbEJ1
ZmZlckF0dHJpYnV0ZXM7CitAcHJvcGVydHkgQ0dTaXplIHZpZGVvRGltZW5zaW9uczsKK0Bwcm9w
ZXJ0eSBDR1JlY3QgbW9kZWxWaWRlb0xheWVyRnJhbWU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJBVlBsYXllckxheWVyIHsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIFJldGFpblB0cjxXZWJBVlBsYXll
ckNvbnRyb2xsZXI+IF9hdlBsYXllckNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+
IF92aWRlb1N1YmxheWVyOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX3ZpZGVvR3Jhdml0eTsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmIChzZWxmKSB7CisgICAgICAgIFtzZWxmIHNldE1hc2tzVG9Cb3VuZHM6WUVTXTsKKyAg
ICAgICAgX3ZpZGVvR3Jhdml0eSA9IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Qo
KTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07CisgICAgW19waXhl
bEJ1ZmZlckF0dHJpYnV0ZXMgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCist
IChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQor
eworICAgIHJldHVybiBfZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKTsKK30KKworLSAodm9pZClz
ZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCop
ZnVsbHNjcmVlbkludGVyZmFjZQoreworICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVsbHNj
cmVlbkludGVyZmFjZTsKK30KKworLSAoQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJv
bGxlcgoreworICAgIHJldHVybiAoQVZQbGF5ZXJDb250cm9sbGVyICopX2F2UGxheWVyQ29udHJv
bGxlci5nZXQoKTsKK30KKworLSAodm9pZClzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNv
bnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyCit7CisgICAgQVNTRVJUKCFwbGF5ZXJDb250cm9s
bGVyIHx8IFtwbGF5ZXJDb250cm9sbGVyIGlzS2luZE9mQ2xhc3M6W1dlYkFWUGxheWVyQ29udHJv
bGxlciBjbGFzc11dKTsKKyAgICBfYXZQbGF5ZXJDb250cm9sbGVyID0gKFdlYkFWUGxheWVyQ29u
dHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXI7Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9TdWJsYXll
cjooQ0FMYXllciAqKXZpZGVvU3VibGF5ZXIKK3sKKyAgICBfdmlkZW9TdWJsYXllciA9IHZpZGVv
U3VibGF5ZXI7Cit9CisKKy0gKENBTGF5ZXIqKXZpZGVvU3VibGF5ZXIKK3sKKyAgICByZXR1cm4g
X3ZpZGVvU3VibGF5ZXIuZ2V0KCk7Cit9CisKKy0gKHZvaWQpbGF5b3V0U3VibGF5ZXJzCit7Cisg
ICAgaWYgKFtfdmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBzZWxmKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgW192aWRlb1N1YmxheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKENH
UmVjdEdldE1pZFgoc2VsZi5ib3VuZHMpLCBDR1JlY3RHZXRNaWRZKHNlbGYuYm91bmRzKSldOwor
CisgICAgaWYgKHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodCA8PSAwIHx8IHNlbGYudmlkZW9E
aW1lbnNpb25zLndpZHRoIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBz
b3VyY2VWaWRlb0ZyYW1lOworICAgIEZsb2F0UmVjdCB0YXJnZXRWaWRlb0ZyYW1lOworICAgIGZs
b2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCAvIHNlbGYu
dmlkZW9EaW1lbnNpb25zLmhlaWdodDsKKyAgICAKKyAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dy
YXZpdHlSZXNpemUoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7CisgICAg
ICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lOworICAgICAg
ICB0YXJnZXRWaWRlb0ZyYW1lID0gc2VsZi5ib3VuZHM7CisgICAgfSBlbHNlIGlmIChbZ2V0QVZM
YXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVv
R3Jhdml0eV0pIHsKKyAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IGxhcmdlc3RSZWN0V2l0aEFz
cGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVsVmlkZW9MYXll
ckZyYW1lKTsKKyAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IGxhcmdlc3RSZWN0V2l0aEFzcGVj
dFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisgICAgfSBl
bHNlIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwoKSBpc0VxdWFs
VG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7CisgICAgICAgIHNvdXJjZVZpZGVvRnJhbWUg
PSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8s
IHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICBzZWxmLm1vZGVsVmlkZW9MYXll
ckZyYW1lID0gQ0dSZWN0TWFrZSgwLCAwLCBzb3VyY2VWaWRlb0ZyYW1lLndpZHRoKCksIHNvdXJj
ZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZh
Y2UtPm1vZGVsKCkpOworICAgICAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKS0+c2V0
VmlkZW9MYXllckZyYW1lKHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICB0YXJn
ZXRWaWRlb0ZyYW1lID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRl
b0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgVUlWaWV3ICp2aWV3ID0gKFVJVmlldyAqKVtfdmlkZW9TdWJs
YXllciBkZWxlZ2F0ZV07CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZp
bmVUcmFuc2Zvcm1NYWtlU2NhbGUodGFyZ2V0VmlkZW9GcmFtZS53aWR0aCgpIC8gc291cmNlVmlk
ZW9GcmFtZS53aWR0aCgpLCB0YXJnZXRWaWRlb0ZyYW1lLmhlaWdodCgpIC8gc291cmNlVmlkZW9G
cmFtZS5oZWlnaHQoKSk7CisgICAgW3ZpZXcgc2V0VHJhbnNmb3JtOnRyYW5zZm9ybV07CisgICAg
CisgICAgTlNUaW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSBbQ0FUcmFuc2FjdGlvbiBh
bmltYXRpb25EdXJhdGlvbl07CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXiB7CisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1
ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2Jq
ZWN0Om5pbF07CisKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihyZXNv
bHZlQm91bmRzKSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OmFuaW1hdGlvbkR1cmF0aW9uICsg
MC4xXTsKKyAgICB9KTsKK30KKworLSAodm9pZClyZXNvbHZlQm91bmRzCit7CisgICAgW05TT2Jq
ZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9y
OkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKKyAgICBpZiAoIVtfYXZQbGF5
ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChb
X3ZpZGVvU3VibGF5ZXIgc3VwZXJsYXllcl0gIT0gc2VsZikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lLCBb
c2VsZiBib3VuZHNdKSAmJiBDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHkoWyhVSVZpZXcgKilb
X3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdIHRyYW5zZm9ybV0pKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldEFu
aW1hdGlvbkR1cmF0aW9uOjBdOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25z
OllFU107CisgICAgCisgICAgaWYgKCFDR1JlY3RFcXVhbFRvUmVjdChzZWxmLm1vZGVsVmlkZW9M
YXllckZyYW1lLCBbc2VsZiBib3VuZHNdKSkgeworICAgICAgICBzZWxmLm1vZGVsVmlkZW9MYXll
ckZyYW1lID0gW3NlbGYgYm91bmRzXTsKKyAgICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJm
YWNlLT5tb2RlbCgpKTsKKyAgICAgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNl
dFZpZGVvTGF5ZXJGcmFtZShzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKKyAgICB9CisgICAg
WyhVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdIHNldFRyYW5zZm9ybTpDR0FmZmlu
ZVRyYW5zZm9ybUlkZW50aXR5XTsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwor
fQorCistICh2b2lkKXNldFZpZGVvR3Jhdml0eTooTlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKK3sK
KyAgICBfdmlkZW9HcmF2aXR5ID0gdmlkZW9HcmF2aXR5OworICAgIAorICAgIGlmICghW19hdlBs
YXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkgPSBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OworICAg
IGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpKQorICAg
ICAgICBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eVJlc2l6ZTsKKyAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZp
dHlSZXNpemVBc3BlY3QoKSkKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAgZWxzZSBpZiAodmlk
ZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkpCisg
ICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIAorICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7
CisgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5
KGdyYXZpdHkpOworfQorCistIChOU1N0cmluZyAqKXZpZGVvR3Jhdml0eQoreworICAgIHJldHVy
biBfdmlkZW9HcmF2aXR5LmdldCgpOworfQorCistIChDR1JlY3QpdmlkZW9SZWN0Cit7CisgICAg
aWYgKHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIDw9IDAgfHwgc2VsZi52aWRlb0RpbWVuc2lv
bnMuaGVpZ2h0IDw9IDApCisgICAgICAgIHJldHVybiBzZWxmLmJvdW5kczsKKyAgICAKKyAgICBm
bG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxm
LnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7CisKKyAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZp
dHlSZXNpemVBc3BlY3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKQorICAg
ICAgICByZXR1cm4gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNw
ZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKKyAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlS
ZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKKyAg
ICAgICAgcmV0dXJuIHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9B
c3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOworCisgICAgcmV0dXJuIHNlbGYuYm91bmRzOworfQor
CisrIChOU1NldCAqKWtleVBhdGhzRm9yVmFsdWVzQWZmZWN0aW5nVmlkZW9SZWN0Cit7CisgICAg
cmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0czpAInZpZGVvRGltZW5zaW9ucyIsIEAidmlkZW9H
cmF2aXR5IiwgbmlsXTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdlYkFWUGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyA6IFVJVmlldworQGVuZAorCitzdGF0aWMgQ2xhc3MgV2ViQVZQ
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKK3sKKyAg
ICByZXR1cm4gW1dlYkFWUGxheWVyTGF5ZXIgY2xhc3NdOworfQorCitzdGF0aWMgQ2xhc3MgZ2V0
V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKQoreworICAgIHN0YXRp
YyBDbGFzcyB0aGVDbGFzcyA9IG5pbDsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VU
b2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF4geworICAgICAgICB0aGVDbGFz
cyA9IG9iamNfYWxsb2NhdGVDbGFzc1BhaXIoZ2V0VUlWaWV3Q2xhc3MoKSwgIldlYkFWUGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlldyIsIDApOworICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xh
c3NQYWlyKHRoZUNsYXNzKTsKKyAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2JqY19nZXRNZXRh
Q2xhc3MoIldlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIpOworICAgICAgICBj
bGFzc19hZGRNZXRob2QobWV0YUNsYXNzLCBAc2VsZWN0b3IobGF5ZXJDbGFzcyksIChJTVApV2Vi
QVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MsICJAQDoiKTsKKyAg
ICB9KTsKKyAgICAKKyAgICByZXR1cm4gdGhlQ2xhc3M7Cit9CisKK0BpbnRlcmZhY2UgV2ViQVZQ
bGF5ZXJMYXllclZpZXcgOiBfX0FWUGxheWVyTGF5ZXJWaWV3CitAcHJvcGVydHkgKHJldGFpbikg
VUlWaWV3KiB2aWRlb1ZpZXc7CitAZW5kCisKK3N0YXRpYyBDbGFzcyBXZWJBVlBsYXllckxheWVy
Vmlld19sYXllckNsYXNzKGlkLCBTRUwpCit7CisgICAgcmV0dXJuIFtXZWJBVlBsYXllckxheWVy
IGNsYXNzXTsKK30KKworc3RhdGljIEFWUGxheWVyQ29udHJvbGxlciAqV2ViQVZQbGF5ZXJMYXll
clZpZXdfcGxheWVyQ29udHJvbGxlcihpZCBhU2VsZiwgU0VMKQoreworICAgIF9fQVZQbGF5ZXJM
YXllclZpZXcgKnBsYXllckxheWVyID0gYVNlbGY7CisgICAgV2ViQVZQbGF5ZXJMYXllciAqd2Vi
QVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyIHBsYXllckxh
eWVyXTsKKyAgICByZXR1cm4gW3dlYkFWUGxheWVyTGF5ZXIgcGxheWVyQ29udHJvbGxlcl07Cit9
CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIo
aWQgYVNlbGYsIFNFTCwgQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKQorewor
ICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFdl
YkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtw
bGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworICAgIFt3ZWJBVlBsYXllckxheWVyIHNldFBs
YXllckNvbnRyb2xsZXI6IHBsYXllckNvbnRyb2xsZXJdOworfQorCitzdGF0aWMgVUlWaWV3ICpX
ZWJBVlBsYXllckxheWVyVmlld192aWRlb1ZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBfX0FW
UGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllciA9IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5
ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllciBw
bGF5ZXJMYXllcl07CisgICAgQ0FMYXllciogdmlkZW9MYXllciA9IFt3ZWJBVlBsYXllckxheWVy
IHZpZGVvU3VibGF5ZXJdOworICAgIGlmICghdmlkZW9MYXllciB8fCAhdmlkZW9MYXllci5kZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoW1t2aWRlb0xheWVyIGRlbGVn
YXRlXSBpc0tpbmRPZkNsYXNzOmdldFVJVmlld0NsYXNzKCldKTsKKyAgICByZXR1cm4gKFVJVmll
dyAqKVt2aWRlb0xheWVyIGRlbGVnYXRlXTsKK30KKworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJM
YXllclZpZXdfc2V0VmlkZW9WaWV3KGlkIGFTZWxmLCBTRUwsIFVJVmlldyAqdmlkZW9WaWV3KQor
eworICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAg
IFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAq
KVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworICAgIFt3ZWJBVlBsYXllckxheWVyIHNl
dFZpZGVvU3VibGF5ZXI6W3ZpZGVvVmlldyBsYXllcl1dOworfQorCitzdGF0aWMgdm9pZCBXZWJB
VlBsYXllckxheWVyVmlld19zdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQoreworICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpw
bGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
ICopW3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKKwor
ICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilb
cGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBXZWJBVlBsYXllckxheWVyICpwaXBQ
bGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOworICAgIFtw
bGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFz
cGVjdCgpXTsKKyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9TdWJsYXllcjpwbGF5ZXJMYXll
ci52aWRlb1N1YmxheWVyXTsKKyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25z
OnBsYXllckxheWVyLnZpZGVvRGltZW5zaW9uc107CisgICAgW3BpcFBsYXllckxheWVyIHNldFZp
ZGVvR3Jhdml0eTpwbGF5ZXJMYXllci52aWRlb0dyYXZpdHldOworICAgIFtwaXBQbGF5ZXJMYXll
ciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpwbGF5ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJGcmFt
ZV07CisgICAgW3BpcFBsYXllckxheWVyIHNldFBsYXllckNvbnRyb2xsZXI6cGxheWVyTGF5ZXIu
cGxheWVyQ29udHJvbGxlcl07CisgICAgW3BpcFBsYXllckxheWVyIHNldEZ1bGxzY3JlZW5JbnRl
cmZhY2U6cGxheWVyTGF5ZXIuZnVsbHNjcmVlbkludGVyZmFjZV07CisgICAgW3BpcFZpZXcgYWRk
U3VidmlldzpwbGF5ZXJMYXllclZpZXcudmlkZW9WaWV3XTsKK30KKworc3RhdGljIHZvaWQgV2Vi
QVZQbGF5ZXJMYXllclZpZXdfc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQoreworICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpw
bGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBpZiAoVUlWaWV3ICp2aWRlb1ZpZXcgPSBwbGF5
ZXJMYXllclZpZXcudmlkZW9WaWV3KQorICAgICAgICBbcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZp
ZXc6dmlkZW9WaWV3XTsKKyAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcg
KnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW3BsYXll
ckxheWVyVmlldyBwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKKyAgICBXZWJBVlBs
YXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVy
VmlldyBwbGF5ZXJMYXllcl07CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIg
PSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKKyAgICBbcGxheWVyTGF5ZXIg
c2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6cGlwUGxheWVyTGF5ZXIubW9kZWxWaWRlb0xheWVyRnJh
bWVdOworfQorCitzdGF0aWMgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpX
ZWJBVlBsYXllckxheWVyVmlld19waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFT
ZWxmLCBTRUwpCit7CisgICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9
IGFTZWxmOworICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmll
dyA9IFtwbGF5ZXJMYXllclZpZXcgdmFsdWVGb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyJdOworICAgIGlmICghcGlwVmlldykgeworICAgICAgICBwaXBWaWV3ID0gW1tn
ZXRXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdDbGFzcygpIGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdFplcm9dOworICAgICAgICBbcGxheWVyTGF5ZXJWaWV3IHNldFZhbHVl
OnBpcFZpZXcgZm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKKyAg
ICB9CisgICAgcmV0dXJuIHBpcFZpZXc7Cit9CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5
ZXJWaWV3X2RlYWxsb2MoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBsYXllckxheWVyVmll
dyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgUmV0YWluUHRyPFdlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldz4gcGlwVmlldyA9IGFkb3B0TlMoW3BsYXllckxheWVyVmll
dyB2YWx1ZUZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il0pOworICAg
IFtwbGF5ZXJMYXllclZpZXcgc2V0VmFsdWU6bmlsIGZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3Il07CisgICAgb2JqY19zdXBlciBzdXBlckNsYXNzIHsgcGxheWVyTGF5
ZXJWaWV3LCBnZXRfX0FWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSB9OworICAgIGF1dG8gc3VwZXJf
ZGVhbGxvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKShvYmpjX3N1cGVyKiwgU0VMKT4ob2Jq
Y19tc2dTZW5kU3VwZXIpOworICAgIHN1cGVyX2RlYWxsb2MoJnN1cGVyQ2xhc3MsIEBzZWxlY3Rv
cihkZWFsbG9jKSk7Cit9CisKKyNwcmFnbWEgbWFyayAtIE1ldGhvZHMKKworc3RhdGljIENsYXNz
IGdldFdlYkFWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKQoreworICAgIHN0YXRpYyBDbGFzcyB0aGVD
bGFzcyA9IG5pbDsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBk
aXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF4geworICAgICAgICB0aGVDbGFzcyA9IG9iamNfYWxs
b2NhdGVDbGFzc1BhaXIoZ2V0X19BVlBsYXllckxheWVyVmlld0NsYXNzKCksICJXZWJBVlBsYXll
ckxheWVyVmlldyIsIDApOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxl
Y3RvcihkZWFsbG9jKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19kZWFsbG9jLCAidkA6Iik7
CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHNldFBsYXllckNv
bnRyb2xsZXI6KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zZXRQbGF5ZXJDb250cm9sbGVy
LCAidkA6QCIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcihw
bGF5ZXJDb250cm9sbGVyKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19wbGF5ZXJDb250cm9s
bGVyLCAiQEA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9y
KHNldFZpZGVvVmlldzopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFZpZGVvVmlldywg
InZAOkAiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Iodmlk
ZW9WaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld192aWRlb1ZpZXcsICJAQDoiKTsKKyAg
ICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc3RhcnRSb3V0aW5nVmlk
ZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5
ZXJWaWV3X3N0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
LCAidkA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHN0
b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdl
YkFWUGxheWVyTGF5ZXJWaWV3X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXcsICJ2QDoiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBA
c2VsZWN0b3IocGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5
ZXJMYXllclZpZXdfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgIkBAOiIpOworICAg
ICAgICAKKyAgICAgICAgY2xhc3NfYWRkSXZhcih0aGVDbGFzcywgIl9waWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3Iiwgc2l6ZW9mKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVy
VmlldyAqKSwgbG9nMihzaXplb2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
ICopKSwgIkAiKTsKKyAgICAgICAgCisgICAgICAgIG9iamNfcmVnaXN0ZXJDbGFzc1BhaXIodGhl
Q2xhc3MpOworICAgICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFDbGFzcygiV2Vi
QVZQbGF5ZXJMYXllclZpZXciKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1ldGFDbGFzcywg
QHNlbGVjdG9yKGxheWVyQ2xhc3MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xh
c3MsICJAQDoiKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdGhlQ2xhc3M7Cit9CisKK1JlZjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlKQoreworICAgIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdChwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKKyAgICBbaW50ZXJmYWNlLT5tX3Bs
YXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgc2V0RnVsbHNjcmVlbkludGVyZmFjZTppbnRlcmZh
Y2UucHRyKCldOworICAgIHJldHVybiBpbnRlcmZhY2U7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAg
IDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQor
ICAgICwgbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXZWJBVlBsYXll
clZpZXdDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fd2F0Y2hkb2dU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKQoreworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCkKK3sKKyAgICBX
ZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSB0aGlzLT5wbGF5ZXJDb250
cm9sbGVyKCk7CisgICAgaWYgKHBsYXllckNvbnRyb2xsZXIgJiYgcGxheWVyQ29udHJvbGxlci5l
eHRlcm5hbFBsYXliYWNrQWN0aXZlKQorICAgICAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChm
YWxzZSwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lLCAiIik7CisgICAg
aWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Cit9CisKK1dlYkFWUGxheWVyQ29udHJvbGxlciAqV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIoKSBjb25zdAor
eworICAgIHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWVyQ29udHJvbGxl
cigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCit7Cisg
ICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
ID0gbW9kZWw7CisKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKKworICAgIGhhc1ZpZGVvQ2hh
bmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aGFz
VmlkZW8oKSA6IGZhbHNlKTsKKyAgICB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6
IEZsb2F0U2l6ZSgpKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyID0gb2JzZXJ2ZXI7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQoreworICAgIFtwbGF5ZXJDb250cm9s
bGVyKCkgc2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsKKyAgICBbcGxheWVyQ29udHJvbGxl
cigpIHNldEhhc1ZpZGVvOmhhc1ZpZGVvXTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZp
ZGVvRGltZW5zaW9ucykKK3sKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChX
ZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKworICAg
IFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKKyAgICBb
cGxheWVyQ29udHJvbGxlcigpIHNldENvbnRlbnREaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107
CisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldE5lZWRzTGF5b3V0XTsKKworICAgIFdlYkFWUGlj
dHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcgKilbbV9wbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlld107CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIg
PSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKKyAgICBbcGlwUGxheWVyTGF5
ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVvRGltZW5zaW9uc107CisgICAg
W3BpcFZpZXcgc2V0TmVlZHNMYXlvdXRdOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3Ry
aW5nJikKK3sKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOmVuYWJsZWRdOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJl
Y29tZUFjdGl2ZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoJXApIiwgdGhpcyk7Cisg
ICAgaWYgKG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQg
JiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5pc1Zp
c2libGUoKSkgeworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUlu
UGljdHVyZV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBhcmUgYm90
aCBpbiBQaVAgYW5kIGluIEZ1bGxzY3JlZW4gKGkuZS4sIHZpYSBhdXRvLVBpUCksIGFuZCB3ZSBk
aWQgbm90IHN0b3AgZnVsbHNjcmVlbiB1cG9uIHJldHVybmluZywgaXQgbXVzdCBiZQorICAgIC8v
IGJlY2F1c2UgdGhlIG9yaWdpbmF0aW5nIHZpZXcgaXMgbm90IHZpc2libGUsIHNvIGhpZGUgdGhl
IGZ1bGxzY3JlZW4gd2luZG93LgorICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgeworICAgICAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29t
cGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewor
ICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgICAgICAgICAgW1ttX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOworICAgICAgICB9XTsKKyAg
ICB9Cit9CisKK0BpbnRlcmZhY2UgVUlXaW5kb3cgKCkKKy0gKEJPT0wpX2lzSG9zdGVkSW5Bbm90
aGVyUHJvY2VzczsKK0BlbmQKKworQGludGVyZmFjZSBVSVZpZXdDb250cm9sbGVyICgpCitAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduLCBzZXR0ZXI9X3NldElnbm9yZUFwcFN1cHBvcnRlZE9y
aWVudGF0aW9uczopIEJPT0wgX2lnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczsKK0BlbmQK
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVu
KFVJVmlldyYgdmlkZW9WaWV3LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwg
VUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCit7CisgICAg
QVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
Tm9uZSk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworCisgICAgbV9hbGxvd3NQaWN0dXJl
SW5QaWN0dXJlUGxheWJhY2sgPSBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7CisKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFj
dGlvbnM6WUVTXTsKKyAgICBib29sIGlzSW5QaWN0dXJlSW5QaWN0dXJlTW9kZSA9IGhhc01vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSk7CisgICAgbV9tb2RlID0gbW9kZTsKKyAgICBtX3BhcmVudFZpZXcgPSBwYXJlbnRWaWV3Owor
ICAgIG1fcGFyZW50V2luZG93ID0gcGFyZW50Vmlldy53aW5kb3c7CisKKyAgICBpZiAoIVtbcGFy
ZW50VmlldyB3aW5kb3ddIF9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3NdKSB7CisgICAgICAgIGlm
ICghbV93aW5kb3cpCisgICAgICAgICAgICBtX3dpbmRvdyA9IGFkb3B0TlMoW2FsbG9jVUlXaW5k
b3dJbnN0YW5jZSgpIGluaXRXaXRoRnJhbWU6W1tnZXRVSVNjcmVlbkNsYXNzKCkgbWFpblNjcmVl
bl0gYm91bmRzXV0pOworICAgICAgICBbbV93aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFy
VUlDb2xvcigpXTsKKyAgICAgICAgaWYgKCFtX3ZpZXdDb250cm9sbGVyKQorICAgICAgICAgICAg
bV92aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jVUlWaWV3Q29udHJvbGxlckluc3RhbmNl
KCkgaW5pdF0pOworICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gc2V0RnJhbWU6W21f
d2luZG93IGJvdW5kc11dOworICAgICAgICBbbV92aWV3Q29udHJvbGxlciBfc2V0SWdub3JlQXBw
U3VwcG9ydGVkT3JpZW50YXRpb25zOllFU107CisgICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmll
d0NvbnRyb2xsZXI6bV92aWV3Q29udHJvbGxlci5nZXQoKV07CisgICAgICAgIFttX3dpbmRvdyBz
ZXRXaW5kb3dMZXZlbDpnZXRVSVRleHRFZmZlY3RzQmVuZWF0aFN0YXR1c0JhcldpbmRvd0xldmVs
KCkgKyAxXTsKKyAgICAgICAgW21fd2luZG93IG1ha2VLZXlBbmRWaXNpYmxlXTsKKyAgICB9CisK
KyAgICBpZiAoIW1fcGxheWVyTGF5ZXJWaWV3KQorICAgICAgICBtX3BsYXllckxheWVyVmlldyA9
IGFkb3B0TlMoW1tnZXRXZWJBVlBsYXllckxheWVyVmlld0NsYXNzKCkgYWxsb2NdIGluaXRdKTsK
KyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOltwbGF5ZXJDb250cm9sbGVyKCkgaXNF
eHRlcm5hbFBsYXliYWNrQWN0aXZlXV07CisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEJhY2tn
cm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisKKyAgICBpZiAoIWlzSW5QaWN0dXJlSW5QaWN0
dXJlTW9kZSkgeworICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0VmlkZW9WaWV3OiZ2aWRl
b1ZpZXddOworICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgYWRkU3VidmlldzomdmlkZW9WaWV3
XTsKKyAgICB9CisKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBs
YXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKworICAgIFtwbGF5
ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIGluaXRpYWxS
ZWN0LndpZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgpKV07CisgICAgW3BsYXllckxheWVyIHNl
dFZpZGVvRGltZW5zaW9uczpbcGxheWVyQ29udHJvbGxlcigpIGNvbnRlbnREaW1lbnNpb25zXV07
CisgICAgcGxheWVyTGF5ZXIuZnVsbHNjcmVlbkludGVyZmFjZSA9IHRoaXM7CisKKyAgICBpZiAo
IW1fcGxheWVyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIg
PSBhZG9wdE5TKFthbGxvY0FWUGxheWVyVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRo
UGxheWVyTGF5ZXJWaWV3Om1fcGxheWVyTGF5ZXJWaWV3LmdldCgpXSk7CisKKyAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOworICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIHNldFBsYXllckNvbnRyb2xsZXI6KEFWUGxheWVyQ29udHJvbGxl
ciAqKXBsYXllckNvbnRyb2xsZXIoKV07CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0
RGVsZWdhdGU6bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsKKyAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBzZXRBbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s6bV9h
bGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2tdOworCisgICAgW3BsYXllckNvbnRyb2xsZXIo
KSBzZXRQaWN0dXJlSW5QaWN0dXJlUG9zc2libGU6bV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxh
eWJhY2tdOworCisgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgW21fdmlld0Nv
bnRyb2xsZXIgYWRkQ2hpbGRWaWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250cm9sbGVyLmdl
dCgpXTsKKyAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIGFkZFN1YnZpZXc6W21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld11dOworICAgIH0gZWxzZQorICAgICAgICBbcGFyZW50Vmll
dyBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKKworICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3BhcmVudFZpZXcgY29udmVydFJlY3Q6
aW5pdGlhbFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmll
d107CisKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENv
bG9yOmNsZWFyVUlDb2xvcigpXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10g
c2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVCb3R0b21NYXJn
aW4gfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVJpZ2h0TWFyZ2luKV07CisKKyAgICBbW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0TmVlZHNMYXlvdXRdOworICAgIFtbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBbQ0FUcmFuc2Fj
dGlvbiBjb21taXRdOworCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxz
Y3JlZW4oJXApIiwgdGhpcyk7CisKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSBmYWxzZTsKKyAgICBt
X2V4aXRSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICBtX2VudGVyUmVxdWVzdGVkID0gdHJ1ZTsKKwor
ICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlUGljdHVyZUluUGljdHVyZSkKKyAgICAgICAgZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7Cisg
ICAgZWxzZSBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVN0YW5kYXJkKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOworICAg
IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSgpCit7CisgICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQ
aWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIAorICAgIGlmIChbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVQb3NzaWJsZV0pCisgICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHN0YXJ0UGljdHVyZUluUGljdHVyZV07CisgICAgZWxzZQorICAgICAg
ICBmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpCit7CisgICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuU3RhbmRhcmQoJXApIiwgdGhpcyk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworCisgICAgaWYgKFttX3Bs
YXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZUFjdGl2ZV0pIHsKKyAgICAgICAg
Ly8gTk9URTogVGhlIGZ1bGxzY3JlZW4gbW9kZSB3aWxsIGJlIHJlc3RvcmVkIGluIHByZXBhcmVG
b3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcigpLgorICAgICAgICBt
X3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IHRydWU7CisgICAgICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNj
cmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbdGhpcywgcHJvdGVjdGVkVGhpc10g
KEJPT0wgc3VjY2VlZGVkLCBOU0Vycm9yKikgeworICAgICAgICBVTlVTRURfUEFSQU0oc3VjY2Vl
ZGVkKTsKKyAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXApIC0gc3VjY2VlZGVk
KCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcoc3VjY2VlZGVkKSk7CisgICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworCisgICAgICAgIGlm
IChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKKyAgICB9XTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgZmluYWxSZWN0KQoreworICAgIG1fd2F0Y2hkb2dUaW1lci5zdG9wKCk7
CisKKyAgICBtX2V4aXRSZXF1ZXN0ZWQgPSB0cnVlOworICAgIGlmIChtX2V4aXRDb21wbGV0ZWQp
IHsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKKyAgICAK
KyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcg
Y29udmVydFJlY3Q6ZmluYWxSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XS5zdXBlcnZpZXddOworCisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2Vi
QVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAgaWYg
KFtwbGF5ZXJMYXllciB2aWRlb0dyYXZpdHldICE9IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3QoKSkKKyAgICAgICAgW3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpnZXRBVkxh
eWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCldOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBpZiAoaXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKSB7CisgICAg
ICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7Cisg
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAgfSBlbHNlIGlmIChpc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSB8
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgewor
ICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2Ny
ZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChC
T09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgICAgIFttX3dpbmRv
dyBzZXRIaWRkZW46Tk9dOworICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3Rv
cFBpY3R1cmVJblBpY3R1cmVdOworICAgICAgICB9XTsKKyAgICB9IGVsc2UgaWYgKGlzTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKKyAg
ICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVl
bkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJP
T0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOworCisg
ICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgICAgICBbQ0FUcmFuc2Fj
dGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgICAgICAgICAgW21fcGxheWVyTGF5ZXJW
aWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAgICAgICAgICBbW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xv
cigpXTsKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlz
LCB0aGlzXSgpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCisgICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRF
eGl0RnVsbHNjcmVlbigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH1dOworICAgIH07Cit9
CisKK0BpbnRlcmZhY2UgVUlBcHBsaWNhdGlvbiAoKQorLSAodm9pZClfc2V0U3RhdHVzQmFyT3Jp
ZW50YXRpb246KFVJSW50ZXJmYWNlT3JpZW50YXRpb24pbzsKK0BlbmQKKworQGludGVyZmFjZSBV
SVdpbmRvdyAoKQorLSAoVUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZhY2VPcmllbnRhdGlv
bjsKK0BlbmQKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51
cEZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworICAgIGlmICht
X3dpbmRvdykgeworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgIFtt
X3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAgaWYgKG1fcGFyZW50
V2luZG93KQorICAgICAgICAgICAgW1tnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBzaGFyZWRBcHBs
aWNhdGlvbl0gX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOlttX3BhcmVudFdpbmRvdyBpbnRlcmZh
Y2VPcmllbnRhdGlvbl1dOworICAgIH0KKyAgICAKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFBsYXll
ckNvbnRyb2xsZXI6bmlsXTsKKyAgICAKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkKKyAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOworICAgIGlmIChoYXNN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkK
KyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpO
TyBjb21wbGV0aW9uSGFuZGxlcjpbXSAoQk9PTCwgTlNFcnJvciAqKSB7IH1dOworICAgIAorICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAg
ICBpZiAobV92aWV3Q29udHJvbGxlcikKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
cmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsKKyAgICAKKyAgICBbbV9wbGF5ZXJMYXll
clZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXdd
IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBuaWw7Cisg
ICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBtX3dpbmRvdyA9IG5pbDsKKyAg
ICBtX3BhcmVudFZpZXcgPSBuaWw7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7CisgICAgCisg
ICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKKworICAgIG1fZW50ZXJSZXF1
ZXN0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6aW52YWxpZGF0ZSgpCit7CisgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKKyAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKKyAgICAKKyAgICBjbGVhbnVwRnVs
bHNjcmVlbigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpy
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAoIW1fZW50ZXJSZXF1ZXN0
ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisK
KyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOworCisgICAgaWYgKHdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiAhbV9leGl0UmVxdWVzdGVkKSB7Cisg
ICAgICAgIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29s
IHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCit7CisgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKCVwKSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSk7Cisg
ICAgaWYgKG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spIHsKKyAgICAgICAgCisgICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0
UmVjdDppbmxpbmVSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBl
cnZpZXddOworCisgICAgICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gY2FsbGJhY2sgPSBX
VEZNb3ZlKG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spOworICAgICAgICBjYWxsYmFjayh2aXNp
YmxlKTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gW3BsYXllckNvbnRyb2xsZXIoKSBpc1BsYXlpbmddICYmIG1fbW9kZSA9PSBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCAmJiBzdXBwb3J0
c1BpY3R1cmVJblBpY3R1cmUoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChi
b29sKT4mJiBjYWxsYmFjaykKK3sKKyAgICBtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayk7CisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAg
ICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxT
dGFydFBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwg
dGhpcyk7CisgICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJ
blBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRl
ckVudGVyaW5nRm9yZWdyb3VuZCA9IFttX3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBp
Y3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF07CisgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CisKKyAgICBpZiAobV9t
b2RlICYgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQp
IHsKKyAgICAgICAgaWYgKCFbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJl
V2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdKSB7CisgICAgICAgICAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVk
OllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJy
b3IqKSB7CisgICAgICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgICAg
ICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsK
KyAgICAgICAgICAgIH1dOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgW21fd2lu
ZG93IHNldEhpZGRlbjpZRVNdOworICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmll
d10gc2V0SGlkZGVuOllFU107CisgICAgfQorCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxs
c2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZh
aWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGlj
dHVyZSglcCkiLCB0aGlzKTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1Bs
YXliYWNrQ29udHJvbHM6WUVTXTsKKworICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVs
bHNjcmVlbigpOworCisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAg
ICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOworICAg
IG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxz
ZTsKKworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBpZiAoaGFzTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwg
bV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApCisgICAgICAgIHJl
dHVybjsKKworICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgIFtbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46Tk9dOworCisgICAgaWYgKG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1
cmVJblBpY3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAg
IGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0
YW5kYXJkKSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkg
eworICAgICAgICAvLyBBU1NVTVBUSU9OOiB3ZSBhcmUgZXhpdGluZyBwaXAgYmVjYXVzZSB3ZSBh
cmUgZW50ZXJpbmcgZnVsbHNjcmVlbgorICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKworICAg
IFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwor
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xl
YXJVSUNvbG9yKCldOworCisgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgIAorICAgIGlmIChtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIt
PmRpZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFu
ZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpKQoreworICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVG
b3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciglcCkiLCB0aGlzKTsK
KyAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgfHwgbV9z
aG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCkgeworICAgICAg
ICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOworICAg
ICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0g
ZmFsc2U7CisgICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVT
dG9wID0gdHJ1ZTsKKworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAg
W1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107CisKKyAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBs
ZXRpb25IYW5kbGVyOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yKikgeworICAgICAgICAgICAgbV9y
ZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3VjY2Vzcyk7CisgICAg
ICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgICAg
ICB9XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZXRhaW5QdHI8
aWQ+IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIg
Y29weV0pOworICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShbcHJvdGVjdGVkVGhpcywg
c3Ryb25nQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgcmVzdG9yZWQpICB7CisgICAgICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQ
aWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciBsYW1iZGEoJXApIC0gcmVz
dG9yZWQoJXMpIiwgcHJvdGVjdGVkVGhpcy5nZXQoKSwgYm9vbFN0cmluZyhyZXN0b3JlZCkpOwor
ICAgICAgICB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpID0gc3Ryb25n
Q29tcGxldGlvbkhhbmRsZXIuZ2V0KCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3Rv
cmVkKTsKKyAgICB9KTsKK30KKworYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCit7CisgICAgaWYgKCFtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWFz
b24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVkKSB7Cisg
ICAgICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3Rh
cnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gaGFz
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7
CisgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVTdGFuZGFyZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh3
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIChyZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFz
b246OkRvbmVCdXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpS
ZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQpKQorICAgICAgICB3ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5wYXVzZSgpOworICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJl
cXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVOb25lLCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBw
ZWQpOworCisgICAgaWYgKCFtX3dhdGNoZG9nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV93
YXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCkKK3sK
KyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3
YXRjaGRvZ1RpbWVyRmlyZWQoJXApIC0gbm8gZXhpdCBmdWxsc2NyZWVuIHJlc3BvbnNlIGluICVn
czsgZm9yY2luZyBmdWxsc2NyZWVuIGhpZGRlbi4iLCB0aGlzLCBkZWZhdWx0V2F0Y2hkb2dUaW1l
ckludGVydmFsLnZhbHVlKCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFttX3dp
bmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10g
c2V0SGlkZGVuOllFU107Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5l
d01vZGUgPSBtX21vZGUgfCBtb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKKyNlbmRpZiAvLyBIQVZFKEFWS0lUKQorCiti
b29sIFdlYkNvcmU6OnN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCit7CisjaWYgUExBVEZPUk0o
SU9TKSAmJiBIQVZFKEFWS0lUKQorICAgIHJldHVybiBbZ2V0QVZQaWN0dXJlSW5QaWN0dXJlQ29u
dHJvbGxlckNsYXNzKCkgaXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydGVkXTsKKyNlbHNlCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVy
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5t
bQppbmRleCA2YmZjNWNhMWFhMjZiMjNlNWU4YTQ3YTJmNjhjMjI4N2YzMThhYTAxLi44NTAzMDZh
YzE1ZWQwYTE4YmM4ZjE3YjRmMmI3YTY0YzEwZGVkMzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIubW0KQEAgLTMxLDkgKzMx
LDkgQEAKIAogI2ltcG9ydCAiQVZLaXRTUEkuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBv
cnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAjaW1wb3J0IDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMzdkNGU1NjMx
ODkxMDEwYWE4YTdiYTVkYjk2OTgxNjJjMjdjZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgi
Ci0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIK
LSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8
b2JqYy9vYmpjLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1PQkpDX0NMQVNTIFdlYkFW
UGxheWVyQ29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKLU9C
SkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgVUlXaW5kb3c7Ci1PQkpDX0NM
QVNTIFVJVmlldzsKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkNoYW5nZU9ic2VydmVyOwotCi1jbGFzcyBX
RUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdAotICAgIDogcHVi
bGljIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdD4gewotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
JiBtb2RlbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0KG1vZGVsKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbDsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKLQotICAgIC8v
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
dXJhdGlvbkNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1l
KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQo
ZG91YmxlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJv
b2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3Vi
bGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgb3ZlcnJpZGU7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wp
IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
IGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChi
b29sKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29s
KSBvdmVycmlkZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
KCk7Ci0KLSAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25z
dCB7IHJldHVybiBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgotICAg
IFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsJik7Ci0KLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVy
PiBtX3BsYXllckNvbnRyb2xsZXI7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwgeyBudWxscHRyIH07Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3
ZDE2ZGIxZWY0ZGRmYTNlZmIwNTNlZTBmODUwYjk1OWJmZTJiMzcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEs
MjEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQuaCIKLQotI2lmIFBMQVRGT1JNKElPUykKLSNpZiBIQVZFKEFWS0lUKQot
Ci0jaW1wb3J0ICJBVktpdFNQSS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVk
aWFTZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldl
YkFWUGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwu
aCIKLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZUX0xJTktf
RlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0
LCBBVlZhbHVlVGltaW5nKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi0gICAgOiBtX3BsYXllckNvbnRyb2xsZXIoYWRv
cHROUyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF0pKQotICAgICwgbV9wbGF5
YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCi17Ci0gICAgbW9kZWwuYWRkQ2xpZW50KCp0aGlzKTsK
LSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTp0aGlz
XTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOiZtb2RlbF07Ci0KLSAgICBk
dXJhdGlvbkNoYW5nZWQobW9kZWwuZHVyYXRpb24oKSk7Ci0gICAgY3VycmVudFRpbWVDaGFuZ2Vk
KG1vZGVsLmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVt
VXB0aW1lXSk7Ci0gICAgYnVmZmVyZWRUaW1lQ2hhbmdlZChtb2RlbC5idWZmZXJlZFRpbWUoKSk7
Ci0gICAgcmF0ZUNoYW5nZWQobW9kZWwuaXNQbGF5aW5nKCksIG1vZGVsLnBsYXliYWNrUmF0ZSgp
KTsKLSAgICBzZWVrYWJsZVJhbmdlc0NoYW5nZWQobW9kZWwuc2Vla2FibGVSYW5nZXMoKSwgbW9k
ZWwuc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpLCBtb2RlbC5saXZlVXBkYXRl
SW50ZXJ2YWwoKSk7Ci0gICAgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtb2RlbC5jYW5QbGF5
RmFzdFJldmVyc2UoKSk7Ci0gICAgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1v
ZGVsLmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCksIG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3Rl
ZEluZGV4KCkpOwotICAgIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVs
LmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0
ZWRJbmRleCgpKTsKLSAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtb2RlbC5leHRlcm5hbFBs
YXliYWNrRW5hYmxlZCgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpLCBtb2Rl
bC5leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpKTsKLSAgICB3aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQobW9kZWwud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQoKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIg
c2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOm51bGxwdHJdOwotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0RXh0ZXJuYWxQbGF5YmFja0FjdGl2ZTpmYWxzZV07Ci0KLSAgICBpbnZhbGlkYXRl
KCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVk
aWFTdGF0ZSgpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciByZXNldE1lZGlhU3RhdGVdOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5n
ZWQoZG91YmxlIGR1cmF0aW9uKQotewotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVy
Q29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKLQotICAgIHBsYXllckNvbnRy
b2xsZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgcGxheWVyQ29udHJvbGxlci5j
b250ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOwotCi0gICAgLy8gRklYTUU6
IHdlIHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCi0g
ICAgcGxheWVyQ29udHJvbGxlci5jYW5QbGF5ID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIu
Y2FuUGF1c2UgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5YmFjayA9
IFlFUzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKLSAgICBw
bGF5ZXJDb250cm9sbGVyLmNhblNlZWsgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5zdGF0
dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBj
dXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCi17Ci0gICAgTlNUaW1lSW50ZXJ2YWwgYW5j
aG9yVGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JU
aW1lOwotICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3Mo
KSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQotICAgICAgICBhbmNob3JU
aW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldFRpbWluZzp0aW1pbmddOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0g
ICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250
cm9sbGVyLmdldCgpOwotICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29u
dGVudER1cmF0aW9uOwotICAgIGRvdWJsZSBub3JtYWxpemVkQnVmZmVyZWRUaW1lOwotICAgIGlm
ICghZHVyYXRpb24pCi0gICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOwotICAgIGVs
c2UKLSAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZSAvIGR1cmF0
aW9uOwotICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAsIEAobm9y
bWFsaXplZEJ1ZmZlcmVkVGltZSldOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRl
KQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFj
a1JhdGUgOiAwLl07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3Vi
bGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHNlZWthYmxlUmFuZ2VzID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVS
YW5nZXMuc3RhcnQoaSkucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGRvdWJsZSBlbmQg
PSB0aW1lUmFuZ2VzLmVuZChpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLQotICAgICAgICBDTVRp
bWVSYW5nZSByYW5nZSA9IENNVGltZVJhbmdlTWFrZShDTVRpbWVNYWtlV2l0aFNlY29uZHMoc3Rh
cnQsIDEwMDApLCBDTVRpbWVNYWtlV2l0aFNlY29uZHMoZW5kLXN0YXJ0LCAxMDAwKSk7Ci0gICAg
ICAgIFtzZWVrYWJsZVJhbmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFu
Z2U6cmFuZ2VdXTsKLSAgICB9Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxl
VGltZVJhbmdlczpzZWVrYWJsZVJhbmdlcy5nZXQoKV07Ci0gICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRTZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lOiBsYXN0TW9kaWZpZWRUaW1l
XTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExpdmVVcGRhdGVJbnRlcnZhbDpsaXZlVXBk
YXRlSW50ZXJ2YWxdOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQotewot
ICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlGYXN0UmV2
ZXJzZV07Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0
aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQot
ewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV0pOwot
ICAgIGZvciAoYXV0byYgb3B0aW9uIDogb3B0aW9ucykgewotICAgICAgICBSZXRhaW5QdHI8V2Vi
QVZNZWRpYVNlbGVjdGlvbk9wdGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFWTWVkaWFT
ZWxlY3Rpb25PcHRpb24gYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3dlYk9wdGlvbiBzZXRMb2Nh
bGl6ZWREaXNwbGF5TmFtZTpvcHRpb24uZGlzcGxheU5hbWVdOwotICAgICAgICBbd2ViT3B0aW9u
cyBhZGRPYmplY3Q6d2ViT3B0aW9uLmdldCgpXTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYk9wdGlv
bnM7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25z
KTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
OndlYk9wdGlvbnMuZ2V0KCldOwotICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMg
Y291bnRdKQotICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNV
SW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRp
YVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAgIGlmIChz
ZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQotICAgICAgICBbbV9wbGF5ZXJDb250
cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMg
b2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERl
dmljZU5hbWUpCi17Ci0gICAgQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGUg
ZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNr
VHlwZU5vbmU7Ci0gICAgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6
OlRhcmdldFR5cGVBaXJQbGF5KQotICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxh
eWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlQWlyUGxheTsKLSAgICBlbHNlIGlmICh0
YXJnZXRUeXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQpCi0g
ICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQ
bGF5YmFja1R5cGVUVk91dDsKLQotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29u
dHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKLSAgICBwbGF5ZXJDb250cm9sbGVy
LmV4dGVybmFsUGxheWJhY2tBaXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2FsaXplZERl
dmljZU5hbWU7Ci0gICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4
dGVybmFsUGxheWJhY2tUeXBlOwotICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFj
a0FjdGl2ZSA9IGVuYWJsZWQ7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVk
KQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0QWxsb3dzRXh0ZXJuYWxQbGF5YmFjazoh
ZGlzYWJsZWRdOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojpt
dXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldE11
dGVkOm11dGVkXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
aW52YWxpZGF0ZSgpCi17Ci0gICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm51bGxwdHJd
OwotICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0gICAg
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEhB
VkUoQVZLSVQpCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
QVZLaXQubW0KaW5kZXggZWJjOWE2NzY2NDFjOTc5YWI3ODNhMGRlMWNkNTEwZTRlZjk4M2QxNi4u
MWRlZGJlODhlZDU2ODYwMzYxZDRjYmQ3Njg1MTA3ZTJkNDBlZTBkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktp
dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckFWS2l0Lm1tCkBAIC0zMSwxMyArMzEsMTMgQEAKIAogI2ltcG9ydCAiTG9nZ2lu
Zy5oIgogI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oIgogI2ltcG9ydCAiUXVhcnR6Q29yZVNQSS5oIgogI2ltcG9ydCAiVGltZVJh
bmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNp
bXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0ICJX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5o
IgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBvcnQgIlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL0Nv
cmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRhYzcwNDdhYjcyY2IzNGRmNjE4YzY0ZTA2NjMyOTI1YjZkZTc4ZGUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpCi0K
LSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVu
dW1zLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaCIKLSNpbmNsdWRlIDxvYmpjL29iamMuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotT0JK
Q19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBVSVZpZXdDb250cm9s
bGVyOwotT0JKQ19DTEFTUyBVSVdpbmRvdzsKLU9CSkNfQ0xBU1MgVUlWaWV3OwotT0JKQ19DTEFT
UyBDQUxheWVyOwotT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7Ci1PQkpDX0NMQVNT
IFdlYkFWUGxheWVyTGF5ZXJWaWV3OwotT0JKQ19DTEFTUyBXZWJBVlBsYXllckxheWVyOwotT0JK
Q19DTEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7Ci0KLW5hbWVzcGFjZSBX
VEYgewotY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRS
ZWN0OwotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw7Ci1j
bGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKLSAgICAKLWNsYXNzIFdFQkNP
UkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IGZpbmFsCi0gICAgOiBw
dWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7Ci0KLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKik7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KLQotICAgIC8vIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0No
YW5nZWQoYm9vbCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lv
bnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotCi0gICAgLy8gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZp
bmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihV
SVZpZXcmLCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0
dXJlUGxheWJhY2spOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxz
Y3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4o
Y29uc3QgSW50UmVjdCYgZmluYWxSZWN0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGlu
ZVJlY3QpOwotCi0gICAgZW51bSBjbGFzcyBFeGl0RnVsbFNjcmVlblJlYXNvbiB7Ci0gICAgICAg
IERvbmVCdXR0b25UYXBwZWQsCi0gICAgICAgIEZ1bGxTY3JlZW5CdXR0b25UYXBwZWQsCi0gICAg
ICAgIFBpbmNoR2VzdHVyZUhhbmRsZWQsCi0gICAgICAgIFJlbW90ZUNvbnRyb2xTdG9wRXZlbnRS
ZWNlaXZlZCwKLSAgICAgICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQKLSAgICB9OwotCi0gICAg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbDsgfQotICAgIGJvb2wgc2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29u
KEV4aXRGdWxsU2NyZWVuUmVhc29uKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIGJvb2wg
YWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIG1heUF1
dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBm
dWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNh
bGxiYWNrKTsKLSAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3Q7
Ci0gICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwotCi0gICAgdm9pZCB3aWxs
U3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBkaWRTdGFydFBpY3R1cmVJblBpY3R1
cmUoKTsKLSAgICB2b2lkIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9p
ZCB3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIGRpZFN0b3BQaWN0dXJlSW5Q
aWN0dXJlKCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29t
cGxldGlvbkhhbmRsZXIodm9pZCAoXikoQk9PTCkpOwotCi0gICAgdm9pZCBzZXRNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBjbGVhck1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICBib29s
IGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7IH0KLSAgICBib29sIGlzTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4g
bV9tb2RlID09IG1vZGU7IH0KLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Jik7Ci0gICAgdm9pZCBiZWdpblNlc3Npb24oKTsKLSAgICB2b2lkIGVudGVyUGljdHVyZUlu
UGljdHVyZSgpOwotICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKLSAgICB2b2lk
IHdhdGNoZG9nVGltZXJGaXJlZCgpOwotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxheWVy
Q29udHJvbGxlcigpIGNvbnN0OwotCi0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdh
dGU7Ci0gICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0Nv
bnRyb2xsZXI7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwgeyBudWxscHRyIH07Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIq
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OwotCi0gICAgLy8gVGhlc2Ug
YXJlIG9ubHkgdXNlZCB3aGVuIGZ1bGxzY3JlZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUg
d2luZG93LgotICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV93aW5kb3c7Ci0gICAgUmV0YWluUHRy
PFVJVmlld0NvbnRyb2xsZXI+IG1fdmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFVJVmll
dz4gbV9wYXJlbnRWaWV3OwotICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV9wYXJlbnRXaW5kb3c7
Ci0gICAgUmV0YWluUHRyPFdlYkFWUGxheWVyTGF5ZXJWaWV3PiBtX3BsYXllckxheWVyVmlldzsK
LSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OwotICAgIFdU
Rjo6RnVuY3Rpb248dm9pZChib29sKT4gbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjazsKLSAgICBS
dW5Mb29wOjpUaW1lcjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV93YXRjaGRv
Z1RpbWVyOwotICAgIGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZXhp
dENvbXBsZXRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2VudGVyUmVxdWVzdGVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyB0cnVlIH07Ci0g
ICAgYm9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3Jl
Z3JvdW5kIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1
cmVJblBpY3R1cmVTdG9wIHsgZmFsc2UgfTsKLQotICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4o
KTsKLX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU0OGRjNTU4ZTgzNGI3OGJjMzIzMmYwN2E0NjM1
OGY2NDkxOWExZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbXBvcnQgImNvbmZpZy5o
IgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oIgotCi0jaWYgSEFWRShBVktJVCkKLQotI2ltcG9ydCAiQVZLaXRTUEkuaCIK
LSNpbXBvcnQgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1w
b3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIK
LSNpbXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGlt
ZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KLSNpbXBvcnQgPG9iamMvbWVzc2FnZS5oPgot
I2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1w
b3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFNvZnQtbGlua2luZyBoZWFkZXJzIG11
c3QgYmUgaW5jbHVkZWQgbGFzdCBzaW5jZSB0aGV5ICNkZWZpbmUgZnVuY3Rpb25zLCBjb25zdGFu
dHMsIGV0Yy4KLSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFN
RVdPUksoQVZGb3VuZGF0aW9uKQotU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5
ZXJMYXllcikKLVNPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dy
YXZpdHlSZXNpemUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9u
LCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBOU1N0cmluZyAqKQotU09GVF9MSU5L
X0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZp
bGwsIE5TU3RyaW5nICopCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCi1T
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xs
ZXIpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGxheWVyVmlld0NvbnRyb2xs
ZXIpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIF9fQVZQbGF5ZXJMYXllclZpZXcp
Ci0KLVNPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJ
QXBwbGljYXRpb24pCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJU2NyZWVuKQotU09GVF9MSU5L
X0NMQVNTKFVJS2l0LCBVSVdpbmRvdykKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3KQot
U09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVZpZXdDb250cm9sbGVyKQotU09GVF9MSU5LX0NMQVNT
KFVJS2l0LCBVSUNvbG9yKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJS2l0LCBVSVRleHRFZmZlY3Rz
QmVuZWF0aFN0YXR1c0JhcldpbmRvd0xldmVsLCBVSVdpbmRvd0xldmVsKQotCi1zdGF0aWMgVUlD
b2xvciAqY2xlYXJVSUNvbG9yKCkKLXsKLSAgICByZXR1cm4gKFVJQ29sb3IgKilbZ2V0VUlDb2xv
ckNsYXNzKCkgY2xlYXJDb2xvcl07Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgY29u
c3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAgICByZXR1cm4gdmFsID8gInRydWUi
IDogImZhbHNlIjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBkZWZhdWx0V2F0
Y2hkb2dUaW1lckludGVydmFsIHsgMV9zIH07Ci0KLUBjbGFzcyBXZWJBVk1lZGlhU2VsZWN0aW9u
T3B0aW9uOwotCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA6
IE5TT2JqZWN0IDxBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGVfV2ViS2l0T25seT4gewot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5J
bnRlcmZhY2U7Ci19Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci0tIChCT09MKXBsYXllclZpZXdDb250cm9s
bGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxk
RXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxT
Y3JlZW5SZWFzb24pcmVhc29uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJW
aWV3Q29udHJvbGxlckRlbGVnYXRlCi0tIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dCopZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIHJldHVybiBfZnVsbHNjcmVlbkludGVyZmFj
ZS5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIF9mdWxs
c2NyZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKLX0KLQotLSAodm9pZClwbGF5
ZXJWaWV3Q29udHJvbGxlcldpbGxTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0Nv
bnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5
ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT53aWxsU3Rh
cnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJE
aWRTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJW
aWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7
Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdGFydFBpY3R1cmVJblBpY3R1cmUo
KTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckZhaWxlZFRvU3RhcnRQaWN0dXJl
SW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIg
d2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmll
d0NvbnRyb2xsZXIpOwotICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgc2VsZi5mdWxsc2Ny
ZWVuSW50ZXJmYWNlLT5mYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2
b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXll
clZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAgICBVTlVTRURfUEFS
QU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+
d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRy
b2xsZXJEaWRTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBs
YXllclZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9s
bGVyKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0b3BQaWN0dXJlSW5QaWN0
dXJlKCk7Ci19Ci0KLXN0YXRpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhp
dEZ1bGxTY3JlZW5SZWFzb24gY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24oQVZQbGF5ZXJW
aWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKLXsKLSAgICBzd2l0Y2gg
KHJlYXNvbikgewotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVu
UmVhc29uRG9uZUJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZDsK
LSAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkZ1bGxT
Y3JlZW5CdXR0b25UYXBwZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ7
Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaWN0
dXJlSW5QaWN0dXJlU3RhcnRlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0
ZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25Q
aW5jaEdlc3R1cmVIYW5kbGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1cmVIYW5kbGVkOwot
ICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUmVtb3Rl
Q29udHJvbFN0b3BFdmVudFJlY2VpdmVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3Rv
cEV2ZW50UmVjZWl2ZWQ7Ci0gICAgfQotfQotCi0tIChCT09MKXBsYXllclZpZXdDb250cm9sbGVy
OihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRXhp
dEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3Jl
ZW5SZWFzb24pcmVhc29uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVy
KTsKLSAgICByZXR1cm4gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5zaG91bGRFeGl0RnVsbHNj
cmVlbldpdGhSZWFzb24oY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24ocmVhc29uKSk7Ci19
Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIg
KilwbGF5ZXJWaWV3Q29udHJvbGxlciByZXN0b3JlVXNlckludGVyZmFjZUZvclBpY3R1cmVJblBp
Y3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIHJlc3RvcmVkKSlj
b21wbGV0aW9uSGFuZGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxl
cik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5wcmVwYXJlRm9yUGljdHVyZUluUGlj
dHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXIpOwotfQotQGVu
ZAotCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXIgOiBDQUxheWVyCi1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluKSBOU1N0cmluZyAqdmlkZW9HcmF2aXR5OwotQHByb3BlcnR5IChub25h
dG9taWMsIGdldHRlcj1pc1JlYWR5Rm9yRGlzcGxheSkgQk9PTCByZWFkeUZvckRpc3BsYXk7Ci1A
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4p
IEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4pIENBTGF5ZXIgKnZpZGVvU3VibGF5ZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSwgbnVsbGFibGUpIE5TRGljdGlvbmFyeSAqcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOwot
QHByb3BlcnR5IENHU2l6ZSB2aWRlb0RpbWVuc2lvbnM7Ci1AcHJvcGVydHkgQ0dSZWN0IG1vZGVs
VmlkZW9MYXllckZyYW1lOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJMYXll
ciB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNj
cmVlbkludGVyZmFjZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBfYXZQ
bGF5ZXJDb250cm9sbGVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBfdmlkZW9TdWJsYXllcjsK
LSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF92aWRlb0dyYXZpdHk7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoc2VsZikgewot
ICAgICAgICBbc2VsZiBzZXRNYXNrc1RvQm91bmRzOllFU107Ci0gICAgICAgIF92aWRlb0dyYXZp
dHkgPSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCk7Ci0gICAgfQotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbTlNPYmplY3QgY2FuY2Vs
UHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwotICAgIFtfcGl4ZWxCdWZmZXJBdHRyaWJ1dGVz
IHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAgICByZXR1cm4gX2Z1
bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVy
ZmFjZTooV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZh
Y2UKLXsKLSAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci19
Ci0KLS0gKEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKLXsKLSAgICByZXR1
cm4gKEFWUGxheWVyQ29udHJvbGxlciAqKV9hdlBsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci19Ci0K
LS0gKHZvaWQpc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVy
Q29udHJvbGxlcgotewotICAgIEFTU0VSVCghcGxheWVyQ29udHJvbGxlciB8fCBbcGxheWVyQ29u
dHJvbGxlciBpc0tpbmRPZkNsYXNzOltXZWJBVlBsYXllckNvbnRyb2xsZXIgY2xhc3NdXSk7Ci0g
ICAgX2F2UGxheWVyQ29udHJvbGxlciA9IChXZWJBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJD
b250cm9sbGVyOwotfQotCi0tICh2b2lkKXNldFZpZGVvU3VibGF5ZXI6KENBTGF5ZXIgKil2aWRl
b1N1YmxheWVyCi17Ci0gICAgX3ZpZGVvU3VibGF5ZXIgPSB2aWRlb1N1YmxheWVyOwotfQotCi0t
IChDQUxheWVyKil2aWRlb1N1YmxheWVyCi17Ci0gICAgcmV0dXJuIF92aWRlb1N1YmxheWVyLmdl
dCgpOwotfQotCi0tICh2b2lkKWxheW91dFN1YmxheWVycwotewotICAgIGlmIChbX3ZpZGVvU3Vi
bGF5ZXIgc3VwZXJsYXllcl0gIT0gc2VsZikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFb
X2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtf
dmlkZW9TdWJsYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKHNlbGYu
Ym91bmRzKSwgQ0dSZWN0R2V0TWlkWShzZWxmLmJvdW5kcykpXTsKLQotICAgIGlmIChzZWxmLnZp
ZGVvRGltZW5zaW9ucy5oZWlnaHQgPD0gMCB8fCBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8
PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlVmlkZW9GcmFtZTsK
LSAgICBGbG9hdFJlY3QgdGFyZ2V0VmlkZW9GcmFtZTsKLSAgICBmbG9hdCB2aWRlb0FzcGVjdFJh
dGlvID0gc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5o
ZWlnaHQ7Ci0gICAgCi0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplKCkgaXNF
cXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgewotICAgICAgICBzb3VyY2VWaWRlb0Zy
YW1lID0gc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZTsKLSAgICAgICAgdGFyZ2V0VmlkZW9GcmFt
ZSA9IHNlbGYuYm91bmRzOwotICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlS
ZXNpemVBc3BlY3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7Ci0gICAg
ICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJl
Y3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgICAg
IHRhcmdldFZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3Qo
dmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOwotICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5
ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlk
ZW9HcmF2aXR5XSkgewotICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc21hbGxlc3RSZWN0V2l0
aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVsVmlkZW9M
YXllckZyYW1lKTsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IENHUmVjdE1h
a2UoMCwgMCwgc291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdo
dCgpKTsKLSAgICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKLSAg
ICAgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShz
ZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNt
YWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2Vs
Zi5ib3VuZHMpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQot
ICAgIFVJVmlldyAqdmlldyA9IChVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdOwot
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNj
YWxlKHRhcmdldFZpZGVvRnJhbWUud2lkdGgoKSAvIHNvdXJjZVZpZGVvRnJhbWUud2lkdGgoKSwg
dGFyZ2V0VmlkZW9GcmFtZS5oZWlnaHQoKSAvIHNvdXJjZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOwot
ICAgIFt2aWV3IHNldFRyYW5zZm9ybTp0cmFuc2Zvcm1dOwotICAgIAotICAgIE5TVGltZUludGVy
dmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gW0NBVHJhbnNhY3Rpb24gYW5pbWF0aW9uRHVyYXRpb25d
OwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4gewotICAg
ICAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwotCi0gICAg
ICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgd2l0aE9i
amVjdDpuaWwgYWZ0ZXJEZWxheTphbmltYXRpb25EdXJhdGlvbiArIDAuMV07Ci0gICAgfSk7Ci19
Ci0KLS0gKHZvaWQpcmVzb2x2ZUJvdW5kcwotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91
c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2
ZUJvdW5kcykgb2JqZWN0Om5pbF07Ci0gICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxl
Z2F0ZV0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1
cGVybGF5ZXJdICE9IHNlbGYpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoQ0dSZWN0
RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkgJiYg
Q0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRl
bGVnYXRlXSB0cmFuc2Zvcm1dKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFtDQVRyYW5z
YWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjow
XTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIAotICAg
IGlmICghQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYg
Ym91bmRzXSkpIHsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IFtzZWxmIGJv
dW5kc107Ci0gICAgICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7Ci0g
ICAgICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUo
c2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgfQotICAgIFsoVUlWaWV3ICopW192aWRl
b1N1YmxheWVyIGRlbGVnYXRlXSBzZXRUcmFuc2Zvcm06Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0
eV07Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotLSAodm9pZClzZXRW
aWRlb0dyYXZpdHk6KE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Ci17Ci0gICAgX3ZpZGVvR3Jhdml0
eSA9IHZpZGVvR3Jhdml0eTsKLSAgICAKLSAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRl
bGVnYXRlXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAodmlkZW9HcmF2aXR5
ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSkKLSAgICAgICAgZ3Jhdml0eSA9IFdl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemU7Ci0gICAg
aWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkp
Ci0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGVsc2UgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRB
VkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpKQotICAgICAgICBncmF2aXR5ID0g
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dEZpbGw7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAKLSAg
ICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOwotICAgIF9mdWxsc2NyZWVu
SW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShncmF2aXR5KTsKLX0KLQot
LSAoTlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKLXsKLSAgICByZXR1cm4gX3ZpZGVvR3Jhdml0eS5n
ZXQoKTsKLX0KLQotLSAoQ0dSZWN0KXZpZGVvUmVjdAotewotICAgIGlmIChzZWxmLnZpZGVvRGlt
ZW5zaW9ucy53aWR0aCA8PSAwIHx8IHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodCA8PSAwKQot
ICAgICAgICByZXR1cm4gc2VsZi5ib3VuZHM7Ci0gICAgCi0gICAgZmxvYXQgdmlkZW9Bc3BlY3RS
YXRpbyA9IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMu
aGVpZ2h0OwotCi0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkg
aXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKLSAgICAgICAgcmV0dXJuIGxhcmdl
c3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJv
dW5kcyk7Ci0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgp
IGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pCi0gICAgICAgIHJldHVybiBzbWFs
bGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYu
Ym91bmRzKTsKLQotICAgIHJldHVybiBzZWxmLmJvdW5kczsKLX0KLQotKyAoTlNTZXQgKilrZXlQ
YXRoc0ZvclZhbHVlc0FmZmVjdGluZ1ZpZGVvUmVjdAotewotICAgIHJldHVybiBbTlNTZXQgc2V0
V2l0aE9iamVjdHM6QCJ2aWRlb0RpbWVuc2lvbnMiLCBAInZpZGVvR3Jhdml0eSIsIG5pbF07Ci19
Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcgOiBVSVZpZXcKLUBlbmQKLQotc3RhdGljIENsYXNzIFdlYkFWUGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlld19sYXllckNsYXNzKGlkLCBTRUwpCi17Ci0gICAgcmV0dXJuIFtXZWJBVlBs
YXllckxheWVyIGNsYXNzXTsKLX0KLQotc3RhdGljIENsYXNzIGdldFdlYkFWUGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlld0NsYXNzKCkKLXsKLSAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3Mg
PSBuaWw7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0
Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKLSAgICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRl
Q2xhc3NQYWlyKGdldFVJVmlld0NsYXNzKCksICJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXciLCAwKTsKLSAgICAgICAgb2JqY19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7
Ci0gICAgICAgIENsYXNzIG1ldGFDbGFzcyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1l
dGFDbGFzcywgQHNlbGVjdG9yKGxheWVyQ2xhc3MpLCAoSU1QKVdlYkFWUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlld19sYXllckNsYXNzLCAiQEA6Iik7Ci0gICAgfSk7Ci0gICAgCi0gICAg
cmV0dXJuIHRoZUNsYXNzOwotfQotCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXJWaWV3IDog
X19BVlBsYXllckxheWVyVmlldwotQHByb3BlcnR5IChyZXRhaW4pIFVJVmlldyogdmlkZW9WaWV3
OwotQGVuZAotCi1zdGF0aWMgQ2xhc3MgV2ViQVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcyhp
ZCwgU0VMKQotewotICAgIHJldHVybiBbV2ViQVZQbGF5ZXJMYXllciBjbGFzc107Ci19Ci0KLXN0
YXRpYyBBVlBsYXllckNvbnRyb2xsZXIgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3BsYXllckNvbnRy
b2xsZXIoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJM
YXllciA9IGFTZWxmOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAo
V2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllciBwbGF5ZXJMYXllcl07Ci0gICAgcmV0dXJu
IFt3ZWJBVlBsYXllckxheWVyIHBsYXllckNvbnRyb2xsZXJdOwotfQotCi1zdGF0aWMgdm9pZCBX
ZWJBVlBsYXllckxheWVyVmlld19zZXRQbGF5ZXJDb250cm9sbGVyKGlkIGFTZWxmLCBTRUwsIEFW
UGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcikKLXsKLSAgICBfX0FWUGxheWVyTGF5
ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAgICBXZWJBVlBsYXllckxheWVyICp3
ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBs
YXllckxheWVyXTsKLSAgICBbd2ViQVZQbGF5ZXJMYXllciBzZXRQbGF5ZXJDb250cm9sbGVyOiBw
bGF5ZXJDb250cm9sbGVyXTsKLX0KLQotc3RhdGljIFVJVmlldyAqV2ViQVZQbGF5ZXJMYXllclZp
ZXdfdmlkZW9WaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAq
cGxheWVyTGF5ZXIgPSBhU2VsZjsKLSAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxh
eWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXIgcGxheWVyTGF5ZXJdOwotICAg
IENBTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbd2ViQVZQbGF5ZXJMYXllciB2aWRlb1N1YmxheWVyXTsK
LSAgICBpZiAoIXZpZGVvTGF5ZXIgfHwgIXZpZGVvTGF5ZXIuZGVsZWdhdGUpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgQVNTRVJUKFtbdmlkZW9MYXllciBkZWxlZ2F0ZV0gaXNLaW5kT2ZDbGFz
czpnZXRVSVZpZXdDbGFzcygpXSk7Ci0gICAgcmV0dXJuIChVSVZpZXcgKilbdmlkZW9MYXllciBk
ZWxlZ2F0ZV07Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFZpZGVv
VmlldyhpZCBhU2VsZiwgU0VMLCBVSVZpZXcgKnZpZGVvVmlldykKLXsKLSAgICBfX0FWUGxheWVy
TGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAgICBXZWJBVlBsYXllckxheWVy
ICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3
IHBsYXllckxheWVyXTsKLSAgICBbd2ViQVZQbGF5ZXJMYXllciBzZXRWaWRlb1N1YmxheWVyOlt2
aWRlb1ZpZXcgbGF5ZXJdXTsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdf
c3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNl
bGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0g
YVNlbGY7Ci0gICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3
ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVtwbGF5ZXJMYXllclZp
ZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld107Ci0KLSAgICBXZWJBVlBsYXllckxh
eWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBw
bGF5ZXJMYXllcl07Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIgPSAoV2Vi
QVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKLSAgICBbcGxheWVyTGF5ZXIgc2V0Vmlk
ZW9HcmF2aXR5OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKV07Ci0gICAgW3Bp
cFBsYXllckxheWVyIHNldFZpZGVvU3VibGF5ZXI6cGxheWVyTGF5ZXIudmlkZW9TdWJsYXllcl07
Ci0gICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXllci52aWRl
b0RpbWVuc2lvbnNdOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6cGxheWVy
TGF5ZXIudmlkZW9HcmF2aXR5XTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xh
eWVyRnJhbWU6cGxheWVyTGF5ZXIubW9kZWxWaWRlb0xheWVyRnJhbWVdOwotICAgIFtwaXBQbGF5
ZXJMYXllciBzZXRQbGF5ZXJDb250cm9sbGVyOnBsYXllckxheWVyLnBsYXllckNvbnRyb2xsZXJd
OwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOnBsYXllckxheWVy
LmZ1bGxzY3JlZW5JbnRlcmZhY2VdOwotICAgIFtwaXBWaWV3IGFkZFN1YnZpZXc6cGxheWVyTGF5
ZXJWaWV3LnZpZGVvVmlld107Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3
X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNl
bGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0g
YVNlbGY7Ci0gICAgaWYgKFVJVmlldyAqdmlkZW9WaWV3ID0gcGxheWVyTGF5ZXJWaWV3LnZpZGVv
VmlldykKLSAgICAgICAgW3BsYXllckxheWVyVmlldyBhZGRTdWJ2aWV3OnZpZGVvVmlld107Ci0g
ICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFW
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVtwbGF5ZXJMYXllclZpZXcgcGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlld107Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVy
TGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJd
OwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5
ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAgW3BsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXll
ckZyYW1lOnBpcFBsYXllckxheWVyLm1vZGVsVmlkZW9MYXllckZyYW1lXTsKLX0KLQotc3RhdGlj
IFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqV2ViQVZQbGF5ZXJMYXllclZp
ZXdfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQotewotICAg
IFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAgICBXZWJB
VlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSBbcGxheWVyTGF5ZXJW
aWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKLSAg
ICBpZiAoIXBpcFZpZXcpIHsKLSAgICAgICAgcGlwVmlldyA9IFtbZ2V0V2ViQVZQaWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3Ra
ZXJvXTsKLSAgICAgICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1ZTpwaXBWaWV3IGZvcktleTpA
Il9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Ci0gICAgfQotICAgIHJldHVybiBw
aXBWaWV3OwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19kZWFsbG9jKGlk
IGFTZWxmLCBTRUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmll
dyA9IGFTZWxmOwotICAgIFJldGFpblB0cjxXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXc+IHBpcFZpZXcgPSBhZG9wdE5TKFtwbGF5ZXJMYXllclZpZXcgdmFsdWVGb3JLZXk6QCJf
cGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdKTsKLSAgICBbcGxheWVyTGF5ZXJWaWV3
IHNldFZhbHVlOm5pbCBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJd
OwotICAgIG9iamNfc3VwZXIgc3VwZXJDbGFzcyB7IHBsYXllckxheWVyVmlldywgZ2V0X19BVlBs
YXllckxheWVyVmlld0NsYXNzKCkgfTsKLSAgICBhdXRvIHN1cGVyX2RlYWxsb2MgPSByZWludGVy
cHJldF9jYXN0PHZvaWQoKikob2JqY19zdXBlciosIFNFTCk+KG9iamNfbXNnU2VuZFN1cGVyKTsK
LSAgICBzdXBlcl9kZWFsbG9jKCZzdXBlckNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYykpOwotfQot
Ci0jcHJhZ21hIG1hcmsgLSBNZXRob2RzCi0KLXN0YXRpYyBDbGFzcyBnZXRXZWJBVlBsYXllckxh
eWVyVmlld0NsYXNzKCkKLXsKLSAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7Ci0gICAg
c3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25j
ZVRva2VuLCBeIHsKLSAgICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdl
dF9fQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpLCAiV2ViQVZQbGF5ZXJMYXllclZpZXciLCAwKTsK
LSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYyksIChJ
TVApV2ViQVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYywgInZAOiIpOwotICAgICAgICBjbGFzc19h
ZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRQbGF5ZXJDb250cm9sbGVyOiksIChJTVAp
V2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxlciwgInZAOkAiKTsKLSAgICAg
ICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IocGxheWVyQ29udHJvbGxlciks
IChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfcGxheWVyQ29udHJvbGxlciwgIkBAOiIpOwotICAg
ICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRWaWRlb1ZpZXc6KSwg
KElNUClXZWJBVlBsYXllckxheWVyVmlld19zZXRWaWRlb1ZpZXcsICJ2QDpAIik7Ci0gICAgICAg
IGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHZpZGVvVmlldyksIChJTVApV2Vi
QVZQbGF5ZXJMYXllclZpZXdfdmlkZW9WaWV3LCAiQEA6Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1l
dGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHN0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zdGFydFJvdXRp
bmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgInZAOiIpOwotICAgICAg
ICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzdG9wUm91dGluZ1ZpZGVvVG9Q
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmll
d19zdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAidkA6
Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcsICJAQDoiKTsKLSAgICAgICAgCi0gICAgICAgIGNs
YXNzX2FkZEl2YXIodGhlQ2xhc3MsICJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIs
IHNpemVvZihXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKiksIGxvZzIoc2l6
ZW9mKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKSksICJAIik7Ci0gICAg
ICAgIAotICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsKLSAgICAgICAg
Q2xhc3MgbWV0YUNsYXNzID0gb2JqY19nZXRNZXRhQ2xhc3MoIldlYkFWUGxheWVyTGF5ZXJWaWV3
Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNs
YXNzKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19sYXllckNsYXNzLCAiQEA6Iik7Ci0gICAg
fSk7Ci0gICAgcmV0dXJuIHRoZUNsYXNzOwotfQotCi1SZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkK
LXsKLSAgICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVyZmFjZSA9
IGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQocGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlKSk7Ci0gICAgW2ludGVyZmFjZS0+bV9wbGF5ZXJWaWV3Q29udHJvbGxl
ckRlbGVnYXRlIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJmYWNlLnB0cigpXTsKLSAgICBy
ZXR1cm4gaW50ZXJmYWNlOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICA6IG1fcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICAsIG1fcGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZShhZG9wdE5TKFtbV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRl
bGVnYXRlIGFsbG9jXSBpbml0XSkpCi0gICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFp
bigpLCB0aGlzLCAmV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGlt
ZXJGaXJlZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6On5XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCi17Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9s
bGVyKiBwbGF5ZXJDb250cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxlcigpOwotICAgIGlm
IChwbGF5ZXJDb250cm9sbGVyICYmIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0Fj
dGl2ZSkKLSAgICAgICAgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZmFsc2UsIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSwgIiIpOwotICAgIGlmIChtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQo
KnRoaXMpOwotfQotCi1XZWJBVlBsYXllckNvbnRyb2xsZXIgKldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXllckNvbnRyb2xsZXIoKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQotewotICAgIGlmIChtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGll
bnQoKnRoaXMpOwotCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG1vZGVsOwotCi0gICAg
aWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwtPmFkZENsaWVudCgqdGhpcyk7Ci0KLSAgICBoYXNWaWRlb0NoYW5nZWQobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCA/IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZSk7
Ci0gICAgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKSk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBv
YnNlcnZlcikKLXsKLSAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpoYXNWaWRlb0NoYW5n
ZWQoYm9vbCBoYXNWaWRlbykKLXsKLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEhhc0VuYWJs
ZWRWaWRlbzpoYXNWaWRlb107Ci0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNWaWRlbzpo
YXNWaWRlb107Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17
Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAq
KVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0KLSAgICBbcGxheWVyTGF5ZXIgc2V0
VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107Ci0gICAgW3BsYXllckNvbnRyb2xsZXIo
KSBzZXRDb250ZW50RGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwotICAgIFttX3BsYXllckxh
eWVyVmlldyBzZXROZWVkc0xheW91dF07Ci0KLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3ICopW21fcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdd
OwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5
ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGltZW5z
aW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOwotICAgIFtwaXBWaWV3IHNldE5lZWRz
TGF5b3V0XTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgW21f
cGxheWVyTGF5ZXJWaWV3IHNldEhpZGRlbjplbmFibGVkXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQotewot
ICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFw
cGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCVwKSIsIHRoaXMpOwotICAgIGlmIChtX3Nob3VsZFJl
dHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kICYmIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aXNWaXNpYmxlKCkpIHsKLSAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIGJvdGggaW4gUGlQIGFuZCBpbiBG
dWxsc2NyZWVuIChpLmUuLCB2aWEgYXV0by1QaVApLCBhbmQgd2UgZGlkIG5vdCBzdG9wIGZ1bGxz
Y3JlZW4gdXBvbiByZXR1cm5pbmcsIGl0IG11c3QgYmUKLSAgICAvLyBiZWNhdXNlIHRoZSBvcmln
aW5hdGluZyB2aWV3IGlzIG5vdCB2aXNpYmxlLCBzbyBoaWRlIHRoZSBmdWxsc2NyZWVuIHdpbmRv
dy4KLSAgICBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVN0YW5kYXJkIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltw
cm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIFttX3dp
bmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgfV07Ci0gICAgfQotfQotCi1AaW50ZXJm
YWNlIFVJV2luZG93ICgpCi0tIChCT09MKV9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3M7Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChub25hdG9taWMs
IGFzc2lnbiwgc2V0dGVyPV9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6KSBCT09M
IF9pZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM7Ci1AZW5kCi0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmll
dywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50Vmll
dywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wg
YWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQotewotICAgIEFTU0VSVChtb2RlICE9IEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNj
cmVlbiglcCkiLCB0aGlzKTsKLQotICAgIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNr
ID0gYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOwotCi0gICAgW0NBVHJhbnNhY3Rpb24g
YmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAg
Ym9vbCBpc0luUGljdHVyZUluUGljdHVyZU1vZGUgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIG1fbW9kZSA9
IG1vZGU7Ci0gICAgbV9wYXJlbnRWaWV3ID0gcGFyZW50VmlldzsKLSAgICBtX3BhcmVudFdpbmRv
dyA9IHBhcmVudFZpZXcud2luZG93OwotCi0gICAgaWYgKCFbW3BhcmVudFZpZXcgd2luZG93XSBf
aXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzXSkgewotICAgICAgICBpZiAoIW1fd2luZG93KQotICAg
ICAgICAgICAgbV93aW5kb3cgPSBhZG9wdE5TKFthbGxvY1VJV2luZG93SW5zdGFuY2UoKSBpbml0
V2l0aEZyYW1lOltbZ2V0VUlTY3JlZW5DbGFzcygpIG1haW5TY3JlZW5dIGJvdW5kc11dKTsKLSAg
ICAgICAgW21fd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAg
ICAgIGlmICghbV92aWV3Q29udHJvbGxlcikKLSAgICAgICAgICAgIG1fdmlld0NvbnRyb2xsZXIg
PSBhZG9wdE5TKFthbGxvY1VJVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICAg
ICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOlttX3dpbmRvdyBib3VuZHNdXTsK
LSAgICAgICAgW21fdmlld0NvbnRyb2xsZXIgX3NldElnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0
aW9uczpZRVNdOwotICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm1fdmll
d0NvbnRyb2xsZXIuZ2V0KCldOwotICAgICAgICBbbV93aW5kb3cgc2V0V2luZG93TGV2ZWw6Z2V0
VUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCgpICsgMV07Ci0gICAgICAg
IFttX3dpbmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07Ci0gICAgfQotCi0gICAgaWYgKCFtX3BsYXll
ckxheWVyVmlldykKLSAgICAgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBhZG9wdE5TKFtbZ2V0V2Vi
QVZQbGF5ZXJMYXllclZpZXdDbGFzcygpIGFsbG9jXSBpbml0XSk7Ci0gICAgW21fcGxheWVyTGF5
ZXJWaWV3IHNldEhpZGRlbjpbcGxheWVyQ29udHJvbGxlcigpIGlzRXh0ZXJuYWxQbGF5YmFja0Fj
dGl2ZV1dOwotICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJV
SUNvbG9yKCldOwotCi0gICAgaWYgKCFpc0luUGljdHVyZUluUGljdHVyZU1vZGUpIHsKLSAgICAg
ICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldFZpZGVvVmlldzomdmlkZW9WaWV3XTsKLSAgICAgICAg
W21fcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6JnZpZGVvVmlld107Ci0gICAgfQotCi0gICAg
V2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3Bs
YXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0KLSAgICBbcGxheWVyTGF5ZXIgc2V0TW9kZWxW
aWRlb0xheWVyRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0
aWFsUmVjdC5oZWlnaHQoKSldOwotICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6
W3BsYXllckNvbnRyb2xsZXIoKSBjb250ZW50RGltZW5zaW9uc11dOwotICAgIHBsYXllckxheWVy
LmZ1bGxzY3JlZW5JbnRlcmZhY2UgPSB0aGlzOwotCi0gICAgaWYgKCFtX3BsYXllclZpZXdDb250
cm9sbGVyKQotICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NB
VlBsYXllclZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0aFBsYXllckxheWVyVmlldzpt
X3BsYXllckxheWVyVmlldy5nZXQoKV0pOwotCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
c2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9s
bGVyKCldOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm1fcGxheWVy
Vmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgc2V0QWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOm1fYWxsb3dzUGljdHVyZUluUGlj
dHVyZVBsYXliYWNrXTsKLQotICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0UGljdHVyZUluUGlj
dHVyZVBvc3NpYmxlOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrXTsKLQotICAgIGlm
IChtX3ZpZXdDb250cm9sbGVyKSB7Ci0gICAgICAgIFttX3ZpZXdDb250cm9sbGVyIGFkZENoaWxk
Vmlld0NvbnRyb2xsZXI6bV9wbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgICAgIFtb
bV92aWV3Q29udHJvbGxlciB2aWV3XSBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVy
IHZpZXddXTsKLSAgICB9IGVsc2UKLSAgICAgICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07Ci0KLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XS5mcmFtZSA9IFtwYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmluaXRpYWxSZWN0IHRvVmll
dzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOwotCi0gICAgW1ttX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3Io
KV07Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEF1dG9yZXNpemluZ01h
c2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlQm90dG9tTWFyZ2luIHwgVUlWaWV3QXV0b3Jl
c2l6aW5nRmxleGlibGVSaWdodE1hcmdpbildOwotCi0gICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHNldE5lZWRzTGF5b3V0XTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
dmlld10gbGF5b3V0SWZOZWVkZWRdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
cHJvdGVjdGVkVGhpcywgdGhpc10gewotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBG
dWxsc2NyZWVuKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMp
OwotCi0gICAgbV9leGl0Q29tcGxldGVkID0gZmFsc2U7Ci0gICAgbV9leGl0UmVxdWVzdGVkID0g
ZmFsc2U7Ci0gICAgbV9lbnRlclJlcXVlc3RlZCA9IHRydWU7Ci0KLSAgICBpZiAobW9kZSgpID09
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1
cmUpCi0gICAgICAgIGVudGVyUGljdHVyZUluUGljdHVyZSgpOwotICAgIGVsc2UgaWYgKG1vZGUo
KSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkK
LSAgICAgICAgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKLSAgICBlbHNlCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSgl
cCkiLCB0aGlzKTsKLSAgICAKLSAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0
dXJlSW5QaWN0dXJlUG9zc2libGVdKQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
dGFydFBpY3R1cmVJblBpY3R1cmVdOwotICAgIGVsc2UKLSAgICAgICAgZmFpbGVkVG9TdGFydFBp
Y3R1cmVJblBpY3R1cmUoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJk
KCVwKSIsIHRoaXMpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBpc1BpY3R1cmVJblBpY3R1cmVBY3RpdmVdKSB7Ci0gICAgICAgIC8vIE5PVEU6IFRoZSBmdWxs
c2NyZWVuIG1vZGUgd2lsbCBiZSByZXN0b3JlZCBpbiBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVy
ZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoKS4KLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1
bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSB0cnVlOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMg
Y29tcGxldGlvbkhhbmRsZXI6W3RoaXMsIHByb3RlY3RlZFRoaXNdIChCT09MIHN1Y2NlZWRlZCwg
TlNFcnJvciopIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN1Y2NlZWRlZCk7Ci0gICAgICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVs
bHNjcmVlblN0YW5kYXJkIC0gbGFtYmRhKCVwKSAtIHN1Y2NlZWRlZCglcykiLCB0aGlzLCBib29s
U3RyaW5nKHN1Y2NlZWRlZCkpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRT
aG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLQotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlk
RW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfV07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZp
bmFsUmVjdCkKLXsKLSAgICBtX3dhdGNoZG9nVGltZXIuc3RvcCgpOwotCi0gICAgbV9leGl0UmVx
dWVzdGVkID0gdHJ1ZTsKLSAgICBpZiAobV9leGl0Q29tcGxldGVkKSB7Ci0gICAgICAgIGlmICht
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107Ci0gICAgCi0gICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmZpbmFs
UmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKLQot
ICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilb
bV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAgIGlmIChbcGxheWVyTGF5ZXIgdmlk
ZW9HcmF2aXR5XSAhPSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCi0gICAg
ICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdCgpXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0
SWZOZWVkZWRdOwotCi0gICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgewotICAgICAgICBtX3Nob3VsZFJldHVy
blRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOwotICAgICAgICBbbV93aW5kb3cg
c2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1
cmVJblBpY3R1cmVdOwotICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgfCBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKLSAgICAgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNv
bXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsK
LSAgICAgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVTdGFuZGFyZCk7Ci0gICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsK
LSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJl
XTsKLSAgICAgICAgfV07Ci0gICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29t
cGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewot
ICAgICAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgW0NBVHJh
bnNhY3Rpb24gYmVnaW5dOwotICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFj
dGlvbnM6WUVTXTsKLSAgICAgICAgICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5k
Q29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAgICAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotCi0gICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10oKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAg
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9XTsKLSAgICB9OwotfQotCi1AaW50ZXJmYWNlIFVJ
QXBwbGljYXRpb24gKCkKLS0gKHZvaWQpX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOihVSUludGVy
ZmFjZU9yaWVudGF0aW9uKW87Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlXaW5kb3cgKCkKLS0gKFVJ
SW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJmYWNlT3JpZW50YXRpb247Ci1AZW5kCi0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCkKLXsK
LSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpj
bGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLSAgICBpZiAobV93aW5kb3cpIHsKLSAgICAg
ICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZp
ZXdDb250cm9sbGVyOm5pbF07Ci0gICAgICAgIGlmIChtX3BhcmVudFdpbmRvdykKLSAgICAgICAg
ICAgIFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9zZXRTdGF0
dXNCYXJPcmllbnRhdGlvbjpbbV9wYXJlbnRXaW5kb3cgaW50ZXJmYWNlT3JpZW50YXRpb25dXTsK
LSAgICB9Ci0gICAgCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmls
XTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOm5pbF07
Ci0gICAgCi0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCi0gICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRs
ZXI6W10gKEJPT0wsIE5TRXJyb3IgKikgeyB9XTsKLSAgICAKLSAgICBbW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgaWYgKG1fdmlld0NvbnRy
b2xsZXIpCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHJlbW92ZUZyb21QYXJlbnRW
aWV3Q29udHJvbGxlcl07Ci0gICAgCi0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHJlbW92ZUZyb21T
dXBlcnZpZXddOwotICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKLQotICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gbmlsOwotICAgIG1fcGxheWVyVmlld0Nv
bnRyb2xsZXIgPSBuaWw7Ci0gICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgbV9wYXJlbnRWaWV3ID0g
bmlsOwotICAgIG1fcGFyZW50V2luZG93ID0gbmlsOwotICAgIAotICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZENsZWFudXBGdWxsc2NyZWVuKCk7Ci0KLSAgICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQot
ewotICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7Ci0gICAgbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIgPSBuaWw7Ci0gICAgCi0gICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKCFtX2VudGVyUmVxdWVzdGVkKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1
ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgW21fd2luZG93IHNl
dEhpZGRlbjpZRVNdOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRk
ZW46WUVTXTsKLQotICAgIGlmICh3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgewotICAgICAgICB3ZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJ
bnRSZWN0JiBpbmxpbmVSZWN0KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCkgLSB2aXNp
YmxlKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSkpOwotICAgIGlmIChtX3ByZXBhcmVU
b0lubGluZUNhbGxiYWNrKSB7Ci0gICAgICAgIAotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0
b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKLQotICAgICAg
ICBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGTW92ZShtX3ByZXBhcmVU
b0lubGluZUNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7Ci0gICAgfQotfQot
Ci1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5
U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFtwbGF5ZXJD
b250cm9sbGVyKCkgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJl
KCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3Jl
ZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2sp
Ci17Ci0gICAgbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwot
ICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0
dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIHNldE1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0
YXJ0UGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRo
aXMpOwotICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91
bmQgPSBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdo
ZW5FbnRlcmluZ0JhY2tncm91bmRdOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNo
b3dzUGxheWJhY2tDb250cm9sczpZRVNdOwotCi0gICAgaWYgKG1fbW9kZSAmIEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB7Ci0gICAgICAgIGlmICgh
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50
ZXJpbmdCYWNrZ3JvdW5kXSkgewotICAgICAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhh
bmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAg
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgICAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAgICB9XTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVT
XTsKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNd
OwotICAgIH0KLQotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVy
ZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7
Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllF
U107Ci0KLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVTdGFuZGFyZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZXhpdENvbXBsZXRl
ZCA9IHRydWU7Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLQotICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgbV9zaG91bGRSZXR1cm5U
b0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKLSAgICBtX3Nob3VsZFJldHVyblRv
RnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gZmFsc2U7Ci0KLSAgICBMT0coRnVs
bHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1
cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNj
cmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV93
aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10g
c2V0SGlkZGVuOk5PXTsKLQotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKLXsK
LSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpk
aWRTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICBpZiAoaGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0
b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApIHsKLSAgICAgICAgLy8gQVNT
VU1QVElPTjogd2UgYXJlIGV4aXRpbmcgcGlwIGJlY2F1c2Ugd2UgYXJlIGVudGVyaW5nIGZ1bGxz
Y3JlZW4KLSAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICBbbV9wbGF5ZXJMYXllclZp
ZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLSAgICBbW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLQot
ICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQ
aWN0dXJlSW5QaWN0dXJlKTsKLSAgICAKLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVl
bigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJl
Rm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBs
ZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVy
ZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoJXApIiwgdGhpcyk7Ci0gICAgaWYgKG1fc2hvdWxk
UmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQIHx8IG1fc2hvdWxkUmV0dXJuVG9GdWxs
c2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQpIHsKLSAgICAgICAgbV9zaG91bGRSZXR1cm5U
b0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKLSAgICAgICAgbV9zaG91bGRSZXR1
cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOwotICAgICAgICBt
X3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IHRydWU7Ci0KLSAg
ICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciB2aWV3XSBzZXRIaWRkZW46Tk9dOwotCi0gICAgICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpeKEJP
T0wgc3VjY2VzcywgTlNFcnJvciopIHsKLSAgICAgICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVl
bkZvclBpY3R1cmVJblBpY3R1cmVTdG9wID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOwotICAgICAgICAgICAgaWYgKG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgUmV0YWluUHRyPGlkPiBzdHJvbmdDb21wbGV0
aW9uSGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLSAgICBmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoW3Byb3RlY3RlZFRoaXMsIHN0cm9uZ0NvbXBsZXRpb25I
YW5kbGVyXShib29sIHJlc3RvcmVkKSAgewotICAgICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0
b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIgbGFtYmRhKCVwKSAtIHJlc3RvcmVkKCVzKSIsIHByb3Rl
Y3RlZFRoaXMuZ2V0KCksIGJvb2xTdHJpbmcocmVzdG9yZWQpKTsKLSAgICAgICAgdm9pZCAoXmNv
bXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSA9IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVy
LmdldCgpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN0b3JlZCk7Ci0gICAgfSk7Ci19
Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxs
c2NyZWVuV2l0aFJlYXNvbihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1
bGxTY3JlZW5SZWFzb24gcmVhc29uKQotewotICAgIGlmICghbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVhc29uID09IEV4aXRGdWxsU2Ny
ZWVuUmVhc29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZCkgewotICAgICAgICBpZiAoW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdC
YWNrZ3JvdW5kXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX3Nob3Vs
ZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGhhc01vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAgICBjbGVhck1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAod2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKSAmJiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFw
cGVkIHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BF
dmVudFJlY2VpdmVkKSkKLSAgICAgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2Uo
KTsKLSAgICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSwgcmVhc29u
ID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkKTsKLQotICAgIGlmICgh
bV93YXRjaGRvZ1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fd2F0Y2hkb2dUaW1lci5zdGFy
dE9uZVNob3QoZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLU5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCgpCi17Ci0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVk
KCVwKSAtIG5vIGV4aXQgZnVsbHNjcmVlbiByZXNwb25zZSBpbiAlZ3M7IGZvcmNpbmcgZnVsbHNj
cmVlbiBoaWRkZW4uIiwgdGhpcywgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbC52YWx1ZSgp
KTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllF
U107Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwg
bW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAg
ICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhck1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21v
ZGUgJiB+bW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwp
Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCht
X21vZGUpOwotfQotCi0jZW5kaWYgLy8gSEFWRShBVktJVCkKLQotYm9vbCBXZWJDb3JlOjpzdXBw
b3J0c1BpY3R1cmVJblBpY3R1cmUoKQotewotI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJ
VCkKLSAgICByZXR1cm4gW2dldEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJDbGFzcygpIGlz
UGljdHVyZUluUGljdHVyZVN1cHBvcnRlZF07Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjdhODhjY2VkMGIzYmY2NjRiYjI1YzJkNjg2MjA5MzhlMGU3N2E2NjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkKKworI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK09CSkNfQ0xBU1MgV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7
CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIGZpbmFsCisgICAgOiBwdWJsaWMgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQKKyAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYz4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjPiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKKyAgICB2aXJ0dWFs
IH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKTsKKyAgICBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsOyB9CisKKyAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIGZpbmFsIHsgfQorCisg
ICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKmN1cnJlbnRUaW1lKi8sIGRvdWJsZSAvKmFu
Y2hvclRpbWUqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChi
b29sIC8qaXNQbGF5aW5nKi8sIGZsb2F0IC8qcGxheWJhY2tSYXRlKi8pIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMm
LCBkb3VibGUgLypsYXN0TW9kaWZpZWRUaW1lKi8sIGRvdWJsZSAvKmxpdmVVcGRhdGVJbnRlcnZh
bCovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKm9wdGlv
bnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4Ki8pIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJ
bmRleCovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxl
ZCAqLywgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
LCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIGZpbmFsOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbGF5QmFja0NvbnRyb2xz
TWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsK
KyNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJpbmcoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpOworCitwcml2YXRlOgorICAgIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOworICAg
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0
ciB9OworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciAgeyBudWxs
cHRyIH07CisKKyAgICB2b2lkIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5YmFja1JhdGUs
IGJvb2wgaXNQbGF5aW5nKTsKKyNlbmRpZgorCit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZiMTI1ZjRmY2RhNzc2N2Q2NGVlZDZiNDIxNjU5NmIyM2E2MjdiNWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLm1tCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0
ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiTWVkaWFUaW1lQVZGb3VuZGF0aW9u
LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9ydCAiVGltZVJhbmdl
cy5oIgorI2ltcG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCIKKyNpbXBvcnQgPEFW
Rm91bmRhdGlvbi9BVlRpbWUuaD4KKworI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKwor
U09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKK1NPRlRfTElOS19DTEFTU19PUFRJ
T05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yz4gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwmIG1vZGVsKQoreworICAgIGF1dG8gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMobW9kZWwpKTsKKyAgICBtb2RlbC5hZGRDbGll
bnQoaW50ZXJmYWNlKTsKKyAgICByZXR1cm4gaW50ZXJmYWNlOworfQorCitXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCisgICAgOiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZt
b2RlbCkKK3sKK30KKworV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp+V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjKCkKK3sKKyAgICBpbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1
cmF0aW9uKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAg
ICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tD
b250cm9sc01hbmFnZXIoKTsKKworICAgIGNvbnRyb2xzTWFuYWdlci5jb250ZW50RHVyYXRpb24g
PSBkdXJhdGlvbjsKKworICAgIC8vIEZJWE1FOiBXZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlv
biB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LCBidXQgdGhhdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1
ZS4KKyAgICBjb250cm9sc01hbmFnZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAgIGNvbnRy
b2xzTWFuYWdlci5oYXNFbmFibGVkVmlkZW8gPSBZRVM7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShkdXJhdGlvbik7CisjZW5kaWYKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAg
ICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tD
b250cm9sc01hbmFnZXIoKTsKKyAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWlu
ZyhjdXJyZW50VGltZSwgYW5jaG9yVGltZSwgY29udHJvbHNNYW5hZ2VyLnJhdGUsIGNvbnRyb2xz
TWFuYWdlci5wbGF5aW5nKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRUaW1lKTsK
KyAgICBVTlVTRURfUEFSQU0oYW5jaG9yVGltZSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9h
dCBwbGF5YmFja1JhdGUpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworICAgIFtjb250cm9sc01hbmFnZXIgc2V0UmF0ZTpp
c1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07CisgICAgW2NvbnRyb2xzTWFuYWdlciBzZXRQ
bGF5aW5nOmlzUGxheWluZ107CisgICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1p
bmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJl
bnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0s
IHBsYXliYWNrUmF0ZSwgaXNQbGF5aW5nKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlzUGxh
eWluZyk7CisgICAgVU5VU0VEX1BBUkFNKHBsYXliYWNrUmF0ZSk7CisjZW5kaWYKK30KKwordm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyNp
ZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgdXBkYXRlUGxheWJh
Y2tDb250cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vz
c0luZm9dIHN5c3RlbVVwdGltZV0sIDAsIGZhbHNlKTsKKyNlbmRpZgorICAgIHdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjplbmRTY3J1YmJpbmcoKQoreworICAgIHdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCktPmVuZFNjcnViYmluZygpOworfQorCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQorc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gdGlt
ZVJhbmdlc1RvQXJyYXkoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykKK3sKKyAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJhbmdlQXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFu
Z2VzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgUGxhdGZvcm1UaW1lUmFuZ2VzJiBy
YW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdlcygpOworICAgICAgICBDTVRpbWVSYW5nZSByYW5nZSA9
IENNVGltZVJhbmdlTWFrZSh0b0NNVGltZShyYW5nZXMuc3RhcnQoaSkpLCB0b0NNVGltZShyYW5n
ZXMuZW5kKGkpKSk7CisgICAgICAgIFtyYW5nZUFycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1
ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOworICAgIH0KKworICAgIHJldHVybiByYW5nZUFycmF5
OworfQorI2VuZGlmCisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZWVr
YWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlLCBk
b3VibGUpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAg
IFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFNlZWthYmxlVGltZVJhbmdlczp0aW1lUmFu
Z2VzVG9BcnJheSh0aW1lUmFuZ2VzKS5nZXQoKV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0
aW1lUmFuZ2VzKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7Cisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm9wdGlvbnMgd2l0
aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgVU5VU0VEX1BBUkFNKHNlbGVj
dGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQorewor
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBbcGxheUJhY2tD
b250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOm9wdGlvbnMg
d2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCld
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgVU5VU0VEX1BBUkFNKHNl
bGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAg
IFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleDpz
ZWxlY3RlZEluZGV4XTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOwor
I2VuZGlmCit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyNp
ZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6c2VsZWN0ZWRJbmRl
eF07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKKyNlbmRpZgorfQor
Cit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldENh
blRvZ2dsZVBpY3R1cmVJblBpY3R1cmU6IWVuYWJsZWRdOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OmludmFsaWRhdGUoKQoreworICAgIGlmICghbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cmVtb3ZlQ2xp
ZW50KCp0aGlzKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKK30KKwor
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdl
cigpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIHBs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKworV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIoKQor
eworICAgIHJldHVybiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOworfQorCit2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2Vi
UGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIpCit7CisgICAgbV9wbGF5YmFja0NvbnRy
b2xzTWFuYWdlciA9IG1hbmFnZXI7CisKKyAgICBpZiAoIW1hbmFnZXIgfHwgIW1fcGxheWJhY2tT
ZXNzaW9uTW9kZWwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVGltZUludGVydmFsIGFuY2hv
clRpbWVTdGFtcCA9ICFbbWFuYWdlciByYXRlXSA/IE5BTiA6IFtbTlNQcm9jZXNzSW5mbyBwcm9j
ZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKKyAgICBtYW5hZ2VyLnRpbWluZyA9IFtnZXRBVlZhbHVl
VGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTptX3BsYXliYWNrU2Vzc2lv
bk1vZGVsLT5jdXJyZW50VGltZSgpIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3RhbXAgcmF0
ZTowXTsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5kdXJh
dGlvbigpOworICAgIG1hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247CisgICAgbWFu
YWdlci5oYXNFbmFibGVkQXVkaW8gPSBkdXJhdGlvbiA+IDA7CisgICAgbWFuYWdlci5oYXNFbmFi
bGVkVmlkZW8gPSBkdXJhdGlvbiA+IDA7CisgICAgbWFuYWdlci5yYXRlID0gbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbC0+aXNQbGF5aW5nKCkgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5wbGF5YmFj
a1JhdGUoKSA6IDAuOworICAgIG1hbmFnZXIuc2Vla2FibGVUaW1lUmFuZ2VzID0gdGltZVJhbmdl
c1RvQXJyYXkobV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+c2Vla2FibGVSYW5nZXMoKSkuZ2V0KCk7
CisgICAgbWFuYWdlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKKyAgICBtYW5hZ2VyLnBsYXlp
bmcgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKTsKKyAgICBbbWFuYWdlciBz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5hdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5T
VUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4
KCkpXTsKKyAgICBbbWFuYWdlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOm1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSB3aXRoU2Vs
ZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5YmFja1JhdGUs
IGJvb2wgaXNQbGF5aW5nKQoreworICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptYW5h
Z2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICBpZiAoIW1hbmFnZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsICptb2RlbCA9IHdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgaWYgKCFtb2RlbCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZG91YmxlIGVmZmVjdGl2ZUFuY2hvclRpbWUgPSBwbGF5YmFja1JhdGUgPyBhbmNob3JU
aW1lIDogTkFOOworICAgIGRvdWJsZSBlZmZlY3RpdmVQbGF5YmFja1JhdGUgPSBwbGF5YmFja1Jh
dGU7CisgICAgaWYgKCFpc1BsYXlpbmcKKyAgICAgICAgfHwgbW9kZWwtPmlzU2NydWJiaW5nKCkK
KyAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA+IDAgJiYgbW9kZWwtPnBsYXliYWNrU3RhcnRlZFRp
bWUoKSA+PSBjdXJyZW50VGltZSkKKyAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA8IDAgJiYgbW9k
ZWwtPnBsYXliYWNrU3RhcnRlZFRpbWUoKSA8PSBjdXJyZW50VGltZSkpCisgICAgICAgIGVmZmVj
dGl2ZVBsYXliYWNrUmF0ZSA9IDA7CisKKyAgICBtYW5hZ2VyLnRpbWluZyA9IFtnZXRBVlZhbHVl
VGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZSBhbmNo
b3JUaW1lU3RhbXA6ZWZmZWN0aXZlQW5jaG9yVGltZSByYXRlOmVmZmVjdGl2ZVBsYXliYWNrUmF0
ZV07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5ZjU0ZDIzNGQ1Y2I3OTEx
NzcwNmE4MjA5MjZjYWQyOTA5MmJjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKQEAgLTAsMCArMSwx
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKQorCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9u
TW9kZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIE5TV2luZG93OworT0JKQ19DTEFTUyBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBJbnRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7
CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYwor
ICAgIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwcml2YXRl
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHsKKworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBjcmVhdGUoV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYygpOworICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB3ZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWw7IH0KKyAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKKyAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogd2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIo
KSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKKworICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlz
UGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBs
b2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKworICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9v
bCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXR1
cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRp
YWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dp
bmRvdyAqcGFyZW50V2luZG93KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2Ny
ZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4o
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKKyAgICB2b2lkIHJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKSB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGlu
ZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIGJv
b2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVy
biBtX21vZGUgPT0gbW9kZTsgfQorICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisKKyAgICBib29sIGlzUGxheWluZ1Zp
ZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKKworICAgIGJvb2wgbWF5QXV0b21hdGlj
YWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKSB7IH0KKworICAgIFdFQkNPUkVf
RVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKnZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMoKTsKKworcHJpdmF0ZToKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJik7CisgICAgUmVmPFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Cisg
ICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxs
cHRyIH07CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakM+IG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQzsKK307CisK
K30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9W
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkZjZlMjE5ODQ3
MzU5NDQ1MWM0MWI3ZDJhYTI1MzVjZDNlYWY2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCkBAIC0w
LDAgKzEsNTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKQorCisjaW1wb3J0ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiSW50UmVjdC5oIgorI2ltcG9y
dCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgiCisjaW1wb3J0
ICJQSVBTUEkuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgorI2lt
cG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW1wb3J0ICJXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgor
CisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09Q
VElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGlt
aW5nKQorCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoUElQKQorU09GVF9M
SU5LX0NMQVNTX09QVElPTkFMKFBJUCwgUElQVmlld0NvbnRyb2xsZXIpCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitAY2xhc3MgV2ViVmlkZW9WaWV3Q29udGFpbmVyOworCitAcHJvdG9j
b2wgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgPE5TT2JqZWN0PgorCistICh2b2lkKWJv
dW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVy
ICopdmlkZW9WaWV3Q29udGFpbmVyOworLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRl
b1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5l
cjsKKworQGVuZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvVmlld0NvbnRhaW5lciA6IE5TVmlldyB7
CisgICAgaWQgPFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiBfdmlkZW9WaWV3Q29udGFp
bmVyRGVsZWdhdGU7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlkIDxXZWJW
aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvVmlld0NvbnRhaW5lcgorCitAc3ludGhl
c2l6ZSB2aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT1fdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdh
dGU7CisKKy0gKHZvaWQpcmVzaXplV2l0aE9sZFN1cGVydmlld1NpemU6KE5TU2l6ZSlvbGRCb3Vu
ZHNTaXplCit7CisgICAgW3N1cGVyIHJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXplOm9sZEJvdW5k
c1NpemVdOworCisgICAgW192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBib3VuZHNEaWRDaGFu
Z2VGb3JWaWRlb1ZpZXdDb250YWluZXI6c2VsZl07Cit9CisKKy0gKHZvaWQpdmlld0RpZE1vdmVU
b1N1cGVydmlldworeworICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3XTsKKworICAg
IFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9W
aWV3Q29udGFpbmVyOnNlbGZdOworfQorCitAZW5kCisKK2VudW0gY2xhc3MgUElQU3RhdGUgewor
ICAgIE5vdEluUElQLAorICAgIEluUElQLAorICAgIEV4aXRpbmdQSVAKK307CisKK0BpbnRlcmZh
Y2UgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyA6IE5TT2JqZWN0IDxQSVBWaWV3
Q29udHJvbGxlckRlbGVnYXRlLCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4geworICAg
IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyogX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzsKKyAgICBOU1NpemUgX3ZpZGVvRGltZW5zaW9uczsKKyAgICBSZXRh
aW5QdHI8UElQVmlld0NvbnRyb2xsZXI+IF9waXBWaWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5Q
dHI8TlNWaWV3Q29udHJvbGxlcj4gX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXI7CisgICAg
UmV0YWluUHRyPFdlYlZpZGVvVmlld0NvbnRhaW5lcj4gX3ZpZGVvVmlld0NvbnRhaW5lcjsKKyAg
ICBQSVBTdGF0ZSBfcGlwU3RhdGU7CisgICAgUmV0YWluUHRyPE5TV2luZG93PiBfcmV0dXJuaW5n
V2luZG93OworICAgIE5TUmVjdCBfcmV0dXJuaW5nUmVjdDsKKyAgICBCT09MIF9wbGF5aW5nOwor
ICAgIEJPT0wgX2RpZFJlcXVlc3RFeGl0aW5nUElQOworICAgIEJPT0wgX2V4aXRpbmdUb1N0YW5k
YXJkRnVsbHNjcmVlbjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMqKXdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKy0gKHZvaWQpaW52YWxpZGF0ZUZ1
bGxzY3JlZW5TdGF0ZTsKKy0gKHZvaWQpaW52YWxpZGF0ZTsKKworLy8gVHJhY2tpbmcgdmlkZW8g
cGxheWJhY2sgc3RhdGUKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1NpemUgdmlkZW9EaW1lbnNp
b25zOworQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWlu
ZzsKKy0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxheWluZyBuZXdQbGF5YmFja1Jh
dGU6KGZsb2F0KXBsYXliYWNrUmF0ZTsKKworLy8gSGFuZGxpbmcgUElQIHRyYW5zaXRpb25zCitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgZGlkUmVxdWVzdEV4aXRpbmdQSVA7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2Ny
ZWVuKSBCT09MIGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKKworLSAodm9pZClzZXRVcFBJ
UEZvclZpZGVvVmlldzooTlNWaWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1l
IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKKy0gKHZvaWQpZW50ZXJQSVA7CistICh2b2lk
KWV4aXRQSVA7CistICh2b2lkKWV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGlu
V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQworCitAc3ludGhlc2l6ZSBwbGF5aW5nPV9w
bGF5aW5nOworQHN5bnRoZXNpemUgdmlkZW9EaW1lbnNpb25zPV92aWRlb0RpbWVuc2lvbnM7CitA
c3ludGhlc2l6ZSBkaWRSZXF1ZXN0RXhpdGluZ1BJUD1fZGlkUmVxdWVzdEV4aXRpbmdQSVA7CitA
c3ludGhlc2l6ZSBleGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW49X2V4aXRpbmdUb1N0YW5kYXJk
RnVsbHNjcmVlbjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOihXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYyA9IHdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKyAgICBfcGlwU3Rh
dGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlCit7CisgICAgW19waXBWaWV3Q29udHJvbGxlciBz
ZXREZWxlZ2F0ZTpuaWxdOworICAgIF9waXBWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBbX3Zp
ZGVvVmlld0NvbnRhaW5lciByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBbX3ZpZGVvVmlld0Nv
bnRhaW5lciBzZXRWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTpuaWxdOworICAgIF92aWRlb1Zp
ZXdDb250YWluZXIgPSBuaWw7CisgICAgX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgPSBu
aWw7CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Ok5vdEluUElQOworICAgIF9kaWRSZXF1ZXN0
RXhpdGluZ1BJUCA9IE5POworICAgIF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBOTzsK
KyAgICBfcmV0dXJuaW5nV2luZG93ID0gbmlsOworICAgIF9yZXR1cm5pbmdSZWN0ID0gTlNaZXJv
UmVjdDsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgW3NlbGYgaW52YWxpZGF0ZUZ1
bGxzY3JlZW5TdGF0ZV07CisgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IG51
bGxwdHI7CisgICAgX3ZpZGVvRGltZW5zaW9ucyA9IE5TWmVyb1NpemU7Cit9CisKKy0gKHZvaWQp
dXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBs
YXliYWNrUmF0ZQoreworICAgIF9wbGF5aW5nID0gaXNQbGF5aW5nICYmIHBsYXliYWNrUmF0ZTsK
KworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107Cit9CisKKy0g
KHZvaWQpc2V0VmlkZW9EaW1lbnNpb25zOihOU1NpemUpdmlkZW9EaW1lbnNpb25zCit7CisgICAg
X3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uczsKKworICAgIFtfcGlwVmlld0NvbnRy
b2xsZXIgc2V0QXNwZWN0UmF0aW86X3ZpZGVvRGltZW5zaW9uc107Cit9CisKKy0gKHZvaWQpc2V0
VXBQSVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClm
cmFtZSBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBBU1NFUlQoIV9waXBWaWV3
Q29udHJvbGxlcik7CisgICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcik7
CisgICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyKTsKKworICAgIF9waXBWaWV3Q29udHJv
bGxlciA9IGFkb3B0TlMoW2FsbG9jUElQVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsK
KyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtfcGlwVmll
d0NvbnRyb2xsZXIgc2V0VXNlckNhblJlc2l6ZTpZRVNdOworICAgIFtfcGlwVmlld0NvbnRyb2xs
ZXIgc2V0UGxheWluZzpfcGxheWluZ107CisgICAgW3NlbGYgc2V0VmlkZW9EaW1lbnNpb25zOk5T
RXF1YWxTaXplcyhfdmlkZW9EaW1lbnNpb25zLCBOU1plcm9TaXplKSA/IGZyYW1lLnNpemUgOiBf
dmlkZW9EaW1lbnNpb25zXTsKKyAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbCgpKQorICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCk7CisKKyAgICBfdmlkZW9WaWV3
Q29udGFpbmVyID0gYWRvcHROUyhbW1dlYlZpZGVvVmlld0NvbnRhaW5lciBhbGxvY10gaW5pdFdp
dGhGcmFtZTpmcmFtZV0pOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0Nv
bnRhaW5lckRlbGVnYXRlOnNlbGZdOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIGFkZFN1YnZp
ZXc6dmlkZW9WaWV3XTsKKyAgICB2aWRlb1ZpZXcuZnJhbWUgPSBbX3ZpZGVvVmlld0NvbnRhaW5l
ciBib3VuZHNdOworICAgIHZpZGVvVmlldy5hdXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhT
aXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZTsKKworICAgIF92aWRlb1ZpZXdDb250YWluZXJD
b250cm9sbGVyID0gYWRvcHROUyhbW05TVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKyAg
ICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgc2V0VmlldzpfdmlkZW9WaWV3Q29udGFp
bmVyLmdldCgpXTsKKyAgICBbd2luZG93LmNvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3ZpZGVvVmll
d0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93QWJvdmUgcmVsYXRpdmVUbzpuaWxd
OworfQorCistICh2b2lkKWVudGVyUElQCit7CisgICAgaWYgKF9waXBTdGF0ZSA9PSBQSVBTdGF0
ZTo6SW5QSVApCisgICAgICAgIHJldHVybjsKKworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29u
dHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRD
b2xvcihrQ0dDb2xvckJsYWNrKTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHByZXNlbnRWaWV3
Q29udHJvbGxlckFzUGljdHVyZUluUGljdHVyZTpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxl
ci5nZXQoKV07CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6OkluUElQOworfQorCistICh2b2lk
KWV4aXRQSVAKK3sKKyAgICBpZiAoX3BpcFN0YXRlICE9IFBJUFN0YXRlOjpJblBJUCB8fCAhX3Bp
cFZpZXdDb250cm9sbGVyIHx8ICFfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gWUVTOworICAgIFtfdmlk
ZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBD
R0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckNsZWFyKTsKKyAgICBbX3BpcFZpZXdDb250
cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlcjpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxl
ci5nZXQoKV07CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6OkV4aXRpbmdQSVA7Cit9CisKKy0g
KHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJlY3QgaW5XaW5kb3c6KE5TV2lu
ZG93ICopd2luZG93Cit7CisgICAgX3JldHVybmluZ1dpbmRvdyA9IHdpbmRvdzsKKyAgICBfcmV0
dXJuaW5nUmVjdCA9IHJlY3Q7CisgICAgCisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBs
YWNlbWVudFJlY3Q6cmVjdF07CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVu
dFdpbmRvdzp3aW5kb3ddOworCisgICAgW3NlbGYgZXhpdFBJUF07Cit9CisKKy8vIFdlYlZpZGVv
Vmlld0NvbnRhaW5lckRlbGVnYXRlCisKKy0gKHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9W
aWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXIK
K3sKKyAgICBpZiAoIV92aWRlb1ZpZXdDb250YWluZXIgfHwgIV9waXBWaWV3Q29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX1VOVVNFRCh2aWRlb1ZpZXdDb250YWluZXIs
IHZpZGVvVmlld0NvbnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsKKworICAgIGlmIChf
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVv
TGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKK30KKworLSAodm9pZClz
dXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRh
aW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcgoreworICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5l
ciB8fCAhX3BpcFZpZXdDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
dmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250YWluZXIpOworCisgICAgaWYgKCFb
dmlkZW9WaWV3Q29udGFpbmVyIGlzRGVzY2VuZGFudE9mOltfcGlwVmlld0NvbnRyb2xsZXIgdmll
d11dKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmNlIHRoZSB2aWV3IGlzIG1vdmVkIGlu
dG8gdGhlIHBpcCB2aWV3LCBtYWtlIHN1cmUgaXQgcmVzaXplcyB3aXRoIHRoZSBwaXAgdmlldy4K
KyAgICB2aWRlb1ZpZXdDb250YWluZXIuZnJhbWUgPSBbdmlkZW9WaWV3Q29udGFpbmVyIHN1cGVy
dmlld10uYm91bmRzOworICAgIHZpZGVvVmlld0NvbnRhaW5lci5hdXRvcmVzaXppbmdNYXNrID0g
TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZTsKK30KKworLy8gUElQVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZQorCistIChCT09MKXBpcFNob3VsZENsb3NlOihQSVBWaWV3Q29u
dHJvbGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdD
b250cm9sbGVyKTsKKworICAgIGlmICghX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyB8
fCAhX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIF9kaWRSZXF1ZXN0RXhp
dGluZ1BJUCA9IFlFUzsKKyAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUoKTsKKworICAgIHJldHVybiBOTzsKK30KKworLSAodm9pZClwaXBEaWRDbG9zZTooUElQVmll
d0NvbnRyb2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBW
aWV3Q29udHJvbGxlcik7CisKKyAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbCgpICYmIF92aWRlb1ZpZXdDb250YWluZXIgJiYgX3JldHVybmluZ1dpbmRvdyAmJiAhTlNF
cXVhbFJlY3RzKF9yZXR1cm5pbmdSZWN0LCBOU1plcm9SZWN0KSkgeworICAgICAgICBbTlNBbmlt
YXRpb25Db250ZXh0IHJ1bkFuaW1hdGlvbkdyb3VwOl4oTlNBbmltYXRpb25Db250ZXh0ICpjb250
ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0LmFsbG93c0ltcGxpY2l0QW5pbWF0aW9uID0gTk87
CisgICAgICAgICAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRGcmFtZTpfcmV0dXJuaW5nUmVj
dF07CisgICAgICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWlu
ZXIgYm91bmRzXSk7CisgICAgICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKKworICAgICAgICAg
ICAgW1tfcmV0dXJuaW5nV2luZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdD
b250YWluZXIuZ2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsK
KyAgICAgICAgfSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIH0KKworICAgIGlmIChfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKSB7CisgICAgICAgIGlmICghc2VsZi5pc0V4aXRp
bmdUb1N0YW5kYXJkRnVsbHNjcmVlbikgeworICAgICAgICAgICAgaWYgKFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpIHsKKyAgICAgICAgICAgICAgICB2
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgICAgICAgICAgICAgIHZpZGVv
RnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPmNsZWFyTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJl
KTsKKworICAgICAgICBpZiAoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIGZ1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCisgICAgICAgICAgICBmdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgfQorfQorCistICh2b2lk
KXBpcEFjdGlvblBsYXk6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCit7CisgICAgQVNTRVJUX1VO
VVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOworCisgICAgaWYgKF93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOworfQorCist
ICh2b2lkKXBpcEFjdGlvblBhdXNlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFT
U0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmIChf
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7
Cit9CisKKy0gKHZvaWQpcGlwQWN0aW9uU3RvcDooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CisKKyAg
ICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwg
PSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpKQorICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbC0+cGF1c2UoKTsKKworICAgIC8vIEZJ
WE1FIDI1MDk2MTcwOiBTaG91bGQgYW5pbWF0ZSBvbmx5IGlmIHRoZSBwYWdlIHdpdGggdGhlIHZp
ZGVvIGlzIHVub2JzY3VyZWQuIEZvciBub3csIGFsd2F5cyBjbG9zZSB3aXRob3V0IGFuaW1hdGlv
bi4KKyAgICBbc2VsZiBleGl0UElQXTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKQorICAgIDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKQoreworICAgIEFTU0VSVChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+
d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSk7CisgICAgYXV0byBtb2RlbCA9IG1fcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOworICAgIG1vZGVsLT5h
ZGRDbGllbnQoKnRoaXMpOworICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBk
YXRlSXNQbGF5aW5nOm1vZGVsLT5pc1BsYXlpbmcoKSBuZXdQbGF5YmFja1JhdGU6bW9kZWwtPnBs
YXliYWNrUmF0ZSgpXTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp+V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCkKK3sKKyAgICBpZiAobV9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIG1fcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5yZW1vdmVDbGll
bnQoKnRoaXMpOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQoreworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRo
aXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKKyAgICBpZiAobV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xp
ZW50KCp0aGlzKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNl
dFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9
IG9ic2VydmVyOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sK
KyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9
IG1fbW9kZSB8IG1vZGU7CisgICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX21vZGUgPSBuZXdNb2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5n
ZWQobV9tb2RlKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNs
ZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkK
K3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9k
ZSA9IG1fbW9kZSAmIH5tb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKG1fbW9kZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAg
IFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOmlzUGxheWlu
ZyBuZXdQbGF5YmFja1JhdGU6cGxheWJhY2tSYXRlXTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCit7CisgICAgbV9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UtPmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOworfQorCitXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDICpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKQoreworICAgIGlmICghbV93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKQorICAgICAgICBtX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgPSBhZG9wdE5TKFtbV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
T2JqQyBhbGxvY10gaW5pdFdpdGhXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6dGhpc10p
OworCisgICAgcmV0dXJuIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQy5nZXQoKTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVl
bihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5T
V2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3sKKyAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBG
dWxsc2NyZWVuKCVwKSwgaW5pdGlhbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93
OiVwLCBtb2RlOiVkIiwgdGhpcywgaW5pdGlhbFJlY3QueCgpLCBpbml0aWFsUmVjdC55KCksIGlu
aXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1v
ZGUpOworCisgICAgVU5VU0VEX1BBUkFNKGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7
CisgICAgQVNTRVJUKG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisKKyAgICBtX21vZGUgPSBtb2RlOworCisgICAgW3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSBzZXRVcFBJUEZvclZpZGVvVmlldzombGF5ZXJI
b3N0ZWRWaWV3IHdpdGhGcmFtZTooTlNSZWN0KWluaXRpYWxSZWN0IGluV2luZG93OnBhcmVudFdp
bmRvd107CisKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRTZXR1cEZ1bGxzY3JlZW4oKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4s
ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0
aGlzKTsKKworICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgeworICAgICAgICBbbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDIGVudGVyUElQXTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tf
Q09OVFJPTFNfTUFOQUdFUikKKyAgICAgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5w
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6WUVTXTsK
KyNlbmRpZgorCisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAg
ICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVs
bHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cp
Cit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmV4aXRGdWxsc2NyZWVuKCVwKSwgZmluYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdp
bmRvdzolcCIsIHRoaXMsIGZpbmFsUmVjdC54KCksIGZpbmFsUmVjdC55KCksIGZpbmFsUmVjdC53
aWR0aCgpLCBmaW5hbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7CisKKyNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3Rp
dmU6Tk9dOworI2VuZGlmCisKKyAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChm
aW5hbFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDIGV4aXRQSVBdOworICAgIGVsc2UKKyAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OmZpbmFsUmVjdCBpbldpbmRvdzpw
YXJlbnRXaW5kb3ddOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRp
b25Ub01vZGUoJXApLCBtb2RlOiVkIiwgdGhpcywgbW9kZSk7CisKKyNpZiBFTkFCTEUoV0VCX1BM
QVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9d
OworI2VuZGlmCisKKyAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBk
aWRSZXF1ZXN0RXhpdGluZ1BJUF0pCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaXNFeGl0
aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkOworICAgIC8vIE9uIE1hYywgc3RhbmRhcmQgZnVs
bHNjcmVlbiBpcyBoYW5kbGVkIGJ5IHRoZSBGdWxsc2NyZWVuIEFQSSBhbmQgbm90IGJ5IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIuCisgICAgLy8gSnVzdCB1cGRhdGUgbV9tb2RlIGRpcmVjdGx5
IHRvIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIGlu
IHRoYXQgY2FzZSB0byBrZWVwCisgICAgLy8gbV9tb2RlIGluIHN5bmMgd2l0aCB0aGUgZnVsbHNj
cmVlbiBtb2RlIGluIEhUTUxNZWRpYUVsZW1lbnQuCisgICAgaWYgKGlzRXhpdGluZ1RvU3RhbmRh
cmRGdWxsc2NyZWVuKQorICAgICAgICBtX21vZGUgPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsKKworICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU9iakMgc2V0RXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOmlzRXhpdGluZ1RvU3Rh
bmRhcmRGdWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpD
IGV4aXRQSVBdOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xl
YW51cEZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIFtt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07CisgICAgW21fd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKKwor
ICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKK3sKKyAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSglcCkiLCB0
aGlzKTsKKworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7CisgICAgbV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7CisKKyAgICBjbGVhbnVwRnVsbHNjcmVlbigpOworCisg
ICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlXTsKKyAgICBt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBuaWw7Cit9CisKKyNpZiAhTE9HX0RJ
U0FCTEVECitzdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKK3sKKyAgICBy
ZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKK30KKyNlbmRpZgorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlz
aWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykK
K3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQs
ICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUp
LCBpbmxpbmVSZWN0LngoKSwgaW5saW5lUmVjdC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5s
aW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKKworICAgIGlmICghdmlzaWJsZSkgewor
ICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKHBhcmVudFdpbmRvdyk7CisgICAgW21f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OihO
U1JlY3QpaW5saW5lUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBl
bmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUsIGNvbnN0IFN0cmluZyYpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKCVwKSwgZW5hYmxlZDol
cyIsIHRoaXMsIGJvb2xTdHJpbmcoZW5hYmxlZCkpOworCisgICAgaWYgKGVuYWJsZWQgJiYgbV9t
b2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJ
blBpY3R1cmUpCisgICAgICAgIGV4aXRGdWxsc2NyZWVuKEludFJlY3QoKSwgbmlsKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29s
IGhhc1ZpZGVvKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoJXApOiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNW
aWRlbykpOworCisgICAgaWYgKCFoYXNWaWRlbykKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5XaXRo
b3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZU5vbmUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlk
ZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sK
KyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlk
ZW9EaW1lbnNpb25zQ2hhbmdlZCglcCksIHdpZHRoOiUuMGYsIGhlaWdodDolLjBmIiwgdGhpcywg
dmlkZW9EaW1lbnNpb25zLndpZHRoKCksIHZpZGVvRGltZW5zaW9ucy5oZWlnaHQoKSk7CisKKyAg
ICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSB6ZXJvIHdoZW4gd2UgYXJlIHRyYW5zaXRpb25p
bmcgZnJvbSBvbmUgdmlkZW8gdG8gYW5vdGhlci4gSWdub3JlIHplcm8gdmFsdWVzLgorICAgIGlm
ICghdmlkZW9EaW1lbnNpb25zLmlzWmVybygpKQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDIHNldFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOworfQor
Citib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aXNQbGF5aW5nVmlkZW9JbkVu
aGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc01vZGUoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSkgJiYgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpc1BsYXlpbmddOworfQor
Citib29sIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgcmV0dXJuIFBJUExpYnJh
cnkoKSAmJiBnZXRQSVBWaWV3Q29udHJvbGxlckNsYXNzKCk7Cit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIubW0KaW5kZXggN2I0NGEwNzRkZjI5ODA2MmY4MDUzZTllYmM3ZDMxNDUxZTgy
ZTVlNS4uYTMyNmViZWVlYTNiMTM4NTBhZWQ2ZTIxYjBjN2UzYmY5Zjk0Mjk5YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5tbQpAQCAtMjksOCArMjksOCBAQAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCiAKICNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0ICJX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcu
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MTI0YzFlMWJmZTAxNWJkMjljMGVm
MDdhNzBlMzcxYzE5YjUxZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkKLQotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgot
I2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgotI2luY2x1ZGUgIldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LU9CSkNfQ0xBU1MgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXI7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKLQot
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIGZpbmFs
Ci0gICAgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwmKTsKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKTsK
LSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBj
b25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9Ci0KLSAgICAvLyBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFT
dGF0ZSgpIGZpbmFsIHsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKmN1cnJl
bnRUaW1lKi8sIGRvdWJsZSAvKmFuY2hvclRpbWUqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByYXRlQ2hhbmdlZChib29sIC8qaXNQbGF5aW5nKi8sIGZsb2F0IC8qcGxheWJhY2tS
YXRlKi8pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFu
Z2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgLypsYXN0TW9kaWZpZWRUaW1lKi8sIGRvdWJs
ZSAvKmxpdmVVcGRhdGVJbnRlcnZhbCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiAvKm9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4Ki8pIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8s
IHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5h
bWUgKi8pIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLSNpZiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAq
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqcGxheUJh
Y2tDb250cm9sc01hbmFnZXIoKTsKLSNlbmRpZgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVn
aW5TY3J1YmJpbmcoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpOwot
Ci1wcml2YXRlOgotICAgIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCYpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNr
U2Vzc2lvbk1vZGVsIHsgbnVsbHB0ciB9OwotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbV9wbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciAgeyBudWxscHRyIH07Ci0KLSAgICB2b2lkIHVwZGF0ZVBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUs
IGRvdWJsZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKTsKLSNlbmRpZgotCi19OwotCi19
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4YjQ0YTYxYzUwZTAxNjJjM2MxMGU3MTc1ZDgxYzZmMmEyNDg0Y2VhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KKysrIC9kZXYvbnVsbApA
QCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLQotI2lmIFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW1wb3J0ICJBVktp
dFNQSS5oIgotI2ltcG9ydCAiSW50UmVjdC5oIgotI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRp
b24uaCIKLSNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgotI2ltcG9ydCAiVGltZVJh
bmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCIKLSNpbXBvcnQg
IldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1l
Lmg+Ci0KLSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdP
UktfT1BUSU9OQUwoQVZLaXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFs
dWVUaW1pbmcpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkK
LXsKLSAgICBhdXRvIGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjKG1vZGVsKSk7Ci0gICAgbW9kZWwuYWRkQ2xpZW50KGludGVyZmFjZSk7Ci0g
ICAgcmV0dXJuIGludGVyZmFjZTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwm
IG1vZGVsKQotICAgIDogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCi17Ci19Ci0KLVdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYygpCi17Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSNpZiBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7
Ci0KLSAgICBjb250cm9sc01hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247Ci0KLSAg
ICAvLyBGSVhNRTogV2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBp
cyByZWFkeSwgYnV0IHRoYXQgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUuCi0gICAgY29udHJvbHNN
YW5hZ2VyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKLSAgICBjb250cm9sc01hbmFnZXIuaGFzRW5h
YmxlZFZpZGVvID0gWUVTOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZHVyYXRpb24pOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjdXJyZW50VGlt
ZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKLXsKLSNpZiBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7
Ci0gICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoY3VycmVudFRpbWUsIGFu
Y2hvclRpbWUsIGNvbnRyb2xzTWFuYWdlci5yYXRlLCBjb250cm9sc01hbmFnZXIucGxheWluZyk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50VGltZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGFuY2hvclRpbWUpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQot
ewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01h
bmFnZXIoKTsKLSAgICBbY29udHJvbHNNYW5hZ2VyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJh
Y2tSYXRlIDogMC5dOwotICAgIFtjb250cm9sc01hbmFnZXIgc2V0UGxheWluZzppc1BsYXlpbmdd
OwotICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKG1fcGxheWJhY2tTZXNz
aW9uTW9kZWwgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIDogMCwgW1tO
U1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdLCBwbGF5YmFja1JhdGUsIGlz
UGxheWluZyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpc1BsYXlpbmcpOwotICAgIFVOVVNF
RF9QQVJBTShwbGF5YmFja1JhdGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjpiZWdpblNjcnViYmluZygpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
VGltaW5nKG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5j
dXJyZW50VGltZSgpIDogMCwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRp
bWVdLCAwLCBmYWxzZSk7Ci0jZW5kaWYKLSAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5i
ZWdpblNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5lbmRT
Y3J1YmJpbmcoKTsKLX0KLQotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKLXN0YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHRpbWVSYW5nZXNUb0FycmF5KGNv
bnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFy
cmF5PiByYW5nZUFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsr
KSB7Ci0gICAgICAgIGNvbnN0IFBsYXRmb3JtVGltZVJhbmdlcyYgcmFuZ2VzID0gdGltZVJhbmdl
cy5yYW5nZXMoKTsKLSAgICAgICAgQ01UaW1lUmFuZ2UgcmFuZ2UgPSBDTVRpbWVSYW5nZU1ha2Uo
dG9DTVRpbWUocmFuZ2VzLnN0YXJ0KGkpKSwgdG9DTVRpbWUocmFuZ2VzLmVuZChpKSkpOwotICAg
ICAgICBbcmFuZ2VBcnJheSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6
cmFuZ2VdXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmFuZ2VBcnJheTsKLX0KLSNlbmRpZgotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXNDaGFuZ2Vk
KGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSwgZG91YmxlKQotewotI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9s
c01hbmFnZXIoKSBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6dGltZVJhbmdlc1RvQXJyYXkodGltZVJh
bmdlcykuZ2V0KCldOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGltZVJhbmdlcyk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczpvcHRpb25zIHdpdGhTZWxlY3RlZEluZGV4OnN0
YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKG9wdGlvbnMpOwotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKLSNlbmRp
ZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BM
QVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkg
c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczpvcHRpb25zIHdpdGhTZWxlY3RlZEluZGV4
OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKG9wdGlvbnMpOwotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKLSNl
bmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9s
c01hbmFnZXIoKSBzZXRBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXg6c2VsZWN0ZWRJbmRleF07Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKLSNlbmRpZgotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNl
dExlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5kZXhdOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBj
b25zdCBTdHJpbmcmKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRDYW5Ub2dnbGVQaWN0dXJlSW5Q
aWN0dXJlOiFlbmFibGVkXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRl
KCkKLXsKLSAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0gICAg
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQotewotI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBwbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01B
TkFHRVIpCi0KLVdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSAgICByZXR1cm4gbV9w
bGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyICptYW5hZ2VyKQotewotICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgPSBtYW5h
Z2VyOwotCi0gICAgaWYgKCFtYW5hZ2VyIHx8ICFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW21h
bmFnZXIgcmF0ZV0gPyBOQU4gOiBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVw
dGltZV07Ci0gICAgbWFuYWdlci50aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFs
dWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRp
bWUoKSBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0gICAgZG91Ymxl
IGR1cmF0aW9uID0gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+ZHVyYXRpb24oKTsKLSAgICBtYW5h
Z2VyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIG1hbmFnZXIuaGFzRW5hYmxlZEF1
ZGlvID0gZHVyYXRpb24gPiAwOwotICAgIG1hbmFnZXIuaGFzRW5hYmxlZFZpZGVvID0gZHVyYXRp
b24gPiAwOwotICAgIG1hbmFnZXIucmF0ZSA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxh
eWluZygpID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cGxheWJhY2tSYXRlKCkgOiAwLjsKLSAg
ICBtYW5hZ2VyLnNlZWthYmxlVGltZVJhbmdlcyA9IHRpbWVSYW5nZXNUb0FycmF5KG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwtPnNlZWthYmxlUmFuZ2VzKCkpLmdldCgpOwotICAgIG1hbmFnZXIuY2Fu
VG9nZ2xlUGxheWJhY2sgPSBZRVM7Ci0gICAgbWFuYWdlci5wbGF5aW5nID0gbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbC0+aXNQbGF5aW5nKCk7Ci0gICAgW21hbmFnZXIgc2V0QXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsLT5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpKV07Ci0gICAgW21hbmFn
ZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGlj
X2Nhc3Q8TlNVSW50ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlhU2Vs
ZWN0ZWRJbmRleCgpKV07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
Ojp1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVudFRpbWUs
IGRvdWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxheWluZykK
LXsKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IHBsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKCk7Ci0gICAgaWYgKCFtYW5hZ2VyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCAqbW9kZWwgPSB3ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpOwotICAgIGlmICghbW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSBlZmZl
Y3RpdmVBbmNob3JUaW1lID0gcGxheWJhY2tSYXRlID8gYW5jaG9yVGltZSA6IE5BTjsKLSAgICBk
b3VibGUgZWZmZWN0aXZlUGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwotICAgIGlmICghaXNQ
bGF5aW5nCi0gICAgICAgIHx8IG1vZGVsLT5pc1NjcnViYmluZygpCi0gICAgICAgIHx8IChtYW5h
Z2VyLnJhdGUgPiAwICYmIG1vZGVsLT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCkgPj0gY3VycmVudFRp
bWUpCi0gICAgICAgIHx8IChtYW5hZ2VyLnJhdGUgPCAwICYmIG1vZGVsLT5wbGF5YmFja1N0YXJ0
ZWRUaW1lKCkgPD0gY3VycmVudFRpbWUpKQotICAgICAgICBlZmZlY3RpdmVQbGF5YmFja1JhdGUg
PSAwOwotCi0gICAgbWFuYWdlci50aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFs
dWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUgYW5jaG9yVGltZVN0YW1wOmVmZmVj
dGl2ZUFuY2hvclRpbWUgcmF0ZTplZmZlY3RpdmVQbGF5YmFja1JhdGVdOwotfQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotCi19Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1MWIyY2Uz
YTJlOWU0NTU5YTEyMTM2MDRkMTI2MGJmZTkzMGI0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpCi0KLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbC5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLU9CSkNfQ0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NM
QVNTIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcjsKLQotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjCi0gICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHBy
aXZhdGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gewotCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IGNyZWF0ZShXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YyhwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwq
IHdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDsgfQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCopOwotICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiB3ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOyB9Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwotCi0gICAgLy8gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJv
b2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAgZW5hYmxlZCwgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJp
bmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdl
ZChib29sKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0No
YW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywgY29uc3QgSW50UmVjdCYg
aW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJh
Y2spOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3Qs
IE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1
bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhbnVwRnVsbHNj
cmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIHZvaWQg
cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpIHsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYg
aW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0g
ICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgJiBtb2RlOyB9Ci0gICAgYm9vbCBpc01vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9Ci0gICAgdm9pZCBzZXRNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBjbGVhck1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLQotICAgIGJvb2wgaXNQbGF5
aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0OwotCi0gICAgYm9vbCBtYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpIHsgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyAqdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQygpOwotCi1wcml2YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmKTsKLSAgICBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7
IG51bGxwdHIgfTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKLSAgICBSZXRhaW5QdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjT2JqQz4gbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDOwot
fTsKLQotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDkyZTY0MmM4ZWMwY2JmOTQ3NWU4NDk2ZGY3Yzg3MDJjMjQ4NjU1
M2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDU3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW1wb3J0ICJBVktpdFNQSS5oIgotI2ltcG9y
dCAiSW50UmVjdC5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFUaW1lQVZG
b3VuZGF0aW9uLmgiCi0jaW1wb3J0ICJQSVBTUEkuaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIK
LSNpbXBvcnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2lt
cG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgotCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGlu
ay5oIgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09GVF9MSU5LX0NM
QVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi1TT0ZUX0xJTktfUFJJVkFURV9G
UkFNRVdPUktfT1BUSU9OQUwoUElQKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFBJUCwgUElQ
Vmlld0NvbnRyb2xsZXIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AY2xhc3MgV2Vi
VmlkZW9WaWV3Q29udGFpbmVyOwotCi1AcHJvdG9jb2wgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVs
ZWdhdGUgPE5TT2JqZWN0PgotCi0tICh2b2lkKWJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0Nv
bnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyOwotLSAo
dm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmll
d0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcjsKLQotQGVuZAotCi1AaW50ZXJmYWNlIFdl
YlZpZGVvVmlld0NvbnRhaW5lciA6IE5TVmlldyB7Ci0gICAgaWQgPFdlYlZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlPiBfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Ci19Ci0KLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIGlkIDxXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4g
dmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdl
YlZpZGVvVmlld0NvbnRhaW5lcgotCi1Ac3ludGhlc2l6ZSB2aWRlb1ZpZXdDb250YWluZXJEZWxl
Z2F0ZT1fdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Ci0KLS0gKHZvaWQpcmVzaXplV2l0aE9s
ZFN1cGVydmlld1NpemU6KE5TU2l6ZSlvbGRCb3VuZHNTaXplCi17Ci0gICAgW3N1cGVyIHJlc2l6
ZVdpdGhPbGRTdXBlcnZpZXdTaXplOm9sZEJvdW5kc1NpemVdOwotCi0gICAgW192aWRlb1ZpZXdD
b250YWluZXJEZWxlZ2F0ZSBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6c2Vs
Zl07Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb1N1cGVydmlldwotewotICAgIFtzdXBlciB2
aWV3RGlkTW92ZVRvU3VwZXJ2aWV3XTsKLQotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdh
dGUgc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNlbGZdOwotfQotCi1A
ZW5kCi0KLWVudW0gY2xhc3MgUElQU3RhdGUgewotICAgIE5vdEluUElQLAotICAgIEluUElQLAot
ICAgIEV4aXRpbmdQSVAKLX07Ci0KLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjT2JqQyA6IE5TT2JqZWN0IDxQSVBWaWV3Q29udHJvbGxlckRlbGVnYXRlLCBXZWJWaWRl
b1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gewotICAgIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyogX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKLSAgICBOU1Np
emUgX3ZpZGVvRGltZW5zaW9uczsKLSAgICBSZXRhaW5QdHI8UElQVmlld0NvbnRyb2xsZXI+IF9w
aXBWaWV3Q29udHJvbGxlcjsKLSAgICBSZXRhaW5QdHI8TlNWaWV3Q29udHJvbGxlcj4gX3ZpZGVv
Vmlld0NvbnRhaW5lckNvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFdlYlZpZGVvVmlld0NvbnRh
aW5lcj4gX3ZpZGVvVmlld0NvbnRhaW5lcjsKLSAgICBQSVBTdGF0ZSBfcGlwU3RhdGU7Ci0gICAg
UmV0YWluUHRyPE5TV2luZG93PiBfcmV0dXJuaW5nV2luZG93OwotICAgIE5TUmVjdCBfcmV0dXJu
aW5nUmVjdDsKLSAgICBCT09MIF9wbGF5aW5nOwotICAgIEJPT0wgX2RpZFJlcXVlc3RFeGl0aW5n
UElQOwotICAgIEJPT0wgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzsKLS0gKHZvaWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZTsKLS0gKHZvaWQpaW52
YWxpZGF0ZTsKLQotLy8gVHJhY2tpbmcgdmlkZW8gcGxheWJhY2sgc3RhdGUKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljKSBOU1NpemUgdmlkZW9EaW1lbnNpb25zOwotQHByb3BlcnR5IChub25hdG9taWMs
IGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWluZzsKLS0gKHZvaWQpdXBkYXRlSXNQbGF5aW5n
OihCT09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZTsKLQot
Ly8gSGFuZGxpbmcgUElQIHRyYW5zaXRpb25zCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIEJPT0wgZGlkUmVxdWVzdEV4aXRpbmdQSVA7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0
dGVyPWlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSBCT09MIGV4aXRpbmdUb1N0YW5kYXJk
RnVsbHNjcmVlbjsKLQotLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNWaWV3ICopdmlk
ZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dzsKLS0gKHZvaWQpZW50ZXJQSVA7Ci0tICh2b2lkKWV4aXRQSVA7Ci0tICh2b2lkKWV4aXRQSVBB
bmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsK
LQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
T2JqQwotCi1Ac3ludGhlc2l6ZSBwbGF5aW5nPV9wbGF5aW5nOwotQHN5bnRoZXNpemUgdmlkZW9E
aW1lbnNpb25zPV92aWRlb0RpbWVuc2lvbnM7Ci1Ac3ludGhlc2l6ZSBkaWRSZXF1ZXN0RXhpdGlu
Z1BJUD1fZGlkUmVxdWVzdEV4aXRpbmdQSVA7Ci1Ac3ludGhlc2l6ZSBleGl0aW5nVG9TdGFuZGFy
ZEZ1bGxzY3JlZW49X2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IHdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRl
Ci17Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIF9waXBW
aWV3Q29udHJvbGxlciA9IG5pbDsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1ZpZXdDb250YWlu
ZXJEZWxlZ2F0ZTpuaWxdOwotICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBuaWw7Ci0gICAgX3Zp
ZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgPSBuaWw7Ci0gICAgX3BpcFN0YXRlID0gUElQU3Rh
dGU6Ok5vdEluUElQOwotICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IE5POwotICAgIF9leGl0
aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBOTzsKLSAgICBfcmV0dXJuaW5nV2luZG93ID0gbmls
OwotICAgIF9yZXR1cm5pbmdSZWN0ID0gTlNaZXJvUmVjdDsKLX0KLQotLSAodm9pZClpbnZhbGlk
YXRlCi17Ci0gICAgW3NlbGYgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07Ci0gICAgX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IG51bGxwdHI7Ci0gICAgX3ZpZGVvRGltZW5zaW9u
cyA9IE5TWmVyb1NpemU7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxh
eWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZQotewotICAgIF9wbGF5aW5n
ID0gaXNQbGF5aW5nICYmIHBsYXliYWNrUmF0ZTsKLQotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIg
c2V0UGxheWluZzpfcGxheWluZ107Ci19Ci0KLS0gKHZvaWQpc2V0VmlkZW9EaW1lbnNpb25zOihO
U1NpemUpdmlkZW9EaW1lbnNpb25zCi17Ci0gICAgX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGlt
ZW5zaW9uczsKLQotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0QXNwZWN0UmF0aW86X3ZpZGVv
RGltZW5zaW9uc107Ci19Ci0KLS0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAq
KXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNXaW5kb3cgKil3
aW5kb3cKLXsKLSAgICBBU1NFUlQoIV9waXBWaWV3Q29udHJvbGxlcik7Ci0gICAgQVNTRVJUKCFf
dmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcik7Ci0gICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29u
dGFpbmVyKTsKLQotICAgIF9waXBWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jUElQVmll
d0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNl
dERlbGVnYXRlOnNlbGZdOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0VXNlckNhblJlc2l6
ZTpZRVNdOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107Ci0g
ICAgW3NlbGYgc2V0VmlkZW9EaW1lbnNpb25zOk5TRXF1YWxTaXplcyhfdmlkZW9EaW1lbnNpb25z
LCBOU1plcm9TaXplKSA/IGZyYW1lLnNpemUgOiBfdmlkZW9EaW1lbnNpb25zXTsKLSAgICBpZiAo
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRl
b0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0RmlsbCk7Ci0KLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gYWRvcHROUyhbW1dlYlZp
ZGVvVmlld0NvbnRhaW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOwotICAgIFtfdmlk
ZW9WaWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOnNlbGZdOwotICAg
IFtfdmlkZW9WaWV3Q29udGFpbmVyIGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKLSAgICB2aWRlb1Zp
ZXcuZnJhbWUgPSBbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdOwotICAgIHZpZGVvVmlldy5h
dXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJs
ZTsKLQotICAgIF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyID0gYWRvcHROUyhbW05TVmll
d0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRy
b2xsZXIgc2V0VmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpXTsKLSAgICBbd2luZG93LmNv
bnRlbnRWaWV3IGFkZFN1YnZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVk
Ok5TV2luZG93QWJvdmUgcmVsYXRpdmVUbzpuaWxdOwotfQotCi0tICh2b2lkKWVudGVyUElQCi17
Ci0gICAgaWYgKF9waXBTdGF0ZSA9PSBQSVBTdGF0ZTo6SW5QSVApCi0gICAgICAgIHJldHVybjsK
LQotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3Jv
dW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKTsKLSAgICBb
X3BpcFZpZXdDb250cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlckFzUGljdHVyZUluUGljdHVy
ZTpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07Ci0gICAgX3BpcFN0YXRlID0g
UElQU3RhdGU6OkluUElQOwotfQotCi0tICh2b2lkKWV4aXRQSVAKLXsKLSAgICBpZiAoX3BpcFN0
YXRlICE9IFBJUFN0YXRlOjpJblBJUCB8fCAhX3BpcFZpZXdDb250cm9sbGVyIHx8ICFfdmlkZW9W
aWV3Q29udGFpbmVyQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2RpZFJlcXVl
c3RFeGl0aW5nUElQID0gWUVTOwotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2
aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dD
b2xvckNsZWFyKTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxl
cjpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07Ci0gICAgX3BpcFN0YXRlID0g
UElQU3RhdGU6OkV4aXRpbmdQSVA7Ci19Ci0KLS0gKHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVj
dDooTlNSZWN0KXJlY3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgX3JldHVy
bmluZ1dpbmRvdyA9IHdpbmRvdzsKLSAgICBfcmV0dXJuaW5nUmVjdCA9IHJlY3Q7Ci0gICAgCi0g
ICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFJlY3Q6cmVjdF07Ci0gICAgW19w
aXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFdpbmRvdzp3aW5kb3ddOwotCi0gICAgW3Nl
bGYgZXhpdFBJUF07Ci19Ci0KLS8vIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlCi0KLS0g
KHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdD
b250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXIKLXsKLSAgICBpZiAoIV92aWRlb1ZpZXdDb250
YWluZXIgfHwgIV9waXBWaWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUX1VOVVNFRCh2aWRlb1ZpZXdDb250YWluZXIsIHZpZGVvVmlld0NvbnRhaW5lciA9PSBfdmlk
ZW9WaWV3Q29udGFpbmVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRh
aW5lciBib3VuZHNdKTsKLX0KLQotLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1Zp
ZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcgot
ewotICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5lciB8fCAhX3BpcFZpZXdDb250cm9sbGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQodmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRl
b1ZpZXdDb250YWluZXIpOwotCi0gICAgaWYgKCFbdmlkZW9WaWV3Q29udGFpbmVyIGlzRGVzY2Vu
ZGFudE9mOltfcGlwVmlld0NvbnRyb2xsZXIgdmlld11dKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBPbmNlIHRoZSB2aWV3IGlzIG1vdmVkIGludG8gdGhlIHBpcCB2aWV3LCBtYWtlIHN1cmUg
aXQgcmVzaXplcyB3aXRoIHRoZSBwaXAgdmlldy4KLSAgICB2aWRlb1ZpZXdDb250YWluZXIuZnJh
bWUgPSBbdmlkZW9WaWV3Q29udGFpbmVyIHN1cGVydmlld10uYm91bmRzOwotICAgIHZpZGVvVmll
d0NvbnRhaW5lci5hdXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3
SGVpZ2h0U2l6YWJsZTsKLX0KLQotLy8gUElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQotCi0tIChC
T09MKXBpcFNob3VsZENsb3NlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VS
VF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAgIGlmICghX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyB8fCAhX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgcmV0
dXJuIFlFUzsKLQotICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKLSAgICBfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cigpLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKLQotICAgIHJldHVybiBOTzsKLX0K
LQotLSAodm9pZClwaXBEaWRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAo
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpICYmIF92aWRlb1ZpZXdDb250YWlu
ZXIgJiYgX3JldHVybmluZ1dpbmRvdyAmJiAhTlNFcXVhbFJlY3RzKF9yZXR1cm5pbmdSZWN0LCBO
U1plcm9SZWN0KSkgewotICAgICAgICBbTlNBbmltYXRpb25Db250ZXh0IHJ1bkFuaW1hdGlvbkdy
b3VwOl4oTlNBbmltYXRpb25Db250ZXh0ICpjb250ZXh0KSB7Ci0gICAgICAgICAgICBjb250ZXh0
LmFsbG93c0ltcGxpY2l0QW5pbWF0aW9uID0gTk87Ci0gICAgICAgICAgICBbX3ZpZGVvVmlld0Nv
bnRhaW5lciBzZXRGcmFtZTpfcmV0dXJuaW5nUmVjdF07Ci0gICAgICAgICAgICBfd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRl
b0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7Ci0gICAgICAgICAgICBf
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgp
LT5zZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2
aXR5UmVzaXplQXNwZWN0KTsKLQotICAgICAgICAgICAgW1tfcmV0dXJuaW5nV2luZG93IGNvbnRl
bnRWaWV3XSBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkgcG9zaXRpb25lZDpO
U1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsKLSAgICAgICAgfSBjb21wbGV0aW9uSGFuZGxl
cjpuaWxdOwotICAgIH0KLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
KSB7Ci0gICAgICAgIGlmICghc2VsZi5pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikgewot
ICAgICAgICAgICAgaWYgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3JlZW5N
b2RlbCA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsKCkpIHsKLSAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZU5vbmUpOwotICAgICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0xh
eWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLQotICAgICAgICBpZiAoV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKCkpCi0gICAgICAgICAgICBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxs
c2NyZWVuKCk7Ci0gICAgfQotfQotCi0tICh2b2lkKXBpcEFjdGlvblBsYXk6KFBJUFZpZXdDb250
cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0Nv
bnRyb2xsZXIpOwotCi0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYg
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+cGxheSgpOwotfQotCi0tICh2b2lkKXBpcEFjdGlvblBhdXNlOihQSVBW
aWV3Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3Bp
cFZpZXdDb250cm9sbGVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7Ci19Ci0KLS0gKHZvaWQpcGlwQWN0aW9uU3Rv
cDooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlw
ID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBwbGF5YmFja1Nlc3Np
b25Nb2RlbC0+cGF1c2UoKTsKLQotICAgIC8vIEZJWE1FIDI1MDk2MTcwOiBTaG91bGQgYW5pbWF0
ZSBvbmx5IGlmIHRoZSBwYWdlIHdpdGggdGhlIHZpZGVvIGlzIHVub2JzY3VyZWQuIEZvciBub3cs
IGFsd2F5cyBjbG9zZSB3aXRob3V0IGFuaW1hdGlvbi4KLSAgICBbc2VsZiBleGl0UElQXTsKLX0K
LQotQGVuZAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotICAgIDogbV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotewotICAgIEFTU0VS
VChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSk7
Ci0gICAgYXV0byBtb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpOwotICAgIG1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwotICAgIFt2aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOm1vZGVsLT5pc1BsYXlp
bmcoKSBuZXdQbGF5YmFja1JhdGU6bW9kZWwtPnBsYXliYWNrUmF0ZSgpXTsKLX0KLQotV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
KCkKLXsKLSAgICBpZiAobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCkpCi0gICAgICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIGlmIChtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVD
bGllbnQoKnRoaXMpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVs
KQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwgPSBtb2RlbDsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKLXsKLSAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7Ci0gICAgaWYgKG1f
bW9kZSA9PSBuZXdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21vZGUgPSBuZXdNb2Rl
OwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOwotICAgIGlm
IChtX21vZGUgPT0gbmV3TW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tb2RlID0gbmV3
TW9kZTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VP
YmpDKCkgdXBkYXRlSXNQbGF5aW5nOmlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6cGxheWJhY2tS
YXRlXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNv
bnRyb2xzTWFuYWdlcigpCi17Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPmVuc3Vy
ZUNvbnRyb2xzTWFuYWdlcigpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNP
YmpDICpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMoKQotewotICAgIGlmICghbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpD
KQotICAgICAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBhZG9wdE5TKFtb
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBhbGxvY10gaW5pdFdpdGhXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6dGhpc10pOwotCi0gICAgcmV0dXJuIG1fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQy5nZXQoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywg
Y29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1Bp
Y3R1cmVJblBpY3R1cmVQbGF5YmFjaykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5pdGlhbFJlY3Q6
eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhpcywgaW5pdGlh
bFJlY3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxS
ZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUpOwotCi0gICAgVU5VU0VEX1BBUkFNKGFs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7Ci0gICAgQVNTRVJUKG1vZGUgPT0gSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0K
LSAgICBtX21vZGUgPSBtb2RlOwotCi0gICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMo
KSBzZXRVcFBJUEZvclZpZGVvVmlldzombGF5ZXJIb3N0ZWRWaWV3IHdpdGhGcmFtZTooTlNSZWN0
KWluaXRpYWxSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107Ci0KLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlz
XSB7Ci0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNj
cmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAgIGlmIChtb2RlKCkgPT0g
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSkgewotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGVudGVyUElQ
XTsKLQotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICAgICAg
W21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNl
dFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6WUVTXTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5h
bFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKCVwKSwgZmluYWxS
ZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGZpbmFsUmVjdC54
KCksIGZpbmFsUmVjdC55KCksIGZpbmFsUmVjdC53aWR0aCgpLCBmaW5hbFJlY3QuaGVpZ2h0KCks
IHBhcmVudFdpbmRvdyk7Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCi0gICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOwotI2VuZGlmCi0KLSAgICBpZiAo
W21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChmaW5hbFJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotICAgIGVsc2UK
LSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0
aW5nVG9SZWN0OmZpbmFsUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0
aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoJXApLCBtb2RlOiVkIiwgdGhp
cywgbW9kZSk7Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0g
ICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigp
IHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOwotI2VuZGlmCi0KLSAgICBpZiAoW21fd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGJvb2wgaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBt
b2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
OwotICAgIC8vIE9uIE1hYywgc3RhbmRhcmQgZnVsbHNjcmVlbiBpcyBoYW5kbGVkIGJ5IHRoZSBG
dWxsc2NyZWVuIEFQSSBhbmQgbm90IGJ5IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuCi0gICAg
Ly8gSnVzdCB1cGRhdGUgbV9tb2RlIGRpcmVjdGx5IHRvIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIGluIHRoYXQgY2FzZSB0byBrZWVwCi0gICAgLy8g
bV9tb2RlIGluIHN5bmMgd2l0aCB0aGUgZnVsbHNjcmVlbiBtb2RlIGluIEhUTUxNZWRpYUVsZW1l
bnQuCi0gICAgaWYgKGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKQotICAgICAgICBtX21v
ZGUgPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsK
LQotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgc2V0RXhpdGluZ1RvU3Rh
bmRhcmRGdWxsc2NyZWVuOmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuXTsKLSAgICBbbV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQotewotICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVs
bHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMgZXhpdFBJUF07Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBp
bnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKLQotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBG
dWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpp
bnZhbGlkYXRlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSglcCkiLCB0aGlzKTsKLQotICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgPSBuaWw7Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7Ci0K
LSAgICBjbGVhbnVwRnVsbHNjcmVlbigpOwotCi0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlT2JqQyBpbnZhbGlkYXRlXTsKLSAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMgPSBuaWw7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgY29uc3QgY2hhciog
Ym9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAgICByZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNl
IjsKLX0KLSNlbmRpZgotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJl
cGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5l
UmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVw
KSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6
JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpLCBpbmxpbmVSZWN0LngoKSwgaW5saW5lUmVj
dC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5saW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50V2lu
ZG93KTsKLQotICAgIGlmICghdmlzaWJsZSkgewotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKHBhcmVudFdpbmRvdyk7Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpaW5saW5lUmVjdCBpbldpbmRvdzpw
YXJlbnRXaW5kb3ddOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKCVwKSwgZW5hYmxlZDolcyIsIHRoaXMsIGJvb2xTdHJpbmcoZW5hYmxl
ZCkpOwotCi0gICAgaWYgKGVuYWJsZWQgJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgIGV4aXRGdWxs
c2NyZWVuKEludFJlY3QoKSwgbmlsKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQotewotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQo
JXApOiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbykpOwotCi0gICAgaWYgKCFoYXNWaWRl
bykKLSAgICAgICAgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBG
bG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCglcCksIHdp
ZHRoOiUuMGYsIGhlaWdodDolLjBmIiwgdGhpcywgdmlkZW9EaW1lbnNpb25zLndpZHRoKCksIHZp
ZGVvRGltZW5zaW9ucy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBi
ZSB6ZXJvIHdoZW4gd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgdmlkZW8gdG8gYW5vdGhl
ci4gSWdub3JlIHplcm8gdmFsdWVzLgotICAgIGlmICghdmlkZW9EaW1lbnNpb25zLmlzWmVybygp
KQotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNldFZpZGVvRGlt
ZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgJiYgW21fd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQyBpc1BsYXlpbmddOwotfQotCi1ib29sIHN1cHBvcnRzUGljdHVyZUluUGlj
dHVyZSgpCi17Ci0gICAgcmV0dXJuIFBJUExpYnJhcnkoKSAmJiBnZXRQSVBWaWV3Q29udHJvbGxl
ckNsYXNzKCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0KaW5kZXggNGExNzBhMzY3NmExOTAzZDQ3NGI5MDkxY2NjOTEyMTQ2YzdmMTg4MS4uYzA1Njgz
NjQyYTlmYmQyM2NjM2JmYWZlNzQ5NWY4NDI0ZjBiM2Q3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQpAQCAtMzE5LDggKzMxOSw4IEBACiAKIAogI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29yZS9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9O
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5kZXggNzc5NzM2YTE2
YWZmNjBlM2ZhNWEwYWM3ZWEzNjQwNmRjMzY0ZjJlNC4uZjkzMGZhOTZjODg1YmJmZjc0MDRmMDcy
MzU5Njc1OTU1ZmM0YjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3RGF0YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRh
Lm1tCkBAIC01MSw4ICs1MSw4IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogQk9PTCBhcHBsaWNhdGlvbklzVGVybWluYXRpbmcgPSBO
TzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDgzYWQwZThhNTc4ZTEyZDY4NzU1
NjBiMDg3ODFhNzc0NzE4NDQ2MTUuLmUyNGUzMDU4YjY3MmI3ODBlY2Q0OTc3ZTY3MjYyNGJjODRk
MTMwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTU0LDggKzE1NCw4IEBA
IE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYlBhc3RlYm9hcmRQcm94eSBcCiAgICAgV2Vi
UGF5bWVudENvb3JkaW5hdG9yIFwKICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eSBcCi0g
ICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciBcCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5IFwKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIFwKKyAgICBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkgXAogICAgIFdlYlByb2Nlc3MgXAogICAgIFdlYlByb2Nlc3NDb25u
ZWN0aW9uIFwKICAgICBXZWJQcm9jZXNzUG9vbCBcCkBAIC0xNjgsOCArMTY4LDggQEAgTUVTU0FH
RV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViU29ja2V0U3RyZWFtIFwKICAgICBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIgXAogICAgIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5IFwKLSAgICBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIFwKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkgXAorICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgXAorICAgIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eSBcCiAjCiAKIFNDUklQVFMgPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDMyMjFkNzVhOGVhMWUxMDgyM2Y3
MWY3OGVlYmRjZTg1ZjdmYTA3NTMuLmY5OWU0MmIzMzAyMDFiMjI2YTNjZjNlNzRiZTA2M2NiZDA2
ZjExYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eS5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1wb3J0
ICJXS1BERlZpZXcuaCIKICNpbXBvcnQgIldLUGFzc3dvcmRWaWV3LmgiCiAjaW1wb3J0ICJXS1Nj
cm9sbFZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Lmgi
Ci0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIl9X
S0RyYWdnYWJsZUVsZW1lbnRJbmZvSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dlYlZpZXdQcmlu
dEZvcm1hdHRlci5oIgogI2ltcG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3NWU1ZjY1ZjAzYjMyNTkyOTkwZjI2ZGU2MDQ4NDI3
OWQwY2E4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1WaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2Rl
bC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Lmg+CisjZWxzZQorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKK3R5cGVk
ZWYgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisjZWxzZQordHlwZWRlZiBXZWJDb3JlOjpXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2U7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsK
K2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKKworY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0IGZpbmFsOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwgIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwg
dWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQoKSB7IH0KKwor
ICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQorCisgICAgLy8g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50
KFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JilmaW5hbDsKKworICAgIHZv
aWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSk7CisgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQo
ZG91YmxlKTsKKyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKTsKKyAgICB2b2lk
IHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7CisgICAgdm9pZCByYXRlQ2hhbmdl
ZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKKyAgICB2b2lkIHNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRp
bWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2FuUGxheUZhc3RSZXZl
cnNlQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25z
LCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIG11dGVkQ2hhbmdl
ZChib29sKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OworCisgICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQor
ICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKKyAgICAgICAgLCBtX2NvbnRleHRJZChjb250
ZXh0SWQpCisgICAgeworICAgIH0KKworICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCisg
ICAgdm9pZCBwbGF5KCkgZmluYWw7CisgICAgdm9pZCBwYXVzZSgpIGZpbmFsOworICAgIHZvaWQg
dG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7CisgICAgdm9pZCBiZWdpblNjcnViYmluZygpIGZpbmFs
OworICAgIHZvaWQgZW5kU2NydWJiaW5nKCkgZmluYWw7CisgICAgdm9pZCBzZWVrVG9UaW1lKGRv
dWJsZSkgZmluYWw7CisgICAgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7CisgICAg
dm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOworICAgIHZvaWQgYmVnaW5TY2Fubmlu
Z0JhY2t3YXJkKCkgZmluYWw7CisgICAgdm9pZCBlbmRTY2FubmluZygpIGZpbmFsOworICAgIHZv
aWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBzZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgdG9nZ2xlUGlj
dHVyZUluUGljdHVyZSgpIGZpbmFsOworICAgIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKKyAg
ICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOworCisgICAgZG91YmxlIHBsYXliYWNrU3RhcnRl
ZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrU3RhcnRlZFRpbWU7IH0KKyAg
ICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Cisg
ICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jdXJyZW50VGlt
ZTsgfQorICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1
ZmZlcmVkVGltZTsgfQorICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9pc1BsYXlpbmc7IH0KKyAgICBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9pc1NjcnViYmluZzsgfQorICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fcGxheWJhY2tSYXRlOyB9CisgICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+
IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVrYWJsZVJhbmdlcy5j
b3B5UmVmKCk7IH0KKyAgICBkb3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGlt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVk
VGltZTsgfQorICAgIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBt
X2xpdmVVcGRhdGVJbnRlcnZhbDsgfQorICAgIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9jYW5QbGF5RmFzdFJldmVyc2U7IH0KKyAgICBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQorICAg
IHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleDsgfQorICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNl
bGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQorICAgIHVpbnQ2NF90
IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2li
bGVNZWRpYVNlbGVjdGVkSW5kZXg7IH0KKyAgICBib29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVk
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZDsgfQorICAg
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGU7IH0KKyAgICBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXpl
ZERldmljZU5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tMb2Nh
bGl6ZWREZXZpY2VOYW1lOyB9CisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7
IH0KKyAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGVkOyB9CisK
KyAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKKyAgICB1aW50
NjRfdCBtX2NvbnRleHRJZDsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIGRvdWJsZSBtX3BsYXliYWNrU3RhcnRlZFRp
bWUgeyAwIH07CisgICAgYm9vbCBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSB7IGZh
bHNlIH07CisgICAgZG91YmxlIG1fZHVyYXRpb24geyAwIH07CisgICAgZG91YmxlIG1fY3VycmVu
dFRpbWUgeyAwIH07CisgICAgZG91YmxlIG1fYnVmZmVyZWRUaW1lIHsgMCB9OworICAgIGJvb2wg
bV9pc1BsYXlpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1NjcnViYmluZyB7IGZhbHNlIH07
CisgICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAwIH07CisgICAgUmVmPFdlYkNvcmU6OlRpbWVS
YW5nZXM+IG1fc2Vla2FibGVSYW5nZXMgeyBXZWJDb3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKSB9
OworICAgIGRvdWJsZSBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgeyAwIH07
CisgICAgZG91YmxlIG1fbGl2ZVVwZGF0ZUludGVydmFsIHsgMCB9OworICAgIGJvb2wgbV9jYW5Q
bGF5RmFzdFJldmVyc2UgeyBmYWxzZSB9OworICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKKyAgICB1aW50NjRfdCBt
X2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9OworICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOworICAgIHVp
bnQ2NF90IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKKyAgICBib29sIG1fZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQgeyBmYWxzZSB9OworICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lIH07CisgICAgU3Ry
aW5nIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWU7CisgICAgYm9vbCBtX3dp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbXV0ZWQg
eyBmYWxzZSB9OworfTsKKworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IDog
cHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmKTsKKyAgICB2
aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKTsKKworICAgIHZvaWQgaW52
YWxpZGF0ZSgpOworCisgICAgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGNv
bnRyb2xzTWFuYWdlckludGVyZmFjZSgpOworICAgIHZvaWQgcmVxdWVzdENvbnRyb2xsZWRFbGVt
ZW50SUQoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk7CisKKyAgICBleHBsaWNpdCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2Vi
UGFnZVByb3h5Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRmb3JtV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbEludGVy
ZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Cisg
ICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIGVuc3VyZU1v
ZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQg
YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3Zl
Q2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgLy8gTWVzc2FnZXMg
ZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisgICAgdm9pZCBzZXRVcFBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBjbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKTsKKyAgICB2b2lkIGJ1
ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1l
KTsKKyAgICB2b2lkIHNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0
TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKKyAgICB2b2lkIGNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKTsKKyAg
ICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBhdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lk
IGV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5h
bWUpOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pOworICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGlt
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSk7
CisgICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5n
LCBkb3VibGUgcmF0ZSk7CisgICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9u
c2UodWludDY0X3QsIFN0cmluZykgY29uc3Q7CisgICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKKworICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIKKyAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAg
ICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3Rh
dGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7Cisg
ICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2
b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBi
ZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNj
YW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0
aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0
TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOwor
ICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldE11dGVk
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisKKyAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsK
KyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7
CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07CisgICAgSGFz
aENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjM2YTgzMjczZWI4ZTE0NGE2YTEwMzUw
NTU3ODljMjNlMDkxMjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCww
ICsxLDQ1IEBACisjIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKK21lc3NhZ2VzIC0+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSB7CisgICAgUmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBDdXJyZW50
VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJs
ZSBob3N0VGltZSkKKyAgICBCdWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIGJ1ZmZlcmVkVGltZSkKKyAgICBTZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2Vz
LCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKKyAg
ICBDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1
ZSkKKyAgICBBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCisgICAgTGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgQXVkaW9NZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCisgICAgTGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBFeHRlcm5hbFBsYXliYWNrUHJvcGVy
dGllc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRh
cmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQorICAgIFdpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQp
CisgICAgRHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9u
KQorICAgIFBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91
YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCisgICAgUmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCisgICAgTXV0ZWRDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7CisgICAgU2V0VXBQbGF5YmFja0NvbnRyb2xzTWFu
YWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQ2xlYXJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcigpCisKKyAgICBIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0
X3QgY29udGV4dElkLCBTdHJpbmcgaWQpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRmOWQzM2Y5ZmMwODkzYTgyMDk3YTVlZWM4Zjg2ZjVhYTg2NTNjZmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCkBAIC0wLDAgKzEsNTY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oIgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIK
KyNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAi
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworI3ByYWdtYSBtYXJr
IC0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjphZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQm
IGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Cisg
ICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYg
Y2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAg
IG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpwbGF5KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21h
bmFnZXItPnBsYXkobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6cGF1c2UoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFu
YWdlci0+cGF1c2UobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAg
ICAgICBtX21hbmFnZXItPnRvZ2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmluZyhtX2NvbnRl
eHRJZCk7CisKKyAgICBtX2lzU2NydWJiaW5nID0gdHJ1ZTsKK30KKwordm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY3J1YmJpbmcobV9jb250ZXh0SWQpOworCisgICAg
bV9pc1NjcnViYmluZyA9IGZhbHNlOworICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBk
YXRlID0gaXNQbGF5aW5nKCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAg
ICAgIG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Cit9CisKK3ZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1fY29udGV4
dElkLCB0aW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21h
bmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nQmFja3dh
cmQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6ZW5kU2Nhbm5pbmcoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBvcHRp
b25JZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJlSW5QaWN0
dXJlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnRvZ2dsZU11dGVkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPnRvZ2dsZU11dGVkKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQpOworfQor
Cit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGlt
ZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCit7CisgICAgbV9wbGF5YmFja1N0
YXJ0ZWRUaW1lID0gcGxheWJhY2tTdGFydGVkVGltZTsKKyAgICBtX3BsYXliYWNrU3RhcnRlZFRp
bWVOZWVkc1VwZGF0ZSA9IGZhbHNlOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBtX2R1cmF0
aW9uID0gZHVyYXRpb247CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAg
ICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKK30KKwordm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVu
dFRpbWUpCit7CisgICAgbV9jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lOworICAgIGF1dG8gYW5j
aG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKKyAg
ICBpZiAobV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUpCisgICAgICAgIHBsYXliYWNr
U3RhcnRlZFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsKKworICAgIGZvciAoYXV0byogY2xpZW50
IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50
VGltZSwgYW5jaG9yVGltZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgbV9i
dWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWU7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCisgICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUp
OworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQo
Ym9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBtX2lzUGxheWluZyA9
IGlzUGxheWluZzsKKyAgICBtX3BsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKKyAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChp
c1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYgc2Vl
a2FibGVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKQoreworICAgIG1fc2Vla2FibGVSYW5nZXMgPSBzZWVrYWJsZVJhbmdlczsKKyAgICBt
X3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSBsYXN0TW9kaWZpZWRUaW1lOwor
ICAgIG1fbGl2ZVVwZGF0ZUludGVydmFsID0gbGl2ZVVwZGF0ZUludGVydmFsOworICAgIGZvciAo
YXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChzZWVrYWJsZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVy
dmFsKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit7CisgICAgbV9jYW5Q
bGF5RmFzdFJldmVyc2UgPSBjYW5QbGF5RmFzdFJldmVyc2U7CisgICAgZm9yIChhdXRvKiBjbGll
bnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZChjYW5QbGF5RmFzdFJldmVyc2UpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRf
dCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAgbV9hdWRpb01lZGlhU2Vs
ZWN0ZWRJbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OworICAgIGZvciAoYXV0byogY2xp
ZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucywgYXVkaW9NZWRpYVNlbGVjdGVk
SW5kZXgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgbGVnaWJsZU1l
ZGlhU2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMg
PSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOworICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0
ZWRJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7CisKKyAgICBmb3IgKGF1dG8qIGNs
aWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBsZWdpYmxlTWVkaWFT
ZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3sKKyAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKKworICAg
IGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmF1ZGlvTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVk
SW5kZXggPSBzZWxlY3RlZEluZGV4OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVu
dHMpCisgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNl
bGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2Nh
bGl6ZWROYW1lKQoreworICAgIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBlbmFibGVkOwor
ICAgIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgPSB0eXBlOworICAgIG1fZXh0ZXJuYWxQ
bGF5YmFja0xvY2FsaXplZERldmljZU5hbWUgPSBsb2NhbGl6ZWROYW1lOworCisgICAgZm9yIChh
dXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkTmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKK3sKKyAgICBtX3dpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7
CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+d2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11dGVk
Q2hhbmdlZChib29sIG11dGVkKQoreworICAgIG1fbXV0ZWQgPSBtdXRlZDsKKyAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0
ZWQpOworfQorCisjcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkK
KworUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KHBhZ2UpKTsKK30K
KworV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQorICAgIDogbV9wYWdlKCZwYWdlKQoreworICAg
IG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFn
ZUlEKCksICp0aGlzKTsKK30KKworV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZSA9IG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKSB7CisgICAgICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1v
ZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+
IGludGVyZmFjZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsK
KworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBtX2NvbnRl
eHRNYXAuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOworfQorCitXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWwg
PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElk
KTsKKyAgICBSZWY8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFj
ZSA9IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9kZWwpOwor
CisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRl
cmZhY2UpKTsKK30KKworV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVy
ZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
Y29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOworICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgcmV0dXJuIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpKTsKK30KKworUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAg
bV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBpZiAoIW1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5pbnZhbGlkYXRlKCk7
CisgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworfQorCisjcHJhZ21hIG1hcmsg
TWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisKK3ZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElE
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICByZW1vdmVDbGllbnRG
b3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKworICAgIG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOworICAgIGVuc3VyZUludGVyZmFjZShtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCkuZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgYWRkQ2xp
ZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisKKyAgICBtX3BhZ2Ut
PnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShjb250ZXh0SWQpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKK3sKKyNpZiBQTEFURk9STShN
QUMpCisgICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCk7CisgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOworICAgIG1fcGFnZS0+dmlk
ZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5yZXNldE1lZGlhU3RhdGUoKTsK
K30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1lQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RU
aW1lKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY3VycmVudFRpbWVDaGFuZ2VkKGN1
cnJlbnRUaW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJ1
ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1l
KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYnVmZmVyZWRUaW1lQ2hhbmdlZChidWZm
ZXJlZFRpbWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vl
a2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6
cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRv
dWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgUmVmPFRpbWVSYW5nZXM+IHRpbWVSYW5n
ZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDog
cmFuZ2VzKSB7CisgICAgICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5maXJzdCkpOworICAgICAg
ICBBU1NFUlQoaXNmaW5pdGUocmFuZ2Uuc2Vjb25kKSk7CisgICAgICAgIEFTU0VSVChyYW5nZS5z
ZWNvbmQgPj0gcmFuZ2UuZmlyc3QpOworICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFuZ2UuZmly
c3QsIHJhbmdlLnNlY29uZCk7CisgICAgfQorCisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5z
ZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVw
ZGF0ZUludGVydmFsKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVl
KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7
CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJh
Y2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWlu
dDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUgPSBz
dGF0aWNfY2FzdDxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGU+KHRhcmdldFR5cGUpOworICAgIEFTU0VSVCh0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpUYXJnZXRUeXBlVFZPdXQgfHwgdHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
VGFyZ2V0VHlwZU5vbmUpOworCisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKK30KKwor
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit7Cisg
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoZGlzYWJsZWQpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3sKKyAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLm11dGVkQ2hhbmdlZChtdXRlZCk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5k
dXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUpOworfQor
Cit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCit7CisgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHJhdGUpOworfQorCisKK3Zv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9sbGVkRWxlbWVu
dElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJpbmcgaWRlbnRpZmllcikgY29uc3QK
K3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKGNvbnRleHRJZCA9PSBtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCkKKyAgICAgICAgbV9wYWdlLT5oYW5kbGVDb250cm9sbGVkRWxlbWVudElE
UmVzcG9uc2UoaWRlbnRpZmllcik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQp
OworICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsKKyNlbmRpZgorfQorCisKKyNwcmFnbWEg
bWFyayBNZXNzYWdlcyB0byBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisKK3ZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBsYXko
Y29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQbGF5
U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpCZWdpblNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpFbmRTY3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9
CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGltZSks
IG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkZhc3RTZWVr
KGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29u
dGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQo
KSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5u
aW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3YXJkKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2Nhbm5p
bmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJZCwg
aW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQ2NF90IGluZGV4KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5k
ZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9n
Z2xlUGljdHVyZUluUGljdHVyZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwor
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OlRvZ2dsZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIG11dGVkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1f
cGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKQoreworICAgIGlmIChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCkKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdChtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCitQbGF0Zm9ybVdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKQoreworICAgIGlmICghbV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgaW50ZXJm
YWNlID0gZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICBy
ZXR1cm4gJmludGVyZmFjZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM4ZWFiZDBk
ODRhNjMxODY3N2JhYmFhMGMyNTNjZWNlNTYyYWE1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaApA
QCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgKFBMQVRG
T1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgUExBVEZPUk0o
SU9TKQorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaD4K
KyNlbHNlCisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaD4K
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQordHlwZWRlZiBXZWJDb3JlOjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZTsKKyNlbHNlCit0eXBlZGVmIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YyBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Owor
Y2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OworCitjbGFzcyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWwKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbAorICAgICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyICB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkm
IG1hbmFnZXIsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9u
TW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBwbGF5YmFja1Nl
c3Npb25Nb2RlbCwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFn
ZXIgPSBudWxscHRyOyB9CisKKyAgICBQbGF0Zm9ybVZpZXcgKmxheWVySG9zdFZpZXcoKSBjb25z
dCB7IHJldHVybiBtX2xheWVySG9zdFZpZXcuZ2V0KCk7IH0KKyAgICB2b2lkIHNldExheWVySG9z
dFZpZXcoUmV0YWluUHRyPFBsYXRmb3JtVmlldz4mJiBsYXllckhvc3RWaWV3KSB7IG1fbGF5ZXJI
b3N0VmlldyA9IFdURk1vdmUobGF5ZXJIb3N0Vmlldyk7IH0KKworcHJpdmF0ZToKKyAgICBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
JiwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiwgdWludDY0X3QpOworCisgICAgLy8g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQ2xp
ZW50KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2Up
IG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVj
dCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkp
IG92ZXJyaWRlOworICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CisgICAgYm9v
bCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2
aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvRGltZW5zaW9u
czsgfQorCisgICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICB2b2lk
IGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2Ny
ZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOworCisgICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dD4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsKKyAgICB1aW50NjRfdCBtX2NvbnRl
eHRJZDsKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1WaWV3ICo+IG1fbGF5ZXJIb3N0VmlldzsKKyAg
ICBIYXNoU2V0PFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGll
bnRzOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsKKyAgICBib29s
IG1faGFzVmlkZW8geyBmYWxzZSB9OworfTsKKworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJv
eHkmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOwor
CisgICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgYm9vbCBoYXNN
b2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkg
Y29uc3Q7CisgICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVy
ZSgpIGNvbnN0OworICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKKyAgICBi
b29sIGlzVmlzaWJsZSgpIGNvbnN0OworCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpCisgICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRG
dWxsc2NyZWVuKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OworCisgICAgZXhwbGljaXQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSYpOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAgTW9kZWxJ
bnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBlbnN1
cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXRmb3JtV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2
b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJl
bW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKworICAgIC8vIE1lc3Nh
Z2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIHZvaWQgc2V0dXBGdWxsc2Ny
ZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9y
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJv
b2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7CisgICAgdm9pZCBzZXRIYXNWaWRlbyh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wpOworICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90
IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAgdm9pZCBlbnRlckZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIHZvaWQg
Y2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHByZXBhcmVk
VG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29y
ZTo6SW50UmVjdCBpbmxpbmVSZWN0KTsKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1h
dGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisjZW5kaWYKKworICAgIC8vIE1lc3NhZ2VzIHRv
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9k
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKTsKKyAgICB2
b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlk
RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVudGVyRnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZSh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7CisgICAgdm9pZCBzZXRWaWRlb0xh
eWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkpOworICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQpOworCisgICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7CisgICAgUmVmPFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0
TWFwOworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAg
IEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7Cit9OworICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyODE1ZDY3MjM4ZTlkM2Fm
ZmNmMDFmNGY0ZGJkNDA1MjQwODQ0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
CkBAIC0wLDAgKzEsMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorbWVzc2FnZXMgLT4gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5IHsKKyAgICBTZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgaGFzVmlkZW8pCisgICAgU2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRl
eHRJZCwgV2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucykKKyAgICBTZXR1cEZ1bGxz
Y3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIFdl
YkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVs
bHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKKyAgICBFbnRlckZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCisgICAgQ2xlYW51cEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKQorICAgIFByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0
KQorI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQor
ICAgIEV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2
aWRlb0Z1bGxzY3JlZW5Nb2RlKQorI2VuZGlmCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRlNWEyMGE4YWE5MjNjMmE5NzJmOWFlNmJiNjA2YzVjOWVhZDE2
M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCkBAIC0wLDAgKzEsNTIyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkuaCIKKworI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAiQVBJVUlD
bGllbnQuaCIKKyNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1l
c3NhZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
IgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIK
KyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9N
YWNoU2VuZFJpZ2h0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWVyRW51bXMuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFu
Z2VzLmg+CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKworI2lmIFBMQVRGT1JN
KElPUykKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBv
cnQgIlVJS2l0U1BJLmgiCisjZW5kaWYKKworQGludGVyZmFjZSBXS0xheWVySG9zdFZpZXcgOiBQ
bGF0Zm9ybVZpZXcKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIHVpbnQzMl90IGNvbnRl
eHRJRDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLTGF5ZXJIb3N0VmlldworCisjaWYgUExB
VEZPUk0oSU9TKQorKyAoQ2xhc3MpbGF5ZXJDbGFzcyB7CisgICAgcmV0dXJuIFtDQUxheWVySG9z
dCBjbGFzc107Cit9CisjZWxzZQorLSAoQ0FMYXllciAqKW1ha2VCYWNraW5nTGF5ZXIKK3sKKyAg
ICByZXR1cm4gW1tbQ0FMYXllckhvc3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKyNl
bmRpZgorCistICh1aW50MzJfdCljb250ZXh0SUQgeworICAgIHJldHVybiBbW3NlbGYgbGF5ZXJI
b3N0XSBjb250ZXh0SWRdOworfQorCistICh2b2lkKXNldENvbnRleHRJRDoodWludDMyX3QpY29u
dGV4dElEIHsKKyAgICBbW3NlbGYgbGF5ZXJIb3N0XSBzZXRDb250ZXh0SWQ6Y29udGV4dElEXTsK
K30KKworLSAoQ0FMYXllckhvc3QgKilsYXllckhvc3QgeworICAgIHJldHVybiAoQ0FMYXllckhv
c3QgKilbc2VsZiBsYXllcl07Cit9CisKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgUExBVEZPUk0oSU9TKSAmJiAhSEFWRShBVktJ
VCkKKworUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKK3sKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFs
aWRhdGUoKQoreworfQorCitib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFz
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworCit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgp
Cit7CisKK30KKyNlbHNlCisKKyNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dAorCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIs
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVp
bnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKKyAgICAsIG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwocGxheWJhY2tTZXNzaW9uTW9kZWwpCisgICAgLCBtX2NvbnRleHRJ
ZChjb250ZXh0SWQpCit7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6fldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVu
dCYgY2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwor
ICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7
CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5yZXF1ZXN0RnVsbHNjcmVl
bk1vZGUobV9jb250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3Jl
OjpGbG9hdFJlY3QgZnJhbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZXRWaWRlb0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAg
ICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJHcmF2aXR5
KG1fY29udGV4dElkLCBncmF2aXR5KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRleHRJZCwgbW9k
ZSk7Cit9CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojppc1Zpc2libGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX21hbmFnZXIgPyBtX21hbmFnZXItPmlzVmlzaWJsZSgp
IDogZmFsc2U7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRT
ZXR1cEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+ZGlkU2V0dXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1f
bWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4obV9jb250ZXh0
SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1
bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlk
RXhpdEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFn
ZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQp
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShtX2NvbnRleHRJZCk7Cit9CisKKyNwcmFn
bWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQorCitSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSkpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQorICAgIDog
bV9wYWdlKCZwYWdlKQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5KQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKK30KKworV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
KCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGludmFsaWRhdGUo
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUo
KQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZSA9IG51bGxwdHI7CisKKyAgICBmb3IgKGF1
dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZv
cm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKyAgICAgICAgc3RkOjp0
aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFs
aWRhdGUoKTsKKyAgICAgICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVy
dmlld107CisgICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOworICAgIH0K
KworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFw
LnZhbHVlcygpKQorICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPnJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW4oKTsKK30KKworYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
IGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkg
eworICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9Q
aWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250
ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPm1heUF1
dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCitib29sIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNv
bnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewor
ICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5pc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRG
dWxsc2NyZWVuKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCit7CisgICAgZm9yIChhdXRvJiB0
dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKKyAgICAgICAgc3RkOjpnZXQ8MT4odHVwbGUp
LT5hcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgYXV0byYgcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS0+ZW5zdXJlTW9kZWwoY29udGV4dElkKTsKKyAgICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3Jl
YXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKTsKKyAgICBhdXRvJiBw
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgUmVmPFBsYXRmb3JtV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZTo6Y3JlYXRlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7CisgICAgbV9wbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHktPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKwor
ICAgIGludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsK
KyAgICBpbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2Rl
bC5nZXQoKSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBX
VEZNb3ZlKGludGVyZmFjZSkpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUo
KSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICBy
ZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVs
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitQbGF0Zm9ybVdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQs
IDEpOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUrKzsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIEFT
U0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKKworICAgIGludCBjbGll
bnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOworICAgIEFTU0VSVChjbGll
bnRDb3VudCA+IDApOworICAgIGNsaWVudENvdW50LS07CisKKyAgICBpZiAoY2xpZW50Q291bnQg
PD0gMCkgeworICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+cmVtb3ZlQ2xp
ZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUo
Y29udGV4dElkKTsKKyAgICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwg
Y2xpZW50Q291bnQpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5n
RGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpCit7
CisgICAgQVNTRVJUKHZpZGVvTGF5ZXJJRCk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgYWRkQ2xpZW50Rm9y
Q29udGV4dChjb250ZXh0SWQpOworCisgICAgUmV0YWluUHRyPFdLTGF5ZXJIb3N0Vmlldz4gdmll
dyA9IHN0YXRpY19jYXN0PFdLTGF5ZXJIb3N0Vmlldyo+KG1vZGVsLT5sYXllckhvc3RWaWV3KCkp
OworICAgIGlmICghdmlldykgeworICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLTGF5ZXJIb3N0
VmlldyBhbGxvY10gaW5pdF0pOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgW3ZpZXcgc2V0
V2FudHNMYXllcjpZRVNdOworI2VuZGlmCisgICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3
KHZpZXcpOworICAgIH0KKyAgICBbdmlldyBzZXRDb250ZXh0SUQ6dmlkZW9MYXllcklEXTsKKyAg
ICBpZiAoaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yICE9IDEpIHsKKyAgICAgICAgLy8gSW52ZXJ0
IHRoZSBzY2FsZSB0cmFuc2Zvcm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFy
Oi8vcHJvYmxlbS8xODMxNjU0Mj4uCisgICAgICAgIGZsb2F0IGludmVyc2VTY2FsZSA9IDEgLyBo
b3N0aW5nRGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgIFtbdmlldyBsYXllcl0gc2V0U3VibGF5
ZXJUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VT
Y2FsZSwgMSldOworICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVSVZpZXcgKnBhcmVu
dFZpZXcgPSBkb3duY2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqbV9wYWdl
LT5kcmF3aW5nQXJlYSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExheWVyKCk7CisgICAg
aW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3RWaWV3KCksIGluaXRp
YWxSZWN0LCBwYXJlbnRWaWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlKTsKKyNlbHNlCisgICAgSW50UmVjdCBpbml0aWFsV2luZG93UmVjdDsKKyAgICBtX3Bh
Z2UtPnJvb3RWaWV3VG9XaW5kb3coaW5pdGlhbFJlY3QsIGluaXRpYWxXaW5kb3dSZWN0KTsKKyAg
ICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5p
dGlhbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSwgdmlkZW9GdWxsc2NyZWVu
TW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7CisjZW5kaWYKKyAgICBtX3BhZ2UtPnVpQ2xp
ZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCB2aWRlb0Z1
bGxzY3JlZW5Nb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQoreworICAgIGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7Cit9CisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnMo
dWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sK
KyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHZp
ZGVvRGltZW5zaW9ucyk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8mIGludGVy
ZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOworICAgIGludGVyZmFjZS5lbnRlckZ1
bGxzY3JlZW4oKTsKKworICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGluIGEgZ2l2ZW4g
ZnVsbCBzY3JlZW4gbW9kZSBhdCBhIHRpbWU6CisgICAgZm9yIChhdXRvJiBjb250ZXh0UGFpciA6
IG1fY29udGV4dE1hcCkgeworICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9IGNvbnRleHRQ
YWlyLmtleTsKKyAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJZCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNlID0gc3RkOjpn
ZXQ8MT4oY29udGV4dFBhaXIudmFsdWUpOworICAgICAgICBpZiAob3RoZXJJbnRlcmZhY2UtPmhh
c01vZGUoaW50ZXJmYWNlLm1vZGUoKSkpCisgICAgICAgICAgICBvdGhlckludGVyZmFjZS0+cmVx
dWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIH0KK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVjdCk7CisjZWxz
ZQorICAgIEludFJlY3QgZmluYWxXaW5kb3dSZWN0OworICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dp
bmRvdyhmaW5hbFJlY3QsIGZpbmFsV2luZG93UmVjdCk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3Jt
V2luZG93KCkpOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFy
Z2V0TW9kZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUodGFyZ2V0TW9kZSk7Cit9CisjZW5kaWYKKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVwRnVs
bHNjcmVlbigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJl
cGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBX
ZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCit7CisgICAgbV9wYWdlLT5mdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBlbnN1cmVJbnRlcmZh
Y2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVj
dCk7CisjZWxzZQorICAgIEludFJlY3QgaW5saW5lV2luZG93UmVjdDsKKyAgICBtX3BhZ2UtPnJv
b3RWaWV3VG9XaW5kb3coaW5saW5lUmVjdCwgaW5saW5lV2luZG93UmVjdCk7CisgICAgZW5zdXJl
SW50ZXJmYWNlKGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlu
bGluZVdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7CisjZW5kaWYKK30KKwor
I3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQoreworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVzdEZ1bGxz
Y3JlZW5Nb2RlKGNvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNl
dHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxzY3JlZW4oY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRF
eGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Ut
PmRpZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50ZXJG
dWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+ZGlk
RW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgUmVmUHRyPFBs
YXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisKKyAgICBzdGQ6
OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJ
ZCk7CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07CisgICAgW21vZGVsLT5sYXllckhvc3RW
aWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXco
bnVsbHB0cik7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKworICAgIGludGVyZmFjZS0+c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJ
ZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xh
eWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCit7
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBtYWNo
X3BvcnRfbmFtZV90IGZlbmNlUG9ydCA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVEcmF3aW5nQWNy
b3NzUHJvY2Vzc2VzXTsKKyNlbHNlCisgICAgICAgIE1hY2hTZW5kUmlnaHQgZmVuY2VTZW5kUmln
aHQ7CisgICAgICAgIGlmIChEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+
ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgICAgIGZlbmNlU2VuZFJpZ2h0ID0gZHJhd2luZ0FyZWEt
PmNyZWF0ZUZlbmNlKCk7CisgICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gZmVu
Y2VTZW5kUmlnaHQubGVha1NlbmRSaWdodCgpOworI2VuZGlmCisKKyAgICAgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJh
bWVGZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwgTUFD
SF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgfQorfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHko
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5IGdyYXZpdHkpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElkLCAo
dW5zaWduZWQpZ3Jhdml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUpCit7CisgICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJlSW5Q
aWN0dXJlRGlkQ2hhbmdlKG1fcGFnZSwgbW9kZSAmIE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChjb250ZXh0
SWQsIG1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKworYm9vbCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+
aXNWaWV3VmlzaWJsZSgpICYmIG1fcGFnZS0+aXNJbldpbmRvdygpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlz
Vmlld1Zpc2libGUoKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlzVmll
d1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzMzYmU2NWE5OGMyMTljMGRi
OTFkMDMyODQyOTVlY2U1ZjU0NzNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTZWxlY3Rpb25PcHRpb24uaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxXZWJDb3JlL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJ
T1MpCi10eXBlZGVmIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0IFBs
YXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotI2Vsc2UKLXR5cGVkZWYgV2ViQ29y
ZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIFBsYXRmb3JtV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQ
YWdlUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7Ci0KLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCBmaW5hbDogcHVibGljIFJlZkNvdW50ZWQ8
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgcHVibGljIFdlYkNvcmU6OldlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsICB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkm
IG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0
SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
KCkgeyB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0K
LQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJl
bW92ZUNsaWVudChXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpZmluYWw7
Ci0KLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpOwotICAgIHZvaWQgY3VycmVudFRp
bWVDaGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7
Ci0gICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUpOwotICAgIHZvaWQg
cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSk7Ci0gICAgdm9p
ZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0
TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKLSAgICB2b2lkIGNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucywgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAg
ICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wsIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9p
ZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBt
dXRlZENoYW5nZWQoYm9vbCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKLQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNv
bnRleHRJZCkKLSAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCi0gICAgICAgICwgbV9jb250
ZXh0SWQoY29udGV4dElkKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbAotICAgIHZvaWQgcGxheSgpIGZpbmFsOwotICAgIHZvaWQgcGF1c2UoKSBmaW5hbDsK
LSAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOwotICAgIHZvaWQgYmVnaW5TY3J1YmJp
bmcoKSBmaW5hbDsKLSAgICB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFsOwotICAgIHZvaWQgc2Vl
a1RvVGltZShkb3VibGUpIGZpbmFsOwotICAgIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZp
bmFsOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsKLSAgICB2b2lkIGJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOwotICAgIHZvaWQgZW5kU2Nhbm5pbmcoKSBmaW5h
bDsKLSAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpIGZpbmFsOwotICAg
IHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lk
IHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSBmaW5hbDsKLSAgICB2b2lkIHRvZ2dsZU11dGVkKCkg
ZmluYWw7Ci0gICAgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKLQotICAgIGRvdWJsZSBwbGF5
YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wbGF5YmFja1N0YXJ0ZWRU
aW1lOyB9Ci0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kdXJh
dGlvbjsgfQotICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
Y3VycmVudFRpbWU7IH0KLSAgICBkb3VibGUgYnVmZmVyZWRUaW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9idWZmZXJlZFRpbWU7IH0KLSAgICBib29sIGlzUGxheWluZygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9Ci0gICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faXNTY3J1YmJpbmc7IH0KLSAgICBmbG9hdCBwbGF5YmFja1JhdGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrUmF0ZTsgfQotICAgIFJlZjxXZWJDb3JlOjpU
aW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vla2Fi
bGVSYW5nZXMuY29weVJlZigpOyB9Ci0gICAgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RN
b2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlZWthYmxlVGltZVJhbmdlc0xh
c3RNb2RpZmllZFRpbWU7IH0KLSAgICBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3Qg
eyByZXR1cm4gbV9saXZlVXBkYXRlSW50ZXJ2YWw7IH0KLSAgICBib29sIGNhblBsYXlGYXN0UmV2
ZXJzZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2FuUGxheUZhc3RSZXZlcnNlOyB9Ci0gICAg
VmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnM7IH0KLSAgICB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7IH0KLSAgICBWZWN0b3I8V2ViQ29y
ZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7IH0KLSAg
ICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4OyB9Ci0gICAgYm9vbCBleHRlcm5hbFBsYXli
YWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJs
ZWQ7IH0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlOyB9Ci0gICAgU3RyaW5nIGV4dGVybmFsUGxheWJh
Y2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBs
YXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsgfQotICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3dpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkOyB9Ci0gICAgYm9vbCBpc011dGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9t
dXRlZDsgfQotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBtX21hbmFnZXI7
Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKLSAgICBkb3VibGUgbV9wbGF5YmFj
a1N0YXJ0ZWRUaW1lIHsgMCB9OwotICAgIGJvb2wgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNV
cGRhdGUgeyBmYWxzZSB9OwotICAgIGRvdWJsZSBtX2R1cmF0aW9uIHsgMCB9OwotICAgIGRvdWJs
ZSBtX2N1cnJlbnRUaW1lIHsgMCB9OwotICAgIGRvdWJsZSBtX2J1ZmZlcmVkVGltZSB7IDAgfTsK
LSAgICBib29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNTY3J1YmJpbmcg
eyBmYWxzZSB9OwotICAgIGZsb2F0IG1fcGxheWJhY2tSYXRlIHsgMCB9OwotICAgIFJlZjxXZWJD
b3JlOjpUaW1lUmFuZ2VzPiBtX3NlZWthYmxlUmFuZ2VzIHsgV2ViQ29yZTo6VGltZVJhbmdlczo6
Y3JlYXRlKCkgfTsKLSAgICBkb3VibGUgbV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRU
aW1lIHsgMCB9OwotICAgIGRvdWJsZSBtX2xpdmVVcGRhdGVJbnRlcnZhbCB7IDAgfTsKLSAgICBi
b29sIG1fY2FuUGxheUZhc3RSZXZlcnNlIHsgZmFsc2UgfTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6
TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAg
dWludDY0X3QgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKLSAgICBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
czsKLSAgICB1aW50NjRfdCBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07Ci0gICAg
Ym9vbCBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgbV9leHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSB7IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSB9
OwotICAgIFN0cmluZyBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOwotICAg
IGJvb2wgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX211dGVkIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5
Jik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCk7Ci0KLSAg
ICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlKiBjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKTsKLSAgICB2b2lkIHJlcXVlc3RDb250
cm9sbGVkRWxlbWVudElEKCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OwotCi0gICAgZXhwbGljaXQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5KFdlYlBhZ2VQcm94eSYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dHVw
bGU8UmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0Zm9y
bVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7Ci0gICAg
TW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFBsYXRmb3JtV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsK
LSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2
b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLQotICAgIC8v
IE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgotICAgIHZvaWQgc2V0VXBQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIHZvaWQgcmVzZXRNZWRpYVN0
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSk7Ci0g
ICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1
ZmZlcmVkVGltZSk7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBk
b3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAg
dm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
YWx1ZSk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVk
aWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAg
IHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7
Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6
ZWREZXZpY2VOYW1lKTsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQgZHVyYXRpb25DaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKTsKLSAgICB2b2lkIHBsYXliYWNr
U3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3Rh
cnRlZFRpbWUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IGlzUGxheWluZywgZG91YmxlIHJhdGUpOwotICAgIHZvaWQgaGFuZGxlQ29udHJvbGxlZEVsZW1l
bnRJRFJlc3BvbnNlKHVpbnQ2NF90LCBTdHJpbmcpIGNvbnN0OwotICAgIHZvaWQgbXV0ZWRDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7Ci0KLSAgICAvLyBNZXNzYWdlcyB0
byBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0gICAgdm9pZCBwbGF5KHVpbnQ2NF90IGNvbnRl
eHRJZCk7Ci0gICAgdm9pZCBwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9n
Z2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjcnViYmlu
Zyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IHRpbWUpOwotICAgIHZvaWQgZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGlt
ZSk7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwot
ICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCBlbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2
b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KTsKLSAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4
dElkKTsKLSAgICB2b2lkIHRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCBzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotCi0gICAgV2ViUGFnZVByb3h5
KiBtX3BhZ2U7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9j
b250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9
OwotICAgIEhhc2hDb3VudGVkU2V0PHVpbnQ2NF90PiBtX2NsaWVudENvdW50czsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGY2MzZhODMyNzNlYjhlMTQ0YTZhMTAzNTA1NTc4OWMyM2UwOTEyN2QuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IHsKLSAgICBSZXNldE1lZGlhU3RhdGUodWludDY0X3Qg
Y29udGV4dElkKQotICAgIEN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQotICAgIEJ1ZmZlcmVkVGltZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQotICAgIFNlZWthYmxl
UmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8
ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUg
bGl2ZVVwZGF0ZUludGVydmFsKQotICAgIENhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIHZhbHVlKQotICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLSAgICBMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJD
b3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKLSAgICBBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLSAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotICAg
IEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5h
bWUpCi0gICAgV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKLSAgICBEdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi0gICAgUGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLSAgICBSYXRl
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkK
LSAgICBNdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKLSAgICBT
ZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAg
ICBDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKLQotICAgIEhhbmRsZUNvbnRyb2xsZWRF
bGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZCkKLX0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGRmOWQzM2Y5ZmMwODkzYTgyMDk3YTVlZWM4Zjg2ZjVhYTg2NTNjZmYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgotCi0jaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQotCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgotI2ltcG9y
dCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphZGRD
bGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NF
UlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLmFkZCgmY2xp
ZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJlbW92ZUNs
aWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VS
VChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNs
aWVudCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KCkK
LXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnBsYXkobV9jb250ZXh0
SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGF1c2UoKQot
ewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cGF1c2UobV9jb250ZXh0
SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxh
eVN0YXRlKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnRvZ2ds
ZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmluZyhtX2NvbnRleHRJZCk7Ci0KLSAgICBtX2lzU2Ny
dWJiaW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OmVuZFNjcnViYmluZygpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2Vy
LT5lbmRTY3J1YmJpbmcobV9jb250ZXh0SWQpOwotCi0gICAgbV9pc1NjcnViYmluZyA9IGZhbHNl
OwotICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlID0gaXNQbGF5aW5nKCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJs
ZSB0aW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2Vla1Rv
VGltZShtX2NvbnRleHRJZCwgdGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1fY29udGV4dElkLCB0aW1lKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkK
LXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdG
b3J3YXJkKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAg
ICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nQmFja3dhcmQobV9jb250ZXh0SWQpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZW5kU2Nhbm5pbmcobV9jb250
ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24obV9jb250ZXh0SWQs
IG9wdGlvbklkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKLXsKLSAgICBpZiAobV9t
YW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihtX2Nv
bnRleHRJZCwgb3B0aW9uSWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAg
ICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKG1fY29udGV4dElkKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZU11dGVkKCkKLXsK
LSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnRvZ2dsZU11dGVkKG1fY29u
dGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNldE11
dGVkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2Vy
LT5zZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXli
YWNrU3RhcnRlZFRpbWUpCi17Ci0gICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lID0gcGxheWJhY2tT
dGFydGVkVGltZTsKLSAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGZhbHNl
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFu
Z2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBtX2R1cmF0aW9uID0gZHVyYXRpb247Ci0gICAg
Zm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+ZHVyYXRpb25D
aGFuZ2VkKGR1cmF0aW9uKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUpCi17Ci0gICAgbV9jdXJy
ZW50VGltZSA9IGN1cnJlbnRUaW1lOwotICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNz
SW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKLSAgICBpZiAobV9wbGF5YmFja1N0YXJ0
ZWRUaW1lTmVlZHNVcGRhdGUpCi0gICAgICAgIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGN1
cnJlbnRUaW1lKTsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAg
ICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFu
Z2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgbV9idWZmZXJlZFRpbWUgPSBidWZmZXJl
ZFRpbWU7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVu
dC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0
IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKLSAgICBtX3Bs
YXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xp
ZW50cykKLSAgICAgICAgY2xpZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0
ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrYWJsZVJh
bmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdlcyYgc2Vla2FibGVSYW5nZXMsIGRvdWJsZSBs
YXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewotICAgIG1fc2Vl
a2FibGVSYW5nZXMgPSBzZWVrYWJsZVJhbmdlczsKLSAgICBtX3NlZWthYmxlVGltZVJhbmdlc0xh
c3RNb2RpZmllZFRpbWUgPSBsYXN0TW9kaWZpZWRUaW1lOwotICAgIG1fbGl2ZVVwZGF0ZUludGVy
dmFsID0gbGl2ZVVwZGF0ZUludGVydmFsOwotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGll
bnRzKQotICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdl
cywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9v
bCBjYW5QbGF5RmFzdFJldmVyc2UpCi17Ci0gICAgbV9jYW5QbGF5RmFzdFJldmVyc2UgPSBjYW5Q
bGF5RmFzdFJldmVyc2U7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAg
ICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2Up
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCkKLXsKLSAgICBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnM7Ci0gICAgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCA9IGF1ZGlvTWVk
aWFTZWxlY3RlZEluZGV4OwotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAg
ICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucywgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgbGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCkKLXsK
LSAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zOwotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IGxlZ2libGVNZWRp
YVNlbGVjdGVkSW5kZXg7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAg
ICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zLCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX2F1ZGlvTWVkaWFT
ZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDog
bV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKLXsKLSAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4
OwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+
bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5n
ZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWROYW1lKQotewotICAgIG1f
ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBlbmFibGVkOwotICAgIG1fZXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUgPSB0eXBlOwotICAgIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmlj
ZU5hbWUgPSBsb2NhbGl6ZWROYW1lOwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVu
dHMpCi0gICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlw
ZSwgbG9jYWxpemVkTmFtZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCB3aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCkKLXsKLSAgICBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7Ci0gICAgZm9yIChhdXRvKiBjbGll
bnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQot
ewotICAgIG1fbXV0ZWQgPSBtdXRlZDsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKLSAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0ZWQpOwotfQotCi0jcHJhZ21hIG1h
cmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKLQotUmVmUHRyPFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eT4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVh
dGUoV2ViUGFnZVByb3h5JiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KHBhZ2UpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5
JiBwYWdlKQotICAgIDogbV9wYWdlKCZwYWdlKQotewotICAgIG1fcGFnZS0+cHJvY2VzcygpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKLX0KLQot
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5KCkKLXsKLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludmFs
aWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmludmFs
aWRhdGUoKQotewotICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci0KLSAgICBm
b3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0
cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8
UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZTsKLSAgICAgICAg
c3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKLQotICAgICAgICBpbnRlcmZhY2Ut
PmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKLSAgICBt
X2NsaWVudENvdW50cy5jbGVhcigpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpj
cmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmPFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAgICBSZWY8UGxhdGZvcm1X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRmb3JtV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9kZWwpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFr
ZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKLX0KLQotV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4
dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0
dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0K
LQotUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAg
ICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9y
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9jbGllbnRDb3VudHMuYWRkKGNv
bnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZW1v
dmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBpZiAoIW1fY2xp
ZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbnN1
cmVJbnRlcmZhY2UoY29udGV4dElkKS5pbnZhbGlkYXRlKCk7Ci0gICAgbV9jb250ZXh0TWFwLnJl
bW92ZShjb250ZXh0SWQpOwotfQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyCi0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkK
LXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
ID09IGNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkKQotICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKTsKLQotICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29u
dGV4dElkOwotICAgIGVuc3VyZUludGVyZmFjZShtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCku
ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCk7Ci0KLSAgICBtX3BhZ2UtPnZpZGVvQ29udHJvbHNNYW5hZ2Vy
RGlkQ2hhbmdlKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgbV9jb250cm9sc01h
bmFnZXJDb250ZXh0SWQgPSAwOwotICAgIG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRD
aGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBlbnN1cmVJbnRl
cmZhY2UoY29udGV4dElkKS5yZXNldE1lZGlhU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQotewotICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuY3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQotewotICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkuYnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla2FibGVSYW5nZXNWZWN0b3JDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+
IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2
YWwpCi17Ci0gICAgUmVmPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVh
dGUoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDogcmFuZ2VzKSB7Ci0gICAgICAgIEFT
U0VSVChpc2Zpbml0ZShyYW5nZS5maXJzdCkpOwotICAgICAgICBBU1NFUlQoaXNmaW5pdGUocmFu
Z2Uuc2Vjb25kKSk7Ci0gICAgICAgIEFTU0VSVChyYW5nZS5zZWNvbmQgPj0gcmFuZ2UuZmlyc3Qp
OwotICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFuZ2UuZmlyc3QsIHJhbmdlLnNlY29uZCk7Ci0g
ICAgfQotCi0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrYWJsZVJhbmdlc0NoYW5nZWQo
dGltZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNhblBsYXlGYXN0UmV2ZXJzZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQotewotICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh2YWx1ZSk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0
ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
LXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5k
ZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVNZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU+KHRhcmdldFR5cGUpOwot
ICAgIEFTU0VSVCh0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWly
UGxheSB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQg
fHwgdHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUpOwotCi0g
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVk
LCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bXV0ZWRDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
Lm11dGVkQ2hhbmdlZChtdXRlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRp
b24pCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5kdXJhdGlvbkNoYW5nZWQoZHVyYXRp
b24pOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFy
dGVkVGltZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXliYWNrU3RhcnRlZFRp
bWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlz
UGxheWluZywgZG91YmxlIHJhdGUpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yYXRl
Q2hhbmdlZChpc1BsYXlpbmcsIHJhdGUpOwotfQotCi0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3Qg
Y29udGV4dElkLCBTdHJpbmcgaWRlbnRpZmllcikgY29uc3QKLXsKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgaWYgKGNvbnRleHRJZCA9PSBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAg
ICAgbV9wYWdlLT5oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UoaWRlbnRpZmllcik7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQpOwotICAgIFVOVVNFRF9QQVJBTShp
ZGVudGlmaWVyKTsKLSNlbmRpZgotfQotCi0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBsYXkoY29udGV4dElkKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwYXVz
ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlT
dGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUoY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjcnViYmluZyhjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY3J1YmJp
bmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IHRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWsodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkZhc3RTZWVrKGNvbnRleHRJZCwgdGltZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2Fubmlu
Z0ZvcndhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Nh
bm5pbmcodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2Nhbm5pbmcoY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpz
ZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgp
Ci17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2Vs
ZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBpY3R1
cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlUGljdHVyZUluUGljdHVyZShj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZU11
dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11
dGVkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENvbnRyb2xsZWRF
bGVtZW50SUQoKQotewotICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpIYW5k
bGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi1QbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRl
cmZhY2UoKQotewotICAgIGlmICghbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNl
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICByZXR1cm4gJmludGVyZmFjZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMDQw
Y2EwNTExNDUzY2E3MDkwNGE1YTRkY2RlZmU5ZDllZjUyMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIChQTEFURk9STShJT1Mp
ICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVZpZXcu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIFBMQVRGT1JNKElP
UykKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg+
Ci0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Lmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykKLXR5cGVkZWYgV2ViQ29yZTo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U7Ci0jZWxzZQotdHlwZWRlZiBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMgUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0jZW5kaWYKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKLQotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGZpbmFsCi0gICAgOiBwdWJsaWMgUmVmQ291bnRlZDxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciAgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0PiBjcmVhdGUoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5JiBtYW5hZ2VyLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIHBsYXliYWNrU2Vz
c2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQobWFuYWdlciwgcGxheWJh
Y2tTZXNzaW9uTW9kZWwsIGNvbnRleHRJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9t
YW5hZ2VyID0gbnVsbHB0cjsgfQotCi0gICAgUGxhdGZvcm1WaWV3ICpsYXllckhvc3RWaWV3KCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllckhvc3RWaWV3LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRMYXll
ckhvc3RWaWV3KFJldGFpblB0cjxQbGF0Zm9ybVZpZXc+JiYgbGF5ZXJIb3N0VmlldykgeyBtX2xh
eWVySG9zdFZpZXcgPSBXVEZNb3ZlKGxheWVySG9zdFZpZXcpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYsIHVpbnQ2NF90KTsKLQotICAg
IC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92
ZUNsaWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZh
bHNlKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9h
dFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2
aXR5KSBvdmVycmlkZTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotICAg
IGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNWaWRlbygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0KLSAgICBXZWJDb3JlOjpGbG9hdFNp
emUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWRlb0RpbWVu
c2lvbnM7IH0KLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCi0gICAg
dm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEVudGVyRnVs
bHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBm
dWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKLQotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ+IG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7Ci0gICAgdWludDY0X3QgbV9j
b250ZXh0SWQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtVmlldyAqPiBtX2xheWVySG9zdFZpZXc7
Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1f
Y2xpZW50czsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lvbnM7Ci0gICAg
Ym9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFn
ZVByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7Ci0gICAgdmlydHVhbCB+
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUo
KTsKLQotICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwotICAgIGJvb2wg
aGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpIGNvbnN0OwotICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBp
Y3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7Ci0g
ICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIGJvb2wgaXNQbGF5aW5nVmlkZW9JbkVuaGFu
Y2VkRnVsbHNjcmVlbigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKLQotICAgIGV4cGxpY2l0IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkmKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgdHlwZWRlZiBzdGQ6OnR1cGxl
PFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+LCBSZWZQdHI8UGxhdGZvcm1X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxlOwotICAgIE1v
ZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCYg
ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBQbGF0Zm9ybVdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICAvLyBN
ZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKLSAgICB2b2lkIHNldHVwRnVs
bHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZh
Y3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOwotICAgIHZvaWQgc2V0SGFzVmlkZW8odWlu
dDY0X3QgY29udGV4dElkLCBib29sKTsKLSAgICB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyh1aW50
NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZvaWQgZW50
ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBleGl0RnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KTsKLSAgICB2
b2lkIGNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBwcmVw
YXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdl
YkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgdm9pZCBleGl0RnVsbHNjcmVlbldpdGhvdXRB
bmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotI2VuZGlmCi0KLSAgICAvLyBNZXNzYWdl
cyB0byBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCi0gICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVl
bk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSk7Ci0g
ICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkaWRFbnRl
ckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZENsZWFudXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QpOwotICAgIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkKTsKLQotICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOwotICAgIFJl
ZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OwotICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29u
dGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsK
LSAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1fY2xpZW50Q291bnRzOwotfTsKLSAgICAKLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjI4MTVkNjcyMzhlOWQzYWZmY2YwMWY0ZjRkYmQ0MDUyNDA4NDRjZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNz
YWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgewotICAgIFNldEhhc1ZpZGVv
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKLSAgICBTZXRWaWRlb0RpbWVuc2lv
bnModWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25z
KQotICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90
IHZpZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGlu
Z1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJl
KQotICAgIEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRXhpdEZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKLSAg
ICBDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgUHJlcGFyZWRUb1Jl
dHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJ
bnRSZWN0IGlubGluZVJlY3QpCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCi0gICAgRXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCi0jZW5kaWYKLX0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDYxMjlhZDlhMTQxZDQxNmIxYjliZWQyZTMzN2FlNmFhZTFkYWUxYzUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDUyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKLQotI2lmIFBMQVRGT1JNKElP
UykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKLSNpbXBvcnQgIkRyYXdp
bmdBcmVhUHJveHkuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIK
LSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAi
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgPFF1YXJ0
ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWVyRW51bXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
UXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbXBvcnQg
IlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKLSNpbXBvcnQgIlVJS2l0U1BJLmgi
Ci0jZW5kaWYKLQotQGludGVyZmFjZSBXS0xheWVySG9zdFZpZXcgOiBQbGF0Zm9ybVZpZXcKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIHVpbnQzMl90IGNvbnRleHRJRDsKLUBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFdLTGF5ZXJIb3N0VmlldwotCi0jaWYgUExBVEZPUk0oSU9TKQotKyAo
Q2xhc3MpbGF5ZXJDbGFzcyB7Ci0gICAgcmV0dXJuIFtDQUxheWVySG9zdCBjbGFzc107Ci19Ci0j
ZWxzZQotLSAoQ0FMYXllciAqKW1ha2VCYWNraW5nTGF5ZXIKLXsKLSAgICByZXR1cm4gW1tbQ0FM
YXllckhvc3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLX0KLSNlbmRpZgotCi0tICh1aW50
MzJfdCljb250ZXh0SUQgewotICAgIHJldHVybiBbW3NlbGYgbGF5ZXJIb3N0XSBjb250ZXh0SWRd
OwotfQotCi0tICh2b2lkKXNldENvbnRleHRJRDoodWludDMyX3QpY29udGV4dElEIHsKLSAgICBb
W3NlbGYgbGF5ZXJIb3N0XSBzZXRDb250ZXh0SWQ6Y29udGV4dElEXTsKLX0KLQotLSAoQ0FMYXll
ckhvc3QgKilsYXllckhvc3QgewotICAgIHJldHVybiAoQ0FMYXllckhvc3QgKilbc2VsZiBsYXll
cl07Ci19Ci0KLUBlbmQKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiAhSEFWRShBVktJVCkKLQotUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQotewotfQot
Ci1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21h
dGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RI
aWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQotewotCi19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCi17Ci0KLX0KLSNlbHNl
Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAotCi1XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICAsIG1fcGxheWJhY2tTZXNzaW9uTW9k
ZWwocGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCi17
Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKLXsK
LSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRz
LmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQotewot
ICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5y
ZW1vdmUoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgaWYgKG1fbWFu
YWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobV9jb250ZXh0
SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QgZnJh
bWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0xh
eWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJHcmF2aXR5KG1fY29udGV4dElkLCBn
cmF2aXR5KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFn
ZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRleHRJZCwgbW9kZSk7Ci19Ci0KLWJvb2wg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAotewotICAg
IHJldHVybiBtX21hbmFnZXIgPyBtX21hbmFnZXItPmlzVmlzaWJsZSgpIDogZmFsc2U7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4o
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZGlkU2V0dXBGdWxs
c2NyZWVuKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZGlkRXhpdEZ1bGxzY3JlZW4o
bV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZShtX2NvbnRleHRJZCk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQotCi1SZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdl
UHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5KHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkpOwot
fQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQotICAgIDogbV9wYWdlKCZwYWdlKQot
ICAgICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5KQotewotICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCkKLXsKLSAgICBpZiAo
IW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQotewotICAgIG1fcGFn
ZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9j
b250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLSAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVy
ZmFjZSkgPSB0dXBsZTsKLQotICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKLSAgICAg
ICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAg
IG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOwotICAgIH0KLQotICAgIG1fY29udGV4
dE1hcC5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVu
KCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQotICAg
ICAgICBzdGQ6OmdldDwxPih0dXBsZSktPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsK
LX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Ci17Ci0gICAg
Zm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAo
c3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJl
KCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygp
KSB7Ci0gICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPm1heUF1dG9tYXRpY2FsbHlTaG93
VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgZm9y
IChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAoc3Rk
OjpnZXQ8MT4odHVwbGUpLT5pc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotI2VuZGlmCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNh
dGlvbkRpZEJlY29tZUFjdGl2ZSgpCi17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4
dE1hcC52YWx1ZXMoKSkKLSAgICAgICAgc3RkOjpnZXQ8MT4odHVwbGUpLT5hcHBsaWNhdGlvbkRp
ZEJlY29tZUFjdGl2ZSgpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1v
ZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGVN
b2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byYgcGxheWJh
Y2tTZXNzaW9uTW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJlTW9k
ZWwoY29udGV4dElkKTsKLSAgICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBt
b2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBwbGF5
YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKTsKLSAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+ZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCk7Ci0gICAgUmVmPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
PiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6Y3JlYXRl
KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHktPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+
c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsKLSAgICBpbnRlcmZhY2Ut
PnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFj
ZSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNl
VHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250
ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCkpOwotfQotCi1QbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQsIDEpOwotICAgIGlmICgh
YWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUr
KzsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVu
dEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIEFTU0VSVChtX2NsaWVudENv
dW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKLQotICAgIGludCBjbGllbnRDb3VudCA9IG1fY2xp
ZW50Q291bnRzLmdldChjb250ZXh0SWQpOwotICAgIEFTU0VSVChjbGllbnRDb3VudCA+IDApOwot
ICAgIGNsaWVudENvdW50LS07Ci0KLSAgICBpZiAoY2xpZW50Q291bnQgPD0gMCkgewotICAgICAg
ICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChj
b250ZXh0SWQpOwotICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKTsKLSAg
ICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOwot
fQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5X
aXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0
b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpCi17Ci0gICAgQVNTRVJUKHZp
ZGVvTGF5ZXJJRCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4g
bW9kZWw7Ci0gICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBp
bnRlcmZhY2U7Ci0KLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgYWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0
SWQpOwotCi0gICAgUmV0YWluUHRyPFdLTGF5ZXJIb3N0Vmlldz4gdmlldyA9IHN0YXRpY19jYXN0
PFdLTGF5ZXJIb3N0Vmlldyo+KG1vZGVsLT5sYXllckhvc3RWaWV3KCkpOwotICAgIGlmICghdmll
dykgewotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLTGF5ZXJIb3N0VmlldyBhbGxvY10gaW5p
dF0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgW3ZpZXcgc2V0V2FudHNMYXllcjpZRVNd
OwotI2VuZGlmCi0gICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KHZpZXcpOwotICAgIH0K
LSAgICBbdmlldyBzZXRDb250ZXh0SUQ6dmlkZW9MYXllcklEXTsKLSAgICBpZiAoaG9zdGluZ0Rl
dmljZVNjYWxlRmFjdG9yICE9IDEpIHsKLSAgICAgICAgLy8gSW52ZXJ0IHRoZSBzY2FsZSB0cmFu
c2Zvcm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFyOi8vcHJvYmxlbS8xODMx
NjU0Mj4uCi0gICAgICAgIGZsb2F0IGludmVyc2VTY2FsZSA9IDEgLyBob3N0aW5nRGV2aWNlU2Nh
bGVGYWN0b3I7Ci0gICAgICAgIFtbdmlldyBsYXllcl0gc2V0U3VibGF5ZXJUcmFuc2Zvcm06Q0FU
cmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VTY2FsZSwgMSldOwotICAg
IH0KLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBVSVZpZXcgKnBhcmVudFZpZXcgPSBkb3duY2Fz
dDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqbV9wYWdlLT5kcmF3aW5nQXJlYSgp
KS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExheWVyKCk7Ci0gICAgaW50ZXJmYWNlLT5zZXR1
cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3RWaWV3KCksIGluaXRpYWxSZWN0LCBwYXJlbnRW
aWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKLSNlbHNl
Ci0gICAgSW50UmVjdCBpbml0aWFsV2luZG93UmVjdDsKLSAgICBtX3BhZ2UtPnJvb3RWaWV3VG9X
aW5kb3coaW5pdGlhbFJlY3QsIGluaXRpYWxXaW5kb3dSZWN0KTsKLSAgICBpbnRlcmZhY2UtPnNl
dHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5pdGlhbFdpbmRvd1JlY3Qs
IG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSwgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYWxsb3dzUGlj
dHVyZUluUGljdHVyZSk7Ci0jZW5kaWYKLSAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9J
blBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCB2aWRlb0Z1bGxzY3JlZW5Nb2RlICYg
TWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0SGFzVmlkZW8odWlu
dDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQotewotICAgIGVuc3VyZUludGVyZmFjZShj
b250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4
dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBlbnN1cmVJbnRl
cmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUlu
dGVyZmFjZShjb250ZXh0SWQpOwotICAgIGludGVyZmFjZS5lbnRlckZ1bGxzY3JlZW4oKTsKLQot
ICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGluIGEgZ2l2ZW4gZnVsbCBzY3JlZW4gbW9k
ZSBhdCBhIHRpbWU6Ci0gICAgZm9yIChhdXRvJiBjb250ZXh0UGFpciA6IG1fY29udGV4dE1hcCkg
ewotICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9IGNvbnRleHRQYWlyLmtleTsKLSAgICAg
ICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJZCkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4oY29udGV4dFBh
aXIudmFsdWUpOwotICAgICAgICBpZiAob3RoZXJJbnRlcmZhY2UtPmhhc01vZGUoaW50ZXJmYWNl
Lm1vZGUoKSkpCi0gICAgICAgICAgICBvdGhlckludGVyZmFjZS0+cmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbigpOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVj
dCBmaW5hbFJlY3QpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIGVuc3VyZUludGVyZmFjZShj
b250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVjdCk7Ci0jZWxzZQotICAgIEludFJlY3Qg
ZmluYWxXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhmaW5hbFJlY3Qs
IGZpbmFsV2luZG93UmVjdCk7Ci0gICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1
bGxzY3JlZW4oZmluYWxXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3JtV2luZG93KCkpOwotI2Vu
ZGlmCi19Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKLXsKLSAg
ICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRp
b25Ub01vZGUodGFyZ2V0TW9kZSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVwRnVsbHNjcmVlbigpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0
IGlubGluZVJlY3QpCi17Ci0gICAgbV9wYWdlLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
KTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5w
cmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVjdCk7Ci0jZWxzZQotICAg
IEludFJlY3QgaW5saW5lV2luZG93UmVjdDsKLSAgICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3co
aW5saW5lUmVjdCwgaW5saW5lV2luZG93UmVjdCk7Ci0gICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlubGluZVdpbmRvd1JlY3Qs
IG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7Ci0jZW5kaWYKLX0KLQotI3ByYWdtYSBtYXJrIE1l
c3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKGNvbnRl
eHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpk
aWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbihj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2Ny
ZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRl
ckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRl
eHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVu
KCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7Ci0KLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50
ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBbQ0FU
cmFuc2FjdGlvbiBmbHVzaF07Ci0gICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJv
bVN1cGVydmlld107Ci0gICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVh
bnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLQotICAgIGludGVy
ZmFjZS0+c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVO
b25lKTsKLSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUodWludDY0
X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCi17Ci0gICAgQGF1dG9yZWxl
YXNlcG9vbCB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBtYWNoX3BvcnRfbmFtZV90IGZl
bmNlUG9ydCA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVEcmF3aW5nQWNyb3NzUHJvY2Vzc2VzXTsK
LSNlbHNlCi0gICAgICAgIE1hY2hTZW5kUmlnaHQgZmVuY2VTZW5kUmlnaHQ7Ci0gICAgICAgIGlm
IChEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkK
LSAgICAgICAgICAgIGZlbmNlU2VuZFJpZ2h0ID0gZHJhd2luZ0FyZWEtPmNyZWF0ZUZlbmNlKCk7
Ci0gICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gZmVuY2VTZW5kUmlnaHQubGVh
a1NlbmRSaWdodCgpOwotI2VuZGlmCi0KLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoY29udGV4
dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZF
X1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4
dElkLCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZp
dHkpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElkLCAodW5zaWduZWQpZ3Jhdml0
eSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0g
ICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJlRGlkQ2hhbmdl
KG1fcGFnZSwgbW9kZSAmIE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0
dXJlSW5QaWN0dXJlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChjb250ZXh0SWQsIG1vZGUpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgp
ICYmIG1fcGFnZS0+aXNJbldpbmRvdygpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLXsKLSAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKTsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlzVmlld1Zpc2libGUpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKLX0KLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLm1tCmluZGV4IDdmMWU5ODU5ODZlNTM1OGM0NTQ4Y2E1OTkzZWFhNjNlYzFiYTlj
MDMuLmM1YjQyYTAwMzA4NzI1ODQ5MWE4ZDgzNjFmNzdkZWM1ZjU4OWIyMjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTQxLDYgKzQxLDcg
QEAKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAj
aW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgog
I2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJlbW90ZU9iamVjdFJl
Z2lzdHJ5TWVzc2FnZXMuaCIKQEAgLTYyLDcgKzYzLDYgQEAKICNpbXBvcnQgIldlYkV2ZW50RmFj
dG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYlBhZ2VQ
cm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1w
b3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1w
b3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFsLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGE2NGExYzZmMzQ2YjlmNTVjYmE2NDk3ZDk0
OWNiNGZmN2FmNDBiYjYuLjFmNTgxNjgxODE5OWE1OTRhY2Q4YTIzOGM3ZTUwMTZkYTNjMzU4MWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNTIsOSAr
MTUyLDkgQEAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVy
Zm9ybWFuY2VEYXRhLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmgi
CisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNs
dWRlICJWaWV3U25hcHNob3RTdG9yZS5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SdW5Mb29wT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRJbmRpY2F0
b3JXaW5kb3cuaD4KQEAgLTE4MCw3ICsxODAsNyBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
Ci0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5
SU9TLm1tCmluZGV4IGMxYmE3NjRmMDE1NDI3MTFlMjlhZDVmOWEwNzM0Mjc3NjgyOGFiYmEuLmM5
MmVhOWY0YzNiMzNmM2E4ZmNjOWEyMGRkZjI2MjgwNWU0OWM5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC00MSwxMSArNDEsMTEg
QEAKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCiAjaW1wb3J0ICJVSUtp
dFNQSS5oIgogI2ltcG9ydCAiVXNlckRhdGEuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIgogI2ltcG9ydCAiVmlld1VwZGF0ZURpc3BhdGNoZXJNZXNzYWdlcy5oIgog
I2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQg
IldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGVhZjQ2ZmRlYjVhOGFhOTliNTBkMDZmMWRm
NTBmMWM0MWU2OGJmZC4uNDgwZGVkY2FkMWFkZTE0Y2I0YThjYjEwZjQxZjJjOTgwOTcyOTlmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtODcxLDggKzg3MSw4IEBACiAJCTM3RkMxOTQ3MTg1MEZCRjIwMDhDRkE0NyAvKiBXS0Jy
b3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMxOTQ2MTg1MEZCRjIwMDhDRkE0NyAvKiBXS0Jy
b3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0ZDMTk0QTE4NTEwRDZBMDA4Q0ZBNDcgLyog
V0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5NDgxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNV
UkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbSAqLzsgfTsKIAkJMzdGQzE5NEIxODUxMEQ2QTAw
OENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5NDkxODUxMEQ2QTAwOENGQTQ3
IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oICovOyB9OwotCQkzRjQxOEVGOTE4
ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQx
OEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi87IH07Ci0JCTNGNDE4RUZCMTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZE
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87
IH07CisJCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJM0Y0MThFRkIxODg3QkQ5NzAwMjc5NUZE
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNzE4ODdCRDk3
MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCAqLzsgfTsKIAkJM0Y4N0I5QkQxNTg5NDAxMjAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlC
QTE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCAqLzsgfTsKIAkJM0Y4N0I5
QkUxNTg5NDAxOTAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4N0I5QkIxNTg5M0Y2MzAwOTBGRjYyIC8q
IFdlYkNvbG9yQ2hvb3Nlci5oICovOyB9OwogCQkzRjg3QjlDMDE1ODk0MEQ4MDA5MEZGNjIgLyog
V2ViQ29sb3JQaWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oICovOyB9
OwpAQCAtMTExNCw5ICsxMTE0LDkgQEAKIAkJNTI3MkQ0QzkxRTczNUYwOTAwRUI0MjkwIC8qIFdL
UHJvdGVjdGlvblNwYWNlTlMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyNzJENEM3MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5T
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI3
MkQ0Q0ExRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjcyRDRDODFFNzM1RjA5MDBF
QjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5tbSAqLzsgfTsKIAkJNTI4QzM3QzExOTVDQkIx
QTAwRDhCOUNDIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5RjI4MTAxOTU4RjQ3ODAwOENBQzcyIC8q
IFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkuaCAqLzsgfTsKLQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi87IH07Ci0JCTUyRDVBMUI3MUM1NzRBMDIw
MERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi87IH07CisJCTUyRDVBMUIwMUM1NzQ5NUEw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLzsgfTsKKwkJNTJENUExQjExQzU3NDk2
MjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFDMUM1NzQ5NEUwMERFMzRB
MyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi87IH07CisJCTUyRDVBMUI3MUM1
NzRBMDIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQjQxQzU3NDlGMjAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi87IH07CiAJCTUzMDI1ODNCMURDQkJEMjIw
MERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODJFMURDQkJEMUQwMERBODlDMiAvKiBO
ZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcCAqLzsgfTsKIAkJNTMwMjU4M0MxRENCQkQyMjAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODJGMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZVJlc291cmNlLmggKi87IH07CiAJCTUzMDI1ODNEMURDQkJEMjIwMERBODlDMiAvKiBO
ZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzMDI1ODMwMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2
ZW50LmNwcCAqLzsgfTsKQEAgLTE5MjksMTQgKzE5MjksMTQgQEAKIAkJQ0Q3OEUxMTcxREI3REMw
QTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzhFMTE2MURCN0RDMEEwMDE0QTJERSAvKiBBUElG
dWxsc2NyZWVuQ2xpZW50LmggKi87IH07CiAJCUNENzhFMTE5MURCN0U1QUQwMDE0QTJERSAvKiBf
V0tGdWxsc2NyZWVuRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENENzhFMTE4MURCN0U1QUQwMDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVs
ZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlDREEwNDFGNDFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0JvYXJkU2VydmljZXNTUEkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA0MUYzMUFDRTIx
MDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oICovOyB9OwotCQlDREEyOUExQTFD
QkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE4MUNCREJGNDEwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovOyB9OwotCQlDREEyOUExQjFD
QkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTkxQ0JEQkY0MTAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLzsgfTsKLQkJQ0RBMjlBMjAxQ0JF
QjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMUUxQ0JFQjVGQjAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovOyB9OwotCQlDREEy
OUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMUYx
Q0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLzsg
fTsKLQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQlDREEyOUEyOTFDQkVCNjdBMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi87IH07Ci0JCUNEQTI5
QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCUNEQTI5QTJCMUNCRUI2N0EwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07
CisJCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTgx
Q0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi87IH07CisJCUNE
QTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExOTFDQkRCRjQx
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovOyB9OworCQlDREEyOUEyMDFD
QkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExRTFDQkVCNUZCMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi87IH07CisJCUNEQTI5QTIx
MUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExRjFDQkVCNUZC
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovOyB9OworCQlDREEy
OUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi87IH07CisJCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKKwkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNjFDQkVCNjdBMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKKwkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJQ0RDMzgyRkUxNzIxMTc5OTAwOEEyRkMzIC8qIFNl
Y0l0ZW1TaGltTGlicmFyeS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMUY4QTc4MTM4QjQ2MDkwMEE5NUY0NCAvKiBTZWNJdGVtU2hpbUxpYnJhcnku
bW0gKi87IH07CiAJCUNEQzM4MzA3MTcyMTE3REQwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hp
bUxpYnJhcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5j
cHAgKi87IH07CiAJCUNEQzM4MzBDMTcyMTIyODIwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hp
bUxpYnJhcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQzM4MzBCMTcyMTIxQ0UwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaCAq
LzsgfTsKQEAgLTMwOTgsMTAgKzMwOTgsMTAgQEAKIAkJMzdGQzE5NDYxODUwRkJGMjAwOENGQTQ3
IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzE5NDgxODUxMEQ2QTAwOENGQTQ3
IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzE5NDkxODUxMEQ2QTAwOENGQTQ3IC8q
IFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVG
RCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0
MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzRjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
RjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzRjg3QjlCQTE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9v
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbG9yQ2hv
b3Nlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJCMTU4OTNGNjMw
MDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29sb3JDaG9vc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNG
ODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzM4NSwxMiArMzM4NSwxMiBAQAogCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1
RDAgLyogU3RhdGlzdGljc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RhdGlzdGljc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3MkQ0Qzcx
RTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV0tQcm90ZWN0aW9uU3BhY2VOUy5oOyBwYXRoID0gbWFjL1dLUHJv
dGVjdGlvblNwYWNlTlMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3MkQ0Qzgx
RTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tOyBwYXRoID0g
bWFjL1dLUHJvdGVjdGlvblNwYWNlTlMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUFCMUM1
NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMu
aW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBQzFDNTc0
OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFCMjFDNTc0OUYy
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUEx
QUExQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQjMxQzU3
NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVy
ZVJlc291cmNlLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODJGMURD
QkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzAyNTgzMDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1
cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3Jr
Q2FwdHVyZUV2ZW50LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MjcyLDE2ICs0
MjcyLDE2IEBACiAJCUNENzhFMTE2MURCN0RDMEEwMDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUZ1bGxzY3JlZW5DbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3OEUxMTgxREI3RTVBRDAwMTRB
MkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0RBMDQxRjMxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tCb2FyZFNlcnZpY2VzU1BJLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEy
OUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdl
cy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1l
c3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExRTFDQkVCNUZC
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTI1MUNCRUI2N0Ew
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2Vz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTkxQ0JE
QkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDREEyOUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExRjFDQkVCNUZCMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjcxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MkY3MTcyMTE1MDYwMDhB
MkZDMyAvKiBDRk5ldHdvcmsuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDRk5ldHdvcmsu
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ0ZOZXR3b3JrLmZy
YW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJQ0RDMzgyRjkxNzIxMTZE
MzAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREMzODMwNjE3MjExNzk5MDA4QTJGQzMgLyogV2ViUHJvY2Vzc1NoaW0uZHlsaWIg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxl
ZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJQcm9jZXNzU2hp
bS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTUyMTcsMTcg
KzUyMTcsMTcgQEAKIAkJCQkyRDFCNUQ1QTE4NTg2NTk5MDA2QzY1OTYgLyogVmlld0dlc3R1cmVD
b250cm9sbGVyLm1lc3NhZ2VzLmluICovLAogCQkJCTFBQzAyNzNFMTk2NjIyRDYwMEMxMkI3NSAv
KiBXZWJQYWdlUHJveHlDb2NvYS5tbSAqLywKIAkJCQk3QzQ2OTRDQjFBNEI1MTBBMDBBRDU4NDUg
LyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0gKi8sCi0JCQkJQ0RBMjlBMUUxQ0JFQjVGQjAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovLAotCQkJCUNEQTI5
QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywKKwkJCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi8sCisJCQkJQ0RBMjlBMjIxQ0JFQjYx
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywK
KwkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1tICovLAogCQkJCTdDRTREMjE1MUE0OTE0ODQwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9v
bENvY29hLm1tICovLAogCQkJCTFBMDRGNjE3MUE0QTNBN0EwMEEyMUI2RSAvKiBXZWJQcm9jZXNz
UHJveHlDb2NvYS5tbSAqLywKIAkJCQk3QUFEMTc1RTFFQTZBRjM3MDAzQjA4OTQgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gKi8sCiAJCQkJNTFEMTI0MzExRTZERTUy
MTAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXJDb2NvYS5oICovLAogCQkJCTUxRDEyNDMy
MUU2REU1MjEwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyQ29jb2EubW0gKi8sCi0JCQkJ
NTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oICovLAotCQkJCTUyRDVBMUFCMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJNTJENUExQUMxQzU3NDk0RTAwREUz
NEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLywKKwkJCQk1MkQ1QTFB
QTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi8sCisJ
CQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovLAogCQkJCTJERkM3REI5MUJDQ0MxOTUwMEMxNTQ4
QyAvKiBXZWJWaWV3SW1wbC5oICovLAogCQkJCTJERkM3REJBMUJDQ0MxOTUwMEMxNTQ4QyAvKiBX
ZWJWaWV3SW1wbC5tbSAqLywKIAkJCQkxQUQwMUJDQjE5MDVENTQ5MDBDOUM0NUYgLyogV0tSZWxv
YWRGcmFtZUVycm9yUmVjb3ZlcnlBdHRlbXB0ZXIuaCAqLywKQEAgLTY0MTEsMTQgKzY0MTEsMTQg
QEAKIAkJCQlDRDQ5MUIwNTFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFn
ZXIuY3BwICovLAogCQkJCUNENDkxQjA2MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlci5oICovLAogCQkJCUNENDkxQjBBMUU3MzJEMTIwMDAwOTA2NiAvKiBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUExOTFDQkRCRjQxMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovLAotCQkJCUNEQTI5QTFDMUNC
REJGNUIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICov
LAotCQkJCUNEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLm1tICovLAorCQkJCUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLmggKi8sCisJCQkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8sCiAJCQkJRUNBNjgwRDcxRTY5MERG
ODAwNzMxRDIwIC8qIFdlYlByb2Nlc3NDb2NvYS5oICovLAogCQkJCTdDNkU3MEY5MThCMkQ0QTAw
MEYyNEUyRSAvKiBXZWJQcm9jZXNzQ29jb2EubW0gKi8sCi0JCQkJNTJENUExQjIxQzU3NDlGMjAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLywKLQkJCQk1MkQ1QTFCMzFD
NTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAq
LywKLQkJCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tbSAqLywKKwkJCQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5oICovLAorCQkJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAorCQkJCTUyRDVBMUI0MUM1NzQ5RjIwMERF
MzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBj
b2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC03OTAzLDEwICs3OTAzLDEwIEBA
CiAJCQkJMUFCMUY3OTMxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvck1l
c3NhZ2VzLmggKi8sCiAJCQkJMUFCMUY3OTQxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRD
b29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkxQUIxRjc5NTFEMUIz
NjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oICovLAot
CQkJCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8sCi0JCQkJQ0RBMjlBMjYxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8sCi0JCQkJQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCisJCQkJQ0RBMjlBMjQxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAor
CQkJCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVz
c2FnZXMuaCAqLywKKwkJCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQlDREEyOUEyNzFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywK
IAkJCQkxQTA0M0Y2NzEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNz
YWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFBMDQzRjY4MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8sCiAJCQkJQkMzMDY2QkMxMjVBNDQyMTAwRTcx
Mjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwICovLApAQCAtNzkyOCwxMCArNzky
OCwxMCBAQAogCQkJCTFBQUYwOEI2MTkyNjlFNkQwMEI2MzkwQyAvKiBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJNZXNzYWdlcy5oICovLAogCQkJCTdDMzYxRDc2MTkyODAzQkQwMDM2QTU5RCAvKiBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJ
N0MzNjFENzcxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
TWVzc2FnZXMuaCAqLywKLQkJCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJM0Y0MThFRjYxODg3
QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICovLAot
CQkJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVG
RCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovLAorCQkJCTNG
NDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLywKKwkJCQkzRjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8sCisJCQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZE
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJ
CQkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eU1lc3NhZ2VzLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJEZXJpdmVkIFNvdXJjZXMiOwogCQkJ
cGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDI7CkBAIC04NzcyLDEwICs4NzcyLDEwIEBACiAJ
CQkJMUFCMUY3OTkxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODUwRkU3MUVEN0MzOUYwMEZCNzdBNyAv
KiBXZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0U3
MzYxMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQlD
REEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNE
QTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEyMDFDQkVCNUZCMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRDU5MjlGMTY2RTA2MDAwMEU2QkYwMiAv
KiBXZWJQbHVnSW5DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTc0NEYwMTI2MzhGQjMw
MDZGMEYxMiAvKiBXZWJQb3B1cEl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTZBNTA4MEJGMUYw
RURBQUEwMEU2MTdDNSAvKiBXS1dpbmRvd0ZlYXR1cmVzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04ODI5LDcgKzg4MjksNyBAQAogCQkJCTdDMzYxRDc5MTkyODAzQkQwMDM2QTU5RCAvKiBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNTczOUJCRDFCNDIwNDJEMDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4M0VFNTc1QzFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1l
c3NhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERkM3REJCMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlDRDU1QUExMjhFMjk0RjAwMTMzQzg1IC8qIFdL
QWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTIz
MkRGNDE4QjI5RDY4MDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMDM4NCwxMCArMTAzODQsMTAgQEAKIAkJCQkxQTNFNzM2MjEx
Q0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMwMzM3REREMTI3QTUyMUMwMDhGRjRGNCAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0QTIxODg0RTRGMDAwRUQ4NkRCIC8qIFdlYlBs
YXRmb3JtVG91Y2hQb2ludElPUy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUExQTFDQkRC
RjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBpbiBTb3VyY2VzICov
LAotCQkJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTIxMUNCRUI1
RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gaW4gU291cmNl
cyAqLywKLQkJCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5
QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMjExQ0JF
QjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFENTkyOUUx
NjZFMDYwMDAwRTZCRjAyIC8qIFdlYlBsdWdJbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTA4RkVFNDFENTkzRTJBMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDNTc0NEVGMTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQb3B1cEl0
ZW0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQ2MCwxMCArMTA0NjAsMTAgQEAKIAkJCQk3QzM2
MUQ3ODE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTU3MzlCQkUxQjQyMDQ2NjAwRDI1
OEMxIC8qIFdlYlVzZXJNZWRpYUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4M0VFNTc1
QjFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQkzRjQxOEVGOTE4ODdCRDk3MDAyNzk1
RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJM0Y0MThFRkIxODg3QkQ5NzAw
Mjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNGNDE4RUY5MTg4N0JEOTcw
MDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRjQxOEVGQjE4ODdCRDk3MDAy
Nzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTJERkM3REJDMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1w
bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REQxMTI3QTI5ODAwMDhGRjRGNCAvKiBXZWJX
aGVlbEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODE2MEQwMTg3NjQ1NTcwMDIxRTc5
RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAKaW5kZXggNGQyMmFmZjEyODlmNzAyZThlNTg0YTY3MjNiNWM2YWU5ZWRkOWI4
Zi4uZmVlMGQyODY3N2QwMDBhNWE3OTcwZGFkNDlhNTE5MGY0ZDI4YWRhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcApAQCAtNzgsOCArNzgsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgorI2luY2x1ZGUg
IlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMDg1OWY2NjVmNzBl
ZTYxYmU1MjA3ZDUyYTU4MzliYmVkY2ExMzc0Ni4uNjVkZjYwMzA1MDFhNjJjMzY4YTFkNWY2YzIw
NjI3YTI4ODRjY2Q2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcApAQCAtMjE4LDEwICsyMTgsMTAgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQog
I2luY2x1ZGUgIlBERlBsdWdpbi5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aCIKICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlICJXS1N0cmluZ0NGLmgiCi0jaW5jbHVk
ZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4KICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1BsYXli
YWNrU2Vzc2lvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5M2M4YWJiYTFlYTBmMjA0ZjgyMjQ5
NTYzODNhNDBlZDM3MjMyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApAQCAtMCwwICsxLDE2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNs
dWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRFbnVtcy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBdHRhY2htZW50OworY2xh
c3MgQ29ubmVjdGlvbjsKK2NsYXNzIERlY29kZXI7CitjbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Cit9
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE5vZGU7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJQYWdlOworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsK
KworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCBmaW5hbAorICAgIDog
cHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4KKyAg
ICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1
YmxpYyBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUo
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCgpOworCisgICAgdm9pZCBpbnZhbGlk
YXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ7CisKKyAgICAvLyBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIGZpbmFsOwor
CisgICAgLy8gV2ViUGxheWJhY2tNb2RlbENsaWVudAorICAgIHZvaWQgZHVyYXRpb25DaGFuZ2Vk
KGRvdWJsZSkgZmluYWw7CisgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJlZFRpbWVD
aGFuZ2VkKGRvdWJsZSkgZmluYWw7CisgICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdl
ZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkgZmluYWw7CisgICAgdm9pZCByYXRlQ2hhbmdl
ZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBmaW5hbDsKKyAgICB2b2lkIHNl
ZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxh
c3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpIGZpbmFsOworICAgIHZv
aWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIHZhbHVlKSBmaW5hbDsKKyAgICB2b2lk
IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBm
aW5hbDsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpIGZpbmFsOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQoYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFt
ZSkgZmluYWw7CisgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQo
Ym9vbCkgZmluYWw7CisgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgZmluYWw7CisKKyAgICBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90IG1fY29udGV4dElkOworfTsKKworY2xhc3MgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJik7
CisgICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOworCisgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsK
KworICAgIHZvaWQgc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50Jik7CisgICAgdm9pZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Cisg
ICAgdWludDY0X3QgY29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQmKTsKKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOworCisgICAgZXhwbGljaXQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdl
Jik7CisKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiwgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVw
bGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2Rl
bEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50JiBl
bnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgcmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYWRkQ2xp
ZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgLy8gSW50ZXJmYWNlIHRvIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQKKyAgICB2b2lkIHJlc2V0TWVkaWFTdGF0
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlKTsKKyAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpOworICAg
IHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZm
ZXJlZFRpbWUpOworICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSk7CisgICAgdm9pZCByYXRlQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1Jh
dGUpOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Y29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3Vi
bGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKKyAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGF1ZGlvTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFdl
YkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAgdm9p
ZCBtdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKKworICAgIC8vIE1lc3Nh
Z2VzIGZyb20gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5CisgICAgdm9pZCBwbGF5KHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBi
ZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2NydWJiaW5n
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgZmFzdFNlZWsodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgdm9pZCBlbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGlu
ZGV4KTsKKyAgICB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURS
ZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0
dXJlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVNdXRlZCh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgc2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11
dGVkKTsKKworICAgIFdlYlBhZ2UqIG1fcGFnZTsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqLCB1aW50NjRfdD4gbV9tZWRpYUVsZW1lbnRzOworICAgIEhhc2hNYXA8dWlu
dDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKKyAgICB1aW50NjRfdCBt
X2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKKyAgICBIYXNoQ291bnRlZFNldDx1aW50
NjRfdD4gbV9jbGllbnRDb3VudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45NTY2NmE3MTU0Y2M0YTk0NGQwNGVjYTg2Y2IzMDMwMDZiZDc3OGExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCittZXNzYWdlcyAtPiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyIHsKKyAgICBQbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQ
YXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgVG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICBCZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRW5k
U2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZWVrVG9UaW1lKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIHRpbWUpCisgICAgRmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSkKKyAgICBCZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
CisgICAgQmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFbmRT
Y2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQorICAgIFNlbGVjdExlZ2libGVNZWRp
YU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQorICAgIEhhbmRsZUNv
bnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBUb2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBUb2dnbGVNdXRlZCh1aW50
NjRfdCBjb250ZXh0SWQpCisgICAgU2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11
dGVkKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg1YTI3ZTQ4YjJh
NDI4MjlmYjQ0MjI0YzE3NGQ5YjIzODM1NWI1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpAQCAtMCww
ICsxLDQ3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbXBv
cnQgIkF0dGFjaG1lbnQuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2lt
cG9ydCAiV2ViUGFnZS5oIgorI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
IgorI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgorI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMg
dWludDY0X3QgbmV4dENvbnRleHRJZCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnRleHRJ
ZCA9IDA7CisgICAgcmV0dXJuICsrY29udGV4dElkOworfQorCisjcHJhZ21hIG1hcmsgLSBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0CisKK1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIDogbV9t
YW5hZ2VyKCZtYW5hZ2VyKQorICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQoreworfQorCitX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6cmVzZXRNZWRpYVN0YXRlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPnJlc2V0TWVkaWFTdGF0ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBk
dXJhdGlvbikKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmR1cmF0
aW9uQ2hhbmdlZChtX2NvbnRleHRJZCwgZHVyYXRpb24pOworfQorCit2b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+Y3VycmVudFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwg
YW5jaG9yVGltZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YnVmZmVyZWRUaW1lQ2hhbmdlZChtX2NvbnRl
eHRJZCwgYnVmZmVyZWRUaW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRl
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cmF0ZUNoYW5nZWQo
bV9jb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKK30KKwordm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChk
b3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBwbGF5
YmFja1N0YXJ0ZWRUaW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYg
cmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZh
bCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlZWthYmxlUmFu
Z2VzQ2hhbmdlZChtX2NvbnRleHRJZCwgcmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBk
YXRlSW50ZXJ2YWwpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAobV9t
YW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQobV9j
b250ZXh0SWQsIHZhbHVlKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9
CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElk
LCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCk7
Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZp
Y2VOYW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQobV9jb250ZXh0SWQsIGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERl
dmljZU5hbWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKG1fY29udGV4dElkLCBkaXNhYmxlZCk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5tdXRlZENoYW5nZWQo
bV9jb250ZXh0SWQsIG11dGVkKTsKK30KKworI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcgorCitSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihwYWdlKSk7Cit9CisKK1dlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYgcGFn
ZSkKKyAgICA6IG1fcGFnZSgmcGFnZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOworfQorCitXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCit7CisgICAg
Zm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBSZWZQ
dHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOworICAgICAgICBS
ZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAg
ICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOworICAgICAgICBtb2RlbC0+
cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOworICAgICAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50
KG51bGxwdHIpOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIH0KKwor
ICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fbWVkaWFFbGVtZW50cy5jbGVhcigpOwor
ICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7CisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQor
eworICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWwg
PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsK
KyAgICBtb2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2UpOworCisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKK30KKworV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQor
eworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVs
SW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1
cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQor
CitXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVy
biAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisK
K3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50
PiBtZWRpYUVsZW1lbnQgPSBtb2RlbC0+bWVkaWFFbGVtZW50KCk7CisgICAgbW9kZWwtPnNldE1l
ZGlhRWxlbWVudChudWxscHRyKTsKKyAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2Up
OworICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIG1fbWVkaWFFbGVtZW50cy5yZW1v
dmUobWVkaWFFbGVtZW50LmdldCgpKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJ
ZCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29u
dGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRl
eHRJZCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50Q291
bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOworICAgIGlmIChtX2NsaWVudENvdW50cy5yZW1vdmUo
Y29udGV4dElkKSkKKyAgICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOworfQorCit2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQoreworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBhdXRvIGZvdW5kSXRlcmF0b3IgPSBtX21lZGlhRWxlbWVudHMuZmluZCgmbWVk
aWFFbGVtZW50KTsKKyAgICBpZiAoZm91bmRJdGVyYXRvciAhPSBtX21lZGlhRWxlbWVudHMuZW5k
KCkpIHsKKyAgICAgICAgdWludDY0X3QgY29udGV4dElkID0gZm91bmRJdGVyYXRvci0+dmFsdWU7
CisgICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9PSBjb250ZXh0SWQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkKQorICAgICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdl
ckNvbnRleHRJZCk7CisgICAgICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4
dElkOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1l
bnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9
KTsKKyAgICAgICAgYXV0byBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwor
ICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAgICAgICAgICByZW1v
dmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICAgICAg
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7CisgICAgICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuc2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOworICAgIH0KKwor
ICAgIGFkZENsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpT
ZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKK3sKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCk7CisgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOworI2VuZGlmCit9CisK
K3VpbnQ2NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1lZGlhRWxl
bWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCit7CisgICAgYXV0
byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7
IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOworICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRN
ZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7CisgICAgcmV0dXJuIGNvbnRleHRJZDsKK30KKwor
I3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OgorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSh1
aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0ZShjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpkdXJh
dGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCit7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1
cmF0aW9uQ2hhbmdlZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9
CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkK
K3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRp
bWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZl
cmVkVGltZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6QnVmZmVyZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGlt
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IHBsYXliYWNrU3RhcnRlZFRpbWUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNv
bnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5n
ZWQoY29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkp
OworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVS
YW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFs
KQoreworICAgIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykg
eworICAgICAgICBkb3VibGUgc3RhcnQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLnN0YXJ0KGkpLnRv
RG91YmxlKCk7CisgICAgICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLmVuZChp
KS50b0RvdWJsZSgpOworICAgICAgICByYW5nZXNWZWN0b3IuYXBwZW5kKHsgc3RhcnQsIGVuZCB9
KTsKKyAgICB9CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OlNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZChjb250ZXh0SWQsIFdURk1v
dmUocmFuZ2VzVmVjdG9yKSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUp
Cit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OkNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY29udGV4dElkLCB2YWx1ZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9w
dGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1f
cGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0
VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkV4dGVybmFsUGxheWJhY2tQ
cm9wZXJ0aWVzQ2hhbmdlZChjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90
Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
eworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJ
bmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
K30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQorewor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoY29udGV4dElkLCBkaXNhYmxl
ZCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok11dGVkQ2hhbmdlZChjb250ZXh0
SWQsIG11dGVkKSk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eToKKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpw
bGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnBsYXkoKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwYXVzZSh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wYXVzZSgp
OworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1
aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dn
bGVQbGF5U3RhdGUoKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdp
blNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5iZWdpblNjcnViYmluZygpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5lbmRTY3J1YmJpbmcoKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUp
Cit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9UaW1lKHRpbWUpOworfQor
Cit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHRpbWUpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mYXN0
U2Vlayh0aW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNj
YW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOworfQorCit2b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nQmFja3dhcmQo
KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY2Fu
bmluZygpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKK30KKwor
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElE
UmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBlbGVtZW50ID0gZW5zdXJl
TW9kZWwoY29udGV4dElkKS5tZWRpYUVsZW1lbnQoKTsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQsIGVsZW1lbnQtPmdl
dElkQXR0cmlidXRlKCkpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0
b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKK30KKwordm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVNdXRlZCgpOworfQorCit2
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBtdXRlZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE11dGVk
KG11dGVkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MGMwNWIxMGM4MWUwM2Q3YTliNGFiNGE3
ZGJhNWIyZjIwMmI0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaApAQCAtMCwwICsxLDE1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJ
VCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
CisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50
TGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRFbnVtcy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9W
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXR0YWNobWVudDsKK2NsYXNzIENvbm5lY3Rpb247
CitjbGFzcyBEZWNvZGVyOworY2xhc3MgTWVzc2FnZVJlY2VpdmVyOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBOb2RlOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKK2NsYXNzIFdlYlBhZ2U7Citj
bGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OworY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisKK2Ns
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKKyAgICA6IHB1YmxpYyBSZWZD
b3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+CisgICAgLCBwdWJsaWMg
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgp
IHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQorCisgICAgTGF5ZXJIb3N0aW5nQ29udGV4dCogbGF5
ZXJIb3N0aW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC5nZXQoKTsg
fQorICAgIHZvaWQgc2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJI
b3N0aW5nQ29udGV4dD4mJik7CisKKyAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1
cm4gbV9pc0FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0SXNBbmltYXRpbmcoYm9vbCBmbGFnKSB7
IG1faXNBbmltYXRpbmcgPSBmbGFnOyB9CisKKyAgICBib29sIHRhcmdldElzRnVsbHNjcmVlbigp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0SXNGdWxsc2NyZWVuOyB9CisgICAgdm9pZCBzZXRUYXJn
ZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1fdGFyZ2V0SXNGdWxsc2NyZWVuID0gZmxhZzsg
fQorCisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIGZ1bGxzY3JlZW5Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZTsgfQor
ICAgIHZvaWQgc2V0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIHsgbV9mdWxsc2NyZWVuTW9kZSA9IG1vZGU7IH0K
KworICAgIGJvb2wgaXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1bGxzY3JlZW47
IH0KKyAgICB2b2lkIHNldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV9pc0Z1bGxzY3JlZW4g
PSBmbGFnOyB9CisKK3ByaXZhdGU6CisgICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQKKyAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7
CisKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90IG1fY29udGV4dElkOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRleHQ7
CisgICAgYm9vbCBtX2lzQW5pbWF0aW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdGFyZ2V0SXNG
dWxsc2NyZWVuIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9mdWxsc2NyZWVuTW9kZSB7IFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKKyAgICBib29sIG1faXNG
dWxsc2NyZWVuIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXImKTsKKyAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CisgICAg
CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIElu
dGVyZmFjZSB0byBDaHJvbWVDbGllbnQKKyAgICBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVu
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29u
c3Q7CisgICAgdm9pZCBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0Vs
ZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYpOworICAgIHZvaWQgZXhpdFZpZGVvRnVs
bHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYs
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisK
K3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDsKKworICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFn
ZSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBs
ZTxSZWZQdHI8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+LCBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dAorICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBo
YXNWaWRlbyk7CisgICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisKKyAgICAvLyBNZXNzYWdlcyBmcm9t
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQorICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3Jl
ZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKTsKKyAgICB2b2lk
IGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRXhp
dEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVudGVyRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNo
bWVudCBmZW5jZVBvcnQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2
NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSk7CisgICAgdm9pZCBmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRv
SW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKTsKKyAgICAKKyAg
ICBXZWJQYWdlKiBtX3BhZ2U7CisgICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQqLCB1aW50NjRfdD4gbV92aWRlb0VsZW1lbnRzOworICAgIEhhc2hNYXA8dWludDY0X3Qs
IE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKKyAgICB1aW50NjRfdCBtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1f
Y2xpZW50Q291bnRzOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Nv
Y29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTM1OWMyNWFhZTdiMDE1ZTMwMTNkOWExYjE1MDdiNjEwYTJmYmNhNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDM1IEBACisjIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKK21l
c3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgeworICAgIFJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVk
V2l0aE1lZGlhKQorICAgIERpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgRGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIERpZEVudGVyRnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkQ2xlYW51cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKQorICAgIFNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBj
b250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5j
ZVBvcnQpCisgICAgU2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwg
dW5zaWduZWQgZ3Jhdml0eSkKKyAgICBGdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKKyAgICBGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCit9CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjgwY2ZmNGEyZTk2MDFhMDg3NzhkMjYwNDRkYjg1YTg4
NTgyZGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2Nv
YS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCkBAIC0wLDAgKzEsNDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
LmgiCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAiQXR0YWNo
bWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorI2ltcG9ydCAiVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
CisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0IDxR
dWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVv
RWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNr
aW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZGVvLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlclZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGltZVJhbmdlcy5oPgorI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgSW50UmVj
dCBpbmxpbmVWaWRlb0ZyYW1lKEhUTUxWaWRlb0VsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgZWxl
bWVudC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwor
ICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byByZWN0ID0gcmVuZGVyZXItPnZpZGVv
Qm94KCk7CisgICAgcmVjdC5tb3ZlQnkocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0
KCkubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS52aWV3KCktPmNv
bnRlbnRzVG9Sb290VmlldyhyZWN0KTsKK30KKworI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dAorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdlcigm
bWFuYWdlcikKKyAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKworV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQoKQoreworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRl
eHQ+JiYgY29udGV4dCkKK3sKKyAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEZNb3ZlKGNv
bnRleHQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhh
c1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAg
ICAgIG1fbWFuYWdlci0+aGFzVmlkZW9DaGFuZ2VkKG1fY29udGV4dElkLCBoYXNWaWRlbyk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlkZW9EaW1lbnNp
b25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV9j
b250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIKKworUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIocGFnZSwgcGxheWJhY2tTZXNzaW9u
TWFuYWdlcikpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIHBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIpCisgICAgOiBtX3BhZ2UoJnBhZ2UpCisgICAgLCBtX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXIocGxheWJhY2tTZXNzaW9uTWFuYWdlcikKK3sKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRo
aXMpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcigpCit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMo
KSkgeworICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IG1vZGVsOworICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOworICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxl
OworCisgICAgICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7CisgICAgICAgIG1v
ZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZh
bGlkYXRlKCk7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV92aWRl
b0VsZW1lbnRzLmNsZWFyKCk7CisgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKKyAgICAKKyAg
ICBpZiAobV9wYWdlKQorICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSgpCit7CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+
cGFnZUlEKCkpOworICAgIG1fcGFnZSA9IG51bGxwdHI7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWwgPSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKKyAgICBtX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXItPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKworICAg
IGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0Ojpj
cmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOworICAgIG1vZGVsLT5hZGRDbGllbnQo
KmludGVyZmFjZSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwp
LCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpN
b2RlbEludGVyZmFjZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2Rl
bEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9k
ZWwodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVN
b2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3Rk
Ojp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0
SWQpOworCisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5yZW1vdmVDbGllbnRGb3JDb250
ZXh0KGNvbnRleHRJZCk7CisKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVt
ZW50ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOworICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQo
bnVsbHB0cik7CisgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKyAgICBpbnRl
cmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICBtX3ZpZGVvRWxlbWVudHMucmVtb3ZlKHZpZGVvRWxl
bWVudC5nZXQoKSk7CisgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRk
KGNvbnRleHRJZCwgMSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKKworICAgIGlu
dCBjbGllbnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOworICAgIEFTU0VS
VChjbGllbnRDb3VudCA+IDApOworICAgIGNsaWVudENvdW50LS07CisKKyAgICBpZiAoY2xpZW50
Q291bnQgPD0gMCkgeworICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKTsK
KyAgICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOworfQor
CisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIENocm9tZUNsaWVudDoKKworYm9vbCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKK3sKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIHJldHVybiBTZXR0
aW5nczo6YXZLaXRFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVybiBtb2RlID09IEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgJiYgc3Vw
cG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlk
ZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKQoreworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIEFTU0VSVChtb2Rl
ICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworCisg
ICAgdWludDY0X3QgY29udGV4dElkID0gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5jb250ZXh0
SWRGb3JNZWRpYUVsZW1lbnQodmlkZW9FbGVtZW50KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dmlkZW9FbGVtZW50cy5hZGQoJnZpZGVvRWxlbWVudCwgY29udGV4dElkKTsKKyAgICBVTlVTRURf
UEFSQU0oYWRkUmVzdWx0KTsKKyAgICBBU1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
PSBjb250ZXh0SWQpOworCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNv
bnRleHRJZCk7CisgICAgaWYgKCFpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKKyAg
ICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRl
eHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7CisKKyAgICBhdXRvIHZpZGVv
UmVjdCA9IGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KTsKKyAgICBGbG9hdFJlY3Qgdmlk
ZW9MYXllckZyYW1lID0gRmxvYXRSZWN0KDAsIDAsIHZpZGVvUmVjdC53aWR0aCgpLCB2aWRlb1Jl
Y3QuaGVpZ2h0KCkpOworCisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG9sZE1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCk7CisgICAgaW50ZXJm
YWNlLT5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7CisgICAgaW50ZXJmYWNlLT5zZXRGdWxs
c2NyZWVuTW9kZShtb2RlKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KCZ2aWRlb0VsZW1l
bnQpOworICAgIGlmIChvbGRNb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZU5vbmUpCisgICAgICAgIG1vZGVsLT5zZXRWaWRlb0xheWVyRnJhbWUodmlkZW9M
YXllckZyYW1lKTsKKworICAgIGlmIChpbnRlcmZhY2UtPmlzQW5pbWF0aW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKHRydWUpOworCisgICAgYm9v
bCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlID0gdmlkZW9FbGVtZW50LndlYmtpdFN1cHBvcnRzUHJl
c2VudGF0aW9uTW9kZShIVE1MVmlkZW9FbGVtZW50OjpWaWRlb1ByZXNlbnRhdGlvbk1vZGU6OlBp
Y3R1cmVJblBpY3R1cmUpOworICAgIAorICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQoY29udGV4dElk
LCBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+Y29udGV4dElEKCksIHZpZGVvUmVj
dCwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2Rl
KCksIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9F
bGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCkKK3sKKyAgICBB
U1NFUlQobV9wYWdlKTsKKyAgICBBU1NFUlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRl
b0VsZW1lbnQpKTsKKworICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5n
ZXQoJnZpZGVvRWxlbWVudCk7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNl
KTsKKworICAgIGlmIChpbnRlcmZhY2UuaXNBbmltYXRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50ZXJmYWNlLnNldElzQW5pbWF0aW5nKHRydWUpOworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihj
b250ZXh0SWQsIGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlE
KCkpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxz
Y3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZp
ZGVvRWxlbWVudCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIHRhcmdldE1vZGUpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpCisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgQVNTRVJUKG1fdmlk
ZW9FbGVtZW50cy5jb250YWlucygmdmlkZW9FbGVtZW50KSk7CisKKyAgICB1aW50NjRfdCBjb250
ZXh0SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2aWRlb0VsZW1lbnQpOworICAgIGF1dG8mIGlu
dGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLnNl
dFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7CisKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5p
bWF0aW9uVG9Nb2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlkZW9FbGVtZW50KTsKKyAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0TW9kZSk7CisjZW5kaWYKK30KKworI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OgorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlk
ZW8pCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNvbnRleHRJZCwgaGFz
VmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3Qg
RmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNl
dFZpZGVvRGltZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyksIG1fcGFnZS0+cGFn
ZUlEKCkpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVk
aWEpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUo
bW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3Jl
ZW5Nb2RlKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgQVNT
RVJUKG1fcGFnZSk7CisgICAgUGxhdGZvcm1MYXllciogdmlkZW9MYXllciA9IFtDQUxheWVyIGxh
eWVyXTsKKyNpZm5kZWYgTkRFQlVHCisgICAgW3ZpZGVvTGF5ZXIgc2V0TmFtZTpAIldlYiB2aWRl
byBmdWxsc2NyZWVuIG1hbmFnZXIgbGF5ZXIiXTsKKyNlbmRpZgorCisgICAgW0NBVHJhbnNhY3Rp
b24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisK
KyAgICBbdmlkZW9MYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgwLCAwKV07CisgICAgW3Zp
ZGVvTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3I6
OnRyYW5zcGFyZW50KV07CisKKyAgICAvLyBTZXQgYSBzY2FsZSBmYWN0b3IgaGVyZSB0byBtYWtl
IGNvbnZlcnRSZWN0OnRvTGF5ZXI6bmlsIHRha2Ugc2NhbGUgZmFjdG9yIGludG8gYWNjb3VudC4g
PHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KKyAgICAvLyBUaGlzIHNjYWxlIGZhY3RvciBpcyBp
bnZlcnRlZCBpbiB0aGUgaG9zdGluZyBwcm9jZXNzLgorICAgIGZsb2F0IGhvc3RpbmdTY2FsZUZh
Y3RvciA9IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBbdmlkZW9MYXllciBzZXRU
cmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0b3IsIGhvc3Rp
bmdTY2FsZUZhY3RvciwgMSldOworCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0g
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+bGF5
ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIodmlkZW9MYXllcik7CisKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAK
KyAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9MYXllciwgW3Byb3RlY3Rl
ZFRoaXMsIHRoaXMsIGNvbnRleHRJZF0geworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7Cisg
ICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRl
ckZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgICAgIH0pOworICAgIH0pOworICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
Cit9CisgICAgCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZh
Y2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFj
ZS0+c2V0SXNBbmltYXRpbmcoZmFsc2UpOworICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVu
KGZhbHNlKTsKKworICAgIGlmIChpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50
ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOworICAgIGlmICghdmlkZW9FbGVtZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91
c2x5IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgorICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnRd
IHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVu
dCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhp
dEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwg
aW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
CisgICAgbW9kZWwtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oW3Byb3RlY3RlZFRoaXMs
IGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0geworICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRl
cmZhY2UsIG1vZGVsXSB7CisgICAgICAgICAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5
ZXIobmlsLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKKyAgICAgICAg
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9vdExheWVyKG51bGxw
dHIpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdD
b250ZXh0KG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAg
c3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisgICAgaW50
ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgp
OworICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuID0gaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxz
Y3JlZW4oKTsKKworICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOworICAg
IFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVt
ZW50KCk7CisKKyAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgIHJlbW92ZUNsaWVudEZvckNv
bnRleHQoY29udGV4dElkKTsKKworICAgIGlmICghdmlkZW9FbGVtZW50IHx8ICF0YXJnZXRJc0Z1
bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnQsIG1vZGVd
IHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1l
bnQsIG1vZGUpOworICAgIH0pOworfQorICAgIAordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25l
ZCBncmF2aXR5KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdy
YXZpdHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7Cit9
CisgICAgCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK3sKKyAg
ICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgbW9kZWwgPSBlbnN1
cmVNb2RlbChjb250ZXh0SWQpOworCisgICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQorICAgICAgICBt
b2RlbC52aWRlb0VsZW1lbnQoKS0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2UpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVlLCBpbmxpbmVWaWRlb0Zy
YW1lKCptb2RlbC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKyAgICAK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRh
Y2htZW50IGZlbmNlUG9ydCkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgaWYgKHN0ZDo6aXNuYW4o
Ym91bmRzLngoKSkgfHwgc3RkOjppc25hbihib3VuZHMueSgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5k
cy53aWR0aCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy5oZWlnaHQoKSkpIHsKKyAgICAgICAgYXV0
byB2aWRlb1JlY3QgPSBpbmxpbmVWaWRlb0ZyYW1lKCptb2RlbC0+dmlkZW9FbGVtZW50KCkpOwor
ICAgICAgICBib3VuZHMgPSBGbG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZpZGVv
UmVjdC5oZWlnaHQoKSk7CisgICAgfQorICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsKKyAgICBpZiAoaW50
ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpCisgICAgICAgIGludGVyZmFjZS0+bGF5ZXJI
b3N0aW5nQ29udGV4dCgpLT5zZXRGZW5jZVBvcnQoZmVuY2VQb3J0LnBvcnQoKSk7CisgICAgbW9k
ZWwtPnNldFZpZGVvTGF5ZXJGcmFtZShib3VuZHMpOworICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRl
KG1hY2hfdGFza19zZWxmKCksIGZlbmNlUG9ydC5wb3J0KCkpOworICAgIFtDQVRyYW5zYWN0aW9u
IGNvbW1pdF07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzUzY2IxNjk4YmRiMTU1Zjk2Njk4MTExZjA1MTVmMjM4ODdmNWRhMi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKLQotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXZl
bnRMaXN0ZW5lci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNz
IEF0dGFjaG1lbnQ7Ci1jbGFzcyBDb25uZWN0aW9uOwotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIE1l
c3NhZ2VSZWNlaXZlcjsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTm9kZTsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0IGZpbmFsCi0gICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0PgotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZQotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50
NjRfdCBjb250ZXh0SWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwotICAg
IH0KLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KCk7Ci0K
LSAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDsK
LQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgIHZvaWQgcmVzZXRNZWRp
YVN0YXRlKCkgZmluYWw7Ci0KLSAgICAvLyBXZWJQbGF5YmFja01vZGVsQ2xpZW50Ci0gICAgdm9p
ZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKLSAgICB2b2lkIGN1cnJlbnRUaW1lQ2hh
bmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBmaW5hbDsKLSAgICB2
b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBmaW5hbDsKLSAgICB2b2lkIHBsYXliYWNr
U3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKSBmaW5hbDsKLSAg
ICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIGZp
bmFsOwotICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlRpbWVS
YW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZh
bCkgZmluYWw7Ci0gICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgdmFsdWUp
IGZpbmFsOwotICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpIGZpbmFsOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYg
b3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7Ci0gICAgdm9pZCBhdWRpb01l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lkIGxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgdm9pZCBl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYkNvcmU6OldlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBs
b2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZChib29sKSBmaW5hbDsKLSAgICB2b2lkIG11dGVkQ2hhbmdlZChib29s
KSBmaW5hbDsKLQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKiBtX21hbmFnZXI7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7
Ci19OwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4g
Y3JlYXRlKFdlYlBhZ2UmKTsKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KCk7Ci0KLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIGZpbmFsOwotCi0gICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmKTsKLSAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250
cm9sc01hbmFnZXIoKTsKLSAgICB1aW50NjRfdCBjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7Ci0KLSAgICBleHBsaWNpdCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKFdlYlBhZ2UmKTsKLQotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+LCBSZWZQdHI8V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7Ci0gICAg
TW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICAv
LyBJbnRlcmZhY2UgdG8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAotICAgIHZv
aWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkdXJhdGlv
bkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUpOwotICAgIHZvaWQgY3VycmVudFRp
bWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSk7Ci0gICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7Ci0gICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsK
LSAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcs
IGZsb2F0IHBsYXliYWNrUmF0ZSk7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RN
b2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotICAgIHZvaWQgY2FuUGxh
eUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOwotICAg
IHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwot
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgdm9p
ZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sKTsKLSAgICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wp
OwotCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkK
LSAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHBhdXNlKHVpbnQ2
NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4
dElkKTsKLSAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlZWtUb1Rp
bWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9pZCBmYXN0U2Vlayh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdG
b3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dh
cmQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9u
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgaGFuZGxlQ29u
dHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRv
Z2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2ds
ZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZXRNdXRlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgbXV0ZWQpOwotCi0gICAgV2ViUGFnZSogbV9wYWdlOwotICAgIEhhc2hN
YXA8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCosIHVpbnQ2NF90PiBtX21lZGlhRWxlbWVudHM7
Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFw
OwotICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OwotICAgIEhh
c2hDb3VudGVkU2V0PHVpbnQ2NF90PiBtX2NsaWVudENvdW50czsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTY2NmE3
MTU0Y2M0YTk0NGQwNGVjYTg2Y2IzMDMwMDZiZDc3OGExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0x
LDQzICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIHsKLSAgICBQ
bGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBQYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCi0g
ICAgVG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBCZWdpblNjcnViYmlu
Zyh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICBTZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi0gICAg
RmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLSAgICBCZWdpblNjYW5u
aW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgQmVnaW5TY2FubmluZ0JhY2t3YXJk
KHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBFbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQp
Ci0gICAgU2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KQotICAgIFNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQ2NF90IGluZGV4KQotICAgIEhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVp
bnQ2NF90IGNvbnRleHRJZCkKLSAgICBUb2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNv
bnRleHRJZCkKLSAgICBUb2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgU2V0TXV0
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQotfQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NWEyN2U0OGIyYTQy
ODI5ZmI0NDIyNGMxNzRkOWIyMzgzNTViNWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBdHRhY2htZW50
LmgiCi0jaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIldlYlBhZ2Uu
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9y
dCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIldl
YlByb2Nlc3MuaCIKLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MTWVkaWFFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVXNlckdlc3R1cmVJ
bmRpY2F0b3IuaD4KLSNpbXBvcnQgPG1hY2gvbWFjaF9wb3J0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIHVpbnQ2NF90IG5leHRD
b250ZXh0SWQoKQotewotICAgIHN0YXRpYyB1aW50NjRfdCBjb250ZXh0SWQgPSAwOwotICAgIHJl
dHVybiArK2NvbnRleHRJZDsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dAotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdl
cikKLSAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKLXsKLX0KLQotV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQo
KQotewotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJlc2V0
TWVkaWFTdGF0ZSgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5y
ZXNldE1lZGlhU3RhdGUobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kdXJhdGlvbkNoYW5nZWQobV9j
b250ZXh0SWQsIGR1cmF0aW9uKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmN1
cnJlbnRUaW1lQ2hhbmdlZChtX2NvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZlcmVkVGlt
ZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAg
ICAgICBtX21hbmFnZXItPmJ1ZmZlcmVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGJ1ZmZlcmVk
VGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmF0
ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnJhdGVDaGFuZ2VkKG1fY29udGV4dElkLCBp
c1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNr
U3RhcnRlZFRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5w
bGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChtX2NvbnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGlt
ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2Fi
bGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHJhbmdlcywgZG91Ymxl
IGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi17Ci0gICAgaWYg
KG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQobV9j
b250ZXh0SWQsIHJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFz
dFJldmVyc2VDaGFuZ2VkKGJvb2wgdmFsdWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKG1fY29udGV4dElkLCB2YWx1
ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgaWYgKG1fbWFu
YWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwg
b3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+
YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRleHRJZCwgc2VsZWN0ZWRJbmRl
eCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5sZWdpYmxlTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAg
ICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmV4dGVybmFsUGxheWJhY2tDaGFu
Z2VkKG1fY29udGV4dElkLCBlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChtX2NvbnRleHRJZCwgZGlzYWJsZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQotewotICAgIGlmICht
X21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+bXV0ZWRDaGFuZ2VkKG1fY29udGV4dElkLCBt
dXRlZCk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQot
UmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIocGFnZSkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UpCi0gICAgOiBtX3Bh
Z2UoJnBhZ2UpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIHBhZ2UucGFnZUlEKCksICp0aGlzKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6fldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQotewotICAgIGZvciAoYXV0byYgdHVw
bGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICAgICAgc3RkOjp0aWUo
bW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKLSAgICAgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgq
aW50ZXJmYWNlKTsKLSAgICAgICAgbW9kZWwtPnNldE1lZGlhRWxlbWVudChudWxscHRyKTsKLQot
ICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRN
YXAuY2xlYXIoKTsKLSAgICBtX21lZGlhRWxlbWVudHMuY2xlYXIoKTsKLSAgICBtX2NsaWVudENv
dW50cy5jbGVhcigpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNy
ZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsID0gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7Ci0gICAgbW9kZWwtPmFk
ZENsaWVudCgqaW50ZXJmYWNlKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92
ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxl
KCkpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAg
cmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdlYkNvcmU6OldlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpl
bnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDww
PihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJl
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+
KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewot
ICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7Ci0g
ICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
LSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbWVkaWFFbGVtZW50
ID0gbW9kZWwtPm1lZGlhRWxlbWVudCgpOwotICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVs
bHB0cik7Ci0gICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLSAgICBpbnRlcmZh
Y2UtPmludmFsaWRhdGUoKTsKLSAgICBtX21lZGlhRWxlbWVudHMucmVtb3ZlKG1lZGlhRWxlbWVu
dC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWlu
dDY0X3QgY29udGV4dElkKQotewotICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhj
b250ZXh0SWQpKTsKLSAgICBpZiAobV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCi0g
ICAgICAgIHJlbW92ZUNvbnRleHQoY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgYXV0
byBmb3VuZEl0ZXJhdG9yID0gbV9tZWRpYUVsZW1lbnRzLmZpbmQoJm1lZGlhRWxlbWVudCk7Ci0g
ICAgaWYgKGZvdW5kSXRlcmF0b3IgIT0gbV9tZWRpYUVsZW1lbnRzLmVuZCgpKSB7Ci0gICAgICAg
IHVpbnQ2NF90IGNvbnRleHRJZCA9IGZvdW5kSXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBpZiAo
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPT0gY29udGV4dElkKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAg
ICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwot
ICAgICAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsKLSAgICB9IGVs
c2UgewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1l
ZGlhRWxlbWVudCwgWyZdIHsgcmV0dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7Ci0gICAgICAgIGF1
dG8gY29udGV4dElkID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgaWYgKG1f
Y29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29u
dGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgICAgIG1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkID0gY29udGV4dElkOwotICAgICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnNldE1lZGlhRWxlbWVudCgmbWVkaWFFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBhZGRDbGllbnRG
b3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6U2V0VXBQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlcldpdGhJRChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGlmICghbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAg
IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gMDsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q2xlYXJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSNlbmRpZgotfQotCi11aW50NjRfdCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9tZWRpYUVsZW1lbnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENv
bnRleHRJZCgpOyB9KTsKLSAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TWVkaWFFbGVtZW50KCZt
ZWRpYUVsZW1lbnQpOwotICAgIHJldHVybiBjb250ZXh0SWQ7Ci19Ci0KLSNwcmFnbWEgbWFyayBJ
bnRlcmZhY2UgdG8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDoKLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4
dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpSZXNldE1lZGlhU3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZHVyYXRpb25DaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQotewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpEdXJhdGlvbkNoYW5nZWQo
Y29udGV4dElkLCBkdXJhdGlvbiksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCi17Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkN1cnJlbnRU
aW1lQ2hhbmdlZChjb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YnVmZmVyZWRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkJ1ZmZlcmVkVGltZUNoYW5nZWQoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5YmFja1N0
YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0
ZWRUaW1lKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpQbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIHBsYXli
YWNrU3RhcnRlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJhdGVDaGFuZ2VkKGNvbnRleHRJZCwg
aXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBWZWN0
b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzVmVjdG9yOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgZG91
YmxlIHN0YXJ0ID0gdGltZVJhbmdlcy5yYW5nZXMoKS5zdGFydChpKS50b0RvdWJsZSgpOwotICAg
ICAgICBkb3VibGUgZW5kID0gdGltZVJhbmdlcy5yYW5nZXMoKS5lbmQoaSkudG9Eb3VibGUoKTsK
LSAgICAgICAgcmFuZ2VzVmVjdG9yLmFwcGVuZCh7IHN0YXJ0LCBlbmQgfSk7Ci0gICAgfQotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpT
ZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQoY29udGV4dElkLCBXVEZNb3ZlKHJhbmdlc1ZlY3Rv
ciksIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNhblBsYXlGYXN0UmV2
ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQotewotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDYW5QbGF5
RmFzdFJldmVyc2VDaGFuZ2VkKGNvbnRleHRJZCwgdmFsdWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpBdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3Rl
ZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIFN0cmluZyBs
b2NhbGl6ZWREZXZpY2VOYW1lKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5n
ZWQoY29udGV4dElkLCBlbmFibGVkLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odGFyZ2V0VHlwZSks
IGxvY2FsaXplZERldmljZU5hbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVkaW9NZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29u
dGV4dElkLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6V2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGNvbnRleHRJZCwgZGlzYWJsZWQpKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBib29sIG11dGVkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpNdXRlZENoYW5nZWQoY29udGV4dElkLCBtdXRlZCkpOwot
fQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheSh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5KCk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGF1c2UodWludDY0X3QgY29udGV4dElk
KQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGF1c2UoKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4
dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGxheVN0YXRlKCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcodWlu
dDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5T
Y3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1
YmJpbmcodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuZW5kU2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQotewotICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla1RvVGltZSh0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0
aW1lKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZmFzdFNlZWsodGltZSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0ZvcndhcmQo
dWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRv
cihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVn
aW5TY2FubmluZ0ZvcndhcmQoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElk
KQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2Nhbm5pbmcoKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qg
Y29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0
X3QgY29udGV4dElkKQotewotICAgIGF1dG8gZWxlbWVudCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkubWVkaWFFbGVtZW50KCk7Ci0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpIYW5kbGVDb250cm9s
bGVkRWxlbWVudElEUmVzcG9uc2UoY29udGV4dElkLCBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgp
KSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUlu
UGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlTXV0ZWQoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQp
Ci17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRNdXRlZChtdXRlZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5YTAwZjExYWVhNDQ0
Zjk2ODUxMzViOTk3MGNjYTJkOGFlNzMyOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lU
KSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
LQotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRM
aXN0ZW5lci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBBdHRhY2htZW50OwotY2xhc3MgQ29ubmVjdGlv
bjsKLWNsYXNzIERlY29kZXI7Ci1jbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIE5vZGU7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBMYXllckhvc3RpbmdDb250ZXh0OwotY2xhc3MgV2ViUGFnZTsK
LWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7Ci1jbGFzcyBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKLQot
Y2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAotICAgIDogcHVibGljIFJl
ZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4KLSAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRl
KCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9Ci0KLSAgICBMYXllckhvc3RpbmdDb250ZXh0KiBs
YXllckhvc3RpbmdDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0LmdldCgp
OyB9Ci0gICAgdm9pZCBzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXll
ckhvc3RpbmdDb250ZXh0PiYmKTsKLQotICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2lzQW5pbWF0aW5nOyB9Ci0gICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29sIGZsYWcp
IHsgbV9pc0FuaW1hdGluZyA9IGZsYWc7IH0KLQotICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVu
KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRJc0Z1bGxzY3JlZW47IH0KLSAgICB2b2lkIHNldFRh
cmdldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSBmbGFn
OyB9Ci0KLSAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgZnVsbHNjcmVlbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlOyB9
Ci0gICAgdm9pZCBzZXRGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgeyBtX2Z1bGxzY3JlZW5Nb2RlID0gbW9kZTsg
fQotCi0gICAgYm9vbCBpc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbHNjcmVl
bjsgfQotICAgIHZvaWQgc2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX2lzRnVsbHNjcmVl
biA9IGZsYWc7IH0KLQotcHJpdmF0ZToKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudAotICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQg
dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlk
ZTsKLQotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4
dDsKLSAgICBib29sIG1faXNBbmltYXRpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90YXJnZXRJ
c0Z1bGxzY3JlZW4geyBmYWxzZSB9OwotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX2Z1bGxzY3JlZW5Nb2RlIHsgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OwotICAgIGJvb2wgbV9p
c0Z1bGxzY3JlZW4geyBmYWxzZSB9OwotfTsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+LCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJiwgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlciYpOwotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKLSAg
ICAKLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLSAgICAKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8g
SW50ZXJmYWNlIHRvIENocm9tZUNsaWVudAotICAgIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxzY3Jl
ZW4oV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBj
b25zdDsKLSAgICB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVv
RWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Jik7Ci0gICAgdm9pZCBleGl0VmlkZW9G
dWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50
JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsK
LQotcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0OwotCi0gICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQ
YWdlJiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnR1
cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4s
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZh
Y2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4
dElkKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQodWludDY0
X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4
dElkKTsKLQotICAgIC8vIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0Ci0gICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IGhhc1ZpZGVvKTsKLSAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKLQotICAgIC8vIE1lc3NhZ2VzIGZy
b20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ci0gICAgdm9pZCByZXF1ZXN0RnVsbHNj
cmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpOwotICAgIHZv
aWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkaWRF
eGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkRW50ZXJGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lRmVuY2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRh
Y2htZW50IGZlbmNlUG9ydCk7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWlu
dDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpOwotICAgIAot
ICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4g
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTFZpZGVv
RWxlbWVudCosIHVpbnQ2NF90PiBtX3ZpZGVvRWxlbWVudHM7Ci0gICAgSGFzaE1hcDx1aW50NjRf
dCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OwotICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4g
bV9jbGllbnRDb3VudHM7Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5p
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1OWMyNWFhZTdiMDE1ZTMwMTNkOWEx
YjE1MDdiNjEwYTJmYmNhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiAoUExBVEZPUk0oSU9TKSAm
JiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgewotICAg
IFJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQotICAgIERpZFNldHVwRnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCi0gICAgRGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQot
ICAgIERpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRGlkQ2xlYW51
cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotICAgIFNldFZpZGVvTGF5ZXJGcmFtZUZl
bmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6
QXR0YWNobWVudCBmZW5jZVBvcnQpCi0gICAgU2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2
NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSkKLSAgICBGdWxsc2NyZWVuTW9kZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLSAgICBGdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCi19
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjRjOThjYThlYzYzM2FlNjg2ODk1OTY1MGVlODIxMjllMjM4ZWI3MS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw0NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgotCi0jaWYgKFBMQVRGT1JNKElPUykg
JiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIkF0dGFjaG1lbnQuaCIKLSNpbXBvcnQgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCAiV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5p
bWF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2
ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJWaWRlby5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMu
aD4KLSNpbXBvcnQgPG1hY2gvbWFjaF9wb3J0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIEludFJlY3QgaW5saW5lVmlkZW9GcmFt
ZShIVE1MVmlkZW9FbGVtZW50JiBlbGVtZW50KQotewotICAgIGVsZW1lbnQuZG9jdW1lbnQoKS51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBhdXRvKiByZW5kZXJl
ciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1
cm4geyB9OwotICAgIGF1dG8gcmVjdCA9IHJlbmRlcmVyLT52aWRlb0JveCgpOwotICAgIHJlY3Qu
bW92ZUJ5KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLmxvY2F0aW9uKCkpOwot
ICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXco
cmVjdCk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQKLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2Vy
LCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCi0gICAgLCBt
X2NvbnRleHRJZChjb250ZXh0SWQpCi17Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCkKLXsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMYXllckhvc3RpbmdD
b250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiYmIGNvbnRleHQpCi17
Ci0gICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gV1RGTW92ZShjb250ZXh0KTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9v
bCBoYXNWaWRlbykKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmhh
c1ZpZGVvQ2hhbmdlZChtX2NvbnRleHRJZCwgaGFzVmlkZW8pOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3Qg
RmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fY29udGV4dElkLCB2aWRlb0Rp
bWVuc2lvbnMpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Ci0KLVJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxh
eWJhY2tTZXNzaW9uTWFuYWdlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpKTsKLX0KLQot
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQ
YWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKQotICAgIDogbV9wYWdlKCZwYWdlKQotICAgICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlEKCksICp0aGlzKTsKLX0KLQotV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQotewotICAg
IGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICAgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAg
ICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKLQotICAgICAgICBtb2Rl
bC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwotICAgICAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50
KCppbnRlcmZhY2UpOwotCi0gICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIH0K
LQotICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwotICAgIG1fdmlkZW9FbGVtZW50cy5jbGVhcigp
OwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci0gICAgCi0gICAgaWYgKG1fcGFnZSkKLSAg
ICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
cGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omlu
dmFsaWRhdGUoKQotewotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBt
X3BhZ2UgPSBudWxscHRyOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbElu
dGVyZmFjZVR1cGxlIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
LT5hZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldExh
eWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxI
b3N0aW5nUHJvY2VzcygpKTsKLSAgICBtb2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2UpOwotCi0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZh
Y2UpKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBs
ZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFk
ZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKLX0KLQotV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3Zl
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIG1fcGxh
eWJhY2tTZXNzaW9uTWFuYWdlci0+cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwot
Ci0gICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRl
b0VsZW1lbnQoKTsKLSAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwotICAgIG1v
ZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7Ci0gICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRl
KCk7Ci0gICAgbV92aWRlb0VsZW1lbnRzLnJlbW92ZSh2aWRlb0VsZW1lbnQuZ2V0KCkpOwotICAg
IG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQsIDEpOwot
ICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUrKzsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVD
bGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBBU1NFUlQobV9jbGll
bnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7Ci0KLSAgICBpbnQgY2xpZW50Q291bnQgPSBt
X2NsaWVudENvdW50cy5nZXQoY29udGV4dElkKTsKLSAgICBBU1NFUlQoY2xpZW50Q291bnQgPiAw
KTsKLSAgICBjbGllbnRDb3VudC0tOwotCi0gICAgaWYgKGNsaWVudENvdW50IDw9IDApIHsKLSAg
ICAgICAgbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCk7Ci0gICAgICAgIHJlbW92ZUNv
bnRleHQoY29udGV4dElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2xpZW50
Q291bnRzLnNldChjb250ZXh0SWQsIGNsaWVudENvdW50KTsKLX0KLQotI3ByYWdtYSBtYXJrIElu
dGVyZmFjZSB0byBDaHJvbWVDbGllbnQ6Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxl
ZCgpOwotI2Vsc2UKLSAgICByZXR1cm4gbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlICYmIHN1cHBvcnRzUGljdHVyZUluUGlj
dHVyZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50
ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9F
bGVtZW50LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkK
LXsKLSAgICBBU1NFUlQobV9wYWdlKTsKLSAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLQotICAgIHVpbnQ2NF90IGNvbnRl
eHRJZCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+Y29udGV4dElkRm9yTWVkaWFFbGVtZW50
KHZpZGVvRWxlbWVudCk7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZpZGVvRWxlbWVudHMuYWRk
KCZ2aWRlb0VsZW1lbnQsIGNvbnRleHRJZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGFkZFJlc3VsdCk7
Ci0gICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPT0gY29udGV4dElkKTsKLQot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
LSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7Ci0gICAgYWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotICAgIGlm
ICghaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpCi0gICAgICAgIGludGVyZmFjZS0+
c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRl
cm5hbEhvc3RpbmdQcm9jZXNzKCkpOwotCi0gICAgYXV0byB2aWRlb1JlY3QgPSBpbmxpbmVWaWRl
b0ZyYW1lKHZpZGVvRWxlbWVudCk7Ci0gICAgRmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSA9IEZs
b2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKLQot
ICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBvbGRNb2RlID0g
aW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOwotICAgIGludGVyZmFjZS0+c2V0VGFyZ2V0SXNG
dWxsc2NyZWVuKHRydWUpOwotICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7
Ci0gICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudCgmdmlkZW9FbGVtZW50KTsKLSAgICBpZiAob2xk
TW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKQot
ICAgICAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKHZpZGVvTGF5ZXJGcmFtZSk7Ci0KLSAg
ICBpZiAoaW50ZXJmYWNlLT5pc0FuaW1hdGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaW50
ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyh0cnVlKTsKLQotICAgIGJvb2wgYWxsb3dzUGljdHVyZUlu
UGljdHVyZSA9IHZpZGVvRWxlbWVudC53ZWJraXRTdXBwb3J0c1ByZXNlbnRhdGlvbk1vZGUoSFRN
TFZpZGVvRWxlbWVudDo6VmlkZW9QcmVzZW50YXRpb25Nb2RlOjpQaWN0dXJlSW5QaWN0dXJlKTsK
LSAgICAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXll
ckhvc3RpbmdDb250ZXh0KCktPmNvbnRleHRJRCgpLCB2aWRlb1JlY3QsIG1fcGFnZS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSwgaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpLCBhbGxvd3NQaWN0dXJl
SW5QaWN0dXJlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0g
ICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlucygmdmlkZW9FbGVtZW50KSk7Ci0KLSAg
ICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2aWRlb0VsZW1lbnQp
OwotICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOwotCi0g
ICAgaW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0KLSAgICBpZiAoaW50
ZXJmYWNlLmlzQW5pbWF0aW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludGVyZmFjZS5z
ZXRJc0FuaW1hdGluZyh0cnVlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY29udGV4dElkLCBpbmxpbmVW
aWRlb0ZyYW1lKHZpZGVvRWxlbWVudCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91
dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2Rl
KQotewotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KQotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFp
bnMoJnZpZGVvRWxlbWVudCkpOwotCi0gICAgdWludDY0X3QgY29udGV4dElkID0gbV92aWRlb0Vs
ZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKLSAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJ
bnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3Jl
ZW4oZmFsc2UpOwotCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShjb250
ZXh0SWQsIHRhcmdldE1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHZpZGVvRWxlbWVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldE1vZGUpOwotI2Vu
ZGlmCi19Ci0KLSNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dDoKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpoYXNWaWRl
b0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQotewotICAgIGlmICht
X3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpTZXRIYXNWaWRlbyhjb250ZXh0SWQsIGhhc1ZpZGVvKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6dmlkZW9EaW1l
bnNpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9E
aW1lbnNpb25zKQotewotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMo
Y29udGV4dElkLCB2aWRlb0RpbWVuc2lvbnMpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotI3By
YWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ogot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQotewotICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkucmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1vZGUsIGZpbmlzaGVkV2l0
aE1lZGlhKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVu
TW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLXsKLSAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3Jl
ZW5Nb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIEFTU0VSVChtX3BhZ2UpOwotICAg
IFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07Ci0jaWZuZGVmIE5E
RUJVRwotICAgIFt2aWRlb0xheWVyIHNldE5hbWU6QCJXZWIgdmlkZW8gZnVsbHNjcmVlbiBtYW5h
Z2VyIGxheWVyIl07Ci0jZW5kaWYKLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotCi0gICAgW3ZpZGVvTGF5ZXIg
c2V0UG9zaXRpb246Q0dQb2ludE1ha2UoMCwgMCldOwotICAgIFt2aWRlb0xheWVyIHNldEJhY2tn
cm91bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudCldOwot
Ci0gICAgLy8gU2V0IGEgc2NhbGUgZmFjdG9yIGhlcmUgdG8gbWFrZSBjb252ZXJ0UmVjdDp0b0xh
eWVyOm5pbCB0YWtlIHNjYWxlIGZhY3RvciBpbnRvIGFjY291bnQuIDxyZGFyOi8vcHJvYmxlbS8x
ODMxNjU0Mj4uCi0gICAgLy8gVGhpcyBzY2FsZSBmYWN0b3IgaXMgaW52ZXJ0ZWQgaW4gdGhlIGhv
c3RpbmcgcHJvY2Vzcy4KLSAgICBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IgPSBtX3BhZ2UtPmRl
dmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgW3ZpZGVvTGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNm
b3JtM0RNYWtlU2NhbGUoaG9zdGluZ1NjYWxlRmFjdG9yLCBob3N0aW5nU2NhbGVGYWN0b3IsIDEp
XTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQo
KS0+c2V0Um9vdExheWVyKHZpZGVvTGF5ZXIpOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgCi0gICAgbW9kZWwtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKHZpZGVvTGF5ZXIsIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250
ZXh0SWRdIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNvbnRleHRJZF0gewotICAgICAgICAgICAgaWYgKHBy
b3RlY3RlZFRoaXMtPm1fcGFnZSkKLSAgICAgICAgICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RW50ZXJGdWxsc2NyZWVuKGNvbnRl
eHRJZCksIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOwotICAgICAgICB9KTsKLSAg
ICB9KTsKLSAgICAKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotfQotICAgIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKQotewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+
IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5n
KGZhbHNlKTsKLSAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0KLSAgICBp
ZiAoaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0Vs
ZW1lbnQoKTsKLSAgICBpZiAoIXZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgZHVy
aW5nIGFuIGFuaW1hdGlvbi4KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9FbGVtZW50XSB7Ci0gICAgICAgIGlmIChw
cm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5leGl0Vmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQpOwotICAgIH0pOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1
cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIAotICAgIG1vZGVsLT53YWl0
Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVy
ZmFjZSwgbW9kZWxdIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0gewot
ICAgICAgICAgICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCwgW3Byb3RlY3Rl
ZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlXSB7Ci0gICAgICAgICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJ
ZCwgaW50ZXJmYWNlXSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcmZhY2UtPmxheWVy
SG9zdGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5s
YXllckhvc3RpbmdDb250ZXh0KCktPnNldFJvb3RMYXllcihudWxscHRyKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChudWxscHRyKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocHJvdGVjdGVk
VGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkNsZWFu
dXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+cGFnZUlEKCkp
OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBp
bnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGlu
dGVyZmFjZS0+c2V0SXNBbmltYXRpbmcoZmFsc2UpOwotICAgIGludGVyZmFjZS0+c2V0SXNGdWxs
c2NyZWVuKGZhbHNlKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsKLSAgICBib29sIHRhcmdl
dElzRnVsbHNjcmVlbiA9IGludGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCk7Ci0KLSAgICBt
b2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKLSAgICBSZWZQdHI8SFRNTFZpZGVv
RWxlbWVudD4gdmlkZW9FbGVtZW50ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOwotCi0gICAgaW50
ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVOb25lKTsKLSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7
Ci0KLSAgICBpZiAoIXZpZGVvRWxlbWVudCB8fCAhdGFyZ2V0SXNGdWxsc2NyZWVuKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9FbGVtZW50LCBtb2RlXSB7Ci0gICAgICAgIGlmIChw
cm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5lbnRlclZp
ZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50LCBtb2RlKTsKLSAgICB9
KTsKLX0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXll
ckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSkKLXsKLSAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldFZpZGVvTGF5ZXJHcmF2aXR5KChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KWdyYXZpdHkpOwotfQotICAgIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0
X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCi17Ci0gICAgaWYgKCFtX3BhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIG1vZGVsID0gZW5zdXJlTW9kZWwoY29udGV4dElk
KTsKLQotICAgIGlmICghaXNQYWdlVmlzaWJsZSkKLSAgICAgICAgbW9kZWwudmlkZW9FbGVtZW50
KCktPnNjcm9sbEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNlKTsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UHJlcGFyZWRUb1JldHVy
blRvSW5saW5lKGNvbnRleHRJZCwgdHJ1ZSwgaW5saW5lVmlkZW9GcmFtZSgqbW9kZWwudmlkZW9F
bGVtZW50KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQp
Ci17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2Rl
bDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKTsKLQotICAgIGlmIChzdGQ6OmlzbmFuKGJvdW5kcy54KCkpIHx8IHN0
ZDo6aXNuYW4oYm91bmRzLnkoKSkgfHwgc3RkOjppc25hbihib3VuZHMud2lkdGgoKSkgfHwgc3Rk
Ojppc25hbihib3VuZHMuaGVpZ2h0KCkpKSB7Ci0gICAgICAgIGF1dG8gdmlkZW9SZWN0ID0gaW5s
aW5lVmlkZW9GcmFtZSgqbW9kZWwtPnZpZGVvRWxlbWVudCgpKTsKLSAgICAgICAgYm91bmRzID0g
RmxvYXRSZWN0KDAsIDAsIHZpZGVvUmVjdC53aWR0aCgpLCB2aWRlb1JlY3QuaGVpZ2h0KCkpOwot
ICAgIH0KLSAgICAKLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rp
b24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07Ci0gICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0
aW5nQ29udGV4dCgpKQotICAgICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+
c2V0RmVuY2VQb3J0KGZlbmNlUG9ydC5wb3J0KCkpOwotICAgIG1vZGVsLT5zZXRWaWRlb0xheWVy
RnJhbWUoYm91bmRzKTsKLSAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigp
LCBmZW5jZVBvcnQucG9ydCgpKTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315395</attachid>
            <date>2017-07-13 19:15:49 -0700</date>
            <delta_ts>2017-07-21 16:12:24 -0700</delta_ts>
            <desc>Part1: File name changes.</desc>
            <filename>bug-174437-20170713191548.patch</filename>
            <type>text/plain</type>
            <size>640163</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzkyMTQ4YjgwMDU2ODU2
MWEzZGY4NDhhYmFkY2E3NzMxZGI3NmUyMi4uM2QyOTZhZWJiODAwZTM5M2IyOGNjYjlhMjc0NDQ0
Y2Q0MmQ0ZmEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE3LTA3LTEzICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgV2ViIHByZWZp
eCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNzaW9uIGNsYXNzZXMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0MzcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IDE6
IFJlbmFtZSBmaWxlcyBhbmQgdXBkYXRlIHByb2plY3QsIGltcG9ydHMgYW5kIGluY2x1ZGVzLgor
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BsYXliYWNr
U2Vzc2lvbk1vZGVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Bs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5o
LgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0uCisgICAgICAgICogcGxhdGZvcm0vY29j
b2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgu
CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsLmguCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmguCisgICAgICAgICogcGxhdGZvcm0v
Y29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW06IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06CisgICAgICAgICogcGxhdGZvcm0v
bWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW06IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLm1tLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW06CisKIDIwMTctMDct
MTMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpT1MgYnVp
bGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNWI4ZWMyMWNmZDc4ZGUwOWQ4NzkyOWY1YmE2OThmMDg5
ZTVkZGVhZi4uNzY0NzY1ODNmZmZjNzc3ODIwNTQ5NDdhMTUyNmUyMzUwNDQ2MTkyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA3LTEzICBKZXJlbXkgSm9uZXMgIDxq
ZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgV2ViIHByZWZpeCBmcm9tIFdlYlZp
ZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNzaW9uIGNsYXNzZXMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0MzcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IDE6IFJlbmFtZSBmaWxl
cyBhbmQgdXBkYXRlIHByb2plY3QsIGltcG9ydHMgYW5kIGluY2x1ZGVzLgorCisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEubW06CisK
IDIwMTctMDctMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4K
IAogICAgICAgICBBc3luYyBpbWFnZSBkZWNvZGluZyBmb3IgbGFyZ2UgaW1hZ2VzIHNob3VsZCBi
ZSBkaXNhYmxlZCBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTA1MmIyZDE5YmE1NDkzZjVkYzFl
YmQzZmZhZjMxYmRjY2Y5ZmFmMS4uYzUwMDRiZWQyYzU4NDBlNWNmODNhZGYwNjhhZWQwMjcxYzdi
ODBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA3LTEzICBKZXJlbXkgSm9u
ZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgV2ViIHByZWZpeCBmcm9t
IFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNzaW9uIGNsYXNzZXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0MzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IDE6IFJlbmFt
ZSBmaWxlcyBhbmQgdXBkYXRlIHByb2plY3QsIGltcG9ydHMgYW5kIGluY2x1ZGVzLgorCisgICAg
ICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlldy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmguCisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0uCisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW06IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvUGxheWJh
Y2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbi4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW06IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW0uCisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29h
L1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1tLgorCiAyMDE3LTA3LTEzICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZWQgZmlsZXN5c3RlbSBjb2RlIG91dCBvZiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5ZmMyMThjMWE3NTljMDI5NjRj
YzQyZGY5ZjRiZDI0ZWQ5OWUyOWIwLi4xOThhODgzM2U2ZDQ3NzQwNTk0YzUwYTc1NjYxMDRhYmJh
OGFkMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xNjg1LDggKzE2ODUsOCBAQAogCQkzRjgwMjAzNjFFOUU0N0MzMDBERUM2
MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjgwMjAzMTFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1
ZGlvQ2FwdHVyZURldmljZS5jcHAgKi87IH07CiAJCTNGODAyMDM3MUU5RTQ3QzUwMERFQzYxRCAv
KiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4MDIwMzQxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVB
dWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87IH07CiAJCTNGODAyMDM4MUU5RTQ3QzkwMERF
QzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQg
LyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwICovOyB9OwotCQkzRkJDNEFGMzE4
OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMTE4OTg4
MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi87IH07
Ci0JCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
M0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RjExODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICov
OyB9OworCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNG
RjFGQTY2MUU3MzUwRkQwMEMxMDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGM0JCNTgyMUU3MDlF
RTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCAqLzsgfTsKIAkJM0ZGODEz
QTcxREJBODY0MDAwOUJGMDAxIC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNGQzQzNEYxOTI0MDZBOTAwQTBE
M0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJL
aXRDU1NWaWV3cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0
UnVsZS5jcHAgKi87IH07CkBAIC0yNDc1LDExICsyNDc1LDExIEBACiAJCTUxRkI1NTA1MTEzRTNF
OTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VF
dmVudC5jcHAgKi87IH07CiAJCTUxRkI2N0RCMUFFNkI4MkIwMEQwNkM1QSAvKiBDb250ZW50RXh0
ZW5zaW9uU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUZCNjdEOTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0
eWxlU2hlZXQuY3BwICovOyB9OwogCQk1MUZCNjdEQzFBRTZCODJGMDBEMDZDNUEgLyogQ29udGVu
dEV4dGVuc2lvblN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRkI2N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9u
U3R5bGVTaGVldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tICovOyB9OworCQk1MjEzMUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSAqLzsgfTsKIAkJNTI2NzI0RjMxQ0IyRkVBRDAwNzU5NzREIC8qIFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MjY3MjRGMTFDQjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25Db2NvYS5tbSAqLzsgfTsKIAkJNTJCMEQ0QkUxQzU3RkQxRTAwNzdDRTUzIC8qIFBs
YXRmb3JtVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJCMEQ0QkQxQzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyQjBENEMwMUM1N0ZENjYw
MDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdD
RTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdD
RTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJE
MTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJ
NTJCNkM5QzMxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUJFMTVFM0Y0
REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggKi87IH07CiAJCTUyQjZDOUM1
MTVFM0Y0REYwMDY5MEIwNSAvKiBOYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjZDOUMwMTVFM0Y0REYwMDY5MEIw
NSAvKiBOYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLzsgfTsKQEAgLTI0ODcsOSArMjQ4Nyw5IEBA
CiAJCTUyQ0NBOUUyMTVFM0Y2MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5
RTAxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi87IH07
CiAJCTUyQ0NBOUUzMTVFM0Y2MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0NBOUUx
MTVFM0Y2MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJ
NTJENUExOEYxQzU0NTkyMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMThE
MUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gKi87IH07
Ci0JCTUyRDVBMUE3MUM1NzQ4OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQx
QzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQTgxQzU3NDhBMzAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBE
RTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFBOTFDNTc0OEE5
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi87IH07
CisJCTUyRDVBMUE3MUM1NzQ4OUQwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3
NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi87IH07CiAJCTUyRTJDQUZDMTlGRjAy
MDcwMDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkUyQ0FGQjE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQcm9k
dWNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUyRjEwODY1MTYyQjZEQTQwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjEwODYyMTYyQjZE
ODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCAqLzsgfTsKIAkJNTJGMTA4NjYx
NjJCNkRBODAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAv
KiBNaXhlZENvbnRlbnRDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTYyMDAsMTUgKzYyMDAsMTUgQEAKIAkJQ0RBMDdGQkUxOEUwQTE2
QTAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA3RkJDMThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0
ZW1TbGVlcExpc3RlbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQ0RBMDdGQzExOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVu
ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEwN0ZCRjE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSAqLzsg
fTsKIAkJQ0RBMDdGQzIxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA3RkMw
MThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmggKi87IH07Ci0JCUNE
QTI5QTA5MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTA4MUNC
RDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUEwQjFDQkQ5QTc0
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSAqLzsgfTsKLQkJQ0RBMjlBMEYxQ0JEOUNGRTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwRDFDQkQ5Q0ZFMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUExNjFDQkRBNTZD
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTQxQ0JEQTU2QzAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLzsgfTsKLQkJQ0RBMjlB
MTcxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTUxQ0JE
QTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTMwMUNCRjc0
RDQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJGMUNCRjczRkMw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKKwkJ
Q0RBMjlBMDkxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMDgxQ0JE
OTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNEQTI5QTBCMUNCRDlBNzQwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tICovOyB9OworCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLm1tICovOyB9OworCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQ0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tICovOyB9OwogCQlDREEyOUEzMTFDQkY3NERBMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJD
b250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMkQxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAq
LzsgfTsKLQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTc5
ODI0MTcwQTI1ODMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNzk4MjMxNzBBMjU4MzAwRDQ1QzU1IC8q
IEF1ZGlvU2Vzc2lvbi5jcHAgKi87IH07CiAJCUNEQTc5ODI3MTcwQTI3OTEwMEQ0NUM1NSAvKiBB
dWRpb1Nlc3Npb25JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICov
OyB9OwogCQlDREE3OTgyQTE3MEEzRDAwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMTE3MEEyMkRD
MDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzMjYsOCArOTMyNiw4IEBACiAJCTNGODAyMDMyMUU5RTM4
MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJM0Y4MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1
cmVEZXZpY2VNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJM0Y4MDIwMzQxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVBdWRpb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGQkM0
QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRkJD
NEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjExODk4
ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTNGRkZGOUE3MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUFCMTU5RDlCMDYwMDIwQkJENSAv
KiBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEwMjI5LDEyICsxMDIyOSwxMiBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjEx
NzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ2xvc2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2
N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVT
aGVldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0RBMUFFNkI1RTQw
MEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MjY3MjRGMTFDQjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRU
cmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyNjcyNEYyMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29h
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0
aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QkQxQzU3RkQx
RTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbGF0Zm9ybVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJCMEQ0
QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyQjBENEMxMUM1N0ZG
OTEwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAv
KiBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkI2QzlCRDE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkUxNUUzRjRERjAwNjkw
QjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkI2QzlCRjE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlv
bi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDI0NCw5ICsxMDI0NCw5IEBACiAJCTUy
Q0NBOUUxMTVFM0Y2MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMThFMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE0MUM1NzQ4ODkw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUHJvZHVjZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJGMTA4NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNr
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWl4ZWRDb250ZW50
Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjEwODYzMTYyQjZE
ODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1peGVkQ29udGVudENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE0NzM3LDE2ICsxNDczNywxNiBAQAogCQlDREEwN0ZCQzE4RTBBMTZBMDA0Njk5
RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTeXN0ZW1TbGVlcExpc3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNEQTA3RkJGMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtU2xlZXBMaXN0ZW5l
ck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQzAxOEUwQTIyQjAw
NDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEw
QTFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwQTFD
QkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyQzFDQkY3M0ZDMDA5
MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkFWUGxheWVyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREEyOUEyRDFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQVZQbGF5ZXJD
b250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyRTFDQkY3
M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJFMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1Nlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0RBNzk4MjMxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb1Nlc3Npb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVk
aW9TZXNzaW9uSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
QXVkaW9TZXNzaW9uSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkxMzcs
MTQgKzE5MTM3LDE0IEBACiAJCQkJRTFBMzE2MkMxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0
cmlidXRlZFN0cmluZ0V4dHJhcy5tbSAqLywKIAkJCQlDRDU4OTZFMDFDRDJCMTUxMDBCM0JDQzgg
LyogV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCAqLywKIAkJCQlDRDU4OTZERjFDRDJCMTUx
MDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0gKi8sCi0JCQkJQ0RBMjlB
MTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICov
LAotCQkJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMubW0gKi8sCisJCQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oICovLAorCQkJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4MjAzMDYxMzk1QUI2
QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRDgy
MDMwNzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAq
LywKIAkJCQlDRDgyMDMwODEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oICovLAogCQkJCUNEODIwMzA5MTM5NUFCNkEwMEY5NTZDNiAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovLAotCQkJCTUyQjBENEMx
MUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLywK
LQkJCQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLm1tICovLAorCQkJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMuaCAqLywKKwkJCQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovLAogCQkJCUNEODIwMzBFMTM5NUFDRTcw
MEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCAqLywKIAkJCQlDRDgyMDMwRjEzOTVBQ0U3
MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovLAogCQkJCTkzODBGNDc3MDlBMTFB
Q0MwMDFGREIzNCAvKiBXaWRnZXRNYWMubW0gKi8sCkBAIC0yMTE0OSwxNCArMjExNDksMTQgQEAK
IAkJCQlGRTBEODRFQTEwNDg0MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gKi8sCiAJCQkJRjQ4
MjIzMEYxRTM4NjlCODAwNjZGQzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaCAqLywK
IAkJCQlGNDgyMjMwRTFFMzg2OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFzdGVib2Fy
ZC5tbSAqLywKLQkJCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQuaCAqLywKLQkJCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gKi8sCisJCQkJQ0RBMjlBMkUxQ0JG
NzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8sCisJCQkJ
Q0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lm1tICovLAogCQkJCTFGODc1NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFz
ZVRyYWNrZXJDbGllbnQuaCAqLywKIAkJCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0MEQgLyogV2Vi
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovLAogCQkJCTNGNDJCMzFCMTg4MTE5MUIw
MDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLywKIAkJCQkz
RjQyQjMxQzE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFW
S2l0Lm1tICovLAotCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAotCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJCQkzRkJDNEFGMjE4
OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLywKKwkJ
CQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0gKi8sCiAJCQkJRTQ1MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAq
LywKIAkJCSk7CiAJCQlwYXRoID0gaW9zOwpAQCAtMjEyMDMsMTQgKzIxMjAzLDE0IEBACiAJCQkJ
Q0RDOTc5RjMxQzQ5OEMwOTAwREI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLmggKi8sCiAJ
CQkJQ0RDOTc5RjIxQzQ5OEMwOTAwREI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLm1tICov
LAogCQkJCTVERkVCQUI2MTg1OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAq
LywKLQkJCQlDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLmggKi8sCi0JCQkJQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsLmggKi8sCi0JCQkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8sCi0JCQkJQ0RBMjlBMEMxQ0JEOUNG
RTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovLAot
CQkJCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci5oICovLAotCQkJCTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oICovLAotCQkJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovLAotCQkJCTUyRDVBMUE2MUM1NzQ4
ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLywK
KwkJCQlDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LmggKi8sCisJCQkJQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsLmggKi8sCisJCQkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50LmggKi8sCisJCQkJQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovLAorCQkJCTUyQjBENEJGMUM1
N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovLAorCQkJ
CTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovLAor
CQkJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5oICovLAorCQkJCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzAxMTYsMTEgKzMwMTE2LDExIEBACiAJCQkJ
MDcwOUQ3OTMxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBp
biBIZWFkZXJzICovLAogCQkJCUUxQTMxNjJEMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJp
YnV0ZWRTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENTg5NkUyMUNEMkIxNTEw
MEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQ0RBMjlBMDkxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEx
NzFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4g
SGVhZGVycyAqLywKLQkJCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQ0RBMjlBMDkxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUExNzFD
QkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9k
ZWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0
ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIwMDdDMzk4MyAvKiBXZWJTY3JpcHRP
YmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDEzNywxNCArMzAxMzcsMTQgQEAK
IAkJCQkxRjg3NTZCMjFFMjJDMzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2Vy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyog
V2ViU3lzdGVtQmFja2Ryb3BMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQTMxNDk2
OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q4MjAz
MEExMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTNGNDJCMzFEMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQVZLaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBDMTM5NUFC
NkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyQjBENEMyMUM1N0ZG
OTEwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTUyRDVBMUE3MUM1NzQ4OUQwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkz
RkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRDVBMUE3MUM1NzQ4
OUQwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMTIxNzFGNjE2QThDRjBCMDAwMDUzQ0EgLyogV2Vi
VlRURWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0
IC8qIFdlYlZUVFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjEwQjY5ODAxNDBDMTc0MDAw
QkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAqLywKQEAgLTMzODM0LDkgKzMzODM0
LDkgQEAKIAkJCQkwNzA5RDc5MjFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFu
YWdlck1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUEzMTYyRTEzNEJDMzJEMDA3QzlBNEYg
LyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q1
ODk2RTExQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMTYxQ0JE
QTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCUNEQTI5QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTMwMUNCRjc0
RDQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkxQ0FGMzQ4MjBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTdBQUJEMUExNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5N0FBQkQxRDE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0Q2hh
bm5lbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzODUyLDkgKzMzODUyLDkgQEAKIAkJCQlDRDgy
MDMwQjEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBp
biBTb3VyY2VzICovLAogCQkJCTNGNDJCMzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDgyMDMwRDEz
OTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovLAotCQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUyMTMxRTVC
MUM0RjE1NzYwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4g
U291cmNlcyAqLywKLQkJCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRkJDNEFGMzE4
OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291
cmNlcyAqLywKKwkJCQk1MjEzMUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQTkxQzU3NDhBOTAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjEyMTcxRjUxNkE4Q0VEMjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUQyMUE4MDIxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMTBCNjk4MTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRU
VG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKaW5kZXggMjY2MDI2OTI4ZjM2NWIzY2Y2ODg1M2MzNTQ4YzA4NDA0YjFiZmIw
NS4uMGQ0NjExYzUwOTYyZWI4ODEwYTIxYzI0ZjlkY2U5MWYyMzM2YWJkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogI2lm
IFBMQVRGT1JNKElPUykKICNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNp
bmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgorI2luY2x1ZGUgIlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJF
TEVTU19QTEFZQkFDS19UQVJHRVQpCkBAIC0xNTYsNyArMTU2LDcgQEAKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVk
ZSAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNlbmRpZgogCiAjZGVmaW5lIFJFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKGRvY3VtZW50KCkucGFnZSgpICYm
IGRvY3VtZW50KCkucGFnZSgpLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTWVkaWEsICIl
cCAtIEhUTUxNZWRpYUVsZW1lbnQ6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXggMzZjZjQ5N2I5OWI4OTdhOGFh
ZGRlYWY2MjZiOWFhYjM4ZmZjMmJhMS4uNjU4OTVmOTM4OTdmMDY4NDE0N2I5ZDBjY2YxNTcwY2I3
OTY4N2NjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC00
OCw3ICs0OCw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA5ZTc5NzQ0YjQ5
ODlhM2E3YjkzNTcwYWFlYjdlODJlYjA3ZTkzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7
Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGltZVJhbmdlczsKKworY2xhc3Mg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVk
aWFTdGF0ZSgpID0gMDsKK307CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDZkNTNmMGY3NzY5Mzc3NWFkNDg2MWMyMjMwNGFjOTM4MDA5YzgyMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vz
c2lvbk1vZGVsLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRpbWVSYW5nZXM7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudDsKK3N0cnVjdCBNZWRpYVNlbGVjdGlvbk9wdGlvbjsKKworY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dG9nZ2xlUGxheVN0YXRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjcnViYmluZygp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2NydWJiaW5nKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZhc3RT
ZWVrKGRvdWJsZSB0aW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3
YXJkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB0b2dnbGVNdXRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCkgPSAw
OworCisgICAgZW51bSBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVOb25l
LCBUYXJnZXRUeXBlQWlyUGxheSwgVGFyZ2V0VHlwZVRWT3V0IH07CisKKyAgICB2aXJ0dWFsIGRv
dWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91Ymxl
IGR1cmF0aW9uKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRUaW1lKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBpc1NjcnViYmluZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBsYXliYWNrUmF0
ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZjxUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdl
cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0
TW9kaWZpZWRUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGxpdmVVcGRhdGVJ
bnRlcnZhbCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNl
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVpbnQ2
NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRl
eCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBl
eHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzTXV0ZWQoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdl
ZChkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91Ymxl
IC8qIGN1cnJlbnRUaW1lICovLCBkb3VibGUgLyogYW5jaG9yVGltZSAqLykgeyB9CisgICAgdmly
dHVhbCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIC8qIHBsYXliYWNrU3RhcnRlZFRp
bWUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCByYXRlQ2hhbmdlZChib29sIC8qIGlzUGxheWlu
ZyAqLywgZmxvYXQgLyogcGxheWJhY2tSYXRlICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Vl
a2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgLyogbGFzdE1vZGlm
aWVkICovLCBkb3VibGUgLyogbGl2ZUludGVydmFsICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4mIC8qIG9wdGlvbnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1aW50NjRf
dCAvKiBzZWxlY3RlZEluZGV4ICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcm
IC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IG11dGVkQ2hhbmdlZChib29sKSB7IH0KK307CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzMDM5YzU1NWI4NGE3
MmE2NTk4NjE1ODQ2N2E3MzQ5ZjE2MzIxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oCkBA
IC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJIVE1MTWVk
aWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1RyYWNr
OworY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKK2NsYXNzIFRleHRUcmFjazsKK2NsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwsIHB1Ymxp
YyBFdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7CisgICAg
fQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCopOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJD
b3JlOjpFdmVudCopIGZpbmFsOworICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdU
Rjo6QXRvbWljU3RyaW5nJik7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVu
ZXImIHJocykgY29uc3QgZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6
RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXkoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHBhdXNlKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dnbGVQ
bGF5U3RhdGUoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2NydWJiaW5n
KCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZpbmFsOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZW5kU2Nhbm5pbmcoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGlu
ZGV4KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1
cmUoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU11dGVkKCkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKKworICAgIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNv
bnN0IGZpbmFsOworICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIGlzUGxheWluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0
IGZpbmFsOworICAgIFJlZjxUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0IGZpbmFs
OworICAgIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3Qg
ZmluYWw7CisgICAgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgZmluYWw7CisgICAgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFs
OworICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7Cisg
ICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zKCkgY29uc3QgZmluYWw7CisgICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRl
eCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25z
dCBmaW5hbDsKKyAgICBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9j
YWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBm
aW5hbDsKKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9ncmVzc0V2ZW50
VGltZXJGaXJlZCgpOworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+
JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZl
bnROYW1lQWxsKCk7CisKKyAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1l
bnQ7CisgICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0PFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIFZlY3RvcjxSZWZQdHI8
VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudTsKKyAgICBWZWN0b3I8UmVmUHRyPEF1
ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVudTsKKworICAgIGRvdWJsZSBwbGF5YmFja1N0
YXJ0ZWRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KTsKKyAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpOworfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFmODVk
YTkzMjQxZmFiYzQwZWZhOTAxYjQyMGEwODRlZjBmMGJmYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tCkBAIC0wLDAgKzEsNTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCisKKyNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCisKKyNpbXBvcnQgIkF1ZGlvVHJhY2tMaXN0LmgiCisjaW1wb3J0ICJFdmVu
dC5oIgorI2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgorI2ltcG9ydCAiRXZlbnROYW1lcy5oIgor
I2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNp
bXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCisjaW1wb3J0
ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUGFn
ZUdyb3VwLmgiCisjaW1wb3J0ICJUZXh0VHJhY2tMaXN0LmgiCisjaW1wb3J0ICJUaW1lUmFuZ2Vz
LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZl
bnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCit7Cit9CisKK1dlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQoKQoreworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpz
ZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQoreworICAgIGlm
IChtX21lZGlhRWxlbWVudCA9PSBtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX21lZGlhRWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgICAgIGZvciAoYXV0
byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAgICBtX21lZGlh
RWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Cisg
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX21lZGlh
RWxlbWVudC0+dGV4dFRyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNo
YW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgIH0KKyAgICBtX2lzTGlzdGVuaW5nID0gZmFs
c2U7CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5y
ZXNldFBsYXliYWNrU2Vzc2lvblN0YXRlKCk7CisKKyAgICBtX21lZGlhRWxlbWVudCA9IG1lZGlh
RWxlbWVudDsKKworICAgIGlmIChtX21lZGlhRWxlbWVudCkgeworICAgICAgICBmb3IgKGF1dG8m
IGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQorICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOworICAgICAg
ICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnRleHRUcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwg
KnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9pc0xpc3RlbmluZyA9IHRydWU7CisgICAgfQorCisg
ICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKK30KKwordm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKK3sKKyAgICB1cGRhdGVG
b3JFdmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgZXZlbnROYW1lKQoreworICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVBbGwoKTsK
KworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5kdXJh
dGlvbmNoYW5nZUV2ZW50KSB7CisgICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IHRoaXMtPmR1cmF0
aW9uKCk7CisgICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAg
ICBjbGllbnQtPmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7CisgICAgICAgIC8vIFRoZXNlIGlz
IG5vIHN0YW5kYXJkIGV2ZW50IGZvciBtaW5GYXN0UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9u
IGNoYW5nZSBpcyBhIHJlYXNvbmFibGUgcHJveHkgZm9yIGl0LgorICAgICAgICAvLyBJdCBoYXBw
ZW5zIGV2ZXJ5IHRpbWUgYSBuZXcgaXRlbSBiZWNvbWVzIHJlYWR5IHRvIHBsYXkuCisgICAgICAg
IGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlID0gdGhpcy0+Y2FuUGxheUZhc3RSZXZlcnNlKCk7Cisg
ICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGllbnQt
PmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKKyAgICB9CisK
KyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheUV2
ZW50CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheWluZ0V2ZW50KSB7
CisgICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGll
bnQtPnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUoKSk7Cisg
ICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygp
LnBhdXNlRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5RXZl
bnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQp
IHsKKyAgICAgICAgYm9vbCBpc1BsYXlpbmcgPSB0aGlzLT5pc1BsYXlpbmcoKTsKKyAgICAgICAg
ZmxvYXQgcGxheWJhY2tSYXRlID0gdGhpcy0+cGxheWJhY2tSYXRlKCk7CisgICAgICAgIGZvciAo
YXV0byBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2Vk
KGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKKyAgICB9CisKKyAgICBpZiAoYWxsCisgICAgICAg
IHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7CisgICAgICAg
IGF1dG8gY3VycmVudFRpbWUgPSB0aGlzLT5jdXJyZW50VGltZSgpOworICAgICAgICBhdXRvIGFu
Y2hvclRpbWUgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07Cisg
ICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGllbnQt
PmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7CisgICAgfQorCisg
ICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnByb2dyZXNz
RXZlbnQpIHsKKyAgICAgICAgYXV0byBidWZmZXJlZFRpbWUgPSB0aGlzLT5idWZmZXJlZFRpbWUo
KTsKKyAgICAgICAgYXV0byBzZWVrYWJsZVJhbmdlcyA9IHRoaXMtPnNlZWthYmxlUmFuZ2VzKCk7
CisgICAgICAgIGF1dG8gc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IHRoaXMt
PnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKTsKKyAgICAgICAgYXV0byBsaXZl
VXBkYXRlSW50ZXJ2YWwgPSB0aGlzLT5saXZlVXBkYXRlSW50ZXJ2YWwoKTsKKyAgICAgICAgZm9y
IChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgeworICAgICAgICAgICAgY2xpZW50LT5idWZmZXJl
ZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CisgICAgICAgICAgICBjbGllbnQtPnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdlcywgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlm
aWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50
CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCkK
KyAgICAgICAgdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7CisKKyAgICBpZiAoYWxsCisg
ICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNr
dGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCkgeworICAgICAgICBib29sIGVuYWJsZWQgPSBl
eHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpOworICAgICAgICBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSB0YXJnZXRUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKTsKKyAgICAgICAg
U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUgPSBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2
aWNlTmFtZSgpOworCisgICAgICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQg
PSB0aGlzLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpOworCisgICAgICAgIGZvciAo
YXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdGFyZ2V0VHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7
CisgICAgICAgICAgICBjbGllbnQtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZCh3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBXZSBkb24ndCBjYWxsIHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpIGluIHRoZSBh
bGwgY2FzZSwgc2luY2UKKyAgICAvLyB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSB3aWxs
IGFsc28gdXBkYXRlIHRoZSBzZWxlY3Rpb24gaW5kaWNlcy4KKyAgICBpZiAoZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCkKKyAgICAgICAgdXBkYXRlTWVkaWFTZWxlY3Rpb25J
bmRpY2VzKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVzKCkudm9sdW1lY2hhbmdlRXZlbnQpIHsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1f
Y2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKGlzTXV0ZWQoKSk7Cisg
ICAgfQorfQordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xp
ZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJU
KCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xpZW50cy5hZGQoJmNsaWVu
dCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnJlbW92
ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFT
U0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xpZW50cy5yZW1vdmUo
JmNsaWVudCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnBsYXkoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPnBsYXkoKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6cGF1c2UoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPnBhdXNlKCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAg
ICAgICBtX21lZGlhRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBp
ZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjcnViYmlu
ZygpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y3J1YmJpbmcoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmVuZFNjcnViYmluZygpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21lZGlh
RWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOwor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhk
b3VibGUgdGltZSkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQoreworICAgIGlmIChtX21lZGlh
RWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250
cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3sKKyAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlh
Q29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit7CisgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKK30KKwordm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBzZWxlY3RlZEF1ZGlvSW5kZXgpCit7CisgICAgaWYgKCFtX21lZGlhRWxl
bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBt
X2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fYXVk
aW9UcmFja3NGb3JNZW51W2ldLT5zZXRFbmFibGVkKGkgPT0gc2VsZWN0ZWRBdWRpb0luZGV4KTsK
K30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQoreworICAgIGlmICghbV9tZWRpYUVsZW1l
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIFRleHRUcmFjayogdGV4dFRyYWNrOworICAgIGlm
IChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQorICAgICAgICB0ZXh0VHJh
Y2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5n
ZXQoKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRUcmFjayA9IFRleHRUcmFjazo6Y2FwdGlvbk1l
bnVPZmZJdGVtKCk7CisKKyAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2so
dGV4dFRyYWNrKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5m
dWxsc2NyZWVuTW9kZSgpID09IE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQ
aWN0dXJlSW5QaWN0dXJlKQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4o
KTsKKyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbnRlckZ1bGxzY3JlZW4oTWVk
aWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworfQor
Cit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVNdXRlZCgp
Cit7CisgICAgc2V0TXV0ZWQoIWlzTXV0ZWQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgaWYgKG1f
bWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0TXV0ZWQobXV0ZWQpOwor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlh
RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7
CisgICAgYXV0byYgdGV4dFRyYWNrcyA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Cisg
ICAgaWYgKHRleHRUcmFja3MubGVuZ3RoKCkpCisgICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSgmdGV4dFRyYWNr
cyk7CisgICAgZWxzZQorICAgICAgICBtX2xlZ2libGVUcmFja3NGb3JNZW51LmNsZWFyKCk7CisK
KyAgICBhdXRvJiBhdWRpb1RyYWNrcyA9IG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpOwor
ICAgIGlmIChhdWRpb1RyYWNrcy5sZW5ndGgoKSA+IDEpCisgICAgICAgIG1fYXVkaW9UcmFja3NG
b3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoJmF1ZGlv
VHJhY2tzKTsKKyAgICBlbHNlCisgICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51LmNsZWFyKCk7
CisKKyAgICBhdXRvIGF1ZGlvT3B0aW9ucyA9IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7
CisgICAgYXV0byBhdWRpb0luZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKKyAgICBh
dXRvIGxlZ2libGVPcHRpb25zID0gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOworICAg
IGF1dG8gbGVnaWJsZUluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpOworCisgICAg
Zm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgeworICAgICAgICBjbGllbnQtPmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb09wdGlvbnMsIGF1ZGlvSW5kZXgpOworICAg
ICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVP
cHRpb25zLCBsZWdpYmxlSW5kZXgpOworICAgIH0KK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkKK3sKKyAg
ICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpOworICAgIGF1dG8g
bGVnaWJsZUluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpOworCisgICAgZm9yIChh
dXRvIGNsaWVudCA6IG1fY2xpZW50cykgeworICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQoYXVkaW9JbmRleCk7CisgICAgICAgIGNsaWVudC0+bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGxlZ2libGVJbmRleCk7CisgICAgfQorfQorCitkb3Vi
bGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrU3RhcnRlZFRp
bWUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCk7Cit9
CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICAvLyBGSVhNRSgxNTc0NTIp
OiBSZW1vdmUgdGhlIHJpZ2h0LWhhbmQgY29uc3RydWN0b3Igbm90YXRpb24gb25jZSBOZXZlckRl
c3Ryb3llZCBzdXBwb3J0cyBpbml0aWFsaXplcl9saXN0cy4KKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IG5hbWVzID0gVmVjdG9yPEF0b21pY1N0cmluZz4o
eworICAgICAgICBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwKKyAgICAgICAgZXZl
bnROYW1lcygpLnBhdXNlRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQsCisg
ICAgICAgIGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMo
KS50aW1ldXBkYXRlRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LAor
ICAgICAgICBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygp
LnJlbW92ZXRyYWNrRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVu
dCwKKyAgICAgICAgZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2ly
ZWxlc3NjaGFuZ2VkRXZlbnQsCisgICAgfSk7CisgICAgcmV0dXJuIG5hbWVzLmdldCgpOworfQor
Citjb25zdCBBdG9taWNTdHJpbmcmICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6ZXZlbnROYW1lQWxsKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBldmVudE5hbWVBbGwoImFsbEV2ZW50cyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgIHJldHVybiBldmVudE5hbWVBbGw7Cit9CisKK2RvdWJsZSBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIGlm
ICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX21lZGlh
RWxlbWVudC0+c3VwcG9ydHNTZWVraW5nKCkgPyBtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSA6
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Cit9CisKK2RvdWJsZSBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3VycmVudFRpbWUoKSBjb25zdAor
eworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGlt
ZSgpIDogMDsKK30KKworZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpidWZmZXJlZFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1f
bWVkaWFFbGVtZW50LT5tYXhCdWZmZXJlZFRpbWUoKSA6IDA7Cit9CisKK2Jvb2wgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50ID8gIW1fbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA6IGZhbHNlOwor
fQorCitmbG9hdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tS
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVu
dC0+cGxheWJhY2tSYXRlKCkgOiAwOworfQorCitSZWY8VGltZVJhbmdlcz4gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGUoKSA6IFRpbWVS
YW5nZXM6OmNyZWF0ZSgpOworfQorCitkb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZVRpbWVS
YW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgOiAwOworfQorCitkb3VibGUgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPmxpdmVVcGRhdGVJbnRlcnZh
bCgpIDogMDsKK30KKyAgICAKK2Jvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVt
ZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0ZSgpIDwgMC4wIDogZmFsc2U7
Cit9CisKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvT3B0aW9uczsKKworICAgIGlmICgh
bV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAg
ICAgICAgcmV0dXJuIGF1ZGlvT3B0aW9uczsKKworICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNl
cyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJl
ZmVyZW5jZXMoKTsKKworICAgIGF1ZGlvT3B0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
YXVkaW9UcmFja3NGb3JNZW51LnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDog
bV9hdWRpb1RyYWNrc0Zvck1lbnUpCisgICAgICAgIGF1ZGlvT3B0aW9ucy51bmNoZWNrZWRBcHBl
bmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soYXVkaW9U
cmFjay5nZXQoKSkpOworCisgICAgcmV0dXJuIGF1ZGlvT3B0aW9uczsKK30KKwordWludDY0X3Qg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9hdWRp
b1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGlmIChtX2F1ZGlvVHJh
Y2tzRm9yTWVudVtpbmRleF0tPmVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsK
K30KKworVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0Cit7Cisg
ICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlT3B0aW9uczsKKworICAgIGlm
ICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkK
KyAgICAgICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOworCisgICAgYXV0byYgY2FwdGlvblByZWZl
cmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRp
b25QcmVmZXJlbmNlcygpOworCisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJsZVRyYWNr
c0Zvck1lbnUpCisgICAgICAgIGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5j
ZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOworCisgICAgcmV0
dXJuIGxlZ2libGVPcHRpb25zOworfQorCit1aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit7CisgICAg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojpt
YXgoKTsKKyAgICB1aW50NjRfdCBvZmZJbmRleCA9IDA7CisgICAgYm9vbCB0cmFja01lbnVJdGVt
U2VsZWN0ZWQgPSBmYWxzZTsKKworICAgIGF1dG8gaG9zdCA9IG1fbWVkaWFFbGVtZW50ID8gbV9t
ZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkgOiBudWxscHRyOworCisgICAgaWYgKCFo
b3N0KQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleDsKKworICAgIEF0b21pY1N0cmluZyBk
aXNwbGF5TW9kZSA9IGhvc3QtPmNhcHRpb25EaXNwbGF5TW9kZSgpOworICAgIFRleHRUcmFjayog
b2ZmSXRlbSA9IGhvc3QtPmNhcHRpb25NZW51T2ZmSXRlbSgpOworICAgIFRleHRUcmFjayogYXV0
b21hdGljSXRlbSA9IGhvc3QtPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOworCisgICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgp
OyBpbmRleCsrKSB7CisgICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVu
dVtpbmRleF07CisgICAgICAgIGlmICh0cmFjayA9PSBvZmZJdGVtKQorICAgICAgICAgICAgb2Zm
SW5kZXggPSBpbmRleDsKKworICAgICAgICBpZiAodHJhY2sgPT0gYXV0b21hdGljSXRlbSAmJiBk
aXNwbGF5TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpKSB7Cisg
ICAgICAgICAgICBzZWxlY3RlZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICB0cmFja01lbnVJ
dGVtU2VsZWN0ZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpc3BsYXlNb2Rl
ICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUo
KSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5k
ZXggPSBpbmRleDsKKyAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob2ZmSXRlbSAmJiAhdHJhY2tNZW51SXRlbVNlbGVj
dGVkICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0Ojpmb3JjZWRPbmx5S2V5d29y
ZCgpKQorICAgICAgICBzZWxlY3RlZEluZGV4ID0gb2ZmSW5kZXg7CisKKyAgICByZXR1cm4gc2Vs
ZWN0ZWRJbmRleDsKK30KKworYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlh
RWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+d2Via2l0Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNX
aXJlbGVzcygpOworfQorCitXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8
ICFtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKKyAgICAgICAgcmV0dXJuIFRh
cmdldFR5cGVOb25lOworCisgICAgc3dpdGNoIChtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9s
c0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCkpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOworICAg
IGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6Ok5vbmU6CisgICAgICAgIHJldHVy
biBUYXJnZXRUeXBlTm9uZTsKKyAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBl
OjpBaXJwbGF5OgorICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZUFpclBsYXk7CisgICAgY2FzZSBN
ZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6VHZvdXQ6CisgICAgICAgIHJldHVybiBUYXJn
ZXRUeXBlVFZPdXQ7CisgICAgfQorfQorCitTdHJpbmcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QK
K3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJv
bHNIb3N0KCkpCisgICAgICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hv
c3QoKS0+ZXh0ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZSgpOworICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworfQorCitib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYVNlc3Npb24oKS53aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZCgqbV9tZWRpYUVsZW1lbnQpOworfQorCitib29sIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojppc011dGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bXV0ZWQoKSA6IGZhbHNlOworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYzMmI0MzkzNWQy
YjI4MWQ4MTYzZmIxNzY1OGExYzdjZTQ0YTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgKQEAg
LTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgeyB9OworICAg
IHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZEVudGVyRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxz
Y3JlZW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSA9IDA7Cit9
OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTFhZTY4NjRhZWVjMmVkZjk2
ODdjNDM5MzI4YmUwNTY0NTkyOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaApAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVs
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQ7CisKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKT0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0g
ZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVj
dCkgPSAwOworICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlkZW9HcmF2aXR5UmVzaXplLCBWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwgfTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2li
bGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKK307CisK
K2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aWRlb0RpbWVu
c2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKK307CisKK1dFQkNPUkVfRVhQT1JU
IGJvb2wgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgCit9CisKKyNlbmRpZgorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmUzOWMyMDQ2NjJiNWM0
ZDVkNGZmNzBhNDc3NTE5YWE4Yzk5ZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaApAQCAt
MCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBBdWRpb1RyYWNrOworY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK2NsYXNzIFRleHRU
cmFjazsKK2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OworCitjbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudCgpKTsKKyAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CisgICAgSFRNTFZpZGVvRWxl
bWVudCogdmlkZW9FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0VsZW1lbnQuZ2V0KCk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRm
b3JtTGF5ZXIqLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtd
IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVU
aGVuKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyID0gW10geyB9KTsK
KyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOworICAgIHZvaWQg
dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7CisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZy
aHM7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1v
dmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxz
ZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUo
RmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5
ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSB2aWRlb0RpbWVu
c2lvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvRGltZW5zaW9uczsgfQorICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2hhc1ZpZGVvOyB9CisKKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRI
YXNWaWRlbyhib29sKTsKKyAgICB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNp
emUmKTsKKworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNl
cnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1l
QWxsKCk7CisKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7Cisg
ICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CisgICAg
Ym9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNl
IH07CisgICAgRmxvYXRTaXplIG1fdmlkZW9EaW1lbnNpb25zOworICAgIEZsb2F0UmVjdCBtX3Zp
ZGVvRnJhbWU7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NG
b3JNZW51OworICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JN
ZW51OworfTsKKworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43ZTFmYjNlMGQzMGExMGJhY2E1MThhNGQ5YjNlMTA1NzFiNDBkMzllCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKwor
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
LmgiCisKKyNpbXBvcnQgIkRPTVdpbmRvdy5oIgorI2ltcG9ydCAiSGlzdG9yeS5oIgorI2ltcG9y
dCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFDb250cm9sc0hvc3QuaCIKKyNpbXBvcnQgIlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0Nv
cmVBbmltYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRXZlbnRMaXN0ZW5lci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0Vs
ZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0
VHJhY2tMaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbXBvcnQgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQorICAgIDogRXZlbnRMaXN0
ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKK3sKK30KKworV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCit7
CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ID09IHZpZGVvRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT52aWRlb0Z1bGxz
Y3JlZW5MYXllcigpKQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVu
TGF5ZXIobnVsbHB0cik7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV9pc0xpc3Rlbmlu
ZykgeworICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygp
KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lLCAqdGhpcywgZmFsc2UpOworICAgIH0KKyAgICBtX2lzTGlzdGVuaW5nID0gZmFsc2U7CisK
KyAgICBtX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDsKKworICAgIGlmIChtX3ZpZGVvRWxl
bWVudCkgeworICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1l
cygpKQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lLCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX2lzTGlzdGVuaW5nID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkpOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQoreworICAgIHVw
ZGF0ZUZvckV2ZW50TmFtZShldmVudC0+dHlwZSgpKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRv
bWljU3RyaW5nJiBldmVudE5hbWUpCit7CisgICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVBbGwoKTsKKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5yZXNpemVFdmVudCkgeworICAgICAgICBzZXRIYXNWaWRlbyhtX3ZpZGVvRWxlbWVudCk7
CisgICAgICAgIHNldFZpZGVvRGltZW5zaW9ucyhtX3ZpZGVvRWxlbWVudCA/IEZsb2F0U2l6ZSht
X3ZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCBtX3ZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQo
KSkgOiBGbG9hdFNpemUoKSk7CisgICAgfQorfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2
aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXllciA9PSB2aWRlb0xheWVyKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
bV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IHZpZGVvTGF5ZXI7CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAs
IDApXTsKKyNlbHNlCisgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6
Q0dQb2ludE1ha2UoMC41LCAwLjUpXTsKKyNlbmRpZgorICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxh
eWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVdOworICAgIAorICAgIGlmICghbV92aWRlb0VsZW1l
bnQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVv
RnVsbHNjcmVlbkxheWVyLmdldCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJl
ZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV92aWRlb0VsZW1lbnQtPndhaXRG
b3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RnVsbHNj
cmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUs
IGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1f
dmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpICE9IG1vZGUpCisgICAgICAgIG1fdmlkZW9F
bGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCAmJiBmaW5pc2hlZFdpdGhNZWRpYSAmJiBtb2RlID09IE1lZGlhUGxheWVyRW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVOb25lKSB7CisgICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudC0+ZG9jdW1l
bnQoKS5pc01lZGlhRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKERPTVdpbmRvdyogd2lu
ZG93ID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuZG9tV2luZG93KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoSGlzdG9yeSogaGlzdG9yeSA9IHdpbmRvdy0+aGlzdG9yeSgpKQorICAgICAg
ICAgICAgICAgICAgICBoaXN0b3J5LT5iYWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNl
dFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKK3sKKyAgICBtX3ZpZGVvRnJhbWUgPSBy
ZWN0OworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczpDR1JlY3QocmVjdCld
OworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZp
ZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit7CisgICAgTWVkaWFQbGF5ZXI6OlZpZGVvR3Jh
dml0eSB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
OworICAgIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZp
dHlSZXNpemUpCisgICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZp
dHlSZXNpemU7CisgICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQorICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRp
YVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OworICAgIGVsc2UgaWYgKGdyYXZpdHkg
PT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwp
CisgICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVB
c3BlY3RGaWxsOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
CisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkodmlkZW9HcmF2
aXR5KTsKK30KKworY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gc0V2ZW50TmFtZXM7CisKKyAgICBp
ZiAoIXNFdmVudE5hbWVzLmdldCgpLnNpemUoKSkKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCku
YXBwZW5kKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCk7CisgICAgcmV0dXJuIHNFdmVudE5hbWVz
LmdldCgpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpldmVudE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKKyAgICByZXR1cm4g
c0V2ZW50TmFtZUFsbDsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQoreworICAgIGlmIChtX3ZpZGVvRWxl
bWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh2aWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQp
Cit7CisgICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xp
ZW50cy5hZGQoJmNsaWVudCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xp
ZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1f
Y2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZpZGVvRWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3Zp
ZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBwYWdlLT5pc1Zp
c2libGUoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8oYm9vbCBoYXNWaWRlbykKK3sKKyAgICBp
ZiAoaGFzVmlkZW8gPT0gbV9oYXNWaWRlbykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oYXNW
aWRlbyA9IGhhc1ZpZGVvOworCisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCisg
ICAgICAgIGNsaWVudC0+aGFzVmlkZW9DaGFuZ2VkKG1faGFzVmlkZW8pOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0RpbWVuc2lvbnMoY29u
c3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgaWYgKG1fdmlkZW9EaW1lbnNp
b25zID09IHZpZGVvRGltZW5zaW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92aWRlb0Rp
bWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnM7CisKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1f
Y2xpZW50cykKKyAgICAgICAgY2xpZW50LT52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fdmlkZW9E
aW1lbnNpb25zKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzMDllNzk3NDRiNDk4OWEzYTdiOTM1NzBhYWViN2U4MmViMDdl
OTMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V1RGIHsKLWNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBU
aW1lUmFuZ2VzOwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSgpIHsgfTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgPSAwOwotfTsKLQotfQotCi0jZW5kaWYgLy8g
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9X
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDZkNTNmMGY3NzY5Mzc3NWFkNDg2MWMyMjMwNGFjOTM4MDA5YzgyMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9T
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQot
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRpbWVSYW5n
ZXM7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDsKLXN0cnVjdCBNZWRpYVNl
bGVjdGlvbk9wdGlvbjsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgeyB9OwotICAgIHZpcnR1
YWwgdm9pZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBwYXVzZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjcnViYmluZygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5kU2NydWJiaW5nKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSB0
aW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFNj
YW5uaW5nKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVp
bnQ2NF90IGluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbih1aW50NjRfdCBpbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVNdXRlZCgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCkgPSAwOwotCi0gICAgZW51bSBFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVOb25lLCBUYXJnZXRUeXBlQWlyUGxheSwgVGFy
Z2V0VHlwZVRWT3V0IH07Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1l
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
ZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQbGF5
aW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIFJlZjxUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
cygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
dWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVk
RGV2aWNlTmFtZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzTXV0ZWQoKSBj
b25zdCA9IDA7Ci19OwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQoKSB7IH07
Ci0gICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIC8qIGN1cnJlbnRUaW1lICovLCBkb3Vi
bGUgLyogYW5jaG9yVGltZSAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlcmVkVGltZUNo
YW5nZWQoZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNo
YW5nZWQoZG91YmxlIC8qIHBsYXliYWNrU3RhcnRlZFRpbWUgKi8pIHsgfQotICAgIHZpcnR1YWwg
dm9pZCByYXRlQ2hhbmdlZChib29sIC8qIGlzUGxheWluZyAqLywgZmxvYXQgLyogcGxheWJhY2tS
YXRlICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0
IFRpbWVSYW5nZXMmLCBkb3VibGUgLyogbGFzdE1vZGlmaWVkICovLCBkb3VibGUgLyogbGl2ZUlu
dGVydmFsICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZChib29sKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlvbnMgKi8s
IHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4ICovKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFu
Z2VkKGJvb2wgLyogZW5hYmxlZCAqLywgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUg
Ki8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoYm9vbCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSB7IH0K
LX07Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDg5NTEzNzU4ODRk
NmM4MWE3ZjIzODk2ZDhjNGY2NTMzOTAzOGM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0K
LSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVu
dW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9UcmFjazsKLWNsYXNz
IEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBUZXh0VHJhY2s7Ci1jbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2U7Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50IGZpbmFsIDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLCBwdWJsaWMgRXZlbnRM
aXN0ZW5lciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkpOwotICAgIH0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX21lZGlhRWxlbWVudC5nZXQoKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBo
YW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZl
bnQqKSBmaW5hbDsKLSAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYpOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXIqPih0aGlzKSA9PSAmcmhzOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENs
aWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBwYXVzZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGxheVN0YXRl
KCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNjcnViYmluZygpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kU2NydWJiaW5nKCkgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGVuZFNjYW5uaW5nKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dnbGVNdXRlZCgpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7Ci0KLSAgICBkb3VibGUgZHVy
YXRpb24oKSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5h
bDsKLSAgICBkb3VibGUgYnVmZmVyZWRUaW1lKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Bs
YXlpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICBmbG9hdCBwbGF5YmFja1JhdGUoKSBjb25zdCBmaW5hbDsK
LSAgICBSZWY8VGltZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25zdCBmaW5hbDsKLSAgICBk
b3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0IGZpbmFsOwot
ICAgIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGNh
blBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0IGZpbmFsOwotICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICB1
aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsOwotICAgIFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNv
bnN0IGZpbmFsOwotICAgIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25z
dCBmaW5hbDsKLSAgICBib29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgZmluYWw7
Ci0gICAgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUoKSBjb25zdCBmaW5hbDsKLSAgICBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERl
dmljZU5hbWUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc011dGVkKCkgY29uc3QgZmluYWw7Ci0K
LXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudCgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgcHJvZ3Jlc3NFdmVudFRpbWVyRmly
ZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2
ZWRFdmVudE5hbWVzKCk7Ci0gICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFs
bCgpOwotCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwotICAg
IGJvb2wgbV9pc0xpc3RlbmluZyB7IGZhbHNlIH07Ci0gICAgSGFzaFNldDxXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
az4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7Ci0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNr
Pj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7Ci0KLSAgICBkb3VibGUgcGxheWJhY2tTdGFydGVkVGlt
ZSgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7Ci0gICAg
dm9pZCB1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKTsKLX07Ci0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjZmNkZTQzM2YwMzcwMjFlNTFhMGI0Njg2ZTJmYjUxN2Q3ZTk3Zjc0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisr
KyAvZGV2L251bGwKQEAgLTEsNTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
aCIKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQXVkaW9UcmFja0xpc3QuaCIKLSNpbXBv
cnQgIkV2ZW50LmgiCi0jaW1wb3J0ICJFdmVudExpc3RlbmVyLmgiCi0jaW1wb3J0ICJFdmVudE5h
bWVzLmgiCi0jaW1wb3J0ICJIVE1MRWxlbWVudC5oIgotI2ltcG9ydCAiSFRNTE1lZGlhRWxlbWVu
dC5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9sc0hvc3QuaCIK
LSNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0ICJQYWdlLmgiCi0jaW1w
b3J0ICJQYWdlR3JvdXAuaCIKLSNpbXBvcnQgIlRleHRUcmFja0xpc3QuaCIKLSNpbXBvcnQgIlRp
bWVSYW5nZXMuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKQotICAgIDogRXZlbnRMaXN0
ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLXsKLX0KLQotV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi17
Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAgICAg
IG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZh
bHNlKTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCkucmVtb3ZlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAg
IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7Ci0gICAgfQotICAgIG1faXNMaXN0ZW5p
bmcgPSBmYWxzZTsKLQotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPnJlc2V0UGxheWJhY2tTZXNzaW9uU3RhdGUoKTsKLQotICAgIG1fbWVkaWFFbGVtZW50
ID0gbWVkaWFFbGVtZW50OwotCi0gICAgaWYgKG1fbWVkaWFFbGVtZW50KSB7Ci0gICAgICAgIGZv
ciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBt
X21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7
Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX21lZGlh
RWxlbWVudC0+dGV4dFRyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5n
ZUV2ZW50LCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX2lzTGlzdGVuaW5nID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQotewotICAg
IHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC0+dHlwZSgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6
QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgYWxsID0gZXZlbnROYW1lID09IGV2ZW50TmFt
ZUFsbCgpOwotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpIHsKLSAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gdGhp
cy0+ZHVyYXRpb24oKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAg
ICAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKLSAgICAgICAgLy8g
VGhlc2UgaXMgbm8gc3RhbmRhcmQgZXZlbnQgZm9yIG1pbkZhc3RSZXZlcnNlUmF0ZUNoYW5nZTsg
ZHVyYXRpb24gY2hhbmdlIGlzIGEgcmVhc29uYWJsZSBwcm94eSBmb3IgaXQuCi0gICAgICAgIC8v
IEl0IGhhcHBlbnMgZXZlcnkgdGltZSBhIG5ldyBpdGVtIGJlY29tZXMgcmVhZHkgdG8gcGxheS4K
LSAgICAgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UgPSB0aGlzLT5jYW5QbGF5RmFzdFJldmVy
c2UoKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgICAg
IGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOwot
ICAgIH0KLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5wbGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5aW5n
RXZlbnQpIHsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAg
ICAgIGNsaWVudC0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGlt
ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkucGF1c2VFdmVudAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygp
LnBsYXlFdmVudAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJhdGVjaGFu
Z2VFdmVudCkgewotICAgICAgICBib29sIGlzUGxheWluZyA9IHRoaXMtPmlzUGxheWluZygpOwot
ICAgICAgICBmbG9hdCBwbGF5YmFja1JhdGUgPSB0aGlzLT5wbGF5YmFja1JhdGUoKTsKLSAgICAg
ICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgICAgIGNsaWVudC0+cmF0
ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwotICAgIH0KLQotICAgIGlmIChhbGwK
LSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQpIHsK
LSAgICAgICAgYXV0byBjdXJyZW50VGltZSA9IHRoaXMtPmN1cnJlbnRUaW1lKCk7Ci0gICAgICAg
IGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0
aW1lXTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgICAg
IGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKLSAg
ICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCku
cHJvZ3Jlc3NFdmVudCkgewotICAgICAgICBhdXRvIGJ1ZmZlcmVkVGltZSA9IHRoaXMtPmJ1ZmZl
cmVkVGltZSgpOwotICAgICAgICBhdXRvIHNlZWthYmxlUmFuZ2VzID0gdGhpcy0+c2Vla2FibGVS
YW5nZXMoKTsKLSAgICAgICAgYXV0byBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1l
ID0gdGhpcy0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpOwotICAgICAgICBh
dXRvIGxpdmVVcGRhdGVJbnRlcnZhbCA9IHRoaXMtPmxpdmVVcGRhdGVJbnRlcnZhbCgpOwotICAg
ICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAgICAgICBjbGllbnQt
PmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKLSAgICAgICAgICAgIGNsaWVudC0+
c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBzZWVrYWJsZVRpbWVSYW5nZXNM
YXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmFkZHRy
YWNrRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFj
a0V2ZW50KQotICAgICAgICB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKLQotICAgIGlm
IChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50
cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KSB7Ci0gICAgICAgIGJvb2wgZW5h
YmxlZCA9IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCk7Ci0gICAgICAgIEV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpOwot
ICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGV4dGVybmFsUGxheWJhY2tMb2Nh
bGl6ZWREZXZpY2VOYW1lKCk7Ci0KLSAgICAgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCA9IHRoaXMtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCk7Ci0KLSAgICAg
ICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICAgICAgY2xpZW50LT5l
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZp
Y2VOYW1lKTsKLSAgICAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIFdlIGRvbid0IGNhbGwgdXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkg
aW4gdGhlIGFsbCBjYXNlLCBzaW5jZQotICAgIC8vIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cygpIHdpbGwgYWxzbyB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpbmRpY2VzLgotICAgIGlmIChldmVu
dE5hbWUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50KQotICAgICAgICB1cGRhdGVNZWRpYVNl
bGVjdGlvbkluZGljZXMoKTsKLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCkgewotICAgICAgICBmb3IgKGF1dG8gY2xp
ZW50IDogbV9jbGllbnRzKQotICAgICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQoaXNNdXRl
ZCgpKTsKLSAgICB9Ci19Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjphZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAg
ICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLmFk
ZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17
Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRz
LnJlbW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6cGxheSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21l
ZGlhRWxlbWVudC0+cGxheSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpwYXVzZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBt
X21lZGlhRWxlbWVudC0+cGF1c2UoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQot
ewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2lu
U2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmVuZFNjcnViYmluZygpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBt
X21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUo
dGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZh
c3RTZWVrKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCi17Ci0gICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQotewotICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5p
bmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpCYWNrd2FyZCk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjYW5uaW5nKCkKLXsKLSAgICBpZiAo
bV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY2FubmluZygpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RBdWRp
b01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVjdGVkQXVkaW9JbmRleCkKLXsKLSAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMCwg
c2l6ZSA9IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgbV9hdWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJsZWQoaSA9PSBzZWxlY3RlZEF1ZGlv
SW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17Ci0gICAgaWYgKCFtX21l
ZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2s7
Ci0gICAgaWYgKGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5zaXplKCkpCi0gICAgICAg
IHRleHRUcmFjayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnVbc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bmRleCldLmdldCgpOwotICAgIGVsc2UKLSAgICAgICAgdGV4dFRyYWNrID0gVGV4dFRyYWNrOjpj
YXB0aW9uTWVudU9mZkl0ZW0oKTsKLQotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRTZWxlY3RlZFRl
eHRUcmFjayh0ZXh0VHJhY2spOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBpZiAobV9tZWRpYUVs
ZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgPT0gTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5leGl0RnVs
bHNjcmVlbigpOwotICAgIGVsc2UKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVudGVyRnVsbHNj
cmVlbihNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2ds
ZU11dGVkKCkKLXsKLSAgICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKLXsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRNdXRlZCht
dXRlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVw
ZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpCi17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5w
YWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9
IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVy
ZW5jZXMoKTsKLSAgICBhdXRvJiB0ZXh0VHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFj
a3MoKTsKLSAgICBpZiAodGV4dFRyYWNrcy5sZW5ndGgoKSkKLSAgICAgICAgbV9sZWdpYmxlVHJh
Y2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZ0
ZXh0VHJhY2tzKTsKLSAgICBlbHNlCi0gICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuY2xl
YXIoKTsKLQotICAgIGF1dG8mIGF1ZGlvVHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJh
Y2tzKCk7Ci0gICAgaWYgKGF1ZGlvVHJhY2tzLmxlbmd0aCgpID4gMSkKLSAgICAgICAgbV9hdWRp
b1RyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVu
dSgmYXVkaW9UcmFja3MpOwotICAgIGVsc2UKLSAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUu
Y2xlYXIoKTsKLQotICAgIGF1dG8gYXVkaW9PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKTsKLSAgICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgp
OwotICAgIGF1dG8gbGVnaWJsZU9wdGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
KCk7Ci0gICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7
Ci0KLSAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAgIGNsaWVudC0+
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvT3B0aW9ucywgYXVkaW9JbmRl
eCk7Ci0gICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
bGVnaWJsZU9wdGlvbnMsIGxlZ2libGVJbmRleCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMo
KQotewotICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7Ci0g
ICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7Ci0KLSAg
ICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAgIGNsaWVudC0+YXVkaW9N
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChhdWRpb0luZGV4KTsKLSAgICAgICAgY2xpZW50LT5s
ZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobGVnaWJsZUluZGV4KTsKLSAgICB9Ci19
Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tT
dGFydGVkVGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrU3RhcnRlZFRp
bWUoKTsKLX0KLQotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQotewotICAgIC8vIEZJWE1F
KDE1NzQ1Mik6IFJlbW92ZSB0aGUgcmlnaHQtaGFuZCBjb25zdHJ1Y3RvciBub3RhdGlvbiBvbmNl
IE5ldmVyRGVzdHJveWVkIHN1cHBvcnRzIGluaXRpYWxpemVyX2xpc3RzLgotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gbmFtZXMgPSBWZWN0b3I8QXRvbWlj
U3RyaW5nPih7Ci0gICAgICAgIGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50LAotICAg
ICAgICBldmVudE5hbWVzKCkucGF1c2VFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnBsYXlF
dmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCwKLSAgICAgICAgZXZl
bnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnByb2dyZXNz
RXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50LAotICAgICAgICBldmVu
dE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnZvbHVtZWNo
YW5nZUV2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFy
Z2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCwKLSAgICB9KTsKLSAgICByZXR1cm4gbmFtZXMuZ2V0
KCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IGV2ZW50TmFtZUFsbCgiYWxsRXZlbnRzIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZUFsbDsKLX0KLQotZG91Ymxl
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlvbigpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVkaWFFbGVtZW50LT5kdXJh
dGlvbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLX0KLQot
ZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjdXJyZW50VGltZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPmN1
cnJlbnRUaW1lKCkgOiAwOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVt
ZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1heEJ1ZmZlcmVkVGltZSgpIDogMDsKLX0KLQotYm9vbCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNQbGF5aW5nKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyAhbV9tZWRpYUVsZW1lbnQtPnBhdXNlZCgpIDog
ZmFsc2U7Ci19Ci0KLWZsb2F0IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpw
bGF5YmFja1JhdGUoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVk
aWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSA6IDA7Ci19Ci0KLVJlZjxUaW1lUmFuZ2VzPiBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgp
IDogVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnNlZWth
YmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bGl2ZVVwZGF0
ZUludGVydmFsKCkgOiAwOwotfQotICAgIAotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAg
OiBmYWxzZTsKLX0KLQotVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25z
dAotewotICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9PcHRpb25zOwotCi0g
ICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFn
ZSgpKQotICAgICAgICByZXR1cm4gYXVkaW9PcHRpb25zOwotCi0gICAgYXV0byYgY2FwdGlvblBy
ZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNh
cHRpb25QcmVmZXJlbmNlcygpOwotCi0gICAgYXVkaW9PcHRpb25zLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGF1ZGlv
VHJhY2sgOiBtX2F1ZGlvVHJhY2tzRm9yTWVudSkKLSAgICAgICAgYXVkaW9PcHRpb25zLnVuY2hl
Y2tlZEFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFj
ayhhdWRpb1RyYWNrLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gYXVkaW9PcHRpb25zOwotfQotCi11
aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNl
bGVjdGVkSW5kZXgoKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKG1f
YXVkaW9UcmFja3NGb3JNZW51W2luZGV4XS0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJu
IGluZGV4OwotICAgIH0KLSAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46
Om1heCgpOwotfQotCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29u
c3QKLXsKLSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVPcHRpb25zOwot
Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpKQotICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Ci0KLSAgICBhdXRvJiBjYXB0
aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9sZWdp
YmxlVHJhY2tzRm9yTWVudSkKLSAgICAgICAgbGVnaWJsZU9wdGlvbnMuYXBwZW5kKGNhcHRpb25Q
cmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKSk7Ci0K
LSAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Ci19Ci0KLXVpbnQ2NF90IFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QK
LXsKLSAgICB1aW50NjRfdCBzZWxlY3RlZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpOwotICAgIHVpbnQ2NF90IG9mZkluZGV4ID0gMDsKLSAgICBib29sIHRyYWNr
TWVudUl0ZW1TZWxlY3RlZCA9IGZhbHNlOwotCi0gICAgYXV0byBob3N0ID0gbV9tZWRpYUVsZW1l
bnQgPyBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSA6IG51bGxwdHI7Ci0KLSAg
ICBpZiAoIWhvc3QpCi0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4OwotCi0gICAgQXRvbWlj
U3RyaW5nIGRpc3BsYXlNb2RlID0gaG9zdC0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7Ci0gICAgVGV4
dFRyYWNrKiBvZmZJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRy
YWNrKiBhdXRvbWF0aWNJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVu
dS5zaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgYXV0byYgdHJhY2sgPSBtX2xlZ2libGVUcmFj
a3NGb3JNZW51W2luZGV4XTsKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCi0gICAgICAg
ICAgICBvZmZJbmRleCA9IGluZGV4OwotCi0gICAgICAgIGlmICh0cmFjayA9PSBhdXRvbWF0aWNJ
dGVtICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3Jk
KCkpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRy
YWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlz
cGxheU1vZGUgIT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSAmJiB0cmFj
ay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgewotICAgICAgICAgICAgc2Vs
ZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChvZmZJdGVtICYmICF0cmFja01lbnVJ
dGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9u
bHlLZXl3b3JkKCkpCi0gICAgICAgIHNlbGVjdGVkSW5kZXggPSBvZmZJbmRleDsKLQotICAgIHJl
dHVybiBzZWxlY3RlZEluZGV4OwotfQotCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT53ZWJraXRDdXJyZW50UGxheWJhY2tU
YXJnZXRJc1dpcmVsZXNzKCk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAotewotICAgIGlmICghbV9tZWRpYUVs
ZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQotICAgICAgICBy
ZXR1cm4gVGFyZ2V0VHlwZU5vbmU7Ci0KLSAgICBzd2l0Y2ggKG1fbWVkaWFFbGVtZW50LT5tZWRp
YUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZVR5cGUoKSkgewotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5v
bmU7Ci0gICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6Tm9uZToKLSAgICAg
ICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwotICAgIGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6OkRl
dmljZVR5cGU6OkFpcnBsYXk6Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBlQWlyUGxheTsKLSAg
ICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpUdm91dDoKLSAgICAgICAgcmV0
dXJuIFRhcmdldFR5cGVUVk91dDsKLSAgICB9Ci19Ci0KLVN0cmluZyBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUo
KSBjb25zdAotewotICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVk
aWFDb250cm9sc0hvc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNv
bnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7Ci0gICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci19Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7Ci19Ci0KLWJvb2wgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tdXRlZCgpIDogZmFsc2U7Ci19
Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzMmI0MzkzNWQyYjI4MWQ4MTYzZmIxNzY1OGExYzdjZTQ0
YTM2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENs
ZWFudXBGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUoKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyNzAyZGI4NmI1OTI2NDkyMmFlYjQwMWNkYjIy
MjE5ZDlmZGU0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0K
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMu
aCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50OwotCi1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xp
ZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jik9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpID0gMDsKLSAgICBlbnVtIFZp
ZGVvR3Jhdml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
LCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsIH07Ci0gICAgdmlydHVhbCB2b2lkIHNldFZp
ZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmdWxs
c2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCA9IDA7Ci19OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJv
b2wpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBG
bG9hdFNpemUmKSA9IDA7Ci19OwotCi1XRUJDT1JFX0VYUE9SVCBib29sIHN1cHBvcnRzUGljdHVy
ZUluUGljdHVyZSgpOwotICAgIAotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MjUyOWVmYTBk
MWIwOTM2YzM3YWJmZGVmZGEwMDgxMTQ4ZDQyOTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVt
cy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIEF1ZGlvVHJhY2s7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotY2xhc3MgVGV4dFRyYWNr
OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7Ci0KLWNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50KCkpOwotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKLSAgICBIVE1MVmlkZW9FbGVtZW50
KiB2aWRlb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRWxlbWVudC5nZXQoKTsgfQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1M
YXllciosIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyID0gW10geyB9
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4o
V1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIgPSBbXSB7IH0pOwotICAg
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRh
dGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsg
fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNs
aWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9h
dFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckdy
YXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWaXNpYmxlKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9u
cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9Ci0gICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFz
VmlkZW87IH0KLQotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNldEhhc1Zp
ZGVvKGJvb2wpOwotICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYp
OwotCi0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVk
RXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwo
KTsKLQotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKLSAgICBS
ZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKLSAgICBib29s
IG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsK
LSAgICBGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lvbnM7Ci0gICAgRmxvYXRSZWN0IG1fdmlkZW9G
cmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnU7Ci0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7
Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTRmYmUwMTcwMmNjNTBlNGE0Mzlm
ODY4NWQ2NDJiNzljZDlhNDA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmgiCi0KLSNpbXBvcnQgIkRPTVdpbmRvdy5oIgotI2ltcG9ydCAiSGlzdG9y
eS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9sc0hvc3QuaCIK
LSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0
IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgotI2ltcG9y
dCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMu
aD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5r
aW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1XZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQot
ICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkK
LXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6On5XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2
aWRlb0VsZW1lbnQpCi17Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50ID09IHZpZGVvRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVt
ZW50LT52aWRlb0Z1bGxzY3JlZW5MYXllcigpKQotICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXIobnVsbHB0cik7Ci0KLSAgICBpZiAobV92aWRlb0VsZW1lbnQg
JiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2Vy
dmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJlbW92ZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgIH0KLSAgICBtX2lzTGlzdGVu
aW5nID0gZmFsc2U7Ci0KLSAgICBtX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDsKLQotICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9i
c2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmFkZEV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX2lzTGlzdGVuaW5n
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVF
dmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2
ZW50KQotewotICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC0+dHlwZSgpKTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1l
KGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgaWYgKG1fY2xpZW50
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBib29sIGFsbCA9IGV2ZW50
TmFtZSA9PSBldmVudE5hbWVBbGwoKTsKLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnRO
YW1lID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCkgewotICAgICAgICBzZXRIYXNWaWRlbyht
X3ZpZGVvRWxlbWVudCk7Ci0gICAgICAgIHNldFZpZGVvRGltZW5zaW9ucyhtX3ZpZGVvRWxlbWVu
dCA/IEZsb2F0U2l6ZShtX3ZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCBtX3ZpZGVvRWxlbWVu
dC0+dmlkZW9IZWlnaHQoKSkgOiBGbG9hdFNpemUoKSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQ
bGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXllciA9PSB2aWRlb0xh
eWVyKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IHZpZGVvTGF5ZXI7Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50
OkNHUG9pbnRNYWtlKDAsIDApXTsKLSNlbHNlCi0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIg
c2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UoMC41LCAwLjUpXTsKLSNlbmRpZgotICAgIFttX3Zp
ZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVdOwotICAgIAotICAgIGlm
ICghbV92aWRlb0VsZW1lbnQpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92aWRl
b0VsZW1lbnQtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgaWYgKG1fdmlk
ZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpICE9IG1vZGUpCi0g
ICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKLQotICAgIGlm
IChtX3ZpZGVvRWxlbWVudCAmJiBmaW5pc2hlZFdpdGhNZWRpYSAmJiBtb2RlID09IE1lZGlhUGxh
eWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKSB7Ci0gICAgICAgIGlmIChtX3ZpZGVv
RWxlbWVudC0+ZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaWYg
KERPTVdpbmRvdyogd2luZG93ID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuZG9tV2luZG93
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeSogaGlzdG9yeSA9IHdpbmRvdy0+aGlz
dG9yeSgpKQotICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LT5iYWNrKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKLXsKLSAgICBt
X3ZpZGVvRnJhbWUgPSByZWN0OwotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5k
czpDR1JlY3QocmVjdCldOwotICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCi17Ci0gICAgTWVkaWFQ
bGF5ZXI6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2
aXR5UmVzaXplQXNwZWN0OwotICAgIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHlSZXNpemUpCi0gICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxh
eWVyOjpWaWRlb0dyYXZpdHlSZXNpemU7Ci0gICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQotICAgICAgICB2aWRl
b0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGVs
c2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwpCi0gICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgCi0gICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdy
YXZpdHkodmlkZW9HcmF2aXR5KTsKLX0KLQotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gc0V2ZW50
TmFtZXM7Ci0KLSAgICBpZiAoIXNFdmVudE5hbWVzLmdldCgpLnNpemUoKSkKLSAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCk7Ci0gICAgcmV0
dXJuIHNFdmVudE5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZlbnRz
IjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotewotICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVu
dCkpOwotICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNs
aWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLWJvb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJl
dHVybiBwYWdlLT5pc1Zpc2libGUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8oYm9vbCBoYXNW
aWRlbykKLXsKLSAgICBpZiAoaGFzVmlkZW8gPT0gbV9oYXNWaWRlbykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9oYXNWaWRlbyA9IGhhc1ZpZGVvOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQg
OiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+aGFzVmlkZW9DaGFuZ2VkKG1faGFzVmlkZW8p
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0RpbWVuc2lvbnMoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgaWYg
KG1fdmlkZW9EaW1lbnNpb25zID09IHZpZGVvRGltZW5zaW9ucykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV92aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnM7Ci0KLSAgICBmb3IgKGF1
dG8mIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT52aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKG1fdmlkZW9EaW1lbnNpb25zKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ2ZWMxN2E3ZDgxYTdmOTdlOTEzOTAwMzhlNTEwY2E0YmFkM2ZiNjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFU
Rk9STShJT1MpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSFRNTE1l
ZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgi
CisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKK09CSkNf
Q0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxl
cjsKK09CSkNfQ0xBU1MgVUlXaW5kb3c7CitPQkpDX0NMQVNTIFVJVmlldzsKKworbmFtZXNwYWNl
IFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIElu
dFJlY3Q7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKK2NsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbkNoYW5nZU9ic2VydmVyOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdAorICAgIDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZQorICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAg
LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gewor
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1v
ZGVsKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0KCk7CisgICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQorCisgICAgLy8g
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNl
dE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKKworICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBv
dmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3Vi
bGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5
YmFja1JhdGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5n
ZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91
YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2Nh
bGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBXZWJBVlBsYXllckNv
bnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllckNvbnRy
b2xsZXIuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7CisKKyAg
ICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7Cisg
ICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxs
cHRyIH07Cit9OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZThhODllOWIzNDYxZjFhYzRkMzU5NDRmMDBlNGU4M2ZiMGMzMmNiOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdC5tbQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorCisjaWYgUExBVEZPUk0oSU9TKQor
I2lmIEhBVkUoQVZLSVQpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJMb2dnaW5n
LmgiCisjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIldlYkFWUGxh
eWVyQ29udHJvbGxlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9y
dCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgi
CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKKyAgICA6IG1fcGxheWVy
Q29udHJvbGxlcihhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSkp
CisgICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKK3sKKyAgICBtb2RlbC5hZGRD
bGllbnQoKnRoaXMpOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlOnRoaXNdOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6Jm1v
ZGVsXTsKKworICAgIGR1cmF0aW9uQ2hhbmdlZChtb2RlbC5kdXJhdGlvbigpKTsKKyAgICBjdXJy
ZW50VGltZUNoYW5nZWQobW9kZWwuY3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKKyAgICBidWZmZXJlZFRpbWVDaGFuZ2VkKG1vZGVsLmJ1
ZmZlcmVkVGltZSgpKTsKKyAgICByYXRlQ2hhbmdlZChtb2RlbC5pc1BsYXlpbmcoKSwgbW9kZWwu
cGxheWJhY2tSYXRlKCkpOworICAgIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChtb2RlbC5zZWVrYWJs
ZVJhbmdlcygpLCBtb2RlbC5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCksIG1v
ZGVsLmxpdmVVcGRhdGVJbnRlcnZhbCgpKTsKKyAgICBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2Vk
KG1vZGVsLmNhblBsYXlGYXN0UmV2ZXJzZSgpKTsKKyAgICBhdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQobW9kZWwuYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwuYXVk
aW9NZWRpYVNlbGVjdGVkSW5kZXgoKSk7CisgICAgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQobW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpLCBtb2RlbC5sZWdp
YmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpOworICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKG1v
ZGVsLmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkpOwor
ICAgIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChtb2RlbC53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCgpKTsKK30KKworV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpCit7CisgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6bnVsbHB0cl07CisgICAg
W21fcGxheWVyQ29udHJvbGxlciBzZXRFeHRlcm5hbFBsYXliYWNrQWN0aXZlOmZhbHNlXTsKKwor
ICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6cmVzZXRNZWRpYVN0YXRlKCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHJlc2V0
TWVkaWFTdGF0ZV07Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit7CisgICAgV2ViQVZQbGF5ZXJDb250
cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworCisg
ICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBwbGF5
ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzID0gZHVyYXRpb247CisK
KyAgICAvLyBGSVhNRTogd2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFj
ayBpcyByZWFkeS4KKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblBsYXkgPSBZRVM7CisgICAgcGxh
eWVyQ29udHJvbGxlci5jYW5QYXVzZSA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRv
Z2dsZVBsYXliYWNrID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuaGFzRW5hYmxlZEF1ZGlv
ID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2FuU2VlayA9IFlFUzsKKyAgICBwbGF5ZXJD
b250cm9sbGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5Owor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjdXJyZW50VGltZUNo
YW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sKKyAgICBOU1Rp
bWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW21fcGxheWVyQ29udHJvbGxlciByYXRlXSA/
IE5BTiA6IGFuY2hvclRpbWU7CisgICAgQVZWYWx1ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFs
dWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCisg
ICAgICAgIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsKKworICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0VGltaW5nOnRpbWluZ107Cit9CisKK3ZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZl
cmVkVGltZSkKK3sKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIg
PSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgZG91YmxlIGR1cmF0aW9uID0gcGxheWVy
Q29udHJvbGxlci5jb250ZW50RHVyYXRpb247CisgICAgZG91YmxlIG5vcm1hbGl6ZWRCdWZmZXJl
ZFRpbWU7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGlt
ZSA9IDA7CisgICAgZWxzZQorICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gYnVmZmVy
ZWRUaW1lIC8gZHVyYXRpb247CisgICAgcGxheWVyQ29udHJvbGxlci5sb2FkZWRUaW1lUmFuZ2Vz
ID0gQFtAMCwgQChub3JtYWxpemVkQnVmZmVyZWRUaW1lKV07Cit9CisKK3ZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9h
dCBwbGF5YmFja1JhdGUpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxh
eWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRp
bWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVy
dmFsKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gc2Vla2FibGVSYW5nZXMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgZG91Ymxl
IHN0YXJ0ID0gdGltZVJhbmdlcy5zdGFydChpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICAg
ICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMuZW5kKGkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwor
CisgICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01UaW1lUmFuZ2VNYWtlKENNVGltZU1ha2VX
aXRoU2Vjb25kcyhzdGFydCwgMTAwMCksIENNVGltZU1ha2VXaXRoU2Vjb25kcyhlbmQtc3RhcnQs
IDEwMDApKTsKKyAgICAgICAgW3NlZWthYmxlUmFuZ2VzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1
ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOworICAgIH0KKworICAgIFttX3BsYXllckNvbnRyb2xs
ZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnNlZWthYmxlUmFuZ2VzLmdldCgpXTsKKyAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWU6IGxh
c3RNb2RpZmllZFRpbWVdOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0TGl2ZVVwZGF0ZUlu
dGVydmFsOmxpdmVVcGRhdGVJbnRlcnZhbF07Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFz
dFJldmVyc2UpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6
Y2FuUGxheUZhc3RSZXZlcnNlXTsKK30KKworc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIG9wdGlvbnMpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlv
bnMuc2l6ZSgpXSk7CisgICAgZm9yIChhdXRvJiBvcHRpb24gOiBvcHRpb25zKSB7CisgICAgICAg
IFJldGFpblB0cjxXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uPiB3ZWJPcHRpb24gPSBhZG9wdE5T
KFtbV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxvY10gaW5pdF0pOworICAgICAgICBbd2Vi
T3B0aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9wdGlvbi5kaXNwbGF5TmFtZV07CisgICAg
ICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24uZ2V0KCldOworICAgIH0KKyAgICBy
ZXR1cm4gd2ViT3B0aW9uczsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7Cisg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25P
cHRpb25zKG9wdGlvbnMpOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0QXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXgg
PCBbd2ViT3B0aW9ucyBjb3VudF0pCisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3Vy
cmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpz
dGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOworfQorCit2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2Vi
T3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQo
KV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisgICAgICAg
IFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVj
dGVkSW5kZXgpXV07Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5h
bFBsYXliYWNrVHlwZSBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29udHJvbGxlckV4
dGVybmFsUGxheWJhY2tUeXBlTm9uZTsKKyAgICBpZiAodGFyZ2V0VHlwZSA9PSBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCisgICAgICAgIGV4dGVybmFsUGxheWJh
Y2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVBaXJQbGF5Owor
ICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdl
dFR5cGVUVk91dCkKKyAgICAgICAgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRy
b2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0OworCisgICAgV2ViQVZQbGF5ZXJDb250cm9s
bGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworICAgIHBs
YXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6ZWROYW1l
ID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxh
eWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7CisgICAgcGxheWVyQ29udHJvbGxlci5l
eHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2Vk
KGJvb2wgZGlzYWJsZWQpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRBbGxvd3NFeHRl
cm5hbFBsYXliYWNrOiFkaXNhYmxlZF07Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQoreworICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0TXV0ZWQ6bXV0ZWRdOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9u
TW9kZWwpCisgICAgICAgIHJldHVybjsKKworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVs
ZWdhdGU6bnVsbHB0cl07CisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKK30KKworfQor
CisjZW5kaWYgLy8gSEFWRShBVktJVCkKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViMWVhYzUwNDZhN2RiOGE4YzI4NjMyYWU4ZjlmYjY0
YzhhOWUyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgor
I2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW5jbHVkZSAiVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KKworT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOworT0JKQ19DTEFT
UyBVSVZpZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBVSVdpbmRvdzsKK09CSkNfQ0xBU1MgVUlW
aWV3OworT0JKQ19DTEFTUyBDQUxheWVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xs
ZXI7CitPQkpDX0NMQVNTIFdlYkFWUGxheWVyTGF5ZXJWaWV3OworT0JKQ19DTEFTUyBXZWJBVlBs
YXllckxheWVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7
CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWw7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKKyAg
ICAKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
IGZpbmFsCisgICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAs
IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBj
cmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKKyAgICB2aXJ0dWFsIH5X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7CisgICAgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KKwor
ICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworCisgICAg
Ly8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXpl
ZERldmljZU5hbWUpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNl
dHVwRnVsbHNjcmVlbihVSVZpZXcmLCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3
ICosIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxv
d3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0
IEludFJlY3QmIGlubGluZVJlY3QpOworCisgICAgZW51bSBjbGFzcyBFeGl0RnVsbFNjcmVlblJl
YXNvbiB7CisgICAgICAgIERvbmVCdXR0b25UYXBwZWQsCisgICAgICAgIEZ1bGxTY3JlZW5CdXR0
b25UYXBwZWQsCisgICAgICAgIFBpbmNoR2VzdHVyZUhhbmRsZWQsCisgICAgICAgIFJlbW90ZUNv
bnRyb2xTdG9wRXZlbnRSZWNlaXZlZCwKKyAgICAgICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQK
KyAgICB9OworCisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyBy
ZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQorICAgIGJvb2wgc2hvdWxkRXhpdEZ1bGxz
Y3JlZW5XaXRoUmVhc29uKEV4aXRGdWxsU2NyZWVuUmVhc29uKTsKKyAgICBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZTsgfQorICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KKyAgICBXRUJDT1JFX0VY
UE9SVCBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29u
c3Q7CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2
b2lkKGJvb2wpPiYmIGNhbGxiYWNrKTsKKyAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKCkgY29uc3Q7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwor
CisgICAgdm9pZCB3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBkaWRTdGFy
dFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0
dXJlKCk7CisgICAgdm9pZCB3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGRp
ZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBwcmVwYXJlRm9yUGljdHVyZUluUGlj
dHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXikoQk9PTCkpOworCisgICAgdm9p
ZCBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Cisg
ICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKTsKKyAgICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7IH0KKyAgICBib29s
IGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlID09IG1vZGU7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNP
UkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Jik7CisgICAgdm9pZCBiZWdpblNlc3Npb24oKTsKKyAgICB2b2lk
IGVudGVyUGljdHVyZUluUGljdHVyZSgpOworICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRh
cmQoKTsKKyAgICB2b2lkIHdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIFdlYkFWUGxheWVyQ29u
dHJvbGxlciAqcGxheWVyQ29udHJvbGxlcigpIGNvbnN0OworCisgICAgUmVmPFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyAgICBS
ZXRhaW5QdHI8V2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdD
b250cm9sbGVyRGVsZWdhdGU7CisgICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+
IG1fcGxheWVyVmlld0NvbnRyb2xsZXI7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07CisgICAgV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9Owor
CisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCB3aGVuIGZ1bGxzY3JlZW4gaXMgcHJlc2VudGVk
IGluIGEgc2VwYXJhdGUgd2luZG93LgorICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV93aW5kb3c7
CisgICAgUmV0YWluUHRyPFVJVmlld0NvbnRyb2xsZXI+IG1fdmlld0NvbnRyb2xsZXI7CisgICAg
UmV0YWluUHRyPFVJVmlldz4gbV9wYXJlbnRWaWV3OworICAgIFJldGFpblB0cjxVSVdpbmRvdz4g
bV9wYXJlbnRXaW5kb3c7CisgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyTGF5ZXJWaWV3PiBtX3Bs
YXllckxheWVyVmlldzsKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
Tm9uZSB9OworICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gbV9wcmVwYXJlVG9JbmxpbmVD
YWxsYmFjazsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gbV93YXRjaGRvZ1RpbWVyOworICAgIGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJl
UGxheWJhY2sgeyBmYWxzZSB9OworICAgIGJvb2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fZXhpdENvbXBsZXRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2VudGVyUmVx
dWVzdGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9w
cGluZ1BpUCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFm
dGVyRW50ZXJpbmdGb3JlZ3JvdW5kIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVzdG9yaW5nRnVs
bHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wIHsgZmFsc2UgfTsKKworICAgIHZvaWQgZG9F
bnRlckZ1bGxzY3JlZW4oKTsKK307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNDlhYWM2NWI3NWNlYjU0MDA4NDU3M2JiNmIzNDViN2FmYTk4NWFm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCkBAIC0wLDAgKzEsMTA0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaCIKKworI2lmIEhBVkUoQVZLSVQpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1w
b3J0ICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgi
CisjaW1wb3J0ICJXZWJBVlBsYXllckNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KKyNpbXBvcnQg
PFVJS2l0L1VJS2l0Lmg+CisjaW1wb3J0IDxvYmpjL21lc3NhZ2UuaD4KKyNpbXBvcnQgPG9iamMv
cnVudGltZS5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCisvLyBTb2Z0LWxpbmtpbmcgaGVhZGVycyBtdXN0IGJlIGluY2x1ZGVk
IGxhc3Qgc2luY2UgdGhleSAjZGVmaW5lIGZ1bmN0aW9ucywgY29uc3RhbnRzLCBldGMuCisjaW1w
b3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRh
dGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCitTT0ZU
X0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplLCBO
U1N0cmluZyAqKQorU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZv
dW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsLCBOU1N0cmluZyAq
KQorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKEFWS2l0LCBBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyKQorU09GVF9MSU5L
X0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBsYXllclZpZXdDb250cm9sbGVyKQorU09GVF9MSU5L
X0NMQVNTX09QVElPTkFMKEFWS2l0LCBfX0FWUGxheWVyTGF5ZXJWaWV3KQorCitTT0ZUX0xJTktf
RlJBTUVXT1JLKFVJS2l0KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUFwcGxpY2F0aW9uKQor
U09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVNjcmVlbikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwg
VUlXaW5kb3cpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJVmlldykKK1NPRlRfTElOS19DTEFT
UyhVSUtpdCwgVUlWaWV3Q29udHJvbGxlcikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlDb2xv
cikKK1NPRlRfTElOS19DT05TVEFOVChVSUtpdCwgVUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0dXNC
YXJXaW5kb3dMZXZlbCwgVUlXaW5kb3dMZXZlbCkKKworc3RhdGljIFVJQ29sb3IgKmNsZWFyVUlD
b2xvcigpCit7CisgICAgcmV0dXJuIChVSUNvbG9yICopW2dldFVJQ29sb3JDbGFzcygpIGNsZWFy
Q29sb3JdOworfQorCisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xT
dHJpbmcoYm9vbCB2YWwpCit7CisgICAgcmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Cit9
CisjZW5kaWYKKworc3RhdGljIGNvbnN0IFNlY29uZHMgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRl
cnZhbCB7IDFfcyB9OworCitAY2xhc3MgV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbjsKKworQGlu
dGVyZmFjZSBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdCA8QVZQ
bGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlX1dlYktpdE9ubHk+IHsKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOworfQor
QHByb3BlcnR5IChhc3NpZ24pIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxs
c2NyZWVuSW50ZXJmYWNlOworLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJW
aWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVu
V2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJl
YXNvbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZQorLSAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5J
bnRlcmZhY2UKK3sKKyAgICByZXR1cm4gX2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCk7Cit9CisK
Ky0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAgICBfZnVsbHNjcmVlbkludGVyZmFj
ZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xs
ZXJXaWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxh
eWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xs
ZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+d2lsbFN0YXJ0UGljdHVyZUluUGlj
dHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyRGlkU3RhcnRQaWN0dXJl
SW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIK
K3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYuZnVs
bHNjcmVlbkludGVyZmFjZS0+ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0gKHZv
aWQpcGxheWVyVmlld0NvbnRyb2xsZXJGYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHdpdGhFcnJvcjooTlNF
cnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsK
KyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+
ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3
Q29udHJvbGxlcldpbGxTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxl
ciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdD
b250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPndpbGxTdG9wUGljdHVy
ZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyRGlkU3RvcFBp
Y3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJv
bGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgc2Vs
Zi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdG9wUGljdHVyZUluUGljdHVyZSgpOworfQorCitz
dGF0aWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVh
c29uIGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKEFWUGxheWVyVmlld0NvbnRyb2xsZXJF
eGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCit7CisgICAgc3dpdGNoIChyZWFzb24pIHsKKyAg
ICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkRvbmVCdXR0
b25UYXBwZWQ6CisgICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQ7CisgICAgY2FzZSBBVlBs
YXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25GdWxsU2NyZWVuQnV0dG9uVGFw
cGVkOgorICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4
aXRGdWxsU2NyZWVuUmVhc29uOjpGdWxsU2NyZWVuQnV0dG9uVGFwcGVkOworICAgIGNhc2UgQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGljdHVyZUluUGljdHVyZVN0
YXJ0ZWQ6CisgICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVkOworICAgIGNhc2Ug
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGluY2hHZXN0dXJlSGFu
ZGxlZDoKKyAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpF
eGl0RnVsbFNjcmVlblJlYXNvbjo6UGluY2hHZXN0dXJlSGFuZGxlZDsKKyAgICBjYXNlIEFWUGxh
eWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblJlbW90ZUNvbnRyb2xTdG9wRXZl
bnRSZWNlaXZlZDoKKyAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVk
OworICAgIH0KK30KKworLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3
Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0
aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNv
bgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgcmV0dXJu
IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29u
KGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKHJlYXNvbikpOworfQorCistICh2b2lkKXBs
YXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0Nv
bnRyb2xsZXIgcmVzdG9yZVVzZXJJbnRlcmZhY2VGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCByZXN0b3JlZCkpY29tcGxldGlvbkhhbmRs
ZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYu
ZnVsbHNjcmVlbkludGVyZmFjZS0+cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENv
bXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyKTsKK30KK0BlbmQKKworQGludGVyZmFj
ZSBXZWJBVlBsYXllckxheWVyIDogQ0FMYXllcgorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
bikgTlNTdHJpbmcgKnZpZGVvR3Jhdml0eTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9
aXNSZWFkeUZvckRpc3BsYXkpIEJPT0wgcmVhZHlGb3JEaXNwbGF5OworQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3Jl
ZW5JbnRlcmZhY2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBBVlBsYXllckNvbnRy
b2xsZXIgKnBsYXllckNvbnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBD
QUxheWVyICp2aWRlb1N1YmxheWVyOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIG51bGxh
YmxlKSBOU0RpY3Rpb25hcnkgKnBpeGVsQnVmZmVyQXR0cmlidXRlczsKK0Bwcm9wZXJ0eSBDR1Np
emUgdmlkZW9EaW1lbnNpb25zOworQHByb3BlcnR5IENHUmVjdCBtb2RlbFZpZGVvTGF5ZXJGcmFt
ZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyTGF5ZXIgeworICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7
CisgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gX2F2UGxheWVyQ29udHJvbGxl
cjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX3ZpZGVvU3VibGF5ZXI7CisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBfdmlkZW9HcmF2aXR5OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKHNlbGYpIHsKKyAgICAgICAgW3NlbGYg
c2V0TWFza3NUb0JvdW5kczpZRVNdOworICAgICAgICBfdmlkZW9HcmF2aXR5ID0gZ2V0QVZMYXll
clZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9y
bVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRz
KSBvYmplY3Q6bmlsXTsKKyAgICBbX3BpeGVsQnVmZmVyQXR0cmlidXRlcyByZWxlYXNlXTsKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJm
YWNlLmdldCgpOworfQorCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgX2Z1
bGxzY3JlZW5JbnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOworfQorCistIChBVlBsYXll
ckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyCit7CisgICAgcmV0dXJuIChBVlBsYXllckNv
bnRyb2xsZXIgKilfYXZQbGF5ZXJDb250cm9sbGVyLmdldCgpOworfQorCistICh2b2lkKXNldFBs
YXllckNvbnRyb2xsZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKK3sK
KyAgICBBU1NFUlQoIXBsYXllckNvbnRyb2xsZXIgfHwgW3BsYXllckNvbnRyb2xsZXIgaXNLaW5k
T2ZDbGFzczpbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGNsYXNzXV0pOworICAgIF9hdlBsYXllckNv
bnRyb2xsZXIgPSAoV2ViQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcjsKK30K
KworLSAodm9pZClzZXRWaWRlb1N1YmxheWVyOihDQUxheWVyICopdmlkZW9TdWJsYXllcgorewor
ICAgIF92aWRlb1N1YmxheWVyID0gdmlkZW9TdWJsYXllcjsKK30KKworLSAoQ0FMYXllciopdmlk
ZW9TdWJsYXllcgoreworICAgIHJldHVybiBfdmlkZW9TdWJsYXllci5nZXQoKTsKK30KKworLSAo
dm9pZClsYXlvdXRTdWJsYXllcnMKK3sKKyAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5
ZXJdICE9IHNlbGYpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghW19hdlBsYXllckNvbnRy
b2xsZXIgZGVsZWdhdGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBbX3ZpZGVvU3VibGF5ZXIg
c2V0UG9zaXRpb246Q0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChzZWxmLmJvdW5kcyksIENHUmVj
dEdldE1pZFkoc2VsZi5ib3VuZHMpKV07CisKKyAgICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMu
aGVpZ2h0IDw9IDAgfHwgc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0gMCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRmxvYXRSZWN0IHNvdXJjZVZpZGVvRnJhbWU7CisgICAgRmxvYXRSZWN0
IHRhcmdldFZpZGVvRnJhbWU7CisgICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlk
ZW9EaW1lbnNpb25zLndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0OworICAgIAor
ICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpIGlzRXF1YWxUb1N0cmluZzpz
ZWxmLnZpZGVvR3Jhdml0eV0pIHsKKyAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IHNlbGYubW9k
ZWxWaWRlb0xheWVyRnJhbWU7CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzZWxmLmJvdW5k
czsKKyAgICB9IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkg
aXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgeworICAgICAgICBzb3VyY2VWaWRl
b0ZyYW1lID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0
UmF0aW8sIHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICB0YXJnZXRWaWRlb0Zy
YW1lID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0
aW8sIHNlbGYuYm91bmRzKTsKKyAgICB9IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5
UmVzaXplQXNwZWN0RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsK
KyAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fy
b3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Cisg
ICAgICAgIHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUgPSBDR1JlY3RNYWtlKDAsIDAsIHNvdXJj
ZVZpZGVvRnJhbWUud2lkdGgoKSwgc291cmNlVmlkZW9GcmFtZS5oZWlnaHQoKSk7CisgICAgICAg
IEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7CisgICAgICAgIF9mdWxsc2Ny
ZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2RlbFZpZGVv
TGF5ZXJGcmFtZSk7CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzbWFsbGVzdFJlY3RXaXRo
QXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBVSVZpZXcgKnZp
ZXcgPSAoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXTsKKyAgICBDR0FmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSh0YXJnZXRWaWRl
b0ZyYW1lLndpZHRoKCkgLyBzb3VyY2VWaWRlb0ZyYW1lLndpZHRoKCksIHRhcmdldFZpZGVvRnJh
bWUuaGVpZ2h0KCkgLyBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKKyAgICBbdmlldyBzZXRU
cmFuc2Zvcm06dHJhbnNmb3JtXTsKKyAgICAKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmltYXRpb25E
dXJhdGlvbiA9IFtDQVRyYW5zYWN0aW9uIGFuaW1hdGlvbkR1cmF0aW9uXTsKKyAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeIHsKKyAgICAgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihyZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKKworICAgICAgICBbc2VsZiBwZXJm
b3JtU2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIHdpdGhPYmplY3Q6bmlsIGFmdGVy
RGVsYXk6YW5pbWF0aW9uRHVyYXRpb24gKyAwLjFdOworICAgIH0pOworfQorCistICh2b2lkKXJl
c29sdmVCb3VuZHMKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVz
dHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVj
dDpuaWxdOworICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKFtfdmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBz
ZWxmKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0KHNl
bGYubW9kZWxWaWRlb0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pICYmIENHQWZmaW5lVHJhbnNm
b3JtSXNJZGVudGl0eShbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0gdHJhbnNm
b3JtXSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07
CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07CisgICAgW0NBVHJh
bnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAKKyAgICBpZiAoIUNHUmVjdEVx
dWFsVG9SZWN0KHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pKSB7Cisg
ICAgICAgIHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUgPSBbc2VsZiBib3VuZHNdOworICAgICAg
ICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOworICAgICAgICBfZnVsbHNj
cmVlbkludGVyZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKHNlbGYubW9kZWxWaWRl
b0xheWVyRnJhbWUpOworICAgIH0KKyAgICBbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxl
Z2F0ZV0gc2V0VHJhbnNmb3JtOkNHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHldOworICAgIAorICAg
IFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9HcmF2aXR5OihO
U1N0cmluZyAqKXZpZGVvR3Jhdml0eQoreworICAgIF92aWRlb0dyYXZpdHkgPSB2aWRlb0dyYXZp
dHk7CisgICAgCisgICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHkgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVy
VmlkZW9HcmF2aXR5UmVzaXplKCkpCisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgIGlmICh2aWRlb0dyYXZp
dHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpKQorICAgICAgICBncmF2
aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6
ZUFzcGVjdDsKKyAgICBlbHNlIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdEZpbGwoKSkKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOworICAgIGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgCisgICAgQVNTRVJUKF9mdWxs
c2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKKyAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9k
ZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoZ3Jhdml0eSk7Cit9CisKKy0gKE5TU3RyaW5nICop
dmlkZW9HcmF2aXR5Cit7CisgICAgcmV0dXJuIF92aWRlb0dyYXZpdHkuZ2V0KCk7Cit9CisKKy0g
KENHUmVjdCl2aWRlb1JlY3QKK3sKKyAgICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGgg
PD0gMCB8fCBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQgPD0gMCkKKyAgICAgICAgcmV0dXJu
IHNlbGYuYm91bmRzOworICAgIAorICAgIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBzZWxmLnZp
ZGVvRGltZW5zaW9ucy53aWR0aCAvIHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodDsKKworICAg
IGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxUb1N0cmlu
ZzpzZWxmLnZpZGVvR3Jhdml0eV0pCisgICAgICAgIHJldHVybiBsYXJnZXN0UmVjdFdpdGhBc3Bl
Y3RSYXRpb0luc2lkZVJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOworICAgIGlm
IChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwoKSBpc0VxdWFsVG9TdHJp
bmc6c2VsZi52aWRlb0dyYXZpdHldKQorICAgICAgICByZXR1cm4gc21hbGxlc3RSZWN0V2l0aEFz
cGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisKKyAg
ICByZXR1cm4gc2VsZi5ib3VuZHM7Cit9CisKKysgKE5TU2V0ICopa2V5UGF0aHNGb3JWYWx1ZXNB
ZmZlY3RpbmdWaWRlb1JlY3QKK3sKKyAgICByZXR1cm4gW05TU2V0IHNldFdpdGhPYmplY3RzOkAi
dmlkZW9EaW1lbnNpb25zIiwgQCJ2aWRlb0dyYXZpdHkiLCBuaWxdOworfQorCitAZW5kCisKK0Bp
bnRlcmZhY2UgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3IDogVUlWaWV3CitA
ZW5kCisKK3N0YXRpYyBDbGFzcyBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdf
bGF5ZXJDbGFzcyhpZCwgU0VMKQoreworICAgIHJldHVybiBbV2ViQVZQbGF5ZXJMYXllciBjbGFz
c107Cit9CisKK3N0YXRpYyBDbGFzcyBnZXRXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXdDbGFzcygpCit7CisgICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0gbmlsOworICAgIHN0
YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VU
b2tlbiwgXiB7CisgICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihnZXRV
SVZpZXdDbGFzcygpLCAiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3IiwgMCk7
CisgICAgICAgIG9iamNfcmVnaXN0ZXJDbGFzc1BhaXIodGhlQ2xhc3MpOworICAgICAgICBDbGFz
cyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFDbGFzcygiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxl
Y3RvcihsYXllckNsYXNzKSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXdfbGF5ZXJDbGFzcywgIkBAOiIpOworICAgIH0pOworICAgIAorICAgIHJldHVybiB0aGVDbGFz
czsKK30KKworQGludGVyZmFjZSBXZWJBVlBsYXllckxheWVyVmlldyA6IF9fQVZQbGF5ZXJMYXll
clZpZXcKK0Bwcm9wZXJ0eSAocmV0YWluKSBVSVZpZXcqIHZpZGVvVmlldzsKK0BlbmQKKworc3Rh
dGljIENsYXNzIFdlYkFWUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKK3sKKyAg
ICByZXR1cm4gW1dlYkFWUGxheWVyTGF5ZXIgY2xhc3NdOworfQorCitzdGF0aWMgQVZQbGF5ZXJD
b250cm9sbGVyICpXZWJBVlBsYXllckxheWVyVmlld19wbGF5ZXJDb250cm9sbGVyKGlkIGFTZWxm
LCBTRUwpCit7CisgICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsK
KyAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5
ZXIgKilbcGxheWVyTGF5ZXIgcGxheWVyTGF5ZXJdOworICAgIHJldHVybiBbd2ViQVZQbGF5ZXJM
YXllciBwbGF5ZXJDb250cm9sbGVyXTsKK30KKworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXll
clZpZXdfc2V0UGxheWVyQ29udHJvbGxlcihpZCBhU2VsZiwgU0VMLCBBVlBsYXllckNvbnRyb2xs
ZXIgKnBsYXllckNvbnRyb2xsZXIpCit7CisgICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVy
TGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXll
ciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Cisg
ICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0UGxheWVyQ29udHJvbGxlcjogcGxheWVyQ29udHJvbGxl
cl07Cit9CisKK3N0YXRpYyBVSVZpZXcgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldyhp
ZCBhU2VsZiwgU0VMKQoreworICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyID0g
YVNlbGY7CisgICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBs
YXllckxheWVyICopW3BsYXllckxheWVyIHBsYXllckxheWVyXTsKKyAgICBDQUxheWVyKiB2aWRl
b0xheWVyID0gW3dlYkFWUGxheWVyTGF5ZXIgdmlkZW9TdWJsYXllcl07CisgICAgaWYgKCF2aWRl
b0xheWVyIHx8ICF2aWRlb0xheWVyLmRlbGVnYXRlKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChbW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdIGlzS2luZE9mQ2xhc3M6Z2V0VUlWaWV3Q2xh
c3MoKV0pOworICAgIHJldHVybiAoVUlWaWV3ICopW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdOworfQor
CitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zZXRWaWRlb1ZpZXcoaWQgYVNlbGYs
IFNFTCwgVUlWaWV3ICp2aWRlb1ZpZXcpCit7CisgICAgX19BVlBsYXllckxheWVyVmlldyAqcGxh
eWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJM
YXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07
CisgICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0VmlkZW9TdWJsYXllcjpbdmlkZW9WaWV3IGxheWVy
XV07Cit9CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0YXJ0Um91dGluZ1Zp
ZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCit7Cisg
ICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFdl
YkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXddOworCisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5
ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwor
ICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIg
KilbcGlwVmlldyBsYXllcl07CisgICAgW3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpnZXRB
VkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCldOworICAgIFtwaXBQbGF5ZXJMYXllciBz
ZXRWaWRlb1N1YmxheWVyOnBsYXllckxheWVyLnZpZGVvU3VibGF5ZXJdOworICAgIFtwaXBQbGF5
ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNpb25zXTsK
KyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OnBsYXllckxheWVyLnZpZGVvR3Jh
dml0eV07CisgICAgW3BpcFBsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBsYXll
ckxheWVyLm1vZGVsVmlkZW9MYXllckZyYW1lXTsKKyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0UGxh
eWVyQ29udHJvbGxlcjpwbGF5ZXJMYXllci5wbGF5ZXJDb250cm9sbGVyXTsKKyAgICBbcGlwUGxh
eWVyTGF5ZXIgc2V0RnVsbHNjcmVlbkludGVyZmFjZTpwbGF5ZXJMYXllci5mdWxsc2NyZWVuSW50
ZXJmYWNlXTsKKyAgICBbcGlwVmlldyBhZGRTdWJ2aWV3OnBsYXllckxheWVyVmlldy52aWRlb1Zp
ZXddOworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1Zp
ZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCit7Cisg
ICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIGlm
IChVSVZpZXcgKnZpZGVvVmlldyA9IHBsYXllckxheWVyVmlldy52aWRlb1ZpZXcpCisgICAgICAg
IFtwbGF5ZXJMYXllclZpZXcgYWRkU3Vidmlldzp2aWRlb1ZpZXddOworICAgIFdlYkFWUGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXddOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFW
UGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBXZWJBVlBs
YXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcg
bGF5ZXJdOworICAgIFtwbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpwaXBQbGF5
ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJGcmFtZV07Cit9CisKK3N0YXRpYyBXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBsYXllckxh
eWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gW3BsYXllckxheWVyVmlldyB2YWx1ZUZvcktl
eTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07CisgICAgaWYgKCFwaXBWaWV3
KSB7CisgICAgICAgIHBpcFZpZXcgPSBbW2dldFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxh
eWVyVmlld0NsYXNzKCkgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVyb107CisgICAgICAg
IFtwbGF5ZXJMYXllclZpZXcgc2V0VmFsdWU6cGlwVmlldyBmb3JLZXk6QCJfcGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyJdOworICAgIH0KKyAgICByZXR1cm4gcGlwVmlldzsKK30KKwor
c3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYyhpZCBhU2VsZiwgU0VMKQor
eworICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAg
ICBSZXRhaW5QdHI8V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3PiBwaXBWaWV3
ID0gYWRvcHROUyhbcGxheWVyTGF5ZXJWaWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXciXSk7CisgICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1ZTpuaWwg
Zm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKKyAgICBvYmpjX3N1
cGVyIHN1cGVyQ2xhc3MgeyBwbGF5ZXJMYXllclZpZXcsIGdldF9fQVZQbGF5ZXJMYXllclZpZXdD
bGFzcygpIH07CisgICAgYXV0byBzdXBlcl9kZWFsbG9jID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
KCopKG9iamNfc3VwZXIqLCBTRUwpPihvYmpjX21zZ1NlbmRTdXBlcik7CisgICAgc3VwZXJfZGVh
bGxvYygmc3VwZXJDbGFzcywgQHNlbGVjdG9yKGRlYWxsb2MpKTsKK30KKworI3ByYWdtYSBtYXJr
IC0gTWV0aG9kcworCitzdGF0aWMgQ2xhc3MgZ2V0V2ViQVZQbGF5ZXJMYXllclZpZXdDbGFzcygp
Cit7CisgICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0gbmlsOworICAgIHN0YXRpYyBkaXNwYXRj
aF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7Cisg
ICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihnZXRfX0FWUGxheWVyTGF5
ZXJWaWV3Q2xhc3MoKSwgIldlYkFWUGxheWVyTGF5ZXJWaWV3IiwgMCk7CisgICAgICAgIGNsYXNz
X2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKGRlYWxsb2MpLCAoSU1QKVdlYkFWUGxheWVy
TGF5ZXJWaWV3X2RlYWxsb2MsICJ2QDoiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNs
YXNzLCBAc2VsZWN0b3Ioc2V0UGxheWVyQ29udHJvbGxlcjopLCAoSU1QKVdlYkFWUGxheWVyTGF5
ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIsICJ2QDpAIik7CisgICAgICAgIGNsYXNzX2FkZE1l
dGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBsYXllckNvbnRyb2xsZXIpLCAoSU1QKVdlYkFWUGxh
eWVyTGF5ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIsICJAQDoiKTsKKyAgICAgICAgY2xhc3NfYWRk
TWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0VmlkZW9WaWV3OiksIChJTVApV2ViQVZQbGF5
ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3LCAidkA6QCIpOworICAgICAgICBjbGFzc19hZGRNZXRo
b2QodGhlQ2xhc3MsIEBzZWxlY3Rvcih2aWRlb1ZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJW
aWV3X3ZpZGVvVmlldywgIkBAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3Ms
IEBzZWxlY3RvcihzdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVy
VmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcsICJ2QDoiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0
aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RvcFJvdXRpbmdW
aWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgInZAOiIpOworICAgICAgICBj
bGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihwaWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19waWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3LCAiQEA6Iik7CisgICAgICAgIAorICAgICAgICBjbGFzc19hZGRJdmFyKHRo
ZUNsYXNzLCAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciLCBzaXplb2YoV2ViQVZQ
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopLCBsb2cyKHNpemVvZihXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKikpLCAiQCIpOworICAgICAgICAKKyAgICAgICAg
b2JqY19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7CisgICAgICAgIENsYXNzIG1ldGFDbGFz
cyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBsYXllckxheWVyVmlldyIpOworICAgICAgICBj
bGFzc19hZGRNZXRob2QobWV0YUNsYXNzLCBAc2VsZWN0b3IobGF5ZXJDbGFzcyksIChJTVApV2Vi
QVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOworICAgIH0pOworICAgIHJldHVy
biB0aGVDbGFzczsKK30KKworUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCit7CisgICAgUmVmPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KHBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSkpOworICAgIFtpbnRlcmZhY2UtPm1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRG
dWxsc2NyZWVuSW50ZXJmYWNlOmludGVyZmFjZS5wdHIoKV07CisgICAgcmV0dXJuIGludGVyZmFj
ZTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShw
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgLCBtX3BsYXllclZpZXdDb250cm9sbGVyRGVs
ZWdhdGUoYWRvcHROUyhbW1dlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pKQorICAgICwgbV93YXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQpCit7Cit9
CisKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKQoreworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29u
dHJvbGxlciA9IHRoaXMtPnBsYXllckNvbnRyb2xsZXIoKTsKKyAgICBpZiAocGxheWVyQ29udHJv
bGxlciAmJiBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUpCisgICAgICAg
IGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGZhbHNlLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
VGFyZ2V0VHlwZU5vbmUsICIiKTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAg
ICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKK30KKwor
V2ViQVZQbGF5ZXJDb250cm9sbGVyICpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
cGxheWVyQ29udHJvbGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLT5wbGF5ZXJDb250cm9sbGVyKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKiBtb2RlbCkKK3sKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkK
KyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKwor
ICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKKworICAgIGlmIChtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQo
KnRoaXMpOworCisgICAgaGFzVmlkZW9DaGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPyBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5oYXNWaWRlbygpIDogZmFsc2UpOworICAgIHZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPnZpZGVvRGltZW5zaW9ucygpIDogRmxvYXRTaXplKCkpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCit7Cisg
ICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlk
ZW8pCit7CisgICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlk
ZW9dOworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0SGFzVmlkZW86aGFzVmlkZW9dOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIFdlYkFWUGxh
eWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXll
clZpZXcgcGxheWVyTGF5ZXJdOworCisgICAgW3BsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9u
czp2aWRlb0RpbWVuc2lvbnNdOworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0Q29udGVudERp
bWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0TmVl
ZHNMYXlvdXRdOworCisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpw
aXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVttX3BsYXll
ckxheWVyVmlldyBwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKKyAgICBXZWJBVlBs
YXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcg
bGF5ZXJdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5
ZXIudmlkZW9EaW1lbnNpb25zXTsKKyAgICBbcGlwVmlldyBzZXROZWVkc0xheW91dF07Cit9CisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQoreworICAgIFttX3BsYXllckxheWVyVmll
dyBzZXRIaWRkZW46ZW5hYmxlZF07Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3sKKyAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJl
Y29tZUFjdGl2ZSglcCkiLCB0aGlzKTsKKyAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3Jl
ZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsICYmIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPmlzVmlzaWJsZSgpKSB7CisgICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIElmIHdlIGFyZSBib3RoIGluIFBpUCBhbmQgaW4gRnVsbHNjcmVlbiAoaS5l
LiwgdmlhIGF1dG8tUGlQKSwgYW5kIHdlIGRpZCBub3Qgc3RvcCBmdWxsc2NyZWVuIHVwb24gcmV0
dXJuaW5nLCBpdCBtdXN0IGJlCisgICAgLy8gYmVjYXVzZSB0aGUgb3JpZ2luYXRpbmcgdmlldyBp
cyBub3QgdmlzaWJsZSwgc28gaGlkZSB0aGUgZnVsbHNjcmVlbiB3aW5kb3cuCisgICAgaWYgKGlz
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCB8
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1
cmUpKSB7CisgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhp
dEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywg
dGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVu
OllFU107CisgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlk
ZGVuOllFU107CisgICAgICAgIH1dOworICAgIH0KK30KKworQGludGVyZmFjZSBVSVdpbmRvdyAo
KQorLSAoQk9PTClfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzOworQGVuZAorCitAaW50ZXJmYWNl
IFVJVmlld0NvbnRyb2xsZXIgKCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHNldHRl
cj1fc2V0SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOikgQk9PTCBfaWdub3JlQXBwU3Vw
cG9ydGVkT3JpZW50YXRpb25zOworQGVuZAorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiB2aWRlb1ZpZXcsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJ
blBpY3R1cmVQbGF5YmFjaykKK3sKKyAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oJXApIiwgdGhp
cyk7CisKKyAgICBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayA9IGFsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjazsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIGJvb2wgaXNJblBpY3R1
cmVJblBpY3R1cmVNb2RlID0gaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICBtX21vZGUgPSBtb2RlOworICAgIG1f
cGFyZW50VmlldyA9IHBhcmVudFZpZXc7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBwYXJlbnRWaWV3
LndpbmRvdzsKKworICAgIGlmICghW1twYXJlbnRWaWV3IHdpbmRvd10gX2lzSG9zdGVkSW5Bbm90
aGVyUHJvY2Vzc10pIHsKKyAgICAgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgICAgIG1fd2lu
ZG93ID0gYWRvcHROUyhbYWxsb2NVSVdpbmRvd0luc3RhbmNlKCkgaW5pdFdpdGhGcmFtZTpbW2dl
dFVJU2NyZWVuQ2xhc3MoKSBtYWluU2NyZWVuXSBib3VuZHNdXSk7CisgICAgICAgIFttX3dpbmRv
dyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgICAgICBpZiAoIW1fdmll
d0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3ZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxs
b2NVSVZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0XSk7CisgICAgICAgIFtbbV92aWV3Q29u
dHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbbV93aW5kb3cgYm91bmRzXV07CisgICAgICAgIFttX3Zp
ZXdDb250cm9sbGVyIF9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6WUVTXTsKKyAg
ICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjptX3ZpZXdDb250cm9sbGVyLmdl
dCgpXTsKKyAgICAgICAgW21fd2luZG93IHNldFdpbmRvd0xldmVsOmdldFVJVGV4dEVmZmVjdHNC
ZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwoKSArIDFdOworICAgICAgICBbbV93aW5kb3cgbWFr
ZUtleUFuZFZpc2libGVdOworICAgIH0KKworICAgIGlmICghbV9wbGF5ZXJMYXllclZpZXcpCisg
ICAgICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gYWRvcHROUyhbW2dldFdlYkFWUGxheWVyTGF5ZXJW
aWV3Q2xhc3MoKSBhbGxvY10gaW5pdF0pOworICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRk
ZW46W3BsYXllckNvbnRyb2xsZXIoKSBpc0V4dGVybmFsUGxheWJhY2tBY3RpdmVdXTsKKyAgICBb
bV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKwor
ICAgIGlmICghaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlKSB7CisgICAgICAgIFttX3BsYXllckxh
eWVyVmlldyBzZXRWaWRlb1ZpZXc6JnZpZGVvVmlld107CisgICAgICAgIFttX3BsYXllckxheWVy
VmlldyBhZGRTdWJ2aWV3OiZ2aWRlb1ZpZXddOworICAgIH0KKworICAgIFdlYkFWUGxheWVyTGF5
ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcg
cGxheWVyTGF5ZXJdOworCisgICAgW3BsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgaW5pdGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJlY3QuaGVpZ2h0
KCkpXTsKKyAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOltwbGF5ZXJDb250cm9s
bGVyKCkgY29udGVudERpbWVuc2lvbnNdXTsKKyAgICBwbGF5ZXJMYXllci5mdWxsc2NyZWVuSW50
ZXJmYWNlID0gdGhpczsKKworICAgIGlmICghbV9wbGF5ZXJWaWV3Q29udHJvbGxlcikKKyAgICAg
ICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhQbGF5ZXJMYXllclZpZXc6bV9wbGF5ZXJMYXllclZp
ZXcuZ2V0KCldKTsKKworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJh
Y2tDb250cm9sczpOT107CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29u
dHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcigpXTsKKyAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTptX3BsYXllclZpZXdDb250cm9sbGVy
RGVsZWdhdGUuZ2V0KCldOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldEFsbG93c1Bp
Y3R1cmVJblBpY3R1cmVQbGF5YmFjazptX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFja107
CisKKyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldFBpY3R1cmVJblBpY3R1cmVQb3NzaWJsZTpt
X2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFja107CisKKyAgICBpZiAobV92aWV3Q29udHJv
bGxlcikgeworICAgICAgICBbbV92aWV3Q29udHJvbGxlciBhZGRDaGlsZFZpZXdDb250cm9sbGVy
Om1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCldOworICAgICAgICBbW21fdmlld0NvbnRyb2xs
ZXIgdmlld10gYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07CisgICAg
fSBlbHNlCisgICAgICAgIFtwYXJlbnRWaWV3IGFkZFN1YnZpZXc6W21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld11dOworCisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUg
PSBbcGFyZW50VmlldyBjb252ZXJ0UmVjdDppbml0aWFsUmVjdCB0b1ZpZXc6W21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKKworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgIFtbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRv
cmVzaXppbmdGbGV4aWJsZUJvdHRvbU1hcmdpbiB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxl
UmlnaHRNYXJnaW4pXTsKKworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRO
ZWVkc0xheW91dF07CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElm
TmVlZGVkXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMs
IHRoaXNdIHsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAg
ICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOwor
ICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
ckZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIG1fZXhp
dENvbXBsZXRlZCA9IGZhbHNlOworICAgIG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOworICAgIG1f
ZW50ZXJSZXF1ZXN0ZWQgPSB0cnVlOworCisgICAgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQorICAgICAgICBl
bnRlclBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICBlbHNlIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCisgICAgICAgIGVudGVy
RnVsbHNjcmVlblN0YW5kYXJkKCk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQ
aWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Cisg
ICAgCisgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZVBv
c3NpYmxlXSkKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RhcnRQaWN0dXJlSW5Q
aWN0dXJlXTsKKyAgICBlbHNlCisgICAgICAgIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJl
KCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVs
bHNjcmVlblN0YW5kYXJkKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCglcCkiLCB0aGlzKTsK
KyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisKKyAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5Q
aWN0dXJlQWN0aXZlXSkgeworICAgICAgICAvLyBOT1RFOiBUaGUgZnVsbHNjcmVlbiBtb2RlIHdp
bGwgYmUgcmVzdG9yZWQgaW4gcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBs
ZXRpb25IYW5kbGVyKCkuCisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0
b3BwaW5nUGlQID0gdHJ1ZTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBp
Y3R1cmVJblBpY3R1cmVdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5k
bGVyOlt0aGlzLCBwcm90ZWN0ZWRUaGlzXSAoQk9PTCBzdWNjZWVkZWQsIE5TRXJyb3IqKSB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShzdWNjZWVkZWQpOworICAgICAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFy
ZCAtIGxhbWJkYSglcCkgLSBzdWNjZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0cmluZyhzdWNjZWVk
ZWQpKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0Nv
bnRyb2xzOllFU107CisKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQor
ICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVl
bigpOworICAgIH1dOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpleGl0RnVsbHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCit7Cisg
ICAgbV93YXRjaGRvZ1RpbWVyLnN0b3AoKTsKKworICAgIG1fZXhpdFJlcXVlc3RlZCA9IHRydWU7
CisgICAgaWYgKG1fZXhpdENvbXBsZXRlZCkgeworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlk
RXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNj
cmVlbiglcCkiLCB0aGlzKTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1Bs
YXliYWNrQ29udHJvbHM6Tk9dOworICAgIAorICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJlY3QgdG9WaWV3Oltt
X3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisKKyAgICBXZWJBVlBsYXll
ckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJW
aWV3IHBsYXllckxheWVyXTsKKyAgICBpZiAoW3BsYXllckxheWVyIHZpZGVvR3Jhdml0eV0gIT0g
Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpKQorICAgICAgICBbcGxheWVyTGF5
ZXIgc2V0VmlkZW9HcmF2aXR5OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKV07
CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKKwor
ICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSkpIHsKKyAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5X
aGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKKyAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107
CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsK
KyAgICB9IGVsc2UgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7CisgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxl
cjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRh
cmQpOworICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAgICAgIH1d
OworICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVN0YW5kYXJkKSkgeworICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVy
Oltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgIG1f
ZXhpdENvbXBsZXRlZCA9IHRydWU7CisKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2lu
XTsKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Cisg
ICAgICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlD
b2xvcigpXTsKKyAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRC
YWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgICAgICAgICAgW0NBVHJhbnNhY3Rp
b24gY29tbWl0XTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdKCkgeworICAgICAgICAgICAgICAgIGlm
IChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICAgICAgbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfV07CisgICAgfTsKK30KKworQGludGVyZmFjZSBVSUFwcGxpY2F0aW9uICgp
CistICh2b2lkKV9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjooVUlJbnRlcmZhY2VPcmllbnRhdGlv
bilvOworQGVuZAorCitAaW50ZXJmYWNlIFVJV2luZG93ICgpCistIChVSUludGVyZmFjZU9yaWVu
dGF0aW9uKWludGVyZmFjZU9yaWVudGF0aW9uOworQGVuZAorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3Jl
ZW4oJXApIiwgdGhpcyk7CisgICAgaWYgKG1fd2luZG93KSB7CisgICAgICAgIFttX3dpbmRvdyBz
ZXRIaWRkZW46WUVTXTsKKyAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpu
aWxdOworICAgICAgICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAgICAgICBbW2dldFVJQXBw
bGljYXRpb25DbGFzcygpIHNoYXJlZEFwcGxpY2F0aW9uXSBfc2V0U3RhdHVzQmFyT3JpZW50YXRp
b246W21fcGFyZW50V2luZG93IGludGVyZmFjZU9yaWVudGF0aW9uXV07CisgICAgfQorICAgIAor
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjpuaWxdOworICAgIAorICAgIGlm
IChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpKQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVy
ZUluUGljdHVyZV07CisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltdIChCT09MLCBO
U0Vycm9yICopIHsgfV07CisgICAgCisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQorICAgICAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciByZW1vdmVGcm9tUGFyZW50Vmlld0NvbnRyb2xsZXJd
OworICAgIAorICAgIFttX3BsYXllckxheWVyVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAg
ICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBt
X3BsYXllckxheWVyVmlldyA9IG5pbDsKKyAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gbmls
OworICAgIG1fd2luZG93ID0gbmlsOworICAgIG1fcGFyZW50VmlldyA9IG5pbDsKKyAgICBtX3Bh
cmVudFdpbmRvdyA9IG5pbDsKKyAgICAKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNj
cmVlbigpOworCisgICAgbV9lbnRlclJlcXVlc3RlZCA9IGZhbHNlOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsID0gbmlsOworICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0g
bmlsOworICAgIAorICAgIGNsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQor
eworICAgIGlmICghbV9lbnRlclJlcXVlc3RlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBp
Y3R1cmVJblBpY3R1cmUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsK
KyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107CisKKyAg
ICBpZiAod2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
ICYmICFtX2V4aXRSZXF1ZXN0ZWQpIHsKKyAgICAgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KS0+cGF1c2UoKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxz
Y3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUp
OworICAgIH0KK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJl
cGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5l
UmVjdCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApIC0gdmlzaWJsZSglcykiLCB0aGlz
LCBib29sU3RyaW5nKHZpc2libGUpKTsKKyAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFj
aykgeworICAgICAgICAKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJh
bWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmlubGluZVJlY3QgdG9WaWV3OlttX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisKKyAgICAgICAgV1RGOjpGdW5jdGlv
bjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURk1vdmUobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFj
ayk7CisgICAgICAgIGNhbGxiYWNrKHZpc2libGUpOworICAgIH0KK30KKworYm9vbCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1
cmVJblBpY3R1cmUoKSBjb25zdAoreworICAgIHJldHVybiBbcGxheWVyQ29udHJvbGxlcigpIGlz
UGxheWluZ10gJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVN0YW5kYXJkICYmIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOworfQorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQoreworICAgIG1fcHJl
cGFyZVRvSW5saW5lQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKKyAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit7CisgICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0
YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBzZXRNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBp
Y3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNr
Z3JvdW5kXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29u
dHJvbHM6WUVTXTsKKworICAgIGlmIChtX21vZGUgJiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgeworICAgICAgICBpZiAoIVttX3BsYXllclZpZXdD
b250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3Vu
ZF0pIHsKKyAgICAgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0
ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgICAgICBbbV93aW5k
b3cgc2V0SGlkZGVuOllFU107CisgICAgICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOworICAgICAgICAgICAgfV07CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgIFtb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKKyAgICB9CisKKyAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKQor
eworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworCisgICAgaWYg
KGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRh
cmQpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOworCisg
ICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisKKyAgICBpZiAobV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5v
bmUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3Rv
cFBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hl
blN0b3BwaW5nUGlQID0gZmFsc2U7CisgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRl
ckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOworCisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVw
KSIsIHRoaXMpOworICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJl
SW5QaWN0dXJlU3RvcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fd2luZG93IHNldEhpZGRl
bjpOT107CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107
CisKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJ
blBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVl
bkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKSB7CisgICAgICAgIC8vIEFTU1VNUFRJT046IHdlIGFy
ZSBleGl0aW5nIHBpcCBiZWNhdXNlIHdlIGFyZSBlbnRlcmluZyBmdWxsc2NyZWVuCisgICAgICAg
IGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0
dXJlSW5QaWN0dXJlKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQ
bGF5YmFja0NvbnRyb2xzOllFU107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2V4
aXRDb21wbGV0ZWQgPSB0cnVlOworCisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91
bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisKKyAgICBjbGVhck1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSk7CisgICAgCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBt
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBp
Y3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlciko
Qk9PTCByZXN0b3JlZCkpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBs
ZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMpOworICAgIGlmIChtX3Nob3VsZFJldHVyblRvRnVsbHNj
cmVlbldoZW5TdG9wcGluZ1BpUCB8fCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50
ZXJpbmdGb3JlZ3JvdW5kKSB7CisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hl
blN0b3BwaW5nUGlQID0gZmFsc2U7CisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVu
QWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxzZTsKKyAgICAgICAgbV9yZXN0b3JpbmdGdWxs
c2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgPSB0cnVlOworCisgICAgICAgIFttX3dpbmRv
dyBzZXRIaWRkZW46Tk9dOworICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10g
c2V0SGlkZGVuOk5PXTsKKworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1
bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIHN1Y2Nlc3MsIE5T
RXJyb3IqKSB7CisgICAgICAgICAgICBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5Q
aWN0dXJlU3RvcCA9IGZhbHNlOworICAgICAgICAgICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihzdWNjZXNzKTsKKyAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKKyAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlk
RW50ZXJGdWxsc2NyZWVuKCk7CisgICAgICAgIH1dOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIFJldGFpblB0cjxpZD4gc3Ryb25nQ29tcGxldGlvbkhhbmRsZXIgPSBh
ZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CisgICAgZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKFtwcm90ZWN0ZWRUaGlzLCBzdHJvbmdDb21wbGV0aW9uSGFuZGxlcl0oYm9vbCBy
ZXN0b3JlZCkgIHsKKyAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRp
b25IYW5kbGVyIGxhbWJkYSglcCkgLSByZXN0b3JlZCglcykiLCBwcm90ZWN0ZWRUaGlzLmdldCgp
LCBib29sU3RyaW5nKHJlc3RvcmVkKSk7CisgICAgICAgIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxl
cikoQk9PTCByZXN0b3JlZCkgPSBzdHJvbmdDb21wbGV0aW9uSGFuZGxlci5nZXQoKTsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIocmVzdG9yZWQpOworICAgIH0pOworfQorCitib29sIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFz
b24oV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29u
IHJlYXNvbikKK3sKKyAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGlj
dHVyZUluUGljdHVyZVN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9s
bGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF0pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxz
Y3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgJiYgKHJl
YXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZCB8fCByZWFzb24g
PT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZCkp
CisgICAgICAgIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAgCisgICAg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUsIHJlYXNvbiA9PSBFeGl0RnVsbFNj
cmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZCk7CisKKyAgICBpZiAoIW1fd2F0Y2hkb2dUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90KGRlZmF1
bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitOT19S
RVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCglcCkgLSBubyBleGl0
IGZ1bGxzY3JlZW4gcmVzcG9uc2UgaW4gJWdzOyBmb3JjaW5nIGZ1bGxzY3JlZW4gaGlkZGVuLiIs
IHRoaXMsIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwudmFsdWUoKSk7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgIFtbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7CisgICAgaWYg
KG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUgPSBuZXdN
b2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7Cisg
ICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUg
PSBuZXdNb2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwor
I2VuZGlmIC8vIEhBVkUoQVZLSVQpCisKK2Jvb2wgV2ViQ29yZTo6c3VwcG9ydHNQaWN0dXJlSW5Q
aWN0dXJlKCkKK3sKKyNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpCisgICAgcmV0dXJu
IFtnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyQ2xhc3MoKSBpc1BpY3R1cmVJblBpY3R1
cmVTdXBwb3J0ZWRdOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tCmluZGV4IDZiZmM1Y2ExYWEyNmIyM2U1ZThhNDdh
MmY2OGMyMjg3ZjMxOGFhMDEuLjg1MDMwNmFjMTVlZDBhMThiYzhmMTdiNGYyYjdhNjRjMTBkZWQz
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNv
bnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVy
Q29udHJvbGxlci5tbQpAQCAtMzEsOSArMzEsOSBAQAogCiAjaW1wb3J0ICJBVktpdFNQSS5oIgog
I2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0ICJUaW1lUmFu
Z2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2lt
cG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9B
VlRpbWUuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWIzN2Q0ZTU2MzE4OTEwMTBhYThhN2JhNWRiOTY5ODE2MmMyN2NkOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykKLQot
I2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51
bXMuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZS5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW5jbHVk
ZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxvYmpjL29iamMuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLU9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9sbGVyOwotT0JKQ19DTEFTUyBB
VlBsYXllclZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBVSVZpZXdDb250cm9sbGVyOwotT0JK
Q19DTEFTUyBVSVdpbmRvdzsKLU9CSkNfQ0xBU1MgVUlWaWV3OwotCi1uYW1lc3BhY2UgV1RGIHsK
LWNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsK
LWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9u
Q2hhbmdlT2JzZXJ2ZXI7Ci0KLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0Ci0gICAgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Ci0gICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1Ymxp
YyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiB7Ci0KLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBjcmVh
dGUoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQobW9kZWwpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKTsK
LSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBj
b25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9Ci0KLSAgICAvLyBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFT
dGF0ZSgpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIG92ZXJyaWRl
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5n
ZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2
ZVVwZGF0ZUludGVydmFsKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERl
dmljZU5hbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIFdlYkFWUGxheWVyQ29udHJvbGxl
ciAqcGxheWVyQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyQ29udHJvbGxlci5n
ZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKLQotICAgIFJldGFp
blB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29udHJvbGxlcjsKLSAgICBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51bGxwdHIgfTsK
LX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkMTZkYjFlZjRkZGZhM2VmYjA1M2VlMGY4NTBiOTU5
YmZlMmIzNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotCi0jaWYgUExBVEZP
Uk0oSU9TKQotI2lmIEhBVkUoQVZLSVQpCi0KLSNpbXBvcnQgIkFWS2l0U1BJLmgiCi0jaW1wb3J0
ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgotI2ltcG9ydCAi
VGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgiCi0jaW1wb3J0
ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGlt
ZS5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbXBvcnQgIkNvcmVNZWRp
YVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCi1TT0ZU
X0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OldlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKLSAg
ICA6IG1fcGxheWVyQ29udHJvbGxlcihhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFs
bG9jXSBpbml0XSkpCi0gICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKLXsKLSAg
ICBtb2RlbC5hZGRDbGllbnQoKnRoaXMpOwotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlOnRoaXNdOwotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0
RGVsZWdhdGU6Jm1vZGVsXTsKLQotICAgIGR1cmF0aW9uQ2hhbmdlZChtb2RlbC5kdXJhdGlvbigp
KTsKLSAgICBjdXJyZW50VGltZUNoYW5nZWQobW9kZWwuY3VycmVudFRpbWUoKSwgW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICBidWZmZXJlZFRpbWVDaGFu
Z2VkKG1vZGVsLmJ1ZmZlcmVkVGltZSgpKTsKLSAgICByYXRlQ2hhbmdlZChtb2RlbC5pc1BsYXlp
bmcoKSwgbW9kZWwucGxheWJhY2tSYXRlKCkpOwotICAgIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZCht
b2RlbC5zZWVrYWJsZVJhbmdlcygpLCBtb2RlbC5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZp
ZWRUaW1lKCksIG1vZGVsLmxpdmVVcGRhdGVJbnRlcnZhbCgpKTsKLSAgICBjYW5QbGF5RmFzdFJl
dmVyc2VDaGFuZ2VkKG1vZGVsLmNhblBsYXlGYXN0UmV2ZXJzZSgpKTsKLSAgICBhdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobW9kZWwuYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KSwgbW9kZWwuYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQobW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygp
LCBtb2RlbC5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpOwotICAgIGV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKG1vZGVsLmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCksIG1vZGVsLmV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZp
Y2VOYW1lKCkpOwotICAgIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChtb2Rl
bC53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQ6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpCi17
Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6bnVs
bHB0cl07Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRFeHRlcm5hbFBsYXliYWNrQWN0aXZl
OmZhbHNlXTsKLQotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6cmVzZXRNZWRpYVN0YXRlKCkKLXsKLSAgICBbbV9wbGF5ZXJDb250
cm9sbGVyIHJlc2V0TWVkaWFTdGF0ZV07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgV2Vi
QVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVy
LmdldCgpOwotCi0gICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlv
bjsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzID0g
ZHVyYXRpb247Ci0KLSAgICAvLyBGSVhNRTogd2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24g
dGhhdCBwbGF5YmFjayBpcyByZWFkeS4KLSAgICBwbGF5ZXJDb250cm9sbGVyLmNhblBsYXkgPSBZ
RVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5jYW5QYXVzZSA9IFlFUzsKLSAgICBwbGF5ZXJDb250
cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIuaGFz
RW5hYmxlZEF1ZGlvID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIuY2FuU2VlayA9IFlFUzsK
LSAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1Jl
YWR5VG9QbGF5OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojpj
dXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkK
LXsKLSAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW21fcGxheWVyQ29udHJv
bGxlciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7Ci0gICAgQVZWYWx1ZVRpbWluZyAqdGltaW5n
ID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1
cnJlbnRUaW1lCi0gICAgICAgIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTow
XTsKLQotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0VGltaW5nOnRpbWluZ107Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQo
ZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXll
ckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAgZG91YmxlIGR1cmF0
aW9uID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb247Ci0gICAgZG91YmxlIG5vcm1h
bGl6ZWRCdWZmZXJlZFRpbWU7Ci0gICAgaWYgKCFkdXJhdGlvbikKLSAgICAgICAgbm9ybWFsaXpl
ZEJ1ZmZlcmVkVGltZSA9IDA7Ci0gICAgZWxzZQotICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRU
aW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247Ci0gICAgcGxheWVyQ29udHJvbGxlci5sb2Fk
ZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVkQnVmZmVyZWRUaW1lKV07Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRp
bWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2
ZVVwZGF0ZUludGVydmFsKQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gc2Vla2Fi
bGVSYW5nZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKLSAg
ICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJhbmdlcy5zdGFydChpKS5yZWxlYXNlUmV0dXJuVmFs
dWUoKTsKLSAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMuZW5kKGkpLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpOwotCi0gICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01UaW1lUmFuZ2VNYWtl
KENNVGltZU1ha2VXaXRoU2Vjb25kcyhzdGFydCwgMTAwMCksIENNVGltZU1ha2VXaXRoU2Vjb25k
cyhlbmQtc3RhcnQsIDEwMDApKTsKLSAgICAgICAgW3NlZWthYmxlUmFuZ2VzIGFkZE9iamVjdDpb
TlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOwotICAgIH0KLQotICAgIFttX3Bs
YXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnNlZWthYmxlUmFuZ2VzLmdldCgp
XTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2Rp
ZmllZFRpbWU6IGxhc3RNb2RpZmllZFRpbWVdOwotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0
TGl2ZVVwZGF0ZUludGVydmFsOmxpdmVVcGRhdGVJbnRlcnZhbF07Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9v
bCBjYW5QbGF5RmFzdFJldmVyc2UpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDYW5T
Y2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBvcHRpb24gOiBvcHRpb25z
KSB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uPiB3ZWJPcHRp
b24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxvY10gaW5pdF0pOwot
ICAgICAgICBbd2ViT3B0aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9wdGlvbi5kaXNwbGF5
TmFtZV07Ci0gICAgICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24uZ2V0KCldOwot
ICAgIH0KLSAgICByZXR1cm4gd2ViT3B0aW9uczsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVk
aWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0
QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07Ci0gICAgaWYgKHNl
bGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCi0gICAgICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2Jq
ZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKLSAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2Vi
T3B0aW9ucy5nZXQoKV07Ci0gICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3Vu
dF0pCi0gICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUlu
dGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUs
IGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBBVlBsYXllckNvbnRy
b2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZSBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVy
Q29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlTm9uZTsKLSAgICBpZiAodGFyZ2V0VHlwZSA9
PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCi0gICAgICAgIGV4
dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5
cGVBaXJQbGF5OwotICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWw6OlRhcmdldFR5cGVUVk91dCkKLSAgICAgICAgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBB
VlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0OwotCi0gICAgV2ViQVZQ
bGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdl
dCgpOwotICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VM
b2NhbGl6ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKLSAgICBwbGF5ZXJDb250cm9sbGVy
LmV4dGVybmFsUGxheWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7Ci0gICAgcGxheWVy
Q29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRBbGxvd3NFeHRlcm5hbFBsYXliYWNrOiFkaXNhYmxlZF07Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQotewotICAg
IFttX3BsYXllckNvbnRyb2xsZXIgc2V0TXV0ZWQ6bXV0ZWRdOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAoIW1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0RGVsZWdhdGU6bnVsbHB0cl07Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+
cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0
cjsKLX0KLQotfQotCi0jZW5kaWYgLy8gSEFWRShBVktJVCkKLSNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQppbmRleCBlYmM5YTY3NjY0MWM5Nzlh
Yjc4M2EwZGUxY2Q1MTBlNGVmOTgzZDE2Li4xZGVkYmU4OGVkNTY4NjAzNjFkNGNiZDc2ODUxMDdl
MmQ0MGVlMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KQEAgLTMxLDEzICsz
MSwxMyBAQAogCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9w
dGlvbi5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBv
cnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCiAjaW1wb3J0ICJRdWFydHpD
b3JlU1BJLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9y
dCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKKyNpbXBvcnQgIlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQv
VUlWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFjNzA0N2FiNzJjYjM0
ZGY2MThjNjRlMDY2MzI5MjViNmRlNzhkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIFBMQVRGT1JNKElPUykKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVy
LmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbmNs
dWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2luY2x1ZGUgPG9iamMvb2JqYy5oPgot
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgotCi1PQkpDX0NMQVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7
Ci1PQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFVJV2luZG93OwotT0JK
Q19DTEFTUyBVSVZpZXc7Ci1PQkpDX0NMQVNTIENBTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYkFWUGxh
eWVyQ29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJMYXllclZpZXc7Ci1PQkpDX0NM
QVNTIFdlYkFWUGxheWVyTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYkFWUGxheWVyVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZTsKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyOwotICAgIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQgZmluYWwKLSAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudAotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IHsKLQotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOwotICAg
IHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKLSAgICBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7
IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKTsgfQotCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmlu
YWw7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFVJVmlldyYsIGNvbnN0IEludFJlY3QmIGluaXRpYWxS
ZWN0LCBVSVZpZXcgKiwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbigpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlz
aWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCk7Ci0KLSAgICBlbnVtIGNsYXNzIEV4aXRG
dWxsU2NyZWVuUmVhc29uIHsKLSAgICAgICAgRG9uZUJ1dHRvblRhcHBlZCwKLSAgICAgICAgRnVs
bFNjcmVlbkJ1dHRvblRhcHBlZCwKLSAgICAgICAgUGluY2hHZXN0dXJlSGFuZGxlZCwKLSAgICAg
ICAgUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkLAotICAgICAgICBQaWN0dXJlSW5QaWN0
dXJlU3RhcnRlZAotICAgIH07Ci0KLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwo
KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9Ci0gICAgYm9vbCBzaG91
bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oRXhpdEZ1bGxTY3JlZW5SZWFzb24pOwotICAgIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlOyB9Ci0gICAgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2so
KSBjb25zdCB7IHJldHVybiBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsgfQotICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBp
Y3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6
OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOwotICAgIGJvb2wgd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdDsKLSAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21l
QWN0aXZlKCk7Ci0KLSAgICB2b2lkIHdpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2
b2lkIGRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgZmFpbGVkVG9TdGFydFBp
Y3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIHdpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpOwot
ICAgIHZvaWQgZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIHByZXBhcmVGb3JQ
aWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7
Ci0KLSAgICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlKTsKLSAgICB2b2lkIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpOwotICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsg
fQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKLSAgICB2b2lkIGJlZ2luU2Vzc2lvbigp
OwotICAgIHZvaWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBlbnRlckZ1bGxz
Y3JlZW5TdGFuZGFyZCgpOwotICAgIHZvaWQgd2F0Y2hkb2dUaW1lckZpcmVkKCk7Ci0gICAgV2Vi
QVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3Q7Ci0KLSAgICBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlOwotICAgIFJldGFpblB0cjxXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IG1f
cGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3
Q29udHJvbGxlcj4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlcjsKLSAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsKLSAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBu
dWxscHRyIH07Ci0KLSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIHdoZW4gZnVsbHNjcmVlbiBp
cyBwcmVzZW50ZWQgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCi0gICAgUmV0YWluUHRyPFVJV2luZG93
PiBtX3dpbmRvdzsKLSAgICBSZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gbV92aWV3Q29udHJv
bGxlcjsKLSAgICBSZXRhaW5QdHI8VUlWaWV3PiBtX3BhcmVudFZpZXc7Ci0gICAgUmV0YWluUHRy
PFVJV2luZG93PiBtX3BhcmVudFdpbmRvdzsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJMYXll
clZpZXc+IG1fcGxheWVyTGF5ZXJWaWV3OwotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVOb25lIH07Ci0gICAgV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiBtX3ByZXBh
cmVUb0lubGluZUNhbGxiYWNrOwotICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBtX3dhdGNoZG9nVGltZXI7Ci0gICAgYm9vbCBtX2FsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjayB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2V4aXRSZXF1ZXN0ZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9leGl0Q29tcGxldGVkIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fZW50ZXJSZXF1ZXN0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV93aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2Ny
ZWVuV2hlblN0b3BwaW5nUGlQIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkUmV0dXJuVG9G
dWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9y
ZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgeyBmYWxzZSB9OwotCi0g
ICAgdm9pZCBkb0VudGVyRnVsbHNjcmVlbigpOwotfTsKLQotfQotCi0jZW5kaWYKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTQ4
ZGM1NThlODM0Yjc4YmMzMjMyZjA3YTQ2MzU4ZjY0OTE5YTFkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDEw
NDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCi0KLSNpZiBIQVZFKEFWS0lU
KQotCi0jaW1wb3J0ICJBVktpdFNQSS5oIgotI2ltcG9ydCAiR2VvbWV0cnlVdGlsaXRpZXMuaCIK
LSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
IgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVy
LmgiCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0j
aW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgot
I2ltcG9ydCA8b2JqYy9tZXNzYWdlLmg+Ci0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbXBv
cnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
Ly8gU29mdC1saW5raW5nIGhlYWRlcnMgbXVzdCBiZSBpbmNsdWRlZCBsYXN0IHNpbmNlIHRoZXkg
I2RlZmluZSBmdW5jdGlvbnMsIGNvbnN0YW50cywgZXRjLgotI2ltcG9ydCAiQ29yZU1lZGlhU29m
dExpbmsuaCIKLQotU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pCi1TT0ZUX0xJTktf
Q0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQotU09GVF9MSU5LX0NPTlNUQU5UKEFW
Rm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSwgTlNTdHJpbmcgKikKLVNPRlRf
TElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3QsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVy
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCwgTlNTdHJpbmcgKikKLQotU09GVF9MSU5LX0ZS
QU1FV09SS19PUFRJT05BTChBVktpdCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwg
QVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlcikKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChB
VktpdCwgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcikKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChB
VktpdCwgX19BVlBsYXllckxheWVyVmlldykKLQotU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkK
LVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlBcHBsaWNhdGlvbikKLVNPRlRfTElOS19DTEFTUyhV
SUtpdCwgVUlTY3JlZW4pCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJV2luZG93KQotU09GVF9M
SU5LX0NMQVNTKFVJS2l0LCBVSVZpZXcpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJVmlld0Nv
bnRyb2xsZXIpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJQ29sb3IpCi1TT0ZUX0xJTktfQ09O
U1RBTlQoVUlLaXQsIFVJVGV4dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwsIFVJ
V2luZG93TGV2ZWwpCi0KLXN0YXRpYyBVSUNvbG9yICpjbGVhclVJQ29sb3IoKQotewotICAgIHJl
dHVybiAoVUlDb2xvciAqKVtnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXTsKLX0KLQotI2lm
ICFMT0dfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyKiBib29sU3RyaW5nKGJvb2wgdmFsKQot
ewotICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwotfQotI2VuZGlmCi0KLXN0YXRp
YyBjb25zdCBTZWNvbmRzIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwgeyAxX3MgfTsKLQot
QGNsYXNzIFdlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb247Ci0KLUBpbnRlcmZhY2UgV2ViQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QgPEFWUGxheWVyVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZV9XZWJLaXRPbmx5PiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsKLX0KLUBwcm9wZXJ0eSAoYXNzaWdu
KSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsK
LS0gKEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilw
bGF5ZXJWaWV3Q29udHJvbGxlciBzaG91bGRFeGl0RnVsbFNjcmVlbldpdGhSZWFzb246KEFWUGxh
eWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbilyZWFzb247Ci1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUKLS0gKFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCi17Ci0gICAg
cmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNlLmdldCgpOwotfQotCi0tICh2b2lkKXNldEZ1bGxz
Y3JlZW5JbnRlcmZhY2U6KFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2Ny
ZWVuSW50ZXJmYWNlCi17Ci0gICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50
ZXJmYWNlOwotfQotCi0tICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0YXJ0UGljdHVy
ZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVy
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBzZWxmLmZ1
bGxzY3JlZW5JbnRlcmZhY2UtPndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotLSAo
dm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5
ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2Ut
PmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lkKXBsYXllclZpZXdDb250
cm9sbGVyRmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xs
ZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciB3aXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgotewot
ICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgVU5VU0VEX1BBUkFN
KGVycm9yKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmZhaWxlZFRvU3RhcnRQaWN0
dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3Rv
cFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29u
dHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAg
c2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT53aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKLX0K
LQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlOihB
VlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAgICBVTlVT
RURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVy
ZmFjZS0+ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotc3RhdGljIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiBjb252ZXJ0VG9FeGl0
RnVsbFNjcmVlblJlYXNvbihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFz
b24gcmVhc29uKQotewotICAgIHN3aXRjaCAocmVhc29uKSB7Ci0gICAgY2FzZSBBVlBsYXllclZp
ZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25Eb25lQnV0dG9uVGFwcGVkOgotICAgICAg
ICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVu
UmVhc29uOjpEb25lQnV0dG9uVGFwcGVkOwotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxl
ckV4aXRGdWxsU2NyZWVuUmVhc29uRnVsbFNjcmVlbkJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0
dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNv
bjo6RnVsbFNjcmVlbkJ1dHRvblRhcHBlZDsKLSAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xs
ZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpY3R1cmVJblBpY3R1cmVTdGFydGVkOgotICAgICAgICBy
ZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVh
c29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDsKLSAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRy
b2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpbmNoR2VzdHVyZUhhbmRsZWQ6Ci0gICAgICAgIHJl
dHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFz
b246OlBpbmNoR2VzdHVyZUhhbmRsZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVy
RXhpdEZ1bGxTY3JlZW5SZWFzb25SZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ6Ci0gICAg
ICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3Jl
ZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZDsKLSAgICB9Ci19Ci0KLS0g
KEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5
ZXJWaWV3Q29udHJvbGxlciBzaG91bGRFeGl0RnVsbFNjcmVlbldpdGhSZWFzb246KEFWUGxheWVy
Vmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbilyZWFzb24KLXsKLSAgICBVTlVTRURf
UEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHJldHVybiBzZWxmLmZ1bGxzY3JlZW5J
bnRlcmZhY2UtPnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihjb252ZXJ0VG9FeGl0RnVs
bFNjcmVlblJlYXNvbihyZWFzb24pKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxl
cjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHJlc3RvcmVV
c2VySW50ZXJmYWNlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKEJPT0wgcmVzdG9yZWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZh
Y2UtPnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcihj
b21wbGV0aW9uSGFuZGxlcik7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViQVZQbGF5ZXJMYXll
ciA6IENBTGF5ZXIKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIE5TU3RyaW5nICp2aWRl
b0dyYXZpdHk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzUmVhZHlGb3JEaXNwbGF5
KSBCT09MIHJlYWR5Rm9yRGlzcGxheTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbikgQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250
cm9sbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgQ0FMYXllciAqdmlkZW9TdWJs
YXllcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBudWxsYWJsZSkgTlNEaWN0aW9uYXJ5
ICpwaXhlbEJ1ZmZlckF0dHJpYnV0ZXM7Ci1AcHJvcGVydHkgQ0dTaXplIHZpZGVvRGltZW5zaW9u
czsKLUBwcm9wZXJ0eSBDR1JlY3QgbW9kZWxWaWRlb0xheWVyRnJhbWU7Ci1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBXZWJBVlBsYXllckxheWVyIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOwotICAgIFJldGFpblB0cjxX
ZWJBVlBsYXllckNvbnRyb2xsZXI+IF9hdlBsYXllckNvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRy
PENBTGF5ZXI+IF92aWRlb1N1YmxheWVyOwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gX3ZpZGVv
R3Jhdml0eTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQKLXsKLSAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICAgIGlmIChzZWxmKSB7Ci0gICAgICAgIFtzZWxmIHNldE1hc2tzVG9Cb3VuZHM6
WUVTXTsKLSAgICAgICAgX3ZpZGVvR3Jhdml0eSA9IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YwotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJn
ZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07Ci0g
ICAgW19waXhlbEJ1ZmZlckF0dHJpYnV0ZXMgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi0tIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbklu
dGVyZmFjZQotewotICAgIHJldHVybiBfZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKTsKLX0KLQot
LSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNl
ID0gZnVsbHNjcmVlbkludGVyZmFjZTsKLX0KLQotLSAoQVZQbGF5ZXJDb250cm9sbGVyICopcGxh
eWVyQ29udHJvbGxlcgotewotICAgIHJldHVybiAoQVZQbGF5ZXJDb250cm9sbGVyICopX2F2UGxh
eWVyQ29udHJvbGxlci5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRQbGF5ZXJDb250cm9sbGVyOihB
VlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyCi17Ci0gICAgQVNTRVJUKCFwbGF5
ZXJDb250cm9sbGVyIHx8IFtwbGF5ZXJDb250cm9sbGVyIGlzS2luZE9mQ2xhc3M6W1dlYkFWUGxh
eWVyQ29udHJvbGxlciBjbGFzc11dKTsKLSAgICBfYXZQbGF5ZXJDb250cm9sbGVyID0gKFdlYkFW
UGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXI7Ci19Ci0KLS0gKHZvaWQpc2V0Vmlk
ZW9TdWJsYXllcjooQ0FMYXllciAqKXZpZGVvU3VibGF5ZXIKLXsKLSAgICBfdmlkZW9TdWJsYXll
ciA9IHZpZGVvU3VibGF5ZXI7Ci19Ci0KLS0gKENBTGF5ZXIqKXZpZGVvU3VibGF5ZXIKLXsKLSAg
ICByZXR1cm4gX3ZpZGVvU3VibGF5ZXIuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpbGF5b3V0U3VibGF5
ZXJzCi17Ci0gICAgaWYgKFtfdmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBzZWxmKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW192aWRlb1N1YmxheWVyIHNldFBvc2l0aW9uOkNHUG9p
bnRNYWtlKENHUmVjdEdldE1pZFgoc2VsZi5ib3VuZHMpLCBDR1JlY3RHZXRNaWRZKHNlbGYuYm91
bmRzKSldOwotCi0gICAgaWYgKHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodCA8PSAwIHx8IHNl
bGYudmlkZW9EaW1lbnNpb25zLndpZHRoIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIEZs
b2F0UmVjdCBzb3VyY2VWaWRlb0ZyYW1lOwotICAgIEZsb2F0UmVjdCB0YXJnZXRWaWRlb0ZyYW1l
OwotICAgIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0
aCAvIHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodDsKLSAgICAKLSAgICBpZiAoW2dldEFWTGF5
ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHld
KSB7Ci0gICAgICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1l
OwotICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gc2VsZi5ib3VuZHM7Ci0gICAgfSBlbHNlIGlm
IChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxUb1N0cmluZzpz
ZWxmLnZpZGVvR3Jhdml0eV0pIHsKLSAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IGxhcmdlc3RS
ZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVs
VmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IGxhcmdlc3RSZWN0
V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7
Ci0gICAgfSBlbHNlIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwo
KSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7Ci0gICAgICAgIHNvdXJjZVZp
ZGVvRnJhbWUgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNw
ZWN0UmF0aW8sIHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOwotICAgICAgICBzZWxmLm1vZGVs
VmlkZW9MYXllckZyYW1lID0gQ0dSZWN0TWFrZSgwLCAwLCBzb3VyY2VWaWRlb0ZyYW1lLndpZHRo
KCksIHNvdXJjZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOwotICAgICAgICBBU1NFUlQoX2Z1bGxzY3Jl
ZW5JbnRlcmZhY2UtPm1vZGVsKCkpOwotICAgICAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9k
ZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOwotICAg
ICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5k
UmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgVUlWaWV3ICp2aWV3ID0gKFVJVmlldyAqKVtf
dmlkZW9TdWJsYXllciBkZWxlZ2F0ZV07Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUodGFyZ2V0VmlkZW9GcmFtZS53aWR0aCgpIC8g
c291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCB0YXJnZXRWaWRlb0ZyYW1lLmhlaWdodCgpIC8gc291
cmNlVmlkZW9GcmFtZS5oZWlnaHQoKSk7Ci0gICAgW3ZpZXcgc2V0VHJhbnNmb3JtOnRyYW5zZm9y
bV07Ci0gICAgCi0gICAgTlNUaW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSBbQ0FUcmFu
c2FjdGlvbiBhbmltYXRpb25EdXJhdGlvbl07Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgXiB7Ci0gICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1Bl
cmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJv
dW5kcykgb2JqZWN0Om5pbF07Ci0KLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxl
Y3RvcihyZXNvbHZlQm91bmRzKSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OmFuaW1hdGlvbkR1
cmF0aW9uICsgMC4xXTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClyZXNvbHZlQm91bmRzCi17Ci0g
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKLSAgICBpZiAo
IVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGlmIChbX3ZpZGVvU3VibGF5ZXIgc3VwZXJsYXllcl0gIT0gc2VsZikKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChzZWxmLm1vZGVsVmlkZW9MYXll
ckZyYW1lLCBbc2VsZiBib3VuZHNdKSAmJiBDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHkoWyhV
SVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdIHRyYW5zZm9ybV0pKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0
aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2Fi
bGVBY3Rpb25zOllFU107Ci0gICAgCi0gICAgaWYgKCFDR1JlY3RFcXVhbFRvUmVjdChzZWxmLm1v
ZGVsVmlkZW9MYXllckZyYW1lLCBbc2VsZiBib3VuZHNdKSkgewotICAgICAgICBzZWxmLm1vZGVs
VmlkZW9MYXllckZyYW1lID0gW3NlbGYgYm91bmRzXTsKLSAgICAgICAgQVNTRVJUKF9mdWxsc2Ny
ZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKLSAgICAgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1v
ZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAg
ICB9Ci0gICAgWyhVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdIHNldFRyYW5zZm9y
bTpDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5XTsKLSAgICAKLSAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotfQotCi0tICh2b2lkKXNldFZpZGVvR3Jhdml0eTooTlNTdHJpbmcgKil2aWRlb0dy
YXZpdHkKLXsKLSAgICBfdmlkZW9HcmF2aXR5ID0gdmlkZW9HcmF2aXR5OwotICAgIAotICAgIGlm
ICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkg
PSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0OwotICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6
ZSgpKQotICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZTsKLSAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSkKLSAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6Oldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7Ci0gICAgZWxz
ZSBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RG
aWxsKCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+
bW9kZWwoKSk7Ci0gICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5
ZXJHcmF2aXR5KGdyYXZpdHkpOwotfQotCi0tIChOU1N0cmluZyAqKXZpZGVvR3Jhdml0eQotewot
ICAgIHJldHVybiBfdmlkZW9HcmF2aXR5LmdldCgpOwotfQotCi0tIChDR1JlY3QpdmlkZW9SZWN0
Ci17Ci0gICAgaWYgKHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIDw9IDAgfHwgc2VsZi52aWRl
b0RpbWVuc2lvbnMuaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybiBzZWxmLmJvdW5kczsKLSAg
ICAKLSAgICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gc2VsZi52aWRlb0RpbWVuc2lvbnMud2lk
dGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7Ci0KLSAgICBpZiAoW2dldEFWTGF5ZXJW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZp
dHldKQotICAgICAgICByZXR1cm4gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0
KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKLSAgICBpZiAoW2dldEFWTGF5ZXJWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2
aXR5XSkKLSAgICAgICAgcmV0dXJuIHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJl
Y3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOwotCi0gICAgcmV0dXJuIHNlbGYuYm91
bmRzOwotfQotCi0rIChOU1NldCAqKWtleVBhdGhzRm9yVmFsdWVzQWZmZWN0aW5nVmlkZW9SZWN0
Ci17Ci0gICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0czpAInZpZGVvRGltZW5zaW9ucyIs
IEAidmlkZW9HcmF2aXR5IiwgbmlsXTsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIFdlYkFWUGlj
dHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyA6IFVJVmlldwotQGVuZAotCi1zdGF0aWMgQ2xh
c3MgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNF
TCkKLXsKLSAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5ZXIgY2xhc3NdOwotfQotCi1zdGF0aWMg
Q2xhc3MgZ2V0V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKQotewot
ICAgIHN0YXRpYyBDbGFzcyB0aGVDbGFzcyA9IG5pbDsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25j
ZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF4gewotICAgICAg
ICB0aGVDbGFzcyA9IG9iamNfYWxsb2NhdGVDbGFzc1BhaXIoZ2V0VUlWaWV3Q2xhc3MoKSwgIldl
YkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIsIDApOwotICAgICAgICBvYmpjX3Jl
Z2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsKLSAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2Jq
Y19nZXRNZXRhQ2xhc3MoIldlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIpOwot
ICAgICAgICBjbGFzc19hZGRNZXRob2QobWV0YUNsYXNzLCBAc2VsZWN0b3IobGF5ZXJDbGFzcyks
IChJTVApV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MsICJA
QDoiKTsKLSAgICB9KTsKLSAgICAKLSAgICByZXR1cm4gdGhlQ2xhc3M7Ci19Ci0KLUBpbnRlcmZh
Y2UgV2ViQVZQbGF5ZXJMYXllclZpZXcgOiBfX0FWUGxheWVyTGF5ZXJWaWV3Ci1AcHJvcGVydHkg
KHJldGFpbikgVUlWaWV3KiB2aWRlb1ZpZXc7Ci1AZW5kCi0KLXN0YXRpYyBDbGFzcyBXZWJBVlBs
YXllckxheWVyVmlld19sYXllckNsYXNzKGlkLCBTRUwpCi17Ci0gICAgcmV0dXJuIFtXZWJBVlBs
YXllckxheWVyIGNsYXNzXTsKLX0KLQotc3RhdGljIEFWUGxheWVyQ29udHJvbGxlciAqV2ViQVZQ
bGF5ZXJMYXllclZpZXdfcGxheWVyQ29udHJvbGxlcihpZCBhU2VsZiwgU0VMKQotewotICAgIF9f
QVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJM
YXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVy
IHBsYXllckxheWVyXTsKLSAgICByZXR1cm4gW3dlYkFWUGxheWVyTGF5ZXIgcGxheWVyQ29udHJv
bGxlcl07Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNv
bnRyb2xsZXIoaWQgYVNlbGYsIFNFTCwgQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9s
bGVyKQotewotICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxm
OwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJM
YXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAgIFt3ZWJBVlBsYXllckxh
eWVyIHNldFBsYXllckNvbnRyb2xsZXI6IHBsYXllckNvbnRyb2xsZXJdOwotfQotCi1zdGF0aWMg
VUlWaWV3ICpXZWJBVlBsYXllckxheWVyVmlld192aWRlb1ZpZXcoaWQgYVNlbGYsIFNFTCkKLXsK
LSAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllciA9IGFTZWxmOwotICAgIFdlYkFW
UGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5
ZXJMYXllciBwbGF5ZXJMYXllcl07Ci0gICAgQ0FMYXllciogdmlkZW9MYXllciA9IFt3ZWJBVlBs
YXllckxheWVyIHZpZGVvU3VibGF5ZXJdOwotICAgIGlmICghdmlkZW9MYXllciB8fCAhdmlkZW9M
YXllci5kZWxlZ2F0ZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoW1t2aWRlb0xh
eWVyIGRlbGVnYXRlXSBpc0tpbmRPZkNsYXNzOmdldFVJVmlld0NsYXNzKCldKTsKLSAgICByZXR1
cm4gKFVJVmlldyAqKVt2aWRlb0xheWVyIGRlbGVnYXRlXTsKLX0KLQotc3RhdGljIHZvaWQgV2Vi
QVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3KGlkIGFTZWxmLCBTRUwsIFVJVmlldyAqdmlk
ZW9WaWV3KQotewotICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFT
ZWxmOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5
ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAgIFt3ZWJBVlBsYXll
ckxheWVyIHNldFZpZGVvU3VibGF5ZXI6W3ZpZGVvVmlldyBsYXllcl1dOwotfQotCi1zdGF0aWMg
dm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQotewotICAgIFdlYkFWUGxheWVyTGF5
ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3ICopW3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3XTsKLQotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVy
TGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBXZWJBVlBsYXllckxh
eWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJd
OwotICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdCgpXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9TdWJsYXllcjpw
bGF5ZXJMYXllci52aWRlb1N1YmxheWVyXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9E
aW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVvRGltZW5zaW9uc107Ci0gICAgW3BpcFBsYXllckxh
eWVyIHNldFZpZGVvR3Jhdml0eTpwbGF5ZXJMYXllci52aWRlb0dyYXZpdHldOwotICAgIFtwaXBQ
bGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpwbGF5ZXJMYXllci5tb2RlbFZpZGVv
TGF5ZXJGcmFtZV07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldFBsYXllckNvbnRyb2xsZXI6cGxh
eWVyTGF5ZXIucGxheWVyQ29udHJvbGxlcl07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldEZ1bGxz
Y3JlZW5JbnRlcmZhY2U6cGxheWVyTGF5ZXIuZnVsbHNjcmVlbkludGVyZmFjZV07Ci0gICAgW3Bp
cFZpZXcgYWRkU3VidmlldzpwbGF5ZXJMYXllclZpZXcudmlkZW9WaWV3XTsKLX0KLQotc3RhdGlj
IHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQotewotICAgIFdlYkFWUGxheWVyTGF5
ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAgICBpZiAoVUlWaWV3ICp2aWRlb1Zp
ZXcgPSBwbGF5ZXJMYXllclZpZXcudmlkZW9WaWV3KQotICAgICAgICBbcGxheWVyTGF5ZXJWaWV3
IGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
ICopW3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKLSAg
ICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3Bs
YXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxh
eWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKLSAgICBbcGxh
eWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6cGlwUGxheWVyTGF5ZXIubW9kZWxWaWRl
b0xheWVyRnJhbWVdOwotfQotCi1zdGF0aWMgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3ICpXZWJBVlBsYXllckxheWVyVmlld19waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxh
eWVyVmlldyA9IGFTZWxmOwotICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqcGlwVmlldyA9IFtwbGF5ZXJMYXllclZpZXcgdmFsdWVGb3JLZXk6QCJfcGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyJdOwotICAgIGlmICghcGlwVmlldykgewotICAgICAgICBwaXBW
aWV3ID0gW1tnZXRXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdDbGFzcygpIGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm9dOwotICAgICAgICBbcGxheWVyTGF5ZXJWaWV3
IHNldFZhbHVlOnBpcFZpZXcgZm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXciXTsKLSAgICB9Ci0gICAgcmV0dXJuIHBpcFZpZXc7Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFW
UGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXll
ckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgUmV0YWluUHRyPFdlYkFW
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldz4gcGlwVmlldyA9IGFkb3B0TlMoW3BsYXll
ckxheWVyVmlldyB2YWx1ZUZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
Il0pOwotICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0VmFsdWU6bmlsIGZvcktleTpAIl9waWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Ci0gICAgb2JqY19zdXBlciBzdXBlckNsYXNzIHsg
cGxheWVyTGF5ZXJWaWV3LCBnZXRfX0FWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSB9OwotICAgIGF1
dG8gc3VwZXJfZGVhbGxvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKShvYmpjX3N1cGVyKiwg
U0VMKT4ob2JqY19tc2dTZW5kU3VwZXIpOwotICAgIHN1cGVyX2RlYWxsb2MoJnN1cGVyQ2xhc3Ms
IEBzZWxlY3RvcihkZWFsbG9jKSk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIE1ldGhvZHMKLQotc3Rh
dGljIENsYXNzIGdldFdlYkFWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKQotewotICAgIHN0YXRpYyBD
bGFzcyB0aGVDbGFzcyA9IG5pbDsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tl
bjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF4gewotICAgICAgICB0aGVDbGFzcyA9
IG9iamNfYWxsb2NhdGVDbGFzc1BhaXIoZ2V0X19BVlBsYXllckxheWVyVmlld0NsYXNzKCksICJX
ZWJBVlBsYXllckxheWVyVmlldyIsIDApOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xh
c3MsIEBzZWxlY3RvcihkZWFsbG9jKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19kZWFsbG9j
LCAidkA6Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHNl
dFBsYXllckNvbnRyb2xsZXI6KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zZXRQbGF5ZXJD
b250cm9sbGVyLCAidkA6QCIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBz
ZWxlY3RvcihwbGF5ZXJDb250cm9sbGVyKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19wbGF5
ZXJDb250cm9sbGVyLCAiQEA6Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywg
QHNlbGVjdG9yKHNldFZpZGVvVmlldzopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFZp
ZGVvVmlldywgInZAOkAiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2Vs
ZWN0b3IodmlkZW9WaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld192aWRlb1ZpZXcsICJA
QDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc3RhcnRS
b3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFW
UGxheWVyTGF5ZXJWaWV3X3N0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3LCAidkA6Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNl
bGVjdG9yKHN0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcp
LCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcsICJ2QDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRo
ZUNsYXNzLCBAc2VsZWN0b3IocGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVAp
V2ViQVZQbGF5ZXJMYXllclZpZXdfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgIkBA
OiIpOwotICAgICAgICAKLSAgICAgICAgY2xhc3NfYWRkSXZhcih0aGVDbGFzcywgIl9waWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Iiwgc2l6ZW9mKFdlYkFWUGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlldyAqKSwgbG9nMihzaXplb2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3ICopKSwgIkAiKTsKLSAgICAgICAgCi0gICAgICAgIG9iamNfcmVnaXN0ZXJDbGFz
c1BhaXIodGhlQ2xhc3MpOwotICAgICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFD
bGFzcygiV2ViQVZQbGF5ZXJMYXllclZpZXciKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1l
dGFDbGFzcywgQHNlbGVjdG9yKGxheWVyQ2xhc3MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3
X2xheWVyQ2xhc3MsICJAQDoiKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdGhlQ2xhc3M7Ci19Ci0K
LVJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYg
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotewotICAgIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdChwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKLSAgICBbaW50ZXJm
YWNlLT5tX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgc2V0RnVsbHNjcmVlbkludGVyZmFj
ZTppbnRlcmZhY2UucHRyKCldOwotICAgIHJldHVybiBpbnRlcmZhY2U7Ci19Ci0KLVdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dChXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlKQotICAgIDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlKQotICAgICwgbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tX
ZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdKSkKLSAgICAsIG1f
d2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKQotewotfQotCi1XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCkK
LXsKLSAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSB0aGlzLT5w
bGF5ZXJDb250cm9sbGVyKCk7Ci0gICAgaWYgKHBsYXllckNvbnRyb2xsZXIgJiYgcGxheWVyQ29u
dHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlKQotICAgICAgICBleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZChmYWxzZSwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lLCAi
Iik7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci19Ci0KLVdlYkFWUGxheWVyQ29udHJv
bGxlciAqV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWVy
Q29udHJvbGxlcigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9k
ZWwpCi17Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0KLSAgICBtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsID0gbW9kZWw7Ci0KLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAg
ICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKLQotICAgIGhh
c1ZpZGVvQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbC0+aGFzVmlkZW8oKSA6IGZhbHNlKTsKLSAgICB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT52aWRlb0RpbWVu
c2lvbnMoKSA6IEZsb2F0U2l6ZSgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQotewotICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyID0gb2JzZXJ2ZXI7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQotewotICAgIFtwbGF5
ZXJDb250cm9sbGVyKCkgc2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsKLSAgICBbcGxheWVy
Q29udHJvbGxlcigpIHNldEhhc1ZpZGVvOmhhc1ZpZGVvXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9h
dFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJM
YXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVy
XTsKLQotICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25z
XTsKLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldENvbnRlbnREaW1lbnNpb25zOnZpZGVvRGlt
ZW5zaW9uc107Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldE5lZWRzTGF5b3V0XTsKLQotICAg
IFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBp
Y3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbbV9wbGF5ZXJMYXllclZpZXcgcGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlld107Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxh
eWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKLSAgICBbcGlw
UGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVvRGltZW5zaW9u
c107Ci0gICAgW3BpcFZpZXcgc2V0TmVlZHNMYXlvdXRdOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJs
ZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwg
Y29uc3QgU3RyaW5nJikKLXsKLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOmVuYWJs
ZWRdOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNh
dGlvbkRpZEJlY29tZUFjdGl2ZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoJXApIiwg
dGhpcyk7Ci0gICAgaWYgKG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0Zv
cmVncm91bmQgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsLT5pc1Zpc2libGUoKSkgewotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9w
UGljdHVyZUluUGljdHVyZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3
ZSBhcmUgYm90aCBpbiBQaVAgYW5kIGluIEZ1bGxzY3JlZW4gKGkuZS4sIHZpYSBhdXRvLVBpUCks
IGFuZCB3ZSBkaWQgbm90IHN0b3AgZnVsbHNjcmVlbiB1cG9uIHJldHVybmluZywgaXQgbXVzdCBi
ZQotICAgIC8vIGJlY2F1c2UgdGhlIG9yaWdpbmF0aW5nIHZpZXcgaXMgbm90IHZpc2libGUsIHNv
IGhpZGUgdGhlIGZ1bGxzY3JlZW4gd2luZG93LgotICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgfCBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgewotICAgICAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhp
cyk7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0
ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vy
cm9yKikgewotICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICAg
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotICAgICAg
ICB9XTsKLSAgICB9Ci19Ci0KLUBpbnRlcmZhY2UgVUlXaW5kb3cgKCkKLS0gKEJPT0wpX2lzSG9z
dGVkSW5Bbm90aGVyUHJvY2VzczsKLUBlbmQKLQotQGludGVyZmFjZSBVSVZpZXdDb250cm9sbGVy
ICgpCi1AcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCBzZXR0ZXI9X3NldElnbm9yZUFwcFN1
cHBvcnRlZE9yaWVudGF0aW9uczopIEJPT0wgX2lnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9u
czsKLUBlbmQKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBG
dWxsc2NyZWVuKFVJVmlldyYgdmlkZW9WaWV3LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0
aWFsUmVjdCwgVUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sp
Ci17Ci0gICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSk7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgbV9hbGxv
d3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgPSBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJh
Y2s7Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0
RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICBib29sIGlzSW5QaWN0dXJlSW5QaWN0dXJlTW9kZSA9
IGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSk7Ci0gICAgbV9tb2RlID0gbW9kZTsKLSAgICBtX3BhcmVudFZpZXcgPSBwYXJl
bnRWaWV3OwotICAgIG1fcGFyZW50V2luZG93ID0gcGFyZW50Vmlldy53aW5kb3c7Ci0KLSAgICBp
ZiAoIVtbcGFyZW50VmlldyB3aW5kb3ddIF9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3NdKSB7Ci0g
ICAgICAgIGlmICghbV93aW5kb3cpCi0gICAgICAgICAgICBtX3dpbmRvdyA9IGFkb3B0TlMoW2Fs
bG9jVUlXaW5kb3dJbnN0YW5jZSgpIGluaXRXaXRoRnJhbWU6W1tnZXRVSVNjcmVlbkNsYXNzKCkg
bWFpblNjcmVlbl0gYm91bmRzXV0pOwotICAgICAgICBbbV93aW5kb3cgc2V0QmFja2dyb3VuZENv
bG9yOmNsZWFyVUlDb2xvcigpXTsKLSAgICAgICAgaWYgKCFtX3ZpZXdDb250cm9sbGVyKQotICAg
ICAgICAgICAgbV92aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jVUlWaWV3Q29udHJvbGxl
ckluc3RhbmNlKCkgaW5pdF0pOwotICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gc2V0
RnJhbWU6W21fd2luZG93IGJvdW5kc11dOwotICAgICAgICBbbV92aWV3Q29udHJvbGxlciBfc2V0
SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOllFU107Ci0gICAgICAgIFttX3dpbmRvdyBz
ZXRSb290Vmlld0NvbnRyb2xsZXI6bV92aWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgICAgIFtt
X3dpbmRvdyBzZXRXaW5kb3dMZXZlbDpnZXRVSVRleHRFZmZlY3RzQmVuZWF0aFN0YXR1c0Jhcldp
bmRvd0xldmVsKCkgKyAxXTsKLSAgICAgICAgW21fd2luZG93IG1ha2VLZXlBbmRWaXNpYmxlXTsK
LSAgICB9Ci0KLSAgICBpZiAoIW1fcGxheWVyTGF5ZXJWaWV3KQotICAgICAgICBtX3BsYXllckxh
eWVyVmlldyA9IGFkb3B0TlMoW1tnZXRXZWJBVlBsYXllckxheWVyVmlld0NsYXNzKCkgYWxsb2Nd
IGluaXRdKTsKLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOltwbGF5ZXJDb250cm9s
bGVyKCkgaXNFeHRlcm5hbFBsYXliYWNrQWN0aXZlXV07Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3
IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0KLSAgICBpZiAoIWlzSW5QaWN0
dXJlSW5QaWN0dXJlTW9kZSkgewotICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0VmlkZW9W
aWV3OiZ2aWRlb1ZpZXddOwotICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgYWRkU3Vidmlldzom
dmlkZW9WaWV3XTsKLSAgICB9Ci0KLSAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9
IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLQot
ICAgIFtwbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgpKV07Ci0gICAgW3BsYXll
ckxheWVyIHNldFZpZGVvRGltZW5zaW9uczpbcGxheWVyQ29udHJvbGxlcigpIGNvbnRlbnREaW1l
bnNpb25zXV07Ci0gICAgcGxheWVyTGF5ZXIuZnVsbHNjcmVlbkludGVyZmFjZSA9IHRoaXM7Ci0K
LSAgICBpZiAoIW1fcGxheWVyVmlld0NvbnRyb2xsZXIpCi0gICAgICAgIG1fcGxheWVyVmlld0Nv
bnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY0FWUGxheWVyVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgp
IGluaXRXaXRoUGxheWVyTGF5ZXJWaWV3Om1fcGxheWVyTGF5ZXJWaWV3LmdldCgpXSk7Ci0KLSAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwot
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFBsYXllckNvbnRyb2xsZXI6KEFWUGxheWVy
Q29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIoKV07Ci0gICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgc2V0RGVsZWdhdGU6bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsK
LSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRBbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxh
eWJhY2s6bV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2tdOwotCi0gICAgW3BsYXllckNv
bnRyb2xsZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlUG9zc2libGU6bV9hbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlUGxheWJhY2tdOwotCi0gICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpIHsKLSAgICAgICAg
W21fdmlld0NvbnRyb2xsZXIgYWRkQ2hpbGRWaWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250
cm9sbGVyLmdldCgpXTsKLSAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIGFkZFN1YnZp
ZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld11dOwotICAgIH0gZWxzZQotICAgICAgICBb
cGFyZW50VmlldyBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKLQot
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3BhcmVudFZpZXcgY29u
dmVydFJlY3Q6aW5pdGlhbFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
LnN1cGVydmlld107Ci0KLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFj
a2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVC
b3R0b21NYXJnaW4gfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVJpZ2h0TWFyZ2luKV07Ci0K
LSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0TmVlZHNMYXlvdXRdOwotICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07Ci0KLSAgICBb
Q0FUcmFuc2FjdGlvbiBjb21taXRdOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7Ci0gICAgICAg
IGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKLXsK
LSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpl
bnRlckZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAgICBtX2V4aXRDb21wbGV0ZWQgPSBmYWxz
ZTsKLSAgICBtX2V4aXRSZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICBtX2VudGVyUmVxdWVzdGVkID0g
dHJ1ZTsKLQotICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKLSAgICAgICAgZW50ZXJQaWN0dXJlSW5QaWN0
dXJlKCk7Ci0gICAgZWxzZSBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQotICAgICAgICBlbnRlckZ1bGxzY3JlZW5TdGFuZGFy
ZCgpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSgp
Ci17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIAotICAgIGlmIChbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVQb3NzaWJsZV0pCi0gICAgICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0YXJ0UGljdHVyZUluUGljdHVyZV07Ci0gICAgZWxz
ZQotICAgICAgICBmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgp
Ci17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoJXApIiwgdGhpcyk7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAg
aWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZUFjdGl2ZV0pIHsK
LSAgICAgICAgLy8gTk9URTogVGhlIGZ1bGxzY3JlZW4gbW9kZSB3aWxsIGJlIHJlc3RvcmVkIGlu
IHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcigpLgot
ICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IHRydWU7
Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGVu
dGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbdGhpcywgcHJvdGVj
dGVkVGhpc10gKEJPT0wgc3VjY2VlZGVkLCBOU0Vycm9yKikgewotICAgICAgICBVTlVTRURfUEFS
QU0oc3VjY2VlZGVkKTsKLSAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXApIC0g
c3VjY2VlZGVkKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcoc3VjY2VlZGVkKSk7Ci0gICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwotCi0g
ICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB9XTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxSZWN0KQotewotICAgIG1fd2F0Y2hkb2dUaW1l
ci5zdG9wKCk7Ci0KLSAgICBtX2V4aXRSZXF1ZXN0ZWQgPSB0cnVlOwotICAgIGlmIChtX2V4aXRD
b21wbGV0ZWQpIHsKLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAg
ICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7
Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5P
XTsKLSAgICAKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3Bh
cmVudFZpZXcgY29udmVydFJlY3Q6ZmluYWxSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XS5zdXBlcnZpZXddOwotCi0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5
ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07
Ci0gICAgaWYgKFtwbGF5ZXJMYXllciB2aWRlb0dyYXZpdHldICE9IGdldEFWTGF5ZXJWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3QoKSkKLSAgICAgICAgW3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0
eTpnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCldOwotICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07Ci0KLSAgICBpZiAoaXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUp
KSB7Ci0gICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0g
ZmFsc2U7Ci0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwotICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgfSBlbHNlIGlmIChp
c01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUlu
UGljdHVyZSB8IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5k
YXJkKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4
aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMs
IHRoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAgICAgICAg
IFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgICAgICB9XTsKLSAgICB9IGVsc2UgaWYg
KGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFy
ZCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0
RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywg
dGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBtX2V4aXRDb21wbGV0ZWQgPSB0
cnVlOwotCi0gICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgICAgICAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgICAgICAgICAgW21fcGxh
eWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAg
ICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNs
ZWFyVUlDb2xvcigpXTsKLSAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0KLSAg
ICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90
ZWN0ZWRUaGlzLCB0aGlzXSgpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH1dOwot
ICAgIH07Ci19Ci0KLUBpbnRlcmZhY2UgVUlBcHBsaWNhdGlvbiAoKQotLSAodm9pZClfc2V0U3Rh
dHVzQmFyT3JpZW50YXRpb246KFVJSW50ZXJmYWNlT3JpZW50YXRpb24pbzsKLUBlbmQKLQotQGlu
dGVyZmFjZSBVSVdpbmRvdyAoKQotLSAoVUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZhY2VP
cmllbnRhdGlvbjsKLUBlbmQKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwot
ICAgIGlmIChtX3dpbmRvdykgewotICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0g
ICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bmlsXTsKLSAgICAgICAgaWYg
KG1fcGFyZW50V2luZG93KQotICAgICAgICAgICAgW1tnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBz
aGFyZWRBcHBsaWNhdGlvbl0gX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOlttX3BhcmVudFdpbmRv
dyBpbnRlcmZhY2VPcmllbnRhdGlvbl1dOwotICAgIH0KLSAgICAKLSAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IHNldFBsYXllckNvbnRyb2xsZXI6bmlsXTsKLSAgICAKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkKLSAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAg
IGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0
YW5kYXJkKSkKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5B
bmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbXSAoQk9PTCwgTlNFcnJvciAqKSB7IH1dOwot
ICAgIAotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKLSAgICBpZiAobV92aWV3Q29udHJvbGxlcikKLSAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsKLSAgICAKLSAgICBbbV9w
bGF5ZXJMYXllclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgW1ttX3ZpZXdDb250cm9s
bGVyIHZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgbV9wbGF5ZXJMYXllclZpZXcg
PSBuaWw7Ci0gICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IG5pbDsKLSAgICBtX3dpbmRvdyA9
IG5pbDsKLSAgICBtX3BhcmVudFZpZXcgPSBuaWw7Ci0gICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7
Ci0gICAgCi0gICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLQotICAgIG1f
ZW50ZXJSZXF1ZXN0ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9
IG5pbDsKLSAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKLSAgICAKLSAgICBj
bGVhbnVwRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKLXsKLSAgICBpZiAoIW1fZW50
ZXJSZXF1ZXN0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoaGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oJXApIiwg
dGhpcyk7Ci0KLSAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotCi0gICAgaWYgKHdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCkgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiAhbV9leGl0UmVxdWVz
dGVkKSB7Ci0gICAgICAgIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7Ci0gICAg
ICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lu
bGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCi17Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRU
b1JldHVyblRvSW5saW5lKCVwKSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmluZyh2aXNp
YmxlKSk7Ci0gICAgaWYgKG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spIHsKLSAgICAgICAgCi0g
ICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50Vmll
dyBjb252ZXJ0UmVjdDppbmxpbmVSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XS5zdXBlcnZpZXddOwotCi0gICAgICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gY2Fs
bGJhY2sgPSBXVEZNb3ZlKG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spOwotICAgICAgICBjYWxs
YmFjayh2aXNpYmxlKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gW3BsYXllckNvbnRyb2xsZXIoKSBpc1BsYXlpbmddICYmIG1fbW9k
ZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCAm
JiBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rp
b248dm9pZChib29sKT4mJiBjYWxsYmFjaykKLXsKLSAgICBtX3ByZXBhcmVUb0lubGluZUNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQotICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZnVsbHNjcmVlbk1heVJl
dHVyblRvSW5saW5lKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBpY3R1cmVJblBpY3R1
cmUoJXApIiwgdGhpcyk7Ci0gICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBM
T0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFy
dFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0gICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxz
Y3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IFttX3BsYXllclZpZXdDb250cm9sbGVyIHBp
Y3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF07Ci0gICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0KLSAg
ICBpZiAobV9tb2RlICYgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQpIHsKLSAgICAgICAgaWYgKCFbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJl
SW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7Ci0gICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVl
bkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJP
T0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNd
OwotICAgICAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRk
ZW46WUVTXTsKLSAgICAgICAgICAgIH1dOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107Ci0gICAgfQotCi0gICAgaWYgKG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKQotICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlk
RW50ZXJGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGlj
dHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
ZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLQotICAgIGlmIChoYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKLQotICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZEVudGVyRnVsbHNjcmVlbigpOwotCi0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0g
ICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJl
KCkKLXsKLSAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZh
bHNlOwotICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91
bmQgPSBmYWxzZTsKLQotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICBp
ZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFu
ZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwotICAgIFtbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46Tk9dOwotCi0gICAgaWYgKG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVl
c3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlk
U3RvcFBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRo
aXMpOwotICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVN0YW5kYXJkKSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0
dXJlU3RvcCkgewotICAgICAgICAvLyBBU1NVTVBUSU9OOiB3ZSBhcmUgZXhpdGluZyBwaXAgYmVj
YXVzZSB3ZSBhcmUgZW50ZXJpbmcgZnVsbHNjcmVlbgotICAgICAgICBjbGVhck1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0g
ICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZ
RVNdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9leGl0Q29tcGxldGVkID0gdHJ1
ZTsKLQotICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNv
bG9yKCldOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5k
Q29sb3I6Y2xlYXJVSUNvbG9yKCldOwotCi0gICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIAotICAgIGlm
IChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21w
bGV0aW9uSGFuZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpKQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciglcCki
LCB0aGlzKTsKLSAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQ
aVAgfHwgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCkg
ewotICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZh
bHNlOwotICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3Jl
Z3JvdW5kID0gZmFsc2U7Ci0gICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJ
blBpY3R1cmVTdG9wID0gdHJ1ZTsKLQotICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsK
LSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107Ci0K
LSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6
WUVTIGNvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yKikgewotICAgICAg
ICAgICAgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3VjY2Vz
cyk7Ci0gICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAg
ICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigp
OwotICAgICAgICB9XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBS
ZXRhaW5QdHI8aWQ+IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlv
bkhhbmRsZXIgY29weV0pOwotICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShbcHJvdGVj
dGVkVGhpcywgc3Ryb25nQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgcmVzdG9yZWQpICB7Ci0gICAg
ICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBy
ZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciBsYW1iZGEo
JXApIC0gcmVzdG9yZWQoJXMpIiwgcHJvdGVjdGVkVGhpcy5nZXQoKSwgYm9vbFN0cmluZyhyZXN0
b3JlZCkpOwotICAgICAgICB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQp
ID0gc3Ryb25nQ29tcGxldGlvbkhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHJlc3RvcmVkKTsKLSAgICB9KTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCi17Ci0gICAg
aWYgKCFtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmIChyZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFy
dGVkKSB7Ci0gICAgICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0
dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5n
UGlQID0gaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCk7Ci0gICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmICh3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIChyZWFzb24gPT0gRXhpdEZ1bGxT
Y3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVu
UmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQpKQotICAgICAgICB3ZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwotICAgIAotICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVOb25lLCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVC
dXR0b25UYXBwZWQpOwotCi0gICAgaWYgKCFtX3dhdGNoZG9nVGltZXIuaXNBY3RpdmUoKSkKLSAg
ICAgICAgbV93YXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChkZWZhdWx0V2F0Y2hkb2dUaW1lcklu
dGVydmFsKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTk9fUkVUVVJOX0RVRV9UT19BU1NF
UlQgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZp
cmVkKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoJXApIC0gbm8gZXhpdCBmdWxsc2NyZWVuIHJlc3Bv
bnNlIGluICVnczsgZm9yY2luZyBmdWxsc2NyZWVuIGhpZGRlbi4iLCB0aGlzLCBkZWZhdWx0V2F0
Y2hkb2dUaW1lckludGVydmFsLnZhbHVlKCkpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gc2V0SGlkZGVuOllFU107Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgfCBtb2RlOwotICAgIGlmIChtX21vZGUgPT0gbmV3TW9k
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tb2RlID0gbmV3TW9kZTsKLSAgICBpZiAobV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOwotICAgIGlmIChtX21vZGUgPT0g
bmV3TW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tb2RlID0gbmV3TW9kZTsKLSAgICBp
ZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Ci19Ci0KLSNlbmRpZiAvLyBIQVZFKEFW
S0lUKQotCi1ib29sIFdlYkNvcmU6OnN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCi17Ci0jaWYg
UExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKQotICAgIHJldHVybiBbZ2V0QVZQaWN0dXJlSW5Q
aWN0dXJlQ29udHJvbGxlckNsYXNzKCkgaXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydGVkXTsKLSNl
bHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E4OGNjZWQwYjNiZjY2NGJiMjVjMmQ2
ODYyMDkzOGUwZTc3YTY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaApAQCAtMCwwICsxLDg4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgSW50UmVjdDsKK2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMg
ZmluYWwKKyAgICA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1
YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFJlZkNvdW50
ZWQ8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IGNyZWF0ZShXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCYpOworICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YygpOworICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KKworICAgIC8vIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRN
ZWRpYVN0YXRlKCkgZmluYWwgeyB9CisKKyAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIC8q
Y3VycmVudFRpbWUqLywgZG91YmxlIC8qYW5jaG9yVGltZSovKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyppc1BsYXlpbmcqLywgZmxvYXQgLypwbGF5
YmFja1JhdGUqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWVrYWJsZVJhbmdl
c0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSAvKmxhc3RNb2RpZmllZFRpbWUqLywg
ZG91YmxlIC8qbGl2ZVVwZGF0ZUludGVydmFsKi8pIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyovLCB1aW50NjRfdCAvKnNlbGVjdGVkSW5kZXgq
LykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKm9wdGlv
bnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4Ki8pIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3QpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2
aWNlTmFtZSAqLykgZmluYWw7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOworI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyICopOworICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBiZWdpblNjcnViYmluZygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kU2NydWJiaW5n
KCk7CisKK3ByaXZhdGU6CisgICAgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsJik7CisgICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwgeyBudWxscHRyIH07CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptX3BsYXli
YWNrQ29udHJvbHNNYW5hZ2VyICB7IG51bGxwdHIgfTsKKworICAgIHZvaWQgdXBkYXRlUGxheWJh
Y2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9y
VGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpOworI2VuZGlmCisKK307
CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmIxMjVmNGZjZGE3NzY3
ZDY0ZWVkNmI0MjE2NTk2YjIzYTYyN2I1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KQEAgLTAsMCAr
MSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKworI2ltcG9ydCAiQVZLaXRTUEkuaCIKKyNp
bXBvcnQgIkludFJlY3QuaCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisjaW1w
b3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1v
ZGVsLmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorCisjaW1wb3J0
ICJDb3JlTWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFW
S2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8V2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCit7CisgICAgYXV0byBp
bnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyht
b2RlbCkpOworICAgIG1vZGVsLmFkZENsaWVudChpbnRlcmZhY2UpOworICAgIHJldHVybiBpbnRl
cmZhY2U7Cit9CisKK1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKKyAgICA6
IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQoreworfQorCitXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKQoreworICAg
IGludmFsaWRhdGUoKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBj
b250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworCisgICAgY29udHJv
bHNNYW5hZ2VyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOworCisgICAgLy8gRklYTUU6IFdl
IHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHksIGJ1dCB0
aGF0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLgorICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFi
bGVkQXVkaW8gPSBZRVM7CisgICAgY29udHJvbHNNYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IFlF
UzsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGR1cmF0aW9uKTsKKyNlbmRpZgorfQorCit2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJs
ZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBj
b250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworICAgIHVwZGF0ZVBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lLCBjb250
cm9sc01hbmFnZXIucmF0ZSwgY29udHJvbHNNYW5hZ2VyLnBsYXlpbmcpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oY3VycmVudFRpbWUpOworICAgIFVOVVNFRF9QQVJBTShhbmNob3JUaW1lKTsK
KyNlbmRpZgorfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cmF0ZUNo
YW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgV2ViUGxheWJhY2tDb250cm9sc01h
bmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisgICAg
W2NvbnRyb2xzTWFuYWdlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsK
KyAgICBbY29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6aXNQbGF5aW5nXTsKKyAgICB1cGRhdGVQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID8gbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6IDAsIFtbTlNQcm9jZXNzSW5mbyBw
cm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgcGxheWJhY2tSYXRlLCBpc1BsYXlpbmcpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oaXNQbGF5aW5nKTsKKyAgICBVTlVTRURfUEFSQU0ocGxheWJh
Y2tSYXRlKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6YmVnaW5TY3J1YmJpbmcoKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKKyAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6
IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgMCwgZmFsc2Up
OworI2VuZGlmCisgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+YmVnaW5TY3J1YmJpbmco
KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuZFNjcnViYmlu
ZygpCit7CisgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7Cit9
CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCitzdGF0aWMgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0aW1lUmFuZ2VzVG9BcnJheShjb25zdCBUaW1lUmFuZ2Vz
JiB0aW1lUmFuZ2VzKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmFuZ2VBcnJh
eSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBj
b25zdCBQbGF0Zm9ybVRpbWVSYW5nZXMmIHJhbmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCk7Cisg
ICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01UaW1lUmFuZ2VNYWtlKHRvQ01UaW1lKHJhbmdl
cy5zdGFydChpKSksIHRvQ01UaW1lKHJhbmdlcy5lbmQoaSkpKTsKKyAgICAgICAgW3JhbmdlQXJy
YXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07CisgICAg
fQorCisgICAgcmV0dXJuIHJhbmdlQXJyYXk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFu
Z2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUsIGRvdWJsZSkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0
U2Vla2FibGVUaW1lUmFuZ2VzOnRpbWVSYW5nZXNUb0FycmF5KHRpbWVSYW5nZXMpLmdldCgpXTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRpbWVSYW5nZXMpOworI2VuZGlmCit9CisKK3ZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJ
bnRlZ2VyPihzZWxlY3RlZEluZGV4KV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvcHRpb25z
KTsKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30KKwordm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxO
U1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvcHRp
b25zKTsKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30KKwordm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0
QXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5kZXhdOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKKyAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFT
ZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4XTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikK
K3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlC
YWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0Q2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZTohZW5hYmxl
ZF07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgorfQorCit2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCit7CisgICAgaWYg
KCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIG1fcGxheWJhY2tTZXNz
aW9uTW9kZWwgPSBudWxscHRyOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCisgICAgcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyNlbmRp
ZgorfQorCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorCitXZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlciAqV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpCit7CisgICAgcmV0dXJuIG1fcGxheWJhY2tDb250cm9s
c01hbmFnZXI7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQ
bGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdl
cikKK3sKKyAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyID0gbWFuYWdlcjsKKworICAgIGlm
ICghbWFuYWdlciB8fCAhbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVttYW5hZ2VyIHJhdGVdID8g
TkFOIDogW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOworICAgIG1h
bmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFu
Y2hvclZhbHVlOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgYW5jaG9yVGlt
ZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOworICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1f
cGxheWJhY2tTZXNzaW9uTW9kZWwtPmR1cmF0aW9uKCk7CisgICAgbWFuYWdlci5jb250ZW50RHVy
YXRpb24gPSBkdXJhdGlvbjsKKyAgICBtYW5hZ2VyLmhhc0VuYWJsZWRBdWRpbyA9IGR1cmF0aW9u
ID4gMDsKKyAgICBtYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IGR1cmF0aW9uID4gMDsKKyAgICBt
YW5hZ2VyLnJhdGUgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKSA/IG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwtPnBsYXliYWNrUmF0ZSgpIDogMC47CisgICAgbWFuYWdlci5zZWVr
YWJsZVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2VzVG9BcnJheShtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5zZWVrYWJsZVJhbmdlcygpKS5nZXQoKTsKKyAgICBtYW5hZ2VyLmNhblRvZ2dsZVBsYXliYWNr
ID0gWUVTOworICAgIG1hbmFnZXIucGxheWluZyA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlz
UGxheWluZygpOworICAgIFttYW5hZ2VyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm1f
cGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNl
bGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2Rl
bC0+YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSldOworICAgIFttYW5hZ2VyIHNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVn
ZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSld
OworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6dXBkYXRlUGxheWJh
Y2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9y
VGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpCit7CisgICAgV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigp
OworICAgIGlmICghbWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwgKm1vZGVsID0gd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKKyAgICBpZiAo
IW1vZGVsKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUgZWZmZWN0aXZlQW5jaG9yVGlt
ZSA9IHBsYXliYWNrUmF0ZSA/IGFuY2hvclRpbWUgOiBOQU47CisgICAgZG91YmxlIGVmZmVjdGl2
ZVBsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKKyAgICBpZiAoIWlzUGxheWluZworICAgICAg
ICB8fCBtb2RlbC0+aXNTY3J1YmJpbmcoKQorICAgICAgICB8fCAobWFuYWdlci5yYXRlID4gMCAm
JiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGltZSgpID49IGN1cnJlbnRUaW1lKQorICAgICAgICB8
fCAobWFuYWdlci5yYXRlIDwgMCAmJiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGltZSgpIDw9IGN1
cnJlbnRUaW1lKSkKKyAgICAgICAgZWZmZWN0aXZlUGxheWJhY2tSYXRlID0gMDsKKworICAgIG1h
bmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFu
Y2hvclZhbHVlOmN1cnJlbnRUaW1lIGFuY2hvclRpbWVTdGFtcDplZmZlY3RpdmVBbmNob3JUaW1l
IHJhdGU6ZWZmZWN0aXZlUGxheWJhY2tSYXRlXTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
UExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjlmNTRkMjM0ZDVjYjc5MTE3NzA2YTgyMDkyNmNhZDI5MDkyYmM5MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisKKyNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIK
KyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK09CSkNfQ0xB
U1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09i
akM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBGbG9hdFNp
emU7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitjbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCisgICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQKKyAgICAsIHByaXZhdGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQK
KyAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4g
eworCitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYyhwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKKyAgICB9
CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCk7CisgICAgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwqIHdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgY29uc3QgeyBy
ZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQorICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCopOworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiB3ZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwor
CisgICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92
ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
Ym9vbCAgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOwor
CisgICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVk
VmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cs
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW50ZXJG
dWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleGl0RnVsbHNjcmVlbihjb25z
dCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52
YWxpZGF0ZSgpOworICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpIHsgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlz
aWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdyk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKKworICAg
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgJiBtb2Rl
OyB9CisgICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9CisgICAgdm9pZCBz
ZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAg
dm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KTsKKworICAgIGJvb2wgaXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0
OworCisgICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFj
dGl2ZSgpIHsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjT2JqQyAqdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpOworCitwcml2YXRlOgor
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMmKTsKKyAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBtX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlciogbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07Cisg
ICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKKyAgICBSZXRh
aW5QdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQz4gbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDOworfTsKKworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2RmNmUyMTk4NDczNTk0NDUxYzQxYjdkMmFhMjUzNWNkM2VhZjYyOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMubW0KQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisj
aW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVRp
bWVBVkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlBJUFNQSS5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCIKKyNpbXBvcnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCisjaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CisKKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgi
CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCisKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1F
V09SS19PUFRJT05BTChQSVApCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUElQLCBQSVBWaWV3
Q29udHJvbGxlcikKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BjbGFzcyBXZWJWaWRl
b1ZpZXdDb250YWluZXI7CisKK0Bwcm90b2NvbCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0
ZSA8TlNPYmplY3Q+CisKKy0gKHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFp
bmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXI7CistICh2b2lk
KXN1cGVydmlld0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29u
dGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyOworCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViVmlk
ZW9WaWV3Q29udGFpbmVyIDogTlNWaWV3IHsKKyAgICBpZCA8V2ViVmlkZW9WaWV3Q29udGFpbmVy
RGVsZWdhdGU+IF92aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTsKK30KKworQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgaWQgPFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB2aWRl
b1ZpZXdDb250YWluZXJEZWxlZ2F0ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlk
ZW9WaWV3Q29udGFpbmVyCisKK0BzeW50aGVzaXplIHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRl
PV92aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTsKKworLSAodm9pZClyZXNpemVXaXRoT2xkU3Vw
ZXJ2aWV3U2l6ZTooTlNTaXplKW9sZEJvdW5kc1NpemUKK3sKKyAgICBbc3VwZXIgcmVzaXplV2l0
aE9sZFN1cGVydmlld1NpemU6b2xkQm91bmRzU2l6ZV07CisKKyAgICBbX3ZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlIGJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjpzZWxmXTsK
K30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3Cit7CisgICAgW3N1cGVyIHZpZXdE
aWRNb3ZlVG9TdXBlcnZpZXddOworCisgICAgW192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBz
dXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6c2VsZl07Cit9CisKK0BlbmQK
KworZW51bSBjbGFzcyBQSVBTdGF0ZSB7CisgICAgTm90SW5QSVAsCisgICAgSW5QSVAsCisgICAg
RXhpdGluZ1BJUAorfTsKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWNPYmpDIDogTlNPYmplY3QgPFBJUFZpZXdDb250cm9sbGVyRGVsZWdhdGUsIFdlYlZpZGVvVmll
d0NvbnRhaW5lckRlbGVnYXRlPiB7CisgICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjKiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOworICAgIE5TU2l6ZSBf
dmlkZW9EaW1lbnNpb25zOworICAgIFJldGFpblB0cjxQSVBWaWV3Q29udHJvbGxlcj4gX3BpcFZp
ZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxOU1ZpZXdDb250cm9sbGVyPiBfdmlkZW9WaWV3
Q29udGFpbmVyQ29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8V2ViVmlkZW9WaWV3Q29udGFpbmVy
PiBfdmlkZW9WaWV3Q29udGFpbmVyOworICAgIFBJUFN0YXRlIF9waXBTdGF0ZTsKKyAgICBSZXRh
aW5QdHI8TlNXaW5kb3c+IF9yZXR1cm5pbmdXaW5kb3c7CisgICAgTlNSZWN0IF9yZXR1cm5pbmdS
ZWN0OworICAgIEJPT0wgX3BsYXlpbmc7CisgICAgQk9PTCBfZGlkUmVxdWVzdEV4aXRpbmdQSVA7
CisgICAgQk9PTCBfZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6Oldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyopd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOworLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlOworLSAodm9pZClpbnZhbGlk
YXRlOworCisvLyBUcmFja2luZyB2aWRlbyBwbGF5YmFjayBzdGF0ZQorQHByb3BlcnR5IChub25h
dG9taWMpIE5TU2l6ZSB2aWRlb0RpbWVuc2lvbnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0
dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5nOworLSAodm9pZCl1cGRhdGVJc1BsYXlpbmc6KEJP
T0wpaXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTooZmxvYXQpcGxheWJhY2tSYXRlOworCisvLyBI
YW5kbGluZyBQSVAgdHJhbnNpdGlvbnMKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Qk9PTCBkaWRSZXF1ZXN0RXhpdGluZ1BJUDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9
aXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4pIEJPT0wgZXhpdGluZ1RvU3RhbmRhcmRGdWxs
c2NyZWVuOworCistICh2b2lkKXNldFVwUElQRm9yVmlkZW9WaWV3OihOU1ZpZXcgKil2aWRlb1Zp
ZXcgd2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93Owor
LSAodm9pZCllbnRlclBJUDsKKy0gKHZvaWQpZXhpdFBJUDsKKy0gKHZvaWQpZXhpdFBJUEFuaW1h
dGluZ1RvUmVjdDooTlNSZWN0KXJlY3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93OworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpD
CisKK0BzeW50aGVzaXplIHBsYXlpbmc9X3BsYXlpbmc7CitAc3ludGhlc2l6ZSB2aWRlb0RpbWVu
c2lvbnM9X3ZpZGVvRGltZW5zaW9uczsKK0BzeW50aGVzaXplIGRpZFJlcXVlc3RFeGl0aW5nUElQ
PV9kaWRSZXF1ZXN0RXhpdGluZ1BJUDsKK0BzeW50aGVzaXplIGV4aXRpbmdUb1N0YW5kYXJkRnVs
bHNjcmVlbj1fZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOworCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYyopd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOworICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpOb3RJblBJUDsKKworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGUKK3sK
KyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgX3BpcFZpZXdD
b250cm9sbGVyID0gbmlsOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHJlbW92ZUZyb21TdXBl
cnZpZXddOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRl
bGVnYXRlOm5pbF07CisgICAgX3ZpZGVvVmlld0NvbnRhaW5lciA9IG5pbDsKKyAgICBfdmlkZW9W
aWV3Q29udGFpbmVyQ29udHJvbGxlciA9IG5pbDsKKyAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6
Tm90SW5QSVA7CisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gTk87CisgICAgX2V4aXRpbmdU
b1N0YW5kYXJkRnVsbHNjcmVlbiA9IE5POworICAgIF9yZXR1cm5pbmdXaW5kb3cgPSBuaWw7Cisg
ICAgX3JldHVybmluZ1JlY3QgPSBOU1plcm9SZWN0OworfQorCistICh2b2lkKWludmFsaWRhdGUK
K3sKKyAgICBbc2VsZiBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKKyAgICBfd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gbnVsbHB0cjsKKyAgICBfdmlkZW9EaW1lbnNpb25zID0g
TlNaZXJvU2l6ZTsKK30KKworLSAodm9pZCl1cGRhdGVJc1BsYXlpbmc6KEJPT0wpaXNQbGF5aW5n
IG5ld1BsYXliYWNrUmF0ZTooZmxvYXQpcGxheWJhY2tSYXRlCit7CisgICAgX3BsYXlpbmcgPSBp
c1BsYXlpbmcgJiYgcGxheWJhY2tSYXRlOworCisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRQ
bGF5aW5nOl9wbGF5aW5nXTsKK30KKworLSAodm9pZClzZXRWaWRlb0RpbWVuc2lvbnM6KE5TU2l6
ZSl2aWRlb0RpbWVuc2lvbnMKK3sKKyAgICBfdmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1lbnNp
b25zOworCisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRBc3BlY3RSYXRpbzpfdmlkZW9EaW1l
bnNpb25zXTsKK30KKworLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNWaWV3ICopdmlk
ZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dworeworICAgIEFTU0VSVCghX3BpcFZpZXdDb250cm9sbGVyKTsKKyAgICBBU1NFUlQoIV92aWRl
b1ZpZXdDb250YWluZXJDb250cm9sbGVyKTsKKyAgICBBU1NFUlQoIV92aWRlb1ZpZXdDb250YWlu
ZXIpOworCisgICAgX3BpcFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NQSVBWaWV3Q29u
dHJvbGxlckluc3RhbmNlKCkgaW5pdF0pOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0RGVs
ZWdhdGU6c2VsZl07CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRVc2VyQ2FuUmVzaXplOllF
U107CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKKyAgICBb
c2VsZiBzZXRWaWRlb0RpbWVuc2lvbnM6TlNFcXVhbFNpemVzKF92aWRlb0RpbWVuc2lvbnMsIE5T
WmVyb1NpemUpID8gZnJhbWUuc2l6ZSA6IF92aWRlb0RpbWVuc2lvbnNdOworICAgIGlmIChfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3RGaWxsKTsKKworICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBhZG9wdE5TKFtbV2ViVmlkZW9W
aWV3Q29udGFpbmVyIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXSk7CisgICAgW192aWRlb1Zp
ZXdDb250YWluZXIgc2V0VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU6c2VsZl07CisgICAgW192
aWRlb1ZpZXdDb250YWluZXIgYWRkU3Vidmlldzp2aWRlb1ZpZXddOworICAgIHZpZGVvVmlldy5m
cmFtZSA9IFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc107CisgICAgdmlkZW9WaWV3LmF1dG9y
ZXNpemluZ01hc2sgPSBOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOwor
CisgICAgX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbTlNWaWV3Q29u
dHJvbGxlciBhbGxvY10gaW5pdF0pOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxl
ciBzZXRWaWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCldOworICAgIFt3aW5kb3cuY29udGVu
dFZpZXcgYWRkU3VidmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNX
aW5kb3dBYm92ZSByZWxhdGl2ZVRvOm5pbF07Cit9CisKKy0gKHZvaWQpZW50ZXJQSVAKK3sKKyAg
ICBpZiAoX3BpcFN0YXRlID09IFBJUFN0YXRlOjpJblBJUCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgW192aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHZpZXddLmxheWVyLmJhY2tncm91bmRD
b2xvciA9IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQmxhY2spOworICAgIFtfcGlw
Vmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVyQXNQaWN0dXJlSW5QaWN0dXJlOl92
aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBfcGlwU3RhdGUgPSBQSVBT
dGF0ZTo6SW5QSVA7Cit9CisKKy0gKHZvaWQpZXhpdFBJUAoreworICAgIGlmIChfcGlwU3RhdGUg
IT0gUElQU3RhdGU6OkluUElQIHx8ICFfcGlwVmlld0NvbnRyb2xsZXIgfHwgIV92aWRlb1ZpZXdD
b250YWluZXJDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBfZGlkUmVxdWVzdEV4
aXRpbmdQSVAgPSBZRVM7CisgICAgW192aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHZpZXdd
LmxheWVyLmJhY2tncm91bmRDb2xvciA9IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9y
Q2xlYXIpOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250cm9sbGVyOl92
aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBfcGlwU3RhdGUgPSBQSVBT
dGF0ZTo6RXhpdGluZ1BJUDsKK30KKworLSAodm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihO
U1JlY3QpcmVjdCBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBfcmV0dXJuaW5n
V2luZG93ID0gd2luZG93OworICAgIF9yZXR1cm5pbmdSZWN0ID0gcmVjdDsKKyAgICAKKyAgICBb
X3BpcFZpZXdDb250cm9sbGVyIHNldFJlcGxhY2VtZW50UmVjdDpyZWN0XTsKKyAgICBbX3BpcFZp
ZXdDb250cm9sbGVyIHNldFJlcGxhY2VtZW50V2luZG93OndpbmRvd107CisKKyAgICBbc2VsZiBl
eGl0UElQXTsKK30KKworLy8gV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUKKworLSAodm9p
ZClib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRh
aW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcgoreworICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5l
ciB8fCAhX3BpcFZpZXdDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRf
VU5VU0VEKHZpZGVvVmlld0NvbnRhaW5lciwgdmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1Zp
ZXdDb250YWluZXIpOworCisgICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMg
JiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwoKSkKKyAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVy
IGJvdW5kc10pOworfQorCistICh2b2lkKXN1cGVydmlld0RpZENoYW5nZUZvclZpZGVvVmlld0Nv
bnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyCit7Cisg
ICAgaWYgKCFfdmlkZW9WaWV3Q29udGFpbmVyIHx8ICFfcGlwVmlld0NvbnRyb2xsZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVCh2aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmll
d0NvbnRhaW5lcik7CisKKyAgICBpZiAoIVt2aWRlb1ZpZXdDb250YWluZXIgaXNEZXNjZW5kYW50
T2Y6W19waXBWaWV3Q29udHJvbGxlciB2aWV3XV0pCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IE9uY2UgdGhlIHZpZXcgaXMgbW92ZWQgaW50byB0aGUgcGlwIHZpZXcsIG1ha2Ugc3VyZSBpdCBy
ZXNpemVzIHdpdGggdGhlIHBpcCB2aWV3LgorICAgIHZpZGVvVmlld0NvbnRhaW5lci5mcmFtZSA9
IFt2aWRlb1ZpZXdDb250YWluZXIgc3VwZXJ2aWV3XS5ib3VuZHM7CisgICAgdmlkZW9WaWV3Q29u
dGFpbmVyLmF1dG9yZXNpemluZ01hc2sgPSBOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWln
aHRTaXphYmxlOworfQorCisvLyBQSVBWaWV3Q29udHJvbGxlckRlbGVnYXRlCisKKy0gKEJPT0wp
cGlwU2hvdWxkQ2xvc2U6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCit7CisgICAgQVNTRVJUX1VO
VVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOworCisgICAgaWYgKCFfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjIHx8ICFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpKQorICAgICAgICByZXR1cm4g
WUVTOworCisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gWUVTOworICAgIF93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkt
PmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworCisgICAgcmV0dXJuIE5POworfQorCist
ICh2b2lkKXBpcERpZENsb3NlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VS
VF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmIChfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgJiYgX3ZpZGVvVmlld0NvbnRhaW5lciAm
JiBfcmV0dXJuaW5nV2luZG93ICYmICFOU0VxdWFsUmVjdHMoX3JldHVybmluZ1JlY3QsIE5TWmVy
b1JlY3QpKSB7CisgICAgICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgcnVuQW5pbWF0aW9uR3JvdXA6
XihOU0FuaW1hdGlvbkNvbnRleHQgKmNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQuYWxs
b3dzSW1wbGljaXRBbmltYXRpb24gPSBOTzsKKyAgICAgICAgICAgIFtfdmlkZW9WaWV3Q29udGFp
bmVyIHNldEZyYW1lOl9yZXR1cm5pbmdSZWN0XTsKKyAgICAgICAgICAgIF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5
ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKKyAgICAgICAgICAgIF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNl
dFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlS
ZXNpemVBc3BlY3QpOworCisgICAgICAgICAgICBbW19yZXR1cm5pbmdXaW5kb3cgY29udGVudFZp
ZXddIGFkZFN1YnZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2lu
ZG93QWJvdmUgcmVsYXRpdmVUbzpuaWxdOworICAgICAgICB9IGNvbXBsZXRpb25IYW5kbGVyOm5p
bF07CisgICAgfQorCisgICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpIHsK
KyAgICAgICAgaWYgKCFzZWxmLmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSB7CisgICAg
ICAgICAgICBpZiAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIHZpZGVvRnVsbHNjcmVlbk1vZGVs
ID0gX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwoKSkgeworICAgICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVs
bHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9u
ZSk7CisgICAgICAgICAgICAgICAgdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJH
cmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Qp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworCisgICAgICAgIGlmIChXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciogZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIo
KSkKKyAgICAgICAgICAgIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3Jl
ZW4oKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpcGlwQWN0aW9uUGxheTooUElQVmlld0NvbnRyb2xs
ZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJv
bGxlcik7CisKKyAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQor
ICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5wbGF5KCk7Cit9CisKKy0gKHZvaWQpcGlwQWN0aW9uUGF1c2U6KFBJUFZpZXdD
b250cm9sbGVyICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmll
d0NvbnRyb2xsZXIpOworCisgICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMg
JiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSkKKyAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKK30KKworLSAodm9pZClwaXBBY3Rpb25TdG9wOihQ
SVBWaWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0g
X3BpcFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmICghX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIHBsYXliYWNrU2Vzc2lvbk1v
ZGVsLT5wYXVzZSgpOworCisgICAgLy8gRklYTUUgMjUwOTYxNzA6IFNob3VsZCBhbmltYXRlIG9u
bHkgaWYgdGhlIHBhZ2Ugd2l0aCB0aGUgdmlkZW8gaXMgdW5vYnNjdXJlZC4gRm9yIG5vdywgYWx3
YXlzIGNsb3NlIHdpdGhvdXQgYW5pbWF0aW9uLgorICAgIFtzZWxmIGV4aXRQSVBdOworfQorCitA
ZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgOiBtX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCit7CisgICAgQVNTRVJUKG1f
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKTsKKyAg
ICBhdXRvIG1vZGVsID0gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCk7CisgICAgbW9kZWwtPmFkZENsaWVudCgqdGhpcyk7CisgICAgW3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU9iakMoKSB1cGRhdGVJc1BsYXlpbmc6bW9kZWwtPmlzUGxheWluZygp
IG5ld1BsYXliYWNrUmF0ZTptb2RlbC0+cGxheWJhY2tSYXRlKCldOworfQorCitXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKQor
eworICAgIGlmIChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKSkKKyAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgaWYgKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVu
dCgqdGhpcyk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCit7
CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCA9IG1vZGVsOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gb2JzZXJ2ZXI7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKKyAgICBpZiAobV9tb2Rl
ID09IG5ld01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9kZSA9IG5ld01vZGU7Cisg
ICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7CisgICAgaWYgKG1f
bW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUgPSBuZXdNb2Rl
OworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBm
bG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMo
KSB1cGRhdGVJc1BsYXlpbmc6aXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTpwbGF5YmFja1JhdGVd
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJv
bHNNYW5hZ2VyKCkKK3sKKyAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+ZW5zdXJlQ29u
dHJvbHNNYW5hZ2VyKCk7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
KldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQygpCit7CisgICAgaWYgKCFtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMpCisg
ICAgICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyA9IGFkb3B0TlMoW1tXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIGFsbG9jXSBpbml0V2l0aFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzp0aGlzXSk7CisKKyAgICByZXR1cm4gbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDLmdldCgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKE5TVmlldyYgbGF5ZXJIb3N0ZWRWaWV3LCBjb25z
dCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdywgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oJXApLCBpbml0aWFsUmVjdDp7JWQs
ICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAsIG1vZGU6JWQiLCB0aGlzLCBpbml0aWFsUmVj
dC54KCksIGluaXRpYWxSZWN0LnkoKSwgaW5pdGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJlY3Qu
aGVpZ2h0KCksIHBhcmVudFdpbmRvdywgbW9kZSk7CisKKyAgICBVTlVTRURfUEFSQU0oYWxsb3dz
UGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKKyAgICBBU1NFUlQobW9kZSA9PSBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKworICAg
IG1fbW9kZSA9IG1vZGU7CisKKyAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHNl
dFVwUElQRm9yVmlkZW9WaWV3OiZsYXllckhvc3RlZFZpZXcgd2l0aEZyYW1lOihOU1JlY3QpaW5p
dGlhbFJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKKworICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsK
KyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVu
KCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworCisgICAgaWYgKG1vZGUoKSA9PSBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSB7
CisgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZW50ZXJQSVBdOwor
CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgICAgICBbbV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGlj
dHVyZUluUGljdHVyZUFjdGl2ZTpZRVNdOworI2VuZGlmCisKKyAgICAgICAgaWYgKG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgIH0KK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVj
dCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW4oJXApLCBmaW5hbFJlY3Q6
eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwIiwgdGhpcywgZmluYWxSZWN0LngoKSwg
ZmluYWxSZWN0LnkoKSwgZmluYWxSZWN0LndpZHRoKCksIGZpbmFsUmVjdC5oZWlnaHQoKSwgcGFy
ZW50V2luZG93KTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
KyAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2Vy
KCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpOT107CisjZW5kaWYKKworICAgIGlmIChbbV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGRpZFJlcXVlc3RFeGl0aW5nUElQXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGZpbmFsUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIFtt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07CisgICAgZWxzZQorICAg
ICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdU
b1JlY3Q6ZmluYWxSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25U
b01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7
CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4
aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSglcCksIG1vZGU6JWQiLCB0aGlzLCBt
b2RlKTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBb
bV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0
UGljdHVyZUluUGljdHVyZUFjdGl2ZTpOT107CisjZW5kaWYKKworICAgIGlmIChbbV93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGRpZFJlcXVlc3RFeGl0aW5nUElQXSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYm9vbCBpc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbiA9IG1vZGUg
PT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQ7Cisg
ICAgLy8gT24gTWFjLCBzdGFuZGFyZCBmdWxsc2NyZWVuIGlzIGhhbmRsZWQgYnkgdGhlIEZ1bGxz
Y3JlZW4gQVBJIGFuZCBub3QgYnkgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci4KKyAgICAvLyBK
dXN0IHVwZGF0ZSBtX21vZGUgZGlyZWN0bHkgdG8gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgaW4gdGhhdCBjYXNlIHRvIGtlZXAKKyAgICAvLyBtX21v
ZGUgaW4gc3luYyB3aXRoIHRoZSBmdWxsc2NyZWVuIG1vZGUgaW4gSFRNTE1lZGlhRWxlbWVudC4K
KyAgICBpZiAoaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4pCisgICAgICAgIG1fbW9kZSA9
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkOworCisg
ICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBzZXRFeGl0aW5nVG9TdGFuZGFy
ZEZ1bGxzY3JlZW46aXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW5dOworICAgIFttX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2Ny
ZWVuKCVwKSIsIHRoaXMpOworCisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyBleGl0UElQXTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGludmFs
aWRhdGVGdWxsc2NyZWVuU3RhdGVdOworCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxz
Y3JlZW4oKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFs
aWRhdGUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjppbnZhbGlkYXRlKCVwKSIsIHRoaXMpOworCisgICAgbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCA9IG5pbDsKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKKworICAg
IGNsZWFudXBGdWxsc2NyZWVuKCk7CisKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDIGludmFsaWRhdGVdOworICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyA9IG5pbDsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBjb25zdCBjaGFyKiBib29s
U3RyaW5nKGJvb2wgdmFsKQoreworICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwor
fQorI2VuZGlmCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpwcmVwYXJl
ZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0
LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApLCB2
aXNpYmxlOiVzLCBpbmxpbmVSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIs
IHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSksIGlubGluZVJlY3QueCgpLCBpbmxpbmVSZWN0Lnko
KSwgaW5saW5lUmVjdC53aWR0aCgpLCBpbmxpbmVSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cp
OworCisgICAgaWYgKCF2aXNpYmxlKSB7CisgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU9iakMgZXhpdFBJUF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlQocGFyZW50V2luZG93KTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpD
IGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClpbmxpbmVSZWN0IGluV2luZG93OnBhcmVu
dFdpbmRvd107Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoJXApLCBlbmFibGVkOiVzIiwgdGhpcywgYm9vbFN0cmluZyhlbmFibGVkKSk7
CisKKyAgICBpZiAoZW5hYmxlZCAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKKyAgICAgICAgZXhpdEZ1bGxzY3Jl
ZW4oSW50UmVjdCgpLCBuaWwpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit7CisgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZCglcCk6
JXMiLCB0aGlzLCBib29sU3RyaW5nKGhhc1ZpZGVvKSk7CisKKyAgICBpZiAoIWhhc1ZpZGVvKQor
ICAgICAgICBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0
U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6
JS4wZiwgaGVpZ2h0OiUuMGYiLCB0aGlzLCB2aWRlb0RpbWVuc2lvbnMud2lkdGgoKSwgdmlkZW9E
aW1lbnNpb25zLmhlaWdodCgpKTsKKworICAgIC8vIFdpZHRoIGFuZCBoZWlnaHQgY2FuIGJlIHpl
cm8gd2hlbiB3ZSBhcmUgdHJhbnNpdGlvbmluZyBmcm9tIG9uZSB2aWRlbyB0byBhbm90aGVyLiBJ
Z25vcmUgemVybyB2YWx1ZXMuCisgICAgaWYgKCF2aWRlb0RpbWVuc2lvbnMuaXNaZXJvKCkpCisg
ICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgc2V0VmlkZW9EaW1lbnNp
b25zOnZpZGVvRGltZW5zaW9uc107Cit9CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSAmJiBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDIGlzUGxheWluZ107Cit9CisKK2Jvb2wgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJl
KCkKK3sKKyAgICByZXR1cm4gUElQTGlicmFyeSgpICYmIGdldFBJUFZpZXdDb250cm9sbGVyQ2xh
c3MoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQppbmRleCA3YjQ0YTA3NGRm
Mjk4MDYyZjgwNTNlOWViYzdkMzE0NTFlODJlNWU1Li5hMzI2ZWJlZWVhM2IxMzg1MGFlZDZlMjFi
MGM3ZTNiZjlmOTQyOTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCkBAIC0yOSw4ICsyOSw4IEBACiAj
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpICYmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKIAogI2ltcG9ydCAiTWVkaWFTZWxl
Y3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5o
IgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIK
ICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjgxMjRjMWUxYmZlMDE1YmQyOWMwZWYwN2E3MGUzNzFjMTliNTFlNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW5jbHVkZSAi
SFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsOwotCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMgZmluYWwKLSAgICA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAot
ICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+
IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOwotICAgIHZpcnR1YWwgfldlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYygpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9u
TW9kZWw7IH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgZmluYWwgeyB9Ci0KLSAgICAvLyBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVyYXRp
b25DaGFuZ2VkKGRvdWJsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIC8qY3VycmVudFRpbWUqLywgZG91YmxlIC8qYW5jaG9yVGltZSov
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyppc1Bs
YXlpbmcqLywgZmxvYXQgLypwbGF5YmFja1JhdGUqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSAv
Kmxhc3RNb2RpZmllZFRpbWUqLywgZG91YmxlIC8qbGl2ZVVwZGF0ZUludGVydmFsKi8pIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyovLCB1aW50
NjRfdCAvKnNlbGVjdGVkSW5kZXgqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiAvKm9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4Ki8pIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdpYmxlTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0
cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGludmFsaWRhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuc3VyZUNv
bnRyb2xzTWFuYWdlcigpOwotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICopOwotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyICpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotI2VuZGlmCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNjcnViYmluZygpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5kU2NydWJiaW5nKCk7Ci0KLXByaXZhdGU6Ci0gICAgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxscHRyIH07Ci0jaWYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFdlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyICptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyICB7IG51bGxwdHIgfTsKLQot
ICAgIHZvaWQgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1Bs
YXlpbmcpOwotI2VuZGlmCi0KLX07Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNDRhNjFjNTBlMDE2MmMzYzEwZTcxNzVk
ODFjNmYyYTI0ODRjZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCi0KLSNpbXBvcnQgIkFWS2l0U1BJLmgiCi0jaW1wb3J0ICJJbnRSZWN0LmgiCi0j
aW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgotI2ltcG9ydCAiTWVkaWFUaW1lQVZGb3Vu
ZGF0aW9uLmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNp
bXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLQotI2ltcG9ydCAiQ29yZU1lZGlhU29mdExp
bmsuaCIKLQotU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKLVNPRlRfTElOS19D
TEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYz4gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQotewotICAgIGF1dG8gaW50ZXJmYWNlID0gYWRvcHRS
ZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMobW9kZWwpKTsKLSAgICBtb2Rl
bC5hZGRDbGllbnQoaW50ZXJmYWNlKTsKLSAgICByZXR1cm4gaW50ZXJmYWNlOwotfQotCi1XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YyhXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi0gICAgOiBtX3BsYXliYWNrU2Vzc2lv
bk1vZGVsKCZtb2RlbCkKLXsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp+
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCkKLXsKLSAgICBpbnZhbGlkYXRlKCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQo
ZG91YmxlIGR1cmF0aW9uKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFO
QUdFUikKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0g
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLQotICAgIGNvbnRyb2xzTWFuYWdlci5jb250ZW50
RHVyYXRpb24gPSBkdXJhdGlvbjsKLQotICAgIC8vIEZJWE1FOiBXZSB0YWtlIHRoaXMgYXMgYW4g
aW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LCBidXQgdGhhdCBpcyBub3QgbmVjZXNz
YXJpbHkgdHJ1ZS4KLSAgICBjb250cm9sc01hbmFnZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOwot
ICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFibGVkVmlkZW8gPSBZRVM7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShkdXJhdGlvbik7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRv
dWJsZSBhbmNob3JUaW1lKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFO
QUdFUikKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0g
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFu
YWdlclRpbWluZyhjdXJyZW50VGltZSwgYW5jaG9yVGltZSwgY29udHJvbHNNYW5hZ2VyLnJhdGUs
IGNvbnRyb2xzTWFuYWdlci5wbGF5aW5nKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGN1cnJl
bnRUaW1lKTsKLSAgICBVTlVTRURfUEFSQU0oYW5jaG9yVGltZSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5
aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQotICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01h
bmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIFtjb250cm9sc01hbmFnZXIg
c2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07Ci0gICAgW2NvbnRyb2xzTWFu
YWdlciBzZXRQbGF5aW5nOmlzUGxheWluZ107Ci0gICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01h
bmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tTZXNzaW9uTW9k
ZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3Rl
bVVwdGltZV0sIHBsYXliYWNrUmF0ZSwgaXNQbGF5aW5nKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKGlzUGxheWluZyk7Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXliYWNrUmF0ZSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5n
KCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgdXBk
YXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/
IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0lu
Zm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0sIDAsIGZhbHNlKTsKLSNlbmRpZgotICAgIHdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmJlZ2luU2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbmRTY3J1YmJpbmcoKQotewotICAgIHdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKCktPmVuZFNjcnViYmluZygpOwotfQotCi0jaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotc3RhdGljIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gdGltZVJhbmdlc1RvQXJyYXkoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykKLXsK
LSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJhbmdlQXJyYXkgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgUGxhdGZvcm1UaW1l
UmFuZ2VzJiByYW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdlcygpOwotICAgICAgICBDTVRpbWVSYW5n
ZSByYW5nZSA9IENNVGltZVJhbmdlTWFrZSh0b0NNVGltZShyYW5nZXMuc3RhcnQoaSkpLCB0b0NN
VGltZShyYW5nZXMuZW5kKGkpKSk7Ci0gICAgICAgIFtyYW5nZUFycmF5IGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOwotICAgIH0KLQotICAgIHJldHVybiBy
YW5nZUFycmF5OwotfQotI2VuZGlmCi0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywg
ZG91YmxlLCBkb3VibGUpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFNlZWthYmxlVGltZVJhbmdl
czp0aW1lUmFuZ2VzVG9BcnJheSh0aW1lUmFuZ2VzKS5nZXQoKV07Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTSh0aW1lUmFuZ2VzKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFtw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm9w
dGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJ
bmRleCldOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgVU5VU0VEX1BB
UkFNKHNlbGVjdGVkSW5kZXgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBb
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Om9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0
ZWRJbmRleCldOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgVU5VU0VE
X1BBUkFNKHNlbGVjdGVkSW5kZXgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleDpzZWxlY3RlZEluZGV4XTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVk
SW5kZXgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3Bs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6c2Vs
ZWN0ZWRJbmRleF07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKLSNl
bmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCi17Ci0jaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdl
cigpIHNldENhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmU6IWVuYWJsZWRdOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oZW5hYmxlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQotewotICAgIGlmICghbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+
cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0
cjsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRy
b2xzTWFuYWdlcigpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VS
KQotICAgIHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLQotV2ViUGxheWJhY2tDb250cm9sc01h
bmFnZXIgKldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01h
bmFnZXIoKQotewotICAgIHJldHVybiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01h
bmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIpCi17Ci0gICAgbV9wbGF5
YmFja0NvbnRyb2xzTWFuYWdlciA9IG1hbmFnZXI7Ci0KLSAgICBpZiAoIW1hbmFnZXIgfHwgIW1f
cGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TVGltZUludGVy
dmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbbWFuYWdlciByYXRlXSA/IE5BTiA6IFtbTlNQcm9jZXNz
SW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKLSAgICBtYW5hZ2VyLnRpbWluZyA9IFtn
ZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTptX3BsYXli
YWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1l
U3RhbXAgcmF0ZTowXTsKLSAgICBkb3VibGUgZHVyYXRpb24gPSBtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsLT5kdXJhdGlvbigpOwotICAgIG1hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247
Ci0gICAgbWFuYWdlci5oYXNFbmFibGVkQXVkaW8gPSBkdXJhdGlvbiA+IDA7Ci0gICAgbWFuYWdl
ci5oYXNFbmFibGVkVmlkZW8gPSBkdXJhdGlvbiA+IDA7Ci0gICAgbWFuYWdlci5yYXRlID0gbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbC0+aXNQbGF5aW5nKCkgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5wbGF5YmFja1JhdGUoKSA6IDAuOwotICAgIG1hbmFnZXIuc2Vla2FibGVUaW1lUmFuZ2VzID0g
dGltZVJhbmdlc1RvQXJyYXkobV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+c2Vla2FibGVSYW5nZXMo
KSkuZ2V0KCk7Ci0gICAgbWFuYWdlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKLSAgICBtYW5h
Z2VyLnBsYXlpbmcgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKTsKLSAgICBb
bWFuYWdlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRp
Y19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxl
Y3RlZEluZGV4KCkpXTsKLSAgICBbbWFuYWdlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KSB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXliYWNrU2Vz
c2lvbk1vZGVsLT5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
VGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5
YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKQotewotICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyICptYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSAgICBpZiAoIW1hbmFn
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsICptb2Rl
bCA9IHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7Ci0gICAgaWYgKCFtb2RlbCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZG91YmxlIGVmZmVjdGl2ZUFuY2hvclRpbWUgPSBwbGF5YmFja1JhdGUg
PyBhbmNob3JUaW1lIDogTkFOOwotICAgIGRvdWJsZSBlZmZlY3RpdmVQbGF5YmFja1JhdGUgPSBw
bGF5YmFja1JhdGU7Ci0gICAgaWYgKCFpc1BsYXlpbmcKLSAgICAgICAgfHwgbW9kZWwtPmlzU2Ny
dWJiaW5nKCkKLSAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA+IDAgJiYgbW9kZWwtPnBsYXliYWNr
U3RhcnRlZFRpbWUoKSA+PSBjdXJyZW50VGltZSkKLSAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA8
IDAgJiYgbW9kZWwtPnBsYXliYWNrU3RhcnRlZFRpbWUoKSA8PSBjdXJyZW50VGltZSkpCi0gICAg
ICAgIGVmZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IDA7Ci0KLSAgICBtYW5hZ2VyLnRpbWluZyA9IFtn
ZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50
VGltZSBhbmNob3JUaW1lU3RhbXA6ZWZmZWN0aXZlQW5jaG9yVGltZSByYXRlOmVmZmVjdGl2ZVBs
YXliYWNrUmF0ZV07Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCi0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhODUxYjJjZTNhMmU5ZTQ1NTlhMTIxMzYwNGQxMjYwYmZlOTMwYjRk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLQotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgot
I2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotT0JK
Q19DTEFTUyBOU1dpbmRvdzsKLU9CSkNfQ0xBU1MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjT2JqQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEZs
b2F0U2l6ZTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKLWNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOwotCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMKLSAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudAotICAgICwgcHJpdmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudAotICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjPiB7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYz4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKTsKLSAg
ICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogd2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSBjb25z
dCB7IHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9Ci0gICAgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKik7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIHdl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
Kik7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sICBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJp
ZGU7Ci0KLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0dXBGdWxsc2NyZWVuKE5TVmlldyYgbGF5ZXJI
b3N0ZWRWaWV3LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdp
bmRvdywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bnRlckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVu
KGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdyk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBpbnZhbGlkYXRlKCk7Ci0gICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkg
eyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9v
bCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2lu
ZG93KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOwot
Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBj
b25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAm
IG1vZGU7IH0KLSAgICBib29sIGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09IG1vZGU7IH0KLSAgICB2
b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsK
LSAgICB2b2lkIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUpOwotCi0gICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkg
Y29uc3Q7Ci0KLSAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVj
b21lQWN0aXZlKCkgeyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWNPYmpDICp2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCk7Ci0KLXByaXZh
dGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYyYpOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+
IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0ciB9OwotICAgIFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIg
fTsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2Rl
IHsgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OwotICAg
IFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDPiBtX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU9iakM7Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlNjQyYzhlYzBj
YmY5NDc1ZTg0OTZkZjdjODcwMmMyNDg2NTUzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTczICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIgotCi0j
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0KLSNp
bXBvcnQgIkFWS2l0U1BJLmgiCi0jaW1wb3J0ICJJbnRSZWN0LmgiCi0jaW1wb3J0ICJMb2dnaW5n
LmgiCi0jaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKLSNpbXBvcnQgIlBJUFNQSS5o
IgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01h
bmFnZXIuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgotI2lt
cG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBvcnQgIldlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+Ci0K
LSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BU
SU9OQUwoQVZLaXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1p
bmcpCi0KLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChQSVApCi1TT0ZUX0xJ
TktfQ0xBU1NfT1BUSU9OQUwoUElQLCBQSVBWaWV3Q29udHJvbGxlcikKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLUBjbGFzcyBXZWJWaWRlb1ZpZXdDb250YWluZXI7Ci0KLUBwcm90b2Nv
bCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0KLS0gKHZvaWQpYm91
bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIg
Kil2aWRlb1ZpZXdDb250YWluZXI7Ci0tICh2b2lkKXN1cGVydmlld0RpZENoYW5nZUZvclZpZGVv
Vmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVy
OwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViVmlkZW9WaWV3Q29udGFpbmVyIDogTlNWaWV3IHsK
LSAgICBpZCA8V2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IF92aWRlb1ZpZXdDb250YWlu
ZXJEZWxlZ2F0ZTsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaWQgPFdlYlZp
ZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB2aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTsKLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9WaWV3Q29udGFpbmVyCi0KLUBzeW50aGVz
aXplIHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPV92aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0
ZTsKLQotLSAodm9pZClyZXNpemVXaXRoT2xkU3VwZXJ2aWV3U2l6ZTooTlNTaXplKW9sZEJvdW5k
c1NpemUKLXsKLSAgICBbc3VwZXIgcmVzaXplV2l0aE9sZFN1cGVydmlld1NpemU6b2xkQm91bmRz
U2l6ZV07Ci0KLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIGJvdW5kc0RpZENoYW5n
ZUZvclZpZGVvVmlld0NvbnRhaW5lcjpzZWxmXTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRv
U3VwZXJ2aWV3Ci17Ci0gICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9TdXBlcnZpZXddOwotCi0gICAg
W192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1Zp
ZXdDb250YWluZXI6c2VsZl07Ci19Ci0KLUBlbmQKLQotZW51bSBjbGFzcyBQSVBTdGF0ZSB7Ci0g
ICAgTm90SW5QSVAsCi0gICAgSW5QSVAsCi0gICAgRXhpdGluZ1BJUAotfTsKLQotQGludGVyZmFj
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIDogTlNPYmplY3QgPFBJUFZpZXdD
b250cm9sbGVyRGVsZWdhdGUsIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB7Ci0gICAg
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKiBfd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOwotICAgIE5TU2l6ZSBfdmlkZW9EaW1lbnNpb25zOwotICAgIFJldGFp
blB0cjxQSVBWaWV3Q29udHJvbGxlcj4gX3BpcFZpZXdDb250cm9sbGVyOwotICAgIFJldGFpblB0
cjxOU1ZpZXdDb250cm9sbGVyPiBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcjsKLSAgICBS
ZXRhaW5QdHI8V2ViVmlkZW9WaWV3Q29udGFpbmVyPiBfdmlkZW9WaWV3Q29udGFpbmVyOwotICAg
IFBJUFN0YXRlIF9waXBTdGF0ZTsKLSAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IF9yZXR1cm5pbmdX
aW5kb3c7Ci0gICAgTlNSZWN0IF9yZXR1cm5pbmdSZWN0OwotICAgIEJPT0wgX3BsYXlpbmc7Ci0g
ICAgQk9PTCBfZGlkUmVxdWVzdEV4aXRpbmdQSVA7Ci0gICAgQk9PTCBfZXhpdGluZ1RvU3RhbmRh
cmRGdWxsc2NyZWVuOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yyopd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwotLSAodm9pZClpbnZhbGlkYXRlRnVs
bHNjcmVlblN0YXRlOwotLSAodm9pZClpbnZhbGlkYXRlOwotCi0vLyBUcmFja2luZyB2aWRlbyBw
bGF5YmFjayBzdGF0ZQotQHByb3BlcnR5IChub25hdG9taWMpIE5TU2l6ZSB2aWRlb0RpbWVuc2lv
bnM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5n
OwotLSAodm9pZCl1cGRhdGVJc1BsYXlpbmc6KEJPT0wpaXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0
ZTooZmxvYXQpcGxheWJhY2tSYXRlOwotCi0vLyBIYW5kbGluZyBQSVAgdHJhbnNpdGlvbnMKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBkaWRSZXF1ZXN0RXhpdGluZ1BJUDsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3Jl
ZW4pIEJPT0wgZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOwotCi0tICh2b2lkKXNldFVwUElQ
Rm9yVmlkZW9WaWV3OihOU1ZpZXcgKil2aWRlb1ZpZXcgd2l0aEZyYW1lOihOU1JlY3QpZnJhbWUg
aW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93OwotLSAodm9pZCllbnRlclBJUDsKLS0gKHZvaWQp
ZXhpdFBJUDsKLS0gKHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJlY3QgaW5X
aW5kb3c6KE5TV2luZG93ICopd2luZG93OwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDCi0KLUBzeW50aGVzaXplIHBsYXlpbmc9X3Bs
YXlpbmc7Ci1Ac3ludGhlc2l6ZSB2aWRlb0RpbWVuc2lvbnM9X3ZpZGVvRGltZW5zaW9uczsKLUBz
eW50aGVzaXplIGRpZFJlcXVlc3RFeGl0aW5nUElQPV9kaWRSZXF1ZXN0RXhpdGluZ1BJUDsKLUBz
eW50aGVzaXplIGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbj1fZXhpdGluZ1RvU3RhbmRhcmRG
dWxsc2NyZWVuOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyopd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjID0gd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwotICAgIF9waXBTdGF0
ZSA9IFBJUFN0YXRlOjpOb3RJblBJUDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGUKLXsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNl
dERlbGVnYXRlOm5pbF07Ci0gICAgX3BpcFZpZXdDb250cm9sbGVyID0gbmlsOwotICAgIFtfdmlk
ZW9WaWV3Q29udGFpbmVyIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgIFtfdmlkZW9WaWV3Q29u
dGFpbmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOm5pbF07Ci0gICAgX3ZpZGVvVmll
d0NvbnRhaW5lciA9IG5pbDsKLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciA9IG5p
bDsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7Ci0gICAgX2RpZFJlcXVlc3RF
eGl0aW5nUElQID0gTk87Ci0gICAgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbiA9IE5POwot
ICAgIF9yZXR1cm5pbmdXaW5kb3cgPSBuaWw7Ci0gICAgX3JldHVybmluZ1JlY3QgPSBOU1plcm9S
ZWN0OwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBbc2VsZiBpbnZhbGlkYXRlRnVs
bHNjcmVlblN0YXRlXTsKLSAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gbnVs
bHB0cjsKLSAgICBfdmlkZW9EaW1lbnNpb25zID0gTlNaZXJvU2l6ZTsKLX0KLQotLSAodm9pZCl1
cGRhdGVJc1BsYXlpbmc6KEJPT0wpaXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTooZmxvYXQpcGxh
eWJhY2tSYXRlCi17Ci0gICAgX3BsYXlpbmcgPSBpc1BsYXlpbmcgJiYgcGxheWJhY2tSYXRlOwot
Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKLX0KLQotLSAo
dm9pZClzZXRWaWRlb0RpbWVuc2lvbnM6KE5TU2l6ZSl2aWRlb0RpbWVuc2lvbnMKLXsKLSAgICBf
dmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1lbnNpb25zOwotCi0gICAgW19waXBWaWV3Q29udHJv
bGxlciBzZXRBc3BlY3RSYXRpbzpfdmlkZW9EaW1lbnNpb25zXTsKLX0KLQotLSAodm9pZClzZXRV
cFBJUEZvclZpZGVvVmlldzooTlNWaWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZy
YW1lIGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwotewotICAgIEFTU0VSVCghX3BpcFZpZXdD
b250cm9sbGVyKTsKLSAgICBBU1NFUlQoIV92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyKTsK
LSAgICBBU1NFUlQoIV92aWRlb1ZpZXdDb250YWluZXIpOwotCi0gICAgX3BpcFZpZXdDb250cm9s
bGVyID0gYWRvcHROUyhbYWxsb2NQSVBWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdF0pOwot
ICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW19waXBWaWV3
Q29udHJvbGxlciBzZXRVc2VyQ2FuUmVzaXplOllFU107Ci0gICAgW19waXBWaWV3Q29udHJvbGxl
ciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKLSAgICBbc2VsZiBzZXRWaWRlb0RpbWVuc2lvbnM6TlNF
cXVhbFNpemVzKF92aWRlb0RpbWVuc2lvbnMsIE5TWmVyb1NpemUpID8gZnJhbWUuc2l6ZSA6IF92
aWRlb0RpbWVuc2lvbnNdOwotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
ICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKTsKLQotICAgIF92aWRlb1ZpZXdD
b250YWluZXIgPSBhZG9wdE5TKFtbV2ViVmlkZW9WaWV3Q29udGFpbmVyIGFsbG9jXSBpbml0V2l0
aEZyYW1lOmZyYW1lXSk7Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0VmlkZW9WaWV3Q29u
dGFpbmVyRGVsZWdhdGU6c2VsZl07Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXIgYWRkU3Vidmll
dzp2aWRlb1ZpZXddOwotICAgIHZpZGVvVmlldy5mcmFtZSA9IFtfdmlkZW9WaWV3Q29udGFpbmVy
IGJvdW5kc107Ci0gICAgdmlkZW9WaWV3LmF1dG9yZXNpemluZ01hc2sgPSBOU1ZpZXdXaWR0aFNp
emFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOwotCi0gICAgX3ZpZGVvVmlld0NvbnRhaW5lckNv
bnRyb2xsZXIgPSBhZG9wdE5TKFtbTlNWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOwotICAg
IFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciBzZXRWaWV3Ol92aWRlb1ZpZXdDb250YWlu
ZXIuZ2V0KCldOwotICAgIFt3aW5kb3cuY29udGVudFZpZXcgYWRkU3VidmlldzpfdmlkZW9WaWV3
Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxhdGl2ZVRvOm5pbF07
Ci19Ci0KLS0gKHZvaWQpZW50ZXJQSVAKLXsKLSAgICBpZiAoX3BpcFN0YXRlID09IFBJUFN0YXRl
OjpJblBJUCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW192aWRlb1ZpZXdDb250YWluZXJDb250
cm9sbGVyIHZpZXddLmxheWVyLmJhY2tncm91bmRDb2xvciA9IENHQ29sb3JHZXRDb25zdGFudENv
bG9yKGtDR0NvbG9yQmxhY2spOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdD
b250cm9sbGVyQXNQaWN0dXJlSW5QaWN0dXJlOl92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVy
LmdldCgpXTsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6SW5QSVA7Ci19Ci0KLS0gKHZvaWQp
ZXhpdFBJUAotewotICAgIGlmIChfcGlwU3RhdGUgIT0gUElQU3RhdGU6OkluUElQIHx8ICFfcGlw
Vmlld0NvbnRyb2xsZXIgfHwgIV92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBZRVM7Ci0gICAgW192aWRl
b1ZpZXdDb250YWluZXJDb250cm9sbGVyIHZpZXddLmxheWVyLmJhY2tncm91bmRDb2xvciA9IENH
Q29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQ2xlYXIpOwotICAgIFtfcGlwVmlld0NvbnRy
b2xsZXIgZGlzbWlzc1ZpZXdDb250cm9sbGVyOl92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVy
LmdldCgpXTsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6RXhpdGluZ1BJUDsKLX0KLQotLSAo
dm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpcmVjdCBpbldpbmRvdzooTlNXaW5k
b3cgKil3aW5kb3cKLXsKLSAgICBfcmV0dXJuaW5nV2luZG93ID0gd2luZG93OwotICAgIF9yZXR1
cm5pbmdSZWN0ID0gcmVjdDsKLSAgICAKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFJlcGxh
Y2VtZW50UmVjdDpyZWN0XTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFJlcGxhY2VtZW50
V2luZG93OndpbmRvd107Ci0KLSAgICBbc2VsZiBleGl0UElQXTsKLX0KLQotLy8gV2ViVmlkZW9W
aWV3Q29udGFpbmVyRGVsZWdhdGUKLQotLSAodm9pZClib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1Zp
ZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcgot
ewotICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5lciB8fCAhX3BpcFZpZXdDb250cm9sbGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlRfVU5VU0VEKHZpZGVvVmlld0NvbnRhaW5lciwg
dmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250YWluZXIpOwotCi0gICAgaWYgKF93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9M
YXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOwotfQotCi0tICh2b2lkKXN1
cGVydmlld0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFp
bmVyICopdmlkZW9WaWV3Q29udGFpbmVyCi17Ci0gICAgaWYgKCFfdmlkZW9WaWV3Q29udGFpbmVy
IHx8ICFfcGlwVmlld0NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCh2
aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAgICBpZiAoIVt2
aWRlb1ZpZXdDb250YWluZXIgaXNEZXNjZW5kYW50T2Y6W19waXBWaWV3Q29udHJvbGxlciB2aWV3
XV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9uY2UgdGhlIHZpZXcgaXMgbW92ZWQgaW50
byB0aGUgcGlwIHZpZXcsIG1ha2Ugc3VyZSBpdCByZXNpemVzIHdpdGggdGhlIHBpcCB2aWV3Lgot
ICAgIHZpZGVvVmlld0NvbnRhaW5lci5mcmFtZSA9IFt2aWRlb1ZpZXdDb250YWluZXIgc3VwZXJ2
aWV3XS5ib3VuZHM7Ci0gICAgdmlkZW9WaWV3Q29udGFpbmVyLmF1dG9yZXNpemluZ01hc2sgPSBO
U1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOwotfQotCi0vLyBQSVBWaWV3
Q29udHJvbGxlckRlbGVnYXRlCi0KLS0gKEJPT0wpcGlwU2hvdWxkQ2xvc2U6KFBJUFZpZXdDb250
cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0Nv
bnRyb2xsZXIpOwotCi0gICAgaWYgKCFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjIHx8
ICFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcigpKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgX2RpZFJlcXVlc3RFeGl0
aW5nUElQID0gWUVTOwotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCktPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpOwotCi0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKXBpcERpZENsb3NlOihQSVBWaWV3
Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZp
ZXdDb250cm9sbGVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
ICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKCkgJiYgX3ZpZGVvVmlld0NvbnRhaW5lciAmJiBfcmV0dXJuaW5nV2luZG93ICYmICFOU0Vx
dWFsUmVjdHMoX3JldHVybmluZ1JlY3QsIE5TWmVyb1JlY3QpKSB7Ci0gICAgICAgIFtOU0FuaW1h
dGlvbkNvbnRleHQgcnVuQW5pbWF0aW9uR3JvdXA6XihOU0FuaW1hdGlvbkNvbnRleHQgKmNvbnRl
eHQpIHsKLSAgICAgICAgICAgIGNvbnRleHQuYWxsb3dzSW1wbGljaXRBbmltYXRpb24gPSBOTzsK
LSAgICAgICAgICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldEZyYW1lOl9yZXR1cm5pbmdSZWN0
XTsKLSAgICAgICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5l
ciBib3VuZHNdKTsKLSAgICAgICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMt
PndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpOwotCi0gICAgICAgICAg
ICBbW19yZXR1cm5pbmdXaW5kb3cgY29udGVudFZpZXddIGFkZFN1YnZpZXc6X3ZpZGVvVmlld0Nv
bnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93QWJvdmUgcmVsYXRpdmVUbzpuaWxdOwot
ICAgICAgICB9IGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Ci0gICAgfQotCi0gICAgaWYgKF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpIHsKLSAgICAgICAgaWYgKCFzZWxmLmlzRXhpdGlu
Z1RvU3RhbmRhcmRGdWxsc2NyZWVuKSB7Ci0gICAgICAgICAgICBpZiAoV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwqIHZpZGVvRnVsbHNjcmVlbk1vZGVsID0gX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkgewotICAgICAgICAgICAgICAgIHZp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgICAgICAgICAgICAgdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+Y2xlYXJNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUp
OwotCi0gICAgICAgIGlmIChXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyID0gX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgICAgIGZ1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQp
cGlwQWN0aW9uUGxheTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5V
U0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7Ci19Ci0KLS0g
KHZvaWQpcGlwQWN0aW9uUGF1c2U6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCi17Ci0gICAgQVNT
RVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwotCi0gICAgaWYgKF93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsK
LX0KLQotLSAodm9pZClwaXBBY3Rpb25TdG9wOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAotewot
ICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAg
IGlmICghX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9
IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkpCi0gICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsLT5wYXVzZSgpOwotCi0gICAgLy8gRklY
TUUgMjUwOTYxNzA6IFNob3VsZCBhbmltYXRlIG9ubHkgaWYgdGhlIHBhZ2Ugd2l0aCB0aGUgdmlk
ZW8gaXMgdW5vYnNjdXJlZC4gRm9yIG5vdywgYWx3YXlzIGNsb3NlIHdpdGhvdXQgYW5pbWF0aW9u
LgotICAgIFtzZWxmIGV4aXRQSVBdOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UpCi0gICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UpCi17Ci0gICAgQVNTRVJUKG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKTsKLSAgICBhdXRvIG1vZGVsID0gbV9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7Ci0gICAgbW9kZWwtPmFk
ZENsaWVudCgqdGhpcyk7Ci0gICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSB1cGRh
dGVJc1BsYXlpbmc6bW9kZWwtPmlzUGxheWluZygpIG5ld1BsYXliYWNrUmF0ZTptb2RlbC0+cGxh
eWJhY2tSYXRlKCldOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6On5XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKQotewotICAgIGlmIChtX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgbV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnJlbW92ZUNsaWVu
dCgqdGhpcyk7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCi17Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhp
cyk7Ci0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG1vZGVsOwotICAgIGlmIChtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGll
bnQoKnRoaXMpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIqIG9ic2VydmVyKQotewotICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0g
b2JzZXJ2ZXI7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewot
ICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0g
bV9tb2RlIHwgbW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZChtX21vZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xl
YXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQot
ewotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2Rl
ID0gbV9tb2RlICYgfm1vZGU7Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX21vZGUgPSBuZXdNb2RlOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNo
YW5nZWQobV9tb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17Ci0gICAg
W3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSB1cGRhdGVJc1BsYXlpbmc6aXNQbGF5aW5n
IG5ld1BsYXliYWNrUmF0ZTpwbGF5YmFja1JhdGVdOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSAgICBtX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS0+ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci19Ci0KLVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpCi17Ci0gICAgaWYgKCFtX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMpCi0gICAgICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQyA9IGFkb3B0TlMoW1tXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNP
YmpDIGFsbG9jXSBpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzp0aGlzXSk7
Ci0KLSAgICByZXR1cm4gbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDLmdldCgpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVu
KE5TVmlldyYgbGF5ZXJIb3N0ZWRWaWV3LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgTlNX
aW5kb3cgKnBhcmVudFdpbmRvdywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQotewotICAg
IExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1
bGxzY3JlZW4oJXApLCBpbml0aWFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6
JXAsIG1vZGU6JWQiLCB0aGlzLCBpbml0aWFsUmVjdC54KCksIGluaXRpYWxSZWN0LnkoKSwgaW5p
dGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdywgbW9k
ZSk7Ci0KLSAgICBVTlVTRURfUEFSQU0oYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsK
LSAgICBBU1NFUlQobW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLQotICAgIG1fbW9kZSA9IG1vZGU7Ci0KLSAgICBbdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHNldFVwUElQRm9yVmlkZW9WaWV3OiZsYXllckhv
c3RlZFZpZXcgd2l0aEZyYW1lOihOU1JlY3QpaW5pdGlhbFJlY3QgaW5XaW5kb3c6cGFyZW50V2lu
ZG93XTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHByb3Rl
Y3RlZFRoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZFNldHVwRnVsbHNjcmVlbigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRo
aXMpOwotCi0gICAgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSB7Ci0gICAgICAgIFttX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakMgZW50ZXJQSVBdOwotCi0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQotICAgICAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpZRVNdOwot
I2VuZGlmCi0KLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAg
ICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxs
c2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykK
LXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
ZXhpdEZ1bGxzY3JlZW4oJXApLCBmaW5hbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2lu
ZG93OiVwIiwgdGhpcywgZmluYWxSZWN0LngoKSwgZmluYWxSZWN0LnkoKSwgZmluYWxSZWN0Lndp
ZHRoKCksIGZpbmFsUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKLQotI2lmIEVOQUJMRShX
RUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2
ZTpOT107Ci0jZW5kaWYKLQotICAgIGlmIChbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VP
YmpDIGRpZFJlcXVlc3RFeGl0aW5nUElQXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGZp
bmFsUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMgZXhpdFBJUF07Ci0gICAgZWxzZQotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6ZmluYWxSZWN0IGluV2luZG93OnBh
cmVudFdpbmRvd107Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
eGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSglcCksIG1vZGU6JWQiLCB0aGlzLCBtb2RlKTsKLQotI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Ut
PnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpOT107
Ci0jZW5kaWYKLQotICAgIGlmIChbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGRp
ZFJlcXVlc3RFeGl0aW5nUElQXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBpc0V4aXRp
bmdUb1N0YW5kYXJkRnVsbHNjcmVlbiA9IG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQ7Ci0gICAgLy8gT24gTWFjLCBzdGFuZGFyZCBmdWxs
c2NyZWVuIGlzIGhhbmRsZWQgYnkgdGhlIEZ1bGxzY3JlZW4gQVBJIGFuZCBub3QgYnkgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci4KLSAgICAvLyBKdXN0IHVwZGF0ZSBtX21vZGUgZGlyZWN0bHkg
dG8gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgaW4g
dGhhdCBjYXNlIHRvIGtlZXAKLSAgICAvLyBtX21vZGUgaW4gc3luYyB3aXRoIHRoZSBmdWxsc2Ny
ZWVuIG1vZGUgaW4gSFRNTE1lZGlhRWxlbWVudC4KLSAgICBpZiAoaXNFeGl0aW5nVG9TdGFuZGFy
ZEZ1bGxzY3JlZW4pCi0gICAgICAgIG1fbW9kZSA9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkOwotCi0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlT2JqQyBzZXRFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW46aXNFeGl0aW5nVG9TdGFu
ZGFyZEZ1bGxzY3JlZW5dOwotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMg
ZXhpdFBJUF07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVh
bnVwRnVsbHNjcmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgW21f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKLSAgICBbbV93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGVdOwotCi0g
ICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQotewotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCVwKSIsIHRo
aXMpOwotCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKLSAgICBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKLQotICAgIGNsZWFudXBGdWxsc2NyZWVuKCk7Ci0KLSAg
ICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGludmFsaWRhdGVdOwotICAgIG1f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyA9IG5pbDsKLX0KLQotI2lmICFMT0dfRElT
QUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyKiBib29sU3RyaW5nKGJvb2wgdmFsKQotewotICAgIHJl
dHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNp
YmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpw
cmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApLCB2aXNpYmxlOiVzLCBpbmxpbmVSZWN0OnslZCwg
JWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSks
IGlubGluZVJlY3QueCgpLCBpbmxpbmVSZWN0LnkoKSwgaW5saW5lUmVjdC53aWR0aCgpLCBpbmxp
bmVSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOwotCi0gICAgaWYgKCF2aXNpYmxlKSB7Ci0g
ICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQocGFyZW50V2luZG93KTsKLSAgICBbbV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5T
UmVjdClpbmxpbmVSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVu
YWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoJXApLCBlbmFibGVkOiVz
IiwgdGhpcywgYm9vbFN0cmluZyhlbmFibGVkKSk7Ci0KLSAgICBpZiAoZW5hYmxlZCAmJiBtX21v
ZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUlu
UGljdHVyZSkKLSAgICAgICAgZXhpdEZ1bGxzY3JlZW4oSW50UmVjdCgpLCBuaWwpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wg
aGFzVmlkZW8pCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZCglcCk6JXMiLCB0aGlzLCBib29sU3RyaW5nKGhhc1Zp
ZGVvKSk7Ci0KLSAgICBpZiAoIWhhc1ZpZGVvKQotICAgICAgICBleGl0RnVsbHNjcmVlbldpdGhv
dXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRl
b0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewot
ICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRl
b0RpbWVuc2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6JS4wZiwgaGVpZ2h0OiUuMGYiLCB0aGlzLCB2
aWRlb0RpbWVuc2lvbnMud2lkdGgoKSwgdmlkZW9EaW1lbnNpb25zLmhlaWdodCgpKTsKLQotICAg
IC8vIFdpZHRoIGFuZCBoZWlnaHQgY2FuIGJlIHplcm8gd2hlbiB3ZSBhcmUgdHJhbnNpdGlvbmlu
ZyBmcm9tIG9uZSB2aWRlbyB0byBhbm90aGVyLiBJZ25vcmUgemVybyB2YWx1ZXMuCi0gICAgaWYg
KCF2aWRlb0RpbWVuc2lvbnMuaXNaZXJvKCkpCi0gICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107Ci19Ci0K
LWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppc1BsYXlpbmdWaWRlb0luRW5o
YW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzTW9kZShXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJl
KSAmJiBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGlzUGxheWluZ107Ci19Ci0K
LWJvb2wgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICByZXR1cm4gUElQTGlicmFy
eSgpICYmIGdldFBJUFZpZXdDb250cm9sbGVyQ2xhc3MoKTsKLX0KLQotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA0YTE3MGEzNjc2YTE5MDNkNDc0Yjkw
OTFjY2M5MTIxNDZjN2YxODgxLi5jMDU2ODM2NDJhOWZiZDIzY2MzYmZhZmU3NDk1Zjg0MjRmMGIz
ZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0zMTksOCArMzE5LDgg
QEAKIAogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpCi0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgot
I2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNlbmRpZgogCiAj
aWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3RGF0YS5tbQppbmRleCA3Nzk3MzZhMTZhZmY2MGUzZmE1YTBhYzdlYTM2NDA2ZGMzNjRmMmU0
Li5mOTMwZmE5NmM4ODViYmZmNzQwNGYwNzIzNTk2NzU5NTVmYzRiODMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KQEAgLTUxLDggKzUxLDggQEAKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0j
aW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNlbmRpZgogCiBCT09MIGFw
cGxpY2F0aW9uSXNUZXJtaW5hdGluZyA9IE5POwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
RGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
aW5kZXggODNhZDBlOGE1NzhlMTJkNjg3NTU2MGIwODc4MWE3NzQ3MTg0NDYxNS4uZTI0ZTMwNThi
NjcyYjc4MGVjZDQ5NzdlNjcyNjI0YmM4NGQxMzBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNl
cy5tYWtlCkBAIC0xNTQsOCArMTU0LDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2Vi
UGFzdGVib2FyZFByb3h5IFwKICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3IgXAogICAgIFdlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5IFwKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIFwK
LSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgXAorICAgIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIgXAorICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSBcCiAgICAgV2ViUHJv
Y2VzcyBcCiAgICAgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24gXAogICAgIFdlYlByb2Nlc3NQb29sIFwK
QEAgLTE2OCw4ICsxNjgsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBXZWJTb2NrZXRT
dHJlYW0gXAogICAgIFdlYlVzZXJDb250ZW50Q29udHJvbGxlciBcCiAgICAgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHkgXAotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgXAotICAg
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSBcCisgICAgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlciBcCisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IFwKICMKIAogU0NSSVBUUyA9
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0K
aW5kZXggMzIyMWQ3NWE4ZWExZTEwODIzZjcxZjc4ZWViZGNlODVmN2ZhMDc1My4uZjk5ZTQyYjMz
MDIwMWIyMjZhM2NmM2U3NGJlMDYzY2JkMDZmMTFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTEyNiwxMiArMTI2LDEyIEBACiAj
aW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2lt
cG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24uaCIKICNpbXBvcnQgIldLUERGVmlldy5oIgogI2ltcG9ydCAiV0tQYXNz
d29yZFZpZXcuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIgogI2ltcG9ydCAiX1dLRHJhZ2dhYmxlRWxlbWVudEluZm9JbnRlcm5hbC5o
IgogI2ltcG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyLmgiCiAjaW1wb3J0IDxVSUtpdC9V
SUFwcGxpY2F0aW9uLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTc1ZTVm
NjVmMDNiMzI1OTI5OTBmMjZkZTYwNDg0Mjc5ZDBjYThiNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
aApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2VsZWN0aW9u
T3B0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVZpZXcuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lUmFu
Z2VzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaD4KKyNlbHNlCisj
aW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oSU9TKQordHlwZWRlZiBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdCBQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyNlbHNl
Cit0eXBlZGVmIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBQbGF0Zm9y
bVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OworCitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQgZmluYWw6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBX
ZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCAgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQo
bWFuYWdlciwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dCgpIHsgfQorCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFn
ZXIgPSBudWxscHRyOyB9CisKKyAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgIHZv
aWQgYWRkQ2xpZW50KFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgZmlu
YWw7CisgICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQmKWZpbmFsOworCisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKTsKKyAg
ICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUpOworICAgIHZvaWQgYnVmZmVyZWRUaW1l
Q2hhbmdlZChkb3VibGUpOworICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91
YmxlKTsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFj
a1JhdGUpOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKFdlYkNvcmU6OlRpbWVSYW5n
ZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7
CisgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgYXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIGxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lk
IGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7
CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCk7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sLCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJv
b2wpOworICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7CisKKyAgICBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBtYW5h
Z2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQor
ICAgICAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKKyAgICB7CisgICAgfQorCisgICAgLy8g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICB2b2lkIHBsYXkoKSBmaW5hbDsKKyAgICB2b2lk
IHBhdXNlKCkgZmluYWw7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKKyAgICB2
b2lkIGJlZ2luU2NydWJiaW5nKCkgZmluYWw7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5h
bDsKKyAgICB2b2lkIHNlZWtUb1RpbWUoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIGZhc3RTZWVr
KGRvdWJsZSB0aW1lKSBmaW5hbDsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgZmlu
YWw7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBmaW5hbDsKKyAgICB2b2lkIGVu
ZFNjYW5uaW5nKCkgZmluYWw7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2
NF90KSBmaW5hbDsKKyAgICB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCkg
ZmluYWw7CisgICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkgZmluYWw7CisgICAgdm9p
ZCB0b2dnbGVNdXRlZCgpIGZpbmFsOworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7CisK
KyAgICBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
cGxheWJhY2tTdGFydGVkVGltZTsgfQorICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2N1cnJlbnRUaW1lOyB9CisgICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYnVmZmVyZWRUaW1lOyB9CisgICAgYm9vbCBpc1BsYXlp
bmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzUGxheWluZzsgfQorICAgIGJvb2wgaXNTY3J1
YmJpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzU2NydWJiaW5nOyB9CisgICAgZmxvYXQg
cGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wbGF5YmFja1JhdGU7IH0KKyAg
ICBSZWY8V2ViQ29yZTo6VGltZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3NlZWthYmxlUmFuZ2VzLmNvcHlSZWYoKTsgfQorICAgIGRvdWJsZSBzZWVrYWJs
ZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVr
YWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lOyB9CisgICAgZG91YmxlIGxpdmVVcGRhdGVJ
bnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZVVwZGF0ZUludGVydmFsOyB9CisgICAgYm9v
bCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NhblBsYXlGYXN0
UmV2ZXJzZTsgfQorICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zOyB9CisgICAgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OyB9Cisg
ICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zOyB9CisgICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsgfQorICAgIGJv
b2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVy
bmFsUGxheWJhY2tFbmFibGVkOyB9CisgICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZTsgfQorICAgIFN0cmlu
ZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWU7IH0KKyAgICBib29sIHdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV93aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsgfQorICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fbXV0ZWQ7IH0KKworICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90IG1fY29udGV4dElkOworICAgIEhhc2hTZXQ8
V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAg
ZG91YmxlIG1fcGxheWJhY2tTdGFydGVkVGltZSB7IDAgfTsKKyAgICBib29sIG1fcGxheWJhY2tT
dGFydGVkVGltZU5lZWRzVXBkYXRlIHsgZmFsc2UgfTsKKyAgICBkb3VibGUgbV9kdXJhdGlvbiB7
IDAgfTsKKyAgICBkb3VibGUgbV9jdXJyZW50VGltZSB7IDAgfTsKKyAgICBkb3VibGUgbV9idWZm
ZXJlZFRpbWUgeyAwIH07CisgICAgYm9vbCBtX2lzUGxheWluZyB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2lzU2NydWJiaW5nIHsgZmFsc2UgfTsKKyAgICBmbG9hdCBtX3BsYXliYWNrUmF0ZSB7IDAg
fTsKKyAgICBSZWY8V2ViQ29yZTo6VGltZVJhbmdlcz4gbV9zZWVrYWJsZVJhbmdlcyB7IFdlYkNv
cmU6OlRpbWVSYW5nZXM6OmNyZWF0ZSgpIH07CisgICAgZG91YmxlIG1fc2Vla2FibGVUaW1lUmFu
Z2VzTGFzdE1vZGlmaWVkVGltZSB7IDAgfTsKKyAgICBkb3VibGUgbV9saXZlVXBkYXRlSW50ZXJ2
YWwgeyAwIH07CisgICAgYm9vbCBtX2NhblBsYXlGYXN0UmV2ZXJzZSB7IGZhbHNlIH07CisgICAg
VmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBtX2F1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zOworICAgIHVpbnQ2NF90IG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07
CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBtX2xlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnM7CisgICAgdWludDY0X3QgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4IHsgMCB9OworICAgIGJvb2wgbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCB7IGZhbHNlIH07
CisgICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
IG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgeyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
VGFyZ2V0VHlwZU5vbmUgfTsKKyAgICBTdHJpbmcgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVk
RGV2aWNlTmFtZTsKKyAgICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07Cit9OworCitjbGFzcyBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gY3Jl
YXRlKFdlYlBhZ2VQcm94eSYpOworICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBQbGF0Zm9ybVdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSogY29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCk7CisgICAg
dm9pZCByZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKKworICAgIGV4cGxpY2l0IFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmKTsKKyAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworCisgICAg
dHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+
LCBSZWZQdHI8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+PiBNb2RlbEludGVy
ZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBQ
bGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIK
KyAgICB2b2lkIHNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICB2
b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgY3VycmVu
dFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3Vi
bGUgaG9zdFRpbWUpOworICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNWZWN0
b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRv
dWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRl
SW50ZXJ2YWwpOworICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVj
dG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBl
LCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKKyAgICB2b2lk
IGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbik7Cisg
ICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKTsKKyAgICB2b2lkIGhhbmRs
ZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCwgU3RyaW5nKSBjb25zdDsKKyAg
ICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOworCisg
ICAgLy8gTWVzc2FnZXMgdG8gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgorICAgIHZvaWQgcGxh
eSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjcnVi
YmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKTsKKyAg
ICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBpbmRleCk7CisgICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29u
dGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIHZvaWQgc2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKKwor
ICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOworICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50
ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKKyAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdl
ckNvbnRleHRJZCB7IDAgfTsKKyAgICBIYXNoQ291bnRlZFNldDx1aW50NjRfdD4gbV9jbGllbnRD
b3VudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY2MzZhODMyNzNlYjhlMTQ0YTZhMTAzNTA1NTc4OWMyM2UwOTEyN2QKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorbWVzc2FnZXMgLT4gV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IHsKKyAgICBSZXNldE1lZGlhU3RhdGUodWludDY0
X3QgY29udGV4dElkKQorICAgIEN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQorICAgIEJ1ZmZlcmVkVGltZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQorICAgIFNlZWth
YmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBh
aXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3Vi
bGUgbGl2ZVVwZGF0ZUludGVydmFsKQorICAgIENhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQorICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxX
ZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKKyAgICBBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
ICAgIEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmlj
ZU5hbWUpCisgICAgV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKKyAgICBEdXJhdGlvbkNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCisgICAgUGxheWJhY2tTdGFydGVkVGltZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKKyAgICBS
YXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0
ZSkKKyAgICBNdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKKyAg
ICBTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkK
KyAgICBDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKKworICAgIEhhbmRsZUNvbnRyb2xs
ZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZCkKK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9Q
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhkNDU5ZmVlMGY0OTA2
YmVlYjk5NGNjNDEyNzQ2MTA1NzkzNzg5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KQEAgLTAs
MCArMSw1NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisKKyNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5o
IgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisjcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQKKwordm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRh
aW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQorCit2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlu
cygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKwordm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXkoKQoreworICAgIGlmIChtX21hbmFn
ZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGxheShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5wYXVzZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQoreworICAgIGlm
IChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGxheVN0YXRlKG1fY29udGV4
dElkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Ny
dWJiaW5nKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmJlZ2lu
U2NydWJiaW5nKG1fY29udGV4dElkKTsKKworICAgIG1faXNTY3J1YmJpbmcgPSB0cnVlOworfQor
Cit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmVuZFNjcnViYmluZyhtX2Nv
bnRleHRJZCk7CisKKyAgICBtX2lzU2NydWJiaW5nID0gZmFsc2U7CisgICAgbV9wbGF5YmFja1N0
YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgPSBpc1BsYXlpbmcoKTsKK30KKwordm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYg
KG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0
aW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVr
KGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
ZmFzdFNlZWsobV9jb250ZXh0SWQsIHRpbWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQoreworICAgIGlmIChtX21hbmFn
ZXIpCisgICAgICAgIG1fbWFuYWdlci0+YmVnaW5TY2FubmluZ0ZvcndhcmQobV9jb250ZXh0SWQp
OworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2Fubmlu
Z0JhY2t3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZChtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY2FubmluZygpCit7CisgICAgaWYgKG1fbWFuYWdlcikK
KyAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY2FubmluZyhtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVp
bnQ2NF90IG9wdGlvbklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKHVpbnQ2NF90IG9wdGlvbklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7
Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnRv
Z2dsZVBpY3R1cmVJblBpY3R1cmUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlTXV0ZWQobV9jb250ZXh0SWQpOworfQorCit2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldE11dGVkKG1fY29udGV4
dElkLCBtdXRlZCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpw
bGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sK
KyAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWUgPSBwbGF5YmFja1N0YXJ0ZWRUaW1lOworICAgIG1f
cGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9u
KQoreworICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwor
fQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFu
Z2VkKGRvdWJsZSBjdXJyZW50VGltZSkKK3sKKyAgICBtX2N1cnJlbnRUaW1lID0gY3VycmVudFRp
bWU7CisgICAgYXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBz
eXN0ZW1VcHRpbWVdOworICAgIGlmIChtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSkK
KyAgICAgICAgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY3VycmVudFRpbWUpOworCisgICAg
Zm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Y3VycmVudFRp
bWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVk
VGltZSkKK3sKKyAgICBtX2J1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZTsKKyAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5idWZmZXJlZFRpbWVDaGFu
Z2VkKGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQorewor
ICAgIG1faXNQbGF5aW5nID0gaXNQbGF5aW5nOworICAgIG1fcGxheWJhY2tSYXRlID0gcGxheWJh
Y2tSYXRlOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGll
bnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKK30KKwordm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3Jl
OjpUaW1lUmFuZ2VzJiBzZWVrYWJsZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRv
dWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgbV9zZWVrYWJsZVJhbmdlcyA9IHNlZWth
YmxlUmFuZ2VzOworICAgIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IGxh
c3RNb2RpZmllZFRpbWU7CisgICAgbV9saXZlVXBkYXRlSW50ZXJ2YWwgPSBsaXZlVXBkYXRlSW50
ZXJ2YWw7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVu
dC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1l
LCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJz
ZSkKK3sKKyAgICBtX2NhblBsYXlGYXN0UmV2ZXJzZSA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKKyAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5jYW5QbGF5
RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7Cit9CisKK3ZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgYXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnMsIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KQoreworICAgIG1fYXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKKyAg
ICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7Cisg
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+YXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBh
dWRpb01lZGlhU2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1
aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQoreworICAgIG1fbGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAgbV9s
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsKKwor
ICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMsIGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxl
Y3RlZEluZGV4OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAg
IGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXg7CisKKyAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIGxvY2FsaXplZE5hbWUpCit7CisgICAgbV9leHRlcm5hbFBsYXliYWNrRW5h
YmxlZCA9IGVuYWJsZWQ7CisgICAgbV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSA9IHR5cGU7
CisgICAgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZE5h
bWU7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50
LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWROYW1lKTsK
K30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
KQoreworICAgIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgPSB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZDsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAg
ICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit7CisgICAgbV9tdXRlZCA9IG11
dGVkOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQt
Pm11dGVkQ2hhbmdlZChtdXRlZCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eQorCitSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
PiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBh
Z2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkocGFnZSkpOworfQorCitXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBtX3Bh
Z2UoJnBhZ2UpCit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOworfQorCitXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6On5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKQoreworICAgIGlm
ICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7CisgICAgbV9w
YWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlID0gbnVsbHB0cjsKKworICAgIGZvciAoYXV0byYgdHVwbGUgOiBt
X2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50
ZXJmYWNlKSA9IHR1cGxlOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAg
IH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fY2xpZW50Q291bnRzLmNsZWFy
KCk7Cit9CisKK1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VU
dXBsZSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0PiBtb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3JlYXRl
KCp0aGlzLCBjb250ZXh0SWQpOworICAgIFJlZjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6
OmNyZWF0ZShtb2RlbCk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9k
ZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQorCitXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNl
VHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsK
KyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3Vy
ZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitQbGF0Zm9ybVdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZSYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1
cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8
MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK3ZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCkKK3sKKyAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkKTsKK30KKwordm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQo
dWludDY0X3QgY29udGV4dElkKQoreworICAgIGlmICghbV9jbGllbnRDb3VudHMucmVtb3ZlKGNv
bnRleHRJZCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0
SWQpLmludmFsaWRhdGUoKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Cit9
CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIK
Kwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldFVwUGxheWJhY2tDb250
cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQoreworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPT0gY29udGV4dElkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAg
ICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwor
CisgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7CisgICAgZW5zdXJl
SW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKS5lbnN1cmVDb250cm9sc01hbmFn
ZXIoKTsKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KTsKKworICAgIG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQor
eworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7
CisgICAgbV9wYWdlLT52aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpOworI2VuZGlmCit9
CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUo
dWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJl
c2V0TWVkaWFTdGF0ZSgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRU
aW1lLCBkb3VibGUgaG9zdFRpbWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jdXJy
ZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5idWZmZXJl
ZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFz
dE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBSZWY8VGlt
ZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworICAgIGZvciAoY29u
c3QgYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKKyAgICAgICAgQVNTRVJUKGlzZmluaXRlKHJhbmdl
LmZpcnN0KSk7CisgICAgICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5zZWNvbmQpKTsKKyAgICAg
ICAgQVNTRVJUKHJhbmdlLnNlY29uZCA+PSByYW5nZS5maXJzdCk7CisgICAgICAgIHRpbWVSYW5n
ZXMtPmFkZChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsKKyAgICB9CisKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9k
aWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgdmFsdWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jYW5QbGF5
RmFzdFJldmVyc2VDaGFuZ2VkKHZhbHVlKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywg
c2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlv
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6ZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNl
TmFtZSkKK3sKKyAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7CisgICAgQVNTRVJUKHR5cGUgPT0g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBlID09IFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSk7CisKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERl
dmljZU5hbWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBkaXNhYmxlZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLndpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IG11dGVkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubXV0ZWRDaGFuZ2VkKG11dGVk
KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQoreworICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkucGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tT
dGFydGVkVGltZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpy
YXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0
ZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJhdGVDaGFuZ2VkKGlzUGxheWluZywg
cmF0ZSk7Cit9CisKKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmhhbmRs
ZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBp
ZGVudGlmaWVyKSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoY29udGV4dElk
ID09IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICBtX3BhZ2UtPmhhbmRsZUNv
bnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShpZGVudGlmaWVyKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHRJZCk7CisgICAgVU5VU0VEX1BBUkFNKGlkZW50aWZpZXIpOworI2VuZGlm
Cit9CisKKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIKKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBsYXkodWludDY0X3Qg
Y29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OlBhdXNlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
Kwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlZWtUb1RpbWUo
Y29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSB0aW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6RmFzdFNlZWsoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9
CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9y
d2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNj
YW5uaW5nQmFja3dhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpFbmRTY2FubmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwor
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRp
b24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJlSW5QaWN0dXJlKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9n
Z2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlTXV0ZWQoY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZXRNdXRlZChjb250
ZXh0SWQsIG11dGVkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpyZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpCit7CisgICAg
aWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXF1ZXN0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK1BsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpCit7CisgICAgaWYg
KCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UobV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQpOworICAgIHJldHVybiAmaW50ZXJmYWNlOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYzhlYWJkMGQ4NGE2MzE4Njc3YmFiYWEwYzI1M2NlY2U1NjJhYTViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3Nh
Z2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCit0eXBlZGVmIFdl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IFBsYXRmb3JtV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlOworI2Vsc2UKK3R5cGVkZWYgV2ViQ29yZTo6V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjIFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CitjbGFz
cyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CisK
K2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCBmaW5hbAorICAgIDogcHVibGlj
IFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PgorICAgICwgcHVibGlj
IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gY3JlYXRlKFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KG1h
bmFnZXIsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmly
dHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCk7CisKKyAgICB2b2lkIGludmFs
aWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KKworICAgIFBsYXRmb3JtVmlldyAqbGF5
ZXJIb3N0VmlldygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJIb3N0Vmlldy5nZXQoKTsgfQorICAg
IHZvaWQgc2V0TGF5ZXJIb3N0VmlldyhSZXRhaW5QdHI8UGxhdGZvcm1WaWV3PiYmIGxheWVySG9z
dFZpZXcpIHsgbV9sYXllckhvc3RWaWV3ID0gV1RGTW92ZShsYXllckhvc3RWaWV3KTsgfQorCitw
cml2YXRlOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmLCB1aW50
NjRfdCk7CisKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZvaWQgYWRkQ2xp
ZW50KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRX
aXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUo
V2ViQ29yZTo6RmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2
aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBv
dmVycmlkZTsKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wg
aGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9CisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fdmlkZW9EaW1lbnNpb25zOyB9CisKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcgorICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEV4aXRGdWxsc2Ny
ZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRl
OworICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7CisKKyAg
ICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKKyAgICBSZWY8V2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOworICAg
IHVpbnQ2NF90IG1fY29udGV4dElkOworICAgIFJldGFpblB0cjxQbGF0Zm9ybVZpZXcgKj4gbV9s
YXllckhvc3RWaWV3OworICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdmlkZW9EaW1l
bnNpb25zOworICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07Cit9OworCitjbGFzcyBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4g
Y3JlYXRlKFdlYlBhZ2VQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOwor
ICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpOworCisgICAgdm9p
ZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4o
KTsKKyAgICBib29sIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKSBjb25zdDsKKyAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93Vmlk
ZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29t
ZUFjdGl2ZSgpOworICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Q7CisKKyNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICBib29sIGlzUGxheWlu
Z1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7CisKKyAgICBl
eHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiwgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHR5cGVk
ZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiwgUmVm
UHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VU
dXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxB
bmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZv
cm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
OworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisgICAg
dm9pZCBzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2
aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBo
b3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICB2b2lkIHNl
dEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAgdm9pZCBzZXRWaWRlb0Rp
bWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsK
KyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQg
ZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFs
UmVjdCk7CisgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpOworI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorICAgIHZvaWQgZXhpdEZ1bGxz
Y3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyNlbmRpZgorCisg
ICAgLy8gTWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIHZvaWQgcmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlh
ID0gZmFsc2UpOworICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBk
aWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0Vmlk
ZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0KTsKKyAg
ICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSk7CisgICAgdm9pZCBmdWxsc2Ny
ZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVsbHNjcmVlbk1heVJl
dHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJQYWdlUHJveHkqIG1f
cGFnZTsKKyAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFj
ZVR1cGxlPiBtX2NvbnRleHRNYXA7CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQgeyAwIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50czsK
K307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjI4MTVkNjcyMzhlOWQzYWZmY2YwMWY0ZjRkYmQ0MDUyNDA4NDRjZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCittZXNz
YWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgeworICAgIFNldEhhc1ZpZGVv
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKKyAgICBTZXRWaWRlb0RpbWVuc2lv
bnModWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25z
KQorICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90
IHZpZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGlu
Z1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJl
KQorICAgIEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRXhpdEZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKKyAg
ICBDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgUHJlcGFyZWRUb1Jl
dHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJ
bnRSZWN0IGlubGluZVJlY3QpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCisgICAgRXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCisjZW5kaWYKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGU1YTIwYThhYTkyM2MyYTk3MmY5
YWU2YmI2MDZjNWM5ZWFkMTYzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KQEAgLTAsMCArMSw1
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5oIgorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lU
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQor
CisjaW1wb3J0ICJBUElVSUNsaWVudC5oIgorI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eS5oIgor
I2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldl
YlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQ
bGF5ZXJFbnVtcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5o
PgorCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eS5oIgorI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNlbmRpZgorCitAaW50ZXJmYWNlIFdL
TGF5ZXJIb3N0VmlldyA6IFBsYXRmb3JtVmlldworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgdWludDMyX3QgY29udGV4dElEOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tMYXllckhv
c3RWaWV3CisKKyNpZiBQTEFURk9STShJT1MpCisrIChDbGFzcylsYXllckNsYXNzIHsKKyAgICBy
ZXR1cm4gW0NBTGF5ZXJIb3N0IGNsYXNzXTsKK30KKyNlbHNlCistIChDQUxheWVyICopbWFrZUJh
Y2tpbmdMYXllcgoreworICAgIHJldHVybiBbW1tDQUxheWVySG9zdCBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworfQorI2VuZGlmCisKKy0gKHVpbnQzMl90KWNvbnRleHRJRCB7CisgICAgcmV0
dXJuIFtbc2VsZiBsYXllckhvc3RdIGNvbnRleHRJZF07Cit9CisKKy0gKHZvaWQpc2V0Q29udGV4
dElEOih1aW50MzJfdCljb250ZXh0SUQgeworICAgIFtbc2VsZiBsYXllckhvc3RdIHNldENvbnRl
eHRJZDpjb250ZXh0SURdOworfQorCistIChDQUxheWVySG9zdCAqKWxheWVySG9zdCB7CisgICAg
cmV0dXJuIChDQUxheWVySG9zdCAqKVtzZWxmIGxheWVyXTsKK30KKworQGVuZAorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBQTEFURk9STShJ
T1MpICYmICFIQVZFKEFWS0lUKQorCitSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkm
KQoreworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7Cit9CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUlu
UGljdHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit7
CisKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9u
RGlkQmVjb21lQWN0aXZlKCkKK3sKKworfQorI2Vsc2UKKworI3ByYWdtYSBtYXJrIC0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSYgbWFuYWdlciwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFj
a1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQorICAgIDogbV9tYW5hZ2VyKCZtYW5h
Z2VyKQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbChwbGF5YmFja1Nlc3Npb25Nb2RlbCkK
KyAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKworV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCkKK3sKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnRzLmNv
bnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250
YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5p
c2hlZFdpdGhNZWRpYSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtX2NvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVk
aWEpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9M
YXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJh
bWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9M
YXllckdyYXZpdHkoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eSBncmF2aXR5KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0
VmlkZW9MYXllckdyYXZpdHkobV9jb250ZXh0SWQsIGdyYXZpdHkpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KG1fY29udGV4dElkLCBtb2RlKTsKK30KKworYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFuYWdlciA/IG1fbWFu
YWdlci0+aXNWaXNpYmxlKCkgOiBmYWxzZTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikK
KyAgICAgICAgbV9tYW5hZ2VyLT5kaWRTZXR1cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVu
KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVs
bHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5kaWRFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit7
CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNj
cmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29udGV4
dElkKTsKK30KKworI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
CisKK1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSwg
cGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KSk7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYg
cGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkpCisgICAgOiBtX3BhZ2UoJnBhZ2UpCisgICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eShwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCit7CisgICAgbV9wYWdlLT5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRo
aXMpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkoKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47
CisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6aW52YWxpZGF0ZSgpCit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlID0gbnVsbHB0
cjsKKworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAg
ICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAg
ICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNl
OworICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOworCisgICAgICAg
IGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgICAgICBbbW9kZWwtPmxheWVySG9zdFZpZXco
KSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXco
bnVsbHB0cik7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV9jbGll
bnRDb3VudHMuY2xlYXIoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGZvciAoYXV0byYgdHVw
bGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpCisgICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+
cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworfQorCitib29sIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250
ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmhhc01v
ZGUobW9kZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21h
dGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAoreworICAgIGZvciAoYXV0
byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6Z2V0
PDE+KHR1cGxlKS0+bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
KyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKK2Jv
b2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5j
ZWRGdWxsc2NyZWVuKCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0
TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmlzUGxheWlu
Z1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3sK
KyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQorICAgICAgICBz
dGQ6OmdldDwxPih0dXBsZSktPmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7Cit9CisKK1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG1fcGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVNb2RlbChjb250ZXh0SWQpOworICAgIFJlZjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0
SWQpOworICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IG1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LT5lbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICBSZWY8UGxh
dGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRmb3JtV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpjcmVhdGUocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+YWRkQ2xpZW50Rm9yQ29udGV4
dChjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bCgmbW9kZWwuZ2V0KCkpOworICAgIGludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUo
V1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9k
ZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShj
b250ZXh0SWQpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3Rk
OjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1BsYXRm
b3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJu
ICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQo
dWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3Vu
dHMuYWRkKGNvbnRleHRJZCwgMSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAg
ICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkp
OworCisgICAgaW50IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7
CisgICAgQVNTRVJUKGNsaWVudENvdW50ID4gMCk7CisgICAgY2xpZW50Q291bnQtLTsKKworICAg
IGlmIChjbGllbnRDb3VudCA8PSAwKSB7CisgICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LT5yZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisgICAgICAgIG1fY2xp
ZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpOworICAgICAgICBtX2NvbnRleHRNYXAucmVtb3Zl
KGNvbnRleHRJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudENvdW50
cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdl
cyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJl
Y3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGlj
dHVyZUluUGljdHVyZSkKK3sKKyAgICBBU1NFUlQodmlkZW9MYXllcklEKTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxhdGZv
cm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKworICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsK
KyAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisKKyAgICBSZXRhaW5QdHI8V0tM
YXllckhvc3RWaWV3PiB2aWV3ID0gc3RhdGljX2Nhc3Q8V0tMYXllckhvc3RWaWV3Kj4obW9kZWwt
PmxheWVySG9zdFZpZXcoKSk7CisgICAgaWYgKCF2aWV3KSB7CisgICAgICAgIHZpZXcgPSBhZG9w
dE5TKFtbV0tMYXllckhvc3RWaWV3IGFsbG9jXSBpbml0XSk7CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgICAgICBbdmlldyBzZXRXYW50c0xheWVyOllFU107CisjZW5kaWYKKyAgICAgICAgbW9kZWwt
PnNldExheWVySG9zdFZpZXcodmlldyk7CisgICAgfQorICAgIFt2aWV3IHNldENvbnRleHRJRDp2
aWRlb0xheWVySURdOworICAgIGlmIChob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IgIT0gMSkgewor
ICAgICAgICAvLyBJbnZlcnQgdGhlIHNjYWxlIHRyYW5zZm9ybSBhZGRlZCBpbiB0aGUgV2ViUHJv
Y2VzcyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KKyAgICAgICAgZmxvYXQgaW52
ZXJzZVNjYWxlID0gMSAvIGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAgW1t2aWV3
IGxheWVyXSBzZXRTdWJsYXllclRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVy
c2VTY2FsZSwgaW52ZXJzZVNjYWxlLCAxKV07CisgICAgfQorCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFVJVmlldyAqcGFyZW50VmlldyA9IGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHk+KCptX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLnJlbW90ZUxheWVyVHJlZUhvc3QoKS5y
b290TGF5ZXIoKTsKKyAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVy
SG9zdFZpZXcoKSwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUs
IGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOworI2Vsc2UKKyAgICBJbnRSZWN0IGluaXRpYWxXaW5k
b3dSZWN0OworICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhpbml0aWFsUmVjdCwgaW5pdGlh
bFdpbmRvd1JlY3QpOworICAgIGludGVyZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCptb2RlbC0+bGF5
ZXJIb3N0VmlldygpLCBpbml0aWFsV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygp
LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKKyNlbmRpZgor
ICAgIG1fcGFnZS0+dWlDbGllbnQoKS5oYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5n
ZShtX3BhZ2UsIHZpZGVvRnVsbHNjcmVlbk1vZGUgJiBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFz
VmlkZW8pCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuaGFzVmlkZW9DaGFuZ2Vk
KGhhc1ZpZGVvKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNl
dFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlk
ZW9EaW1lbnNpb25zKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAg
aW50ZXJmYWNlLmVudGVyRnVsbHNjcmVlbigpOworCisgICAgLy8gT25seSBvbmUgY29udGV4dCBj
YW4gYmUgaW4gYSBnaXZlbiBmdWxsIHNjcmVlbiBtb2RlIGF0IGEgdGltZToKKyAgICBmb3IgKGF1
dG8mIGNvbnRleHRQYWlyIDogbV9jb250ZXh0TWFwKSB7CisgICAgICAgIGF1dG8mIG90aGVyQ29u
dGV4dElkID0gY29udGV4dFBhaXIua2V5OworICAgICAgICBpZiAoY29udGV4dElkID09IG90aGVy
Q29udGV4dElkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byYgb3RoZXJJ
bnRlcmZhY2UgPSBzdGQ6OmdldDwxPihjb250ZXh0UGFpci52YWx1ZSk7CisgICAgICAgIGlmIChv
dGhlckludGVyZmFjZS0+aGFzTW9kZShpbnRlcmZhY2UubW9kZSgpKSkKKyAgICAgICAgICAgIG90
aGVySW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgfQorfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKK3sKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4o
ZmluYWxSZWN0KTsKKyNlbHNlCisgICAgSW50UmVjdCBmaW5hbFdpbmRvd1JlY3Q7CisgICAgbV9w
YWdlLT5yb290Vmlld1RvV2luZG93KGZpbmFsUmVjdCwgZmluYWxXaW5kb3dSZWN0KTsKKyAgICBl
bnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbihmaW5hbFdpbmRvd1JlY3Qs
IG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0
SWQpLmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh0YXJnZXRNb2RlKTsKK30K
KyNlbmRpZgorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpLmNsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElk
LCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCkKK3sKKyAgICBtX3Bh
Z2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2
aXNpYmxlLCBpbmxpbmVSZWN0KTsKKyNlbHNlCisgICAgSW50UmVjdCBpbmxpbmVXaW5kb3dSZWN0
OworICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhpbmxpbmVSZWN0LCBpbmxpbmVXaW5kb3dS
ZWN0KTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9J
bmxpbmUodmlzaWJsZSwgaW5saW5lV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygp
KTsKKyNlbmRpZgorfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcgorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVk
aWEpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpSZXF1ZXN0RnVsbHNjcmVlbk1vZGUoY29udGV4dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhN
ZWRpYSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNl
dHVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OkRpZEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpEaWRFbnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgbV9wYWdlLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2Rl
bDsKKyAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVy
ZmFjZTsKKworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKKyAgICBb
bW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBtb2RlbC0+
c2V0TGF5ZXJIb3N0VmlldyhudWxscHRyKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOworCisgICAgaW50ZXJmYWNlLT5zZXRNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgIHJlbW92ZUNsaWVudEZv
ckNvbnRleHQoY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZs
b2F0UmVjdCBmcmFtZSkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gW1VJV2luZG93IF9zeW5j
aHJvbml6ZURyYXdpbmdBY3Jvc3NQcm9jZXNzZXNdOworI2Vsc2UKKyAgICAgICAgTWFjaFNlbmRS
aWdodCBmZW5jZVNlbmRSaWdodDsKKyAgICAgICAgaWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdp
bmdBcmVhID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICAgICAgZmVuY2VTZW5kUmln
aHQgPSBkcmF3aW5nQXJlYS0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAgbWFjaF9wb3J0X25hbWVf
dCBmZW5jZVBvcnQgPSBmZW5jZVNlbmRSaWdodC5sZWFrU2VuZFJpZ2h0KCk7CisjZW5kaWYKKwor
ICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250ZXh0SWQsIGZyYW1lLCBJUEM6OkF0dGFjaG1l
bnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRW
aWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5
RW51bShjb250ZXh0SWQsICh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFz
VmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCBtb2RlICYgTWVkaWFQbGF5
ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCitib29s
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNWaXNpYmxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCkgJiYgbV9wYWdlLT5pc0luV2luZG93KCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKQoreworICAgIGJvb2wgaXNWaWV3Vmlz
aWJsZSA9IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KGNvbnRleHRJZCwgaXNWaWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCisjZW5k
aWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZj
MzNiZTY1YTk4YzIxOWMwZGI5MWQwMzI4NDI5NWVjZTVmNTQ3M2QuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
Y29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9U
aW1lUmFuZ2VzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRl
IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg+Ci0jZWxzZQotI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKElPUykKLXR5cGVkZWYgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0jZWxz
ZQotdHlwZWRlZiBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgUGxhdGZv
cm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0IGZpbmFsOiBw
dWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBwdWJsaWMg
V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwgIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
KG1hbmFnZXIsIGNvbnRleHRJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQoKSB7IH0KLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5h
Z2VyID0gbnVsbHB0cjsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKLSAgICB2
b2lkIGFkZENsaWVudChXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIGZp
bmFsOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50JilmaW5hbDsKLQotICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSk7Ci0g
ICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGlt
ZUNoYW5nZWQoZG91YmxlKTsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRv
dWJsZSk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJh
Y2tSYXRlKTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFu
Z2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwp
OwotICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIGF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9p
ZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
OwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCwgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmKTsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChi
b29sKTsKLSAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKTsKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OwotCi0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFu
YWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikK
LSAgICAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCi0gICAgewotICAgIH0KLQotICAgIC8v
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAgdm9p
ZCBwYXVzZSgpIGZpbmFsOwotICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7Ci0gICAg
dm9pZCBiZWdpblNjcnViYmluZygpIGZpbmFsOwotICAgIHZvaWQgZW5kU2NydWJiaW5nKCkgZmlu
YWw7Ci0gICAgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSkgZmluYWw7Ci0gICAgdm9pZCBmYXN0U2Vl
ayhkb3VibGUgdGltZSkgZmluYWw7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZp
bmFsOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7Ci0gICAgdm9pZCBl
bmRTY2FubmluZygpIGZpbmFsOwotICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50
NjRfdCkgZmluYWw7Ci0gICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qp
IGZpbmFsOwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOwotICAgIHZv
aWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKLSAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwot
Ci0gICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3BsYXliYWNrU3RhcnRlZFRpbWU7IH0KLSAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9jdXJyZW50VGltZTsgfQotICAgIGRvdWJsZSBidWZmZXJlZFRpbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1ZmZlcmVkVGltZTsgfQotICAgIGJvb2wgaXNQbGF5
aW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KLSAgICBib29sIGlzU2Ny
dWJiaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1NjcnViYmluZzsgfQotICAgIGZsb2F0
IHBsYXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGxheWJhY2tSYXRlOyB9Ci0g
ICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9zZWVrYWJsZVJhbmdlcy5jb3B5UmVmKCk7IH0KLSAgICBkb3VibGUgc2Vla2Fi
bGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vl
a2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZTsgfQotICAgIGRvdWJsZSBsaXZlVXBkYXRl
SW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2xpdmVVcGRhdGVJbnRlcnZhbDsgfQotICAgIGJv
b2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jYW5QbGF5RmFz
dFJldmVyc2U7IH0KLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uczsgfQotICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleDsgfQot
ICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uczsgfQotICAgIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7IH0KLSAgICBi
b29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRl
cm5hbFBsYXliYWNrRW5hYmxlZDsgfQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU7IH0KLSAgICBTdHJp
bmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOyB9Ci0gICAgYm9vbCB3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fd2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7IH0KLSAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX211dGVkOyB9Ci0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLSAgICBIYXNoU2V0
PFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAg
IGRvdWJsZSBtX3BsYXliYWNrU3RhcnRlZFRpbWUgeyAwIH07Ci0gICAgYm9vbCBtX3BsYXliYWNr
U3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSB7IGZhbHNlIH07Ci0gICAgZG91YmxlIG1fZHVyYXRpb24g
eyAwIH07Ci0gICAgZG91YmxlIG1fY3VycmVudFRpbWUgeyAwIH07Ci0gICAgZG91YmxlIG1fYnVm
ZmVyZWRUaW1lIHsgMCB9OwotICAgIGJvb2wgbV9pc1BsYXlpbmcgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9pc1NjcnViYmluZyB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAw
IH07Ci0gICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IG1fc2Vla2FibGVSYW5nZXMgeyBXZWJD
b3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKSB9OwotICAgIGRvdWJsZSBtX3NlZWthYmxlVGltZVJh
bmdlc0xhc3RNb2RpZmllZFRpbWUgeyAwIH07Ci0gICAgZG91YmxlIG1fbGl2ZVVwZGF0ZUludGVy
dmFsIHsgMCB9OwotICAgIGJvb2wgbV9jYW5QbGF5RmFzdFJldmVyc2UgeyBmYWxzZSB9OwotICAg
IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9hdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uczsKLSAgICB1aW50NjRfdCBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9
OwotICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9sZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zOwotICAgIHVpbnQ2NF90IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJ
bmRleCB7IDAgfTsKLSAgICBib29sIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgeyBmYWxzZSB9
OwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6
OlRhcmdldFR5cGVOb25lIH07Ci0gICAgU3RyaW5nIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXpl
ZERldmljZU5hbWU7Ci0gICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OwotfTsKLQotY2xhc3MgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IGNy
ZWF0ZShXZWJQYWdlUHJveHkmKTsKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgUGxhdGZvcm1XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpOwotICAg
IHZvaWQgcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKTsKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OwotICAgIGZyaWVuZCBjbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7Ci0KLSAgICBleHBsaWNpdCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5Jik7Ci0gICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKLQotICAg
IHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
PiwgUmVmUHRyPFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRl
cmZhY2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpOwotCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Ci0gICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAg
dm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGN1cnJl
bnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91
YmxlIGhvc3RUaW1lKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzVmVj
dG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBk
b3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0
ZUludGVydmFsKTsKLSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIHZhbHVlKTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZl
Y3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlw
ZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOwotICAgIHZvaWQgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0gICAgdm9p
ZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pOwot
ICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgcGxheWJhY2tTdGFydGVkVGltZSk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSk7Ci0gICAgdm9pZCBoYW5k
bGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QsIFN0cmluZykgY29uc3Q7Ci0g
ICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKLQot
ICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLSAgICB2b2lkIHBs
YXkodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7Ci0gICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2
b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBlbmRTY3J1
YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSB0aW1lKTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2
NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3Qg
Y29udGV4dElkKTsKLSAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpOwotICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVy
ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIHNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0K
LSAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbElu
dGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50
Q291bnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYzNmE4MzI3M2ViOGUxNDRhNmExMDM1MDU1Nzg5
YzIzZTA5MTI3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0j
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1t
ZXNzYWdlcyAtPiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgewotICAgIFJlc2V0TWVk
aWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgQ3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCi0gICAg
QnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRp
bWUpCi0gICAgU2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
VmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2Rp
ZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi0gICAgQ2FuUGxheUZhc3RSZXZl
cnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi0gICAgQXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNv
cmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQotICAgIExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQotICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotICAgIExlZ2libGVN
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpCi0gICAgRXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcg
bG9jYWxpemVkRGV2aWNlTmFtZSkKLSAgICBXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQotICAgIER1cmF0aW9uQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKLSAgICBQbGF5YmFja1N0
YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0
ZWRUaW1lKQotICAgIFJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlp
bmcsIGRvdWJsZSByYXRlKQotICAgIE11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgbXV0ZWQpOwotICAgIFNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0
X3QgY29udGV4dElkKQotICAgIENsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQotCi0gICAg
SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgU3Ry
aW5nIGlkKQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY5ZDMzZjlmYzA4OTNhODIwOTdhNWVlYzhmODZmNWFh
ODY1M2NmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5LmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2lt
cG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUHJvY2Vz
c1Byb3h5LmgiCi0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jcHJhZ21hIG1hcmsgLSBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xp
ZW50KQotewotICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBt
X2NsaWVudHMuYWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGll
bnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9j
bGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnBsYXkoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdl
ci0+cGxheShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpwYXVzZSgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2Vy
LT5wYXVzZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+dG9nZ2xlUGxheVN0YXRlKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmJlZ2luU2NydWJiaW5nKG1fY29udGV4dElk
KTsKLQotICAgIG1faXNTY3J1YmJpbmcgPSB0cnVlOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPmVuZFNjcnViYmluZyhtX2NvbnRleHRJZCk7Ci0KLSAgICBtX2lz
U2NydWJiaW5nID0gZmFsc2U7Ci0gICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUg
PSBpc1BsYXlpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAg
bV9tYW5hZ2VyLT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQotewotICAg
IGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWsobV9jb250ZXh0SWQs
IHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5T
Y2FubmluZ0ZvcndhcmQoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdl
ci0+YmVnaW5TY2FubmluZ0ZvcndhcmQobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKLXsKLSAgICBp
ZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCht
X2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpl
bmRTY2FubmluZygpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5l
bmRTY2FubmluZyhtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklk
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2VsZWN0TGVnaWJs
ZU1lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBp
ZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUo
bV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
dG9nZ2xlTXV0ZWQoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+
dG9nZ2xlTXV0ZWQobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQot
ICAgICAgICBtX21hbmFnZXItPnNldE11dGVkKG1fY29udGV4dElkLCBtdXRlZCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hh
bmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBtX3BsYXliYWNrU3RhcnRl
ZFRpbWUgPSBwbGF5YmFja1N0YXJ0ZWRUaW1lOwotICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5l
ZWRzVXBkYXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQotewotICAgIG1fZHVyYXRpb24g
PSBkdXJhdGlvbjsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAg
Y2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGlt
ZSkKLXsKLSAgICBtX2N1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgYXV0byBhbmNob3JU
aW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwotICAgIGlm
IChtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSkKLSAgICAgICAgcGxheWJhY2tTdGFy
dGVkVGltZUNoYW5nZWQoY3VycmVudFRpbWUpOwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBt
X2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1l
LCBhbmNob3JUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBtX2J1ZmZl
cmVkVGltZSA9IGJ1ZmZlcmVkVGltZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKLSAgICAgICAgY2xpZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChib29s
IGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIG1faXNQbGF5aW5nID0gaXNQ
bGF5aW5nOwotICAgIG1fcGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwotICAgIGZvciAoYXV0
byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxh
eWluZywgcGxheWJhY2tSYXRlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiBzZWVrYWJs
ZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2
YWwpCi17Ci0gICAgbV9zZWVrYWJsZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2VzOwotICAgIG1fc2Vl
a2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IGxhc3RNb2RpZmllZFRpbWU7Ci0gICAg
bV9saXZlVXBkYXRlSW50ZXJ2YWwgPSBsaXZlVXBkYXRlSW50ZXJ2YWw7Ci0gICAgZm9yIChhdXRv
KiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFu
Z2VkKHNlZWthYmxlUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZhc3RS
ZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKLXsKLSAgICBtX2NhblBsYXlG
YXN0UmV2ZXJzZSA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNh
blBsYXlGYXN0UmV2ZXJzZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMsIHVpbnQ2NF90IGF1
ZGlvTWVkaWFTZWxlY3RlZEluZGV4KQotewotICAgIG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnMgPSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKLSAgICBtX2F1ZGlvTWVkaWFTZWxlY3Rl
ZEluZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQg
OiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRl
eCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBsZWdpYmxlTWVkaWFT
ZWxlY3RlZEluZGV4KQotewotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsKLQotICAgIGZvciAoYXV0byogY2xpZW50
IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMsIGxlZ2libGVNZWRpYVNlbGVj
dGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewot
ICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4OwotCi0gICAgZm9y
IChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRl
eCA9IHNlbGVjdGVkSW5kZXg7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykK
LSAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0
ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXpl
ZE5hbWUpCi17Ci0gICAgbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAg
bV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSA9IHR5cGU7Ci0gICAgbV9leHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZE5hbWU7Ci0KLSAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWROYW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZChib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQotewotICAgIG1fd2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWQgPSB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsKLSAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT53aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFu
Z2VkKGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9tdXRlZCA9IG11dGVkOwotICAgIGZvciAoYXV0byog
Y2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChtdXRlZCk7
Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQotCi1S
ZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGFnZSkpOwotfQotCi1X
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UoJnBhZ2UpCi17Ci0gICAgbV9w
YWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQo
KSwgKnRoaXMpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6On5XZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKQotewotICAgIGlmICghbV9wYWdlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlID0g
bnVsbHB0cjsKLQotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkp
IHsKLSAgICAgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWw7
Ci0gICAgICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50
ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotCi0g
ICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIG1fY29udGV4dE1h
cC5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci19Ci0KLVdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLXsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbCA9IFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwot
ICAgIFJlZjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlID0g
UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6OmNyZWF0ZShtb2RlbCk7Ci0KLSAg
ICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFj
ZSkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNl
VHVwbGUmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250
ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCkpOwotfQotCi1QbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX2Ns
aWVudENvdW50cy5hZGQoY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIGlmICghbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmludmFsaWRhdGUoKTsKLSAg
ICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNz
YWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWlu
dDY0X3QgY29udGV4dElkKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAobV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQgPT0gY29udGV4dElkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgIHJlbW92ZUNsaWVudEZvckNv
bnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotCi0gICAgbV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7Ci0gICAgZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKS5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLSAgICBhZGRDbGllbnRG
b3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLQotICAgIG1fcGFnZS0+dmlk
ZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNv
bnRleHRJZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQotewotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsK
LSAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7Ci0gICAgbV9wYWdlLT52aWRlb0Nv
bnRyb2xzTWFuYWdlckRpZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFTdGF0ZSgpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRpbWVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUp
Ci17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVu
dFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVy
ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCi17
Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVk
VGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJs
ZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWly
PGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91Ymxl
IGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBSZWY8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9
IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwotICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5n
ZXMpIHsKLSAgICAgICAgQVNTRVJUKGlzZmluaXRlKHJhbmdlLmZpcnN0KSk7Ci0gICAgICAgIEFT
U0VSVChpc2Zpbml0ZShyYW5nZS5zZWNvbmQpKTsKLSAgICAgICAgQVNTRVJUKHJhbmdlLnNlY29u
ZCA+PSByYW5nZS5maXJzdCk7Ci0gICAgICAgIHRpbWVSYW5nZXMtPmFkZChyYW5nZS5maXJzdCwg
cmFuZ2Uuc2Vjb25kKTsKLSAgICB9Ci0KLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWth
YmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRl
SW50ZXJ2YWwpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi17
Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHZh
bHVlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
LXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQbGF5YmFja1By
b3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJf
dCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9IHN0YXRp
Y19jYXN0PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZT4odGFyZ2V0VHlwZSk7Ci0gICAgQVNTRVJUKHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OlRhcmdldFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6
OlRhcmdldFR5cGVUVk91dCB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJn
ZXRUeXBlTm9uZSk7Ci0KLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZChkaXNhYmxlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpt
dXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQotewotICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkubXV0ZWRDaGFuZ2VkKG11dGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmR1cmF0
aW9uQ2hhbmdlZChkdXJhdGlvbik7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGltZSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKLXsKLSAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcmF0ZSk7Ci19Ci0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURS
ZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZGVudGlmaWVyKSBjb25zdAotewot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoY29udGV4dElkID09IG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkKQotICAgICAgICBtX3BhZ2UtPmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNw
b25zZShpZGVudGlmaWVyKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGlkZW50aWZpZXIpOwotI2VuZGlmCi19Ci0KLQotI3ByYWdtYSBtYXJr
IE1lc3NhZ2VzIHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheShjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBhdXNlKGNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0
ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJl
Z2luU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OkVuZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgdGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElkLCB0aW1lKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQotewotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RmFzdFNlZWsoY29u
dGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0
SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdC
YWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nQmFja3dhcmQoY29udGV4
dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY2FubmluZyhj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElk
LCB1aW50NjRfdCBpbmRleCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRl
eCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDY0X3QgaW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCks
IG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29u
dGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6VG9nZ2xlTXV0ZWQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRNdXRlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZXRNdXRlZChjb250ZXh0SWQsIG11dGVkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpy
ZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpCi17Ci0gICAgaWYgKG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkKQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLVBsYXRmb3JtV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNv
bnRyb2xzTWFuYWdlckludGVyZmFjZSgpCi17Ci0gICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvJiBpbnRlcmZhY2Ug
PSBlbnN1cmVJbnRlcmZhY2UobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgIHJldHVy
biAmaW50ZXJmYWNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWUwNDBjYTA1MTE0NTNjYTcwOTA0YTVhNGRjZGVmZTlkOWVmNTIxYy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2
ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKQotdHlwZWRl
ZiBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLSNlbHNlCi10eXBlZGVmIFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYyBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5Owot
Y2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwotY2xhc3MgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWwKLSAgICA6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4KLSAgICAsIHB1
YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgICwgcHVibGljIFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyICB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dChtYW5hZ2VyLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKSk7Ci0gICAgfQotICAg
IHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpOwotCi0gICAgdm9pZCBp
bnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9Ci0KLSAgICBQbGF0Zm9ybVZpZXcg
KmxheWVySG9zdFZpZXcoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdFZpZXcuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldExheWVySG9zdFZpZXcoUmV0YWluUHRyPFBsYXRmb3JtVmlldz4mJiBsYXll
ckhvc3RWaWV3KSB7IG1fbGF5ZXJIb3N0VmlldyA9IFdURk1vdmUobGF5ZXJIb3N0Vmlldyk7IH0K
LQotcHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Jiwg
dWludDY0X3QpOwotCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICB2b2lkIGFk
ZENsaWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlz
aGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckZy
YW1lKFdlYkNvcmU6OkZsb2F0UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVy
R3Jhdml0eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOwotICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQotICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3ZpZGVvRGltZW5zaW9uczsgfQotCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIKLSAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAg
IHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRFeGl0RnVs
bHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOwot
Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7Ci0gICAgUmVm
PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsK
LSAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLSAgICBSZXRhaW5QdHI8UGxhdGZvcm1WaWV3ICo+
IG1fbGF5ZXJIb3N0VmlldzsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3ZpZGVv
RGltZW5zaW9uczsKLSAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OwotfTsKLQotY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkm
KTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKTsKLQotICAg
IHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKCk7Ci0gICAgYm9vbCBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3Q7Ci0gICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hv
d1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0OwotICAgIHZvaWQgYXBwbGljYXRpb25EaWRC
ZWNvbWVBY3RpdmUoKTsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwotCi0jaWYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgYm9vbCBpc1Bs
YXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OwotCi0g
ICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYs
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZU1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICB0
eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4s
IFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1vZGVsSW50ZXJm
YWNlVHVwbGU7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFBs
YXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4
dElkKTsKLQotICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgot
ICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMy
X3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxv
YXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7Ci0gICAgdm9p
ZCBzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQgc2V0Vmlk
ZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
Jik7Ci0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2
b2lkIGV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBm
aW5hbFJlY3QpOwotICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KTsKLSNpZiBQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSAgICB2b2lkIGV4aXRG
dWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0jZW5kaWYK
LQotICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKLSAgICB2b2lk
IHJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhN
ZWRpYSA9IGZhbHNlKTsKLSAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
LSAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNl
dFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7
Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOwotICAgIHZvaWQgZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgV2ViUGFnZVByb3h5
KiBtX3BhZ2U7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRl
cmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkIHsgMCB9OwotICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3Vu
dHM7Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjgxNWQ2NzIzOGU5ZDNhZmZjZjAxZjRmNGRi
ZDQwNTI0MDg0NGNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiAoUExBVEZPUk0oSU9TKSAm
JiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSB7
Ci0gICAgU2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQotICAg
IFNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0U2l6
ZSB2aWRlb0RpbWVuc2lvbnMpCi0gICAgU2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxS
ZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93
c1BpY3R1cmVJblBpY3R1cmUpCi0gICAgRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICBFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJl
Y3QgZmluYWxSZWN0KQotICAgIENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
LSAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZp
c2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCkKLSNpZiBQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSAgICBFeGl0RnVsbHNjcmVlbldpdGhv
dXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLSNl
bmRpZgotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjEyOWFkOWExNDFkNDE2YjFiOWJlZDJlMzM3YWU2YWFlMWRh
ZTFjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgot
Ci0jaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBUElVSUNsaWVudC5o
IgotI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
Ci0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQgIldl
YlByb2Nlc3NQcm94eS5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3Nh
Z2VzLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
IgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L01hY2hTZW5kUmlnaHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5ZXJFbnVtcy5oPgot
I2ltcG9ydCA8V2ViQ29yZS9RdWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVS
YW5nZXMuaD4KLSNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotCi0jaWYgUExBVEZP
Uk0oSU9TKQotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgotI2lt
cG9ydCAiVUlLaXRTUEkuaCIKLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdLTGF5ZXJIb3N0VmlldyA6
IFBsYXRmb3JtVmlldwotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgdWludDMyX3QgY29u
dGV4dElEOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tMYXllckhvc3RWaWV3Ci0KLSNpZiBQ
TEFURk9STShJT1MpCi0rIChDbGFzcylsYXllckNsYXNzIHsKLSAgICByZXR1cm4gW0NBTGF5ZXJI
b3N0IGNsYXNzXTsKLX0KLSNlbHNlCi0tIChDQUxheWVyICopbWFrZUJhY2tpbmdMYXllcgotewot
ICAgIHJldHVybiBbW1tDQUxheWVySG9zdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotfQot
I2VuZGlmCi0KLS0gKHVpbnQzMl90KWNvbnRleHRJRCB7Ci0gICAgcmV0dXJuIFtbc2VsZiBsYXll
ckhvc3RdIGNvbnRleHRJZF07Ci19Ci0KLS0gKHZvaWQpc2V0Q29udGV4dElEOih1aW50MzJfdClj
b250ZXh0SUQgewotICAgIFtbc2VsZiBsYXllckhvc3RdIHNldENvbnRleHRJZDpjb250ZXh0SURd
OwotfQotCi0tIChDQUxheWVySG9zdCAqKWxheWVySG9zdCB7Ci0gICAgcmV0dXJuIChDQUxheWVy
SG9zdCAqKVtzZWxmIGxheWVyXTsKLX0KLQotQGVuZAotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBQTEFURk9STShJT1MpICYmICFIQVZFKEFW
S0lUKQotCi1SZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmKQotewotICAgIHJldHVy
biBudWxscHRyOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52
YWxpZGF0ZSgpCi17Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpo
YXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0KLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZl
KCkKLXsKLQotfQotI2Vsc2UKLQotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdl
ciwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwg
dWludDY0X3QgY29udGV4dElkKQotICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgICwgbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbChwbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAsIG1fY29udGV4
dElkKGNvbnRleHRJZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQp
KTsKLSAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xp
ZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
Ci0gICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkK
LXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZShtX2NvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNv
cmU6OkZsb2F0UmVjdCBmcmFtZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPnNldFZpZGVvTGF5ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJhbWUpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckdyYXZp
dHkobV9jb250ZXh0SWQsIGdyYXZpdHkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIGlmIChtX21hbmFnZXIp
Ci0gICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fY29udGV4dElkLCBt
b2RlKTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJs
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWFuYWdlciA/IG1fbWFuYWdlci0+aXNWaXNpYmxl
KCkgOiBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRp
ZFNldHVwRnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5h
Z2VyLT5kaWRTZXR1cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNjcmVlbihtX2NvbnRl
eHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0
RnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5k
aWRFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFu
YWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRleHRJ
ZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29udGV4dElkKTsKLX0KLQotI3By
YWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ci0KLVJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSwgcGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5KSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCi0gICAg
OiBtX3BhZ2UoJnBhZ2UpCi0gICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkoKQotewotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaW52YWxpZGF0
ZSgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0
ZSgpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsKLQotICAgIGZvciAo
YXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxQbGF0
Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOwotICAgICAgICBzdGQ6
OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotCi0gICAgICAgIGludGVyZmFjZS0+aW52
YWxpZGF0ZSgpOwotICAgICAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3Vw
ZXJ2aWV3XTsKLSAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7Ci0gICAg
fQotCi0gICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRDb3VudHMuY2xlYXIo
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRl
QW5kRXhpdEZ1bGxzY3JlZW4oKQotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRN
YXAudmFsdWVzKCkpCi0gICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVBbmRF
eGl0RnVsbHNjcmVlbigpOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygp
KSB7Ci0gICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmhhc01vZGUobW9kZSkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRl
b1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nv
bnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+bWF5
QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkg
Y29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7
Ci0gICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNl
ZEZ1bGxzY3JlZW4oKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKLXsKLSAgICBmb3IgKGF1dG8m
IHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQotICAgICAgICBzdGQ6OmdldDwxPih0dXBs
ZSktPmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LT5lbnN1cmVNb2RlbChjb250ZXh0SWQpOwotICAgIFJlZjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ+IG1vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpj
cmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpOwotICAgIGF1dG8m
IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LT5lbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBSZWY8UGxhdGZvcm1XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlOjpjcmVhdGUocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKLSAgICBtX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwot
Ci0gICAgaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkp
OwotICAgIGludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1v
ZGVsLmdldCgpKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCks
IFdURk1vdmUoaW50ZXJmYWNlKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpl
bnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBs
ZSgpKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9k
ZWwodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLVBsYXRmb3JtV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUlu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwxPihl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4
dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJ
ZCwgMSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSsrOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
QVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotCi0gICAgaW50IGNs
aWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7Ci0gICAgQVNTRVJUKGNs
aWVudENvdW50ID4gMCk7Ci0gICAgY2xpZW50Q291bnQtLTsKLQotICAgIGlmIChjbGllbnRDb3Vu
dCA8PSAwKSB7Ci0gICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5yZW1vdmVD
bGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci0gICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92
ZShjb250ZXh0SWQpOwotICAgICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElk
LCBjbGllbnRDb3VudCk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVv
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3Rp
bmdEZXZpY2VTY2FsZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkK
LXsKLSAgICBBU1NFUlQodmlkZW9MYXllcklEKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLQotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZh
Y2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBhZGRDbGllbnRG
b3JDb250ZXh0KGNvbnRleHRJZCk7Ci0KLSAgICBSZXRhaW5QdHI8V0tMYXllckhvc3RWaWV3PiB2
aWV3ID0gc3RhdGljX2Nhc3Q8V0tMYXllckhvc3RWaWV3Kj4obW9kZWwtPmxheWVySG9zdFZpZXco
KSk7Ci0gICAgaWYgKCF2aWV3KSB7Ci0gICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tMYXllckhv
c3RWaWV3IGFsbG9jXSBpbml0XSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBbdmlldyBz
ZXRXYW50c0xheWVyOllFU107Ci0jZW5kaWYKLSAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZp
ZXcodmlldyk7Ci0gICAgfQotICAgIFt2aWV3IHNldENvbnRleHRJRDp2aWRlb0xheWVySURdOwot
ICAgIGlmIChob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IgIT0gMSkgewotICAgICAgICAvLyBJbnZl
cnQgdGhlIHNjYWxlIHRyYW5zZm9ybSBhZGRlZCBpbiB0aGUgV2ViUHJvY2VzcyB0byBmaXggPHJk
YXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KLSAgICAgICAgZmxvYXQgaW52ZXJzZVNjYWxlID0gMSAv
IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvcjsKLSAgICAgICAgW1t2aWV3IGxheWVyXSBzZXRTdWJs
YXllclRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VTY2FsZSwgaW52ZXJz
ZVNjYWxlLCAxKV07Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFVJVmlldyAqcGFy
ZW50VmlldyA9IGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCptX3Bh
Z2UtPmRyYXdpbmdBcmVhKCkpLnJlbW90ZUxheWVyVHJlZUhvc3QoKS5yb290TGF5ZXIoKTsKLSAg
ICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5p
dGlhbFJlY3QsIHBhcmVudFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93c1BpY3R1cmVJ
blBpY3R1cmUpOwotI2Vsc2UKLSAgICBJbnRSZWN0IGluaXRpYWxXaW5kb3dSZWN0OwotICAgIG1f
cGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhpbml0aWFsUmVjdCwgaW5pdGlhbFdpbmRvd1JlY3QpOwot
ICAgIGludGVyZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCptb2RlbC0+bGF5ZXJIb3N0VmlldygpLCBp
bml0aWFsV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpLCB2aWRlb0Z1bGxzY3Jl
ZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKLSNlbmRpZgotICAgIG1fcGFnZS0+dWlD
bGllbnQoKS5oYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIHZpZGVv
RnVsbHNjcmVlbk1vZGUgJiBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGlj
dHVyZUluUGljdHVyZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCi17Ci0gICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuaGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9u
cyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQot
ewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
dmlkZW9EaW1lbnNpb25zKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byYgaW50
ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgaW50ZXJmYWNlLmVudGVy
RnVsbHNjcmVlbigpOwotCi0gICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBnaXZl
biBmdWxsIHNjcmVlbiBtb2RlIGF0IGEgdGltZToKLSAgICBmb3IgKGF1dG8mIGNvbnRleHRQYWly
IDogbV9jb250ZXh0TWFwKSB7Ci0gICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29udGV4
dFBhaXIua2V5OwotICAgICAgICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBzdGQ6
OmdldDwxPihjb250ZXh0UGFpci52YWx1ZSk7Ci0gICAgICAgIGlmIChvdGhlckludGVyZmFjZS0+
aGFzTW9kZShpbnRlcmZhY2UubW9kZSgpKSkKLSAgICAgICAgICAgIG90aGVySW50ZXJmYWNlLT5y
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsKLSNl
bHNlCi0gICAgSW50UmVjdCBmaW5hbFdpbmRvd1JlY3Q7Ci0gICAgbV9wYWdlLT5yb290Vmlld1Rv
V2luZG93KGZpbmFsUmVjdCwgZmluYWxXaW5kb3dSZWN0KTsKLSAgICBlbnN1cmVJbnRlcmZhY2Uo
Y29udGV4dElkKS5leGl0RnVsbHNjcmVlbihmaW5hbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZv
cm1XaW5kb3coKSk7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0
YXJnZXRNb2RlKQotewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2Ny
ZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh0YXJnZXRNb2RlKTsKLX0KLSNlbmRpZgotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKQotewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmNsZWFudXBG
dWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpw
cmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUs
IFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCkKLXsKLSAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSgpOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGVuc3VyZUludGVy
ZmFjZShjb250ZXh0SWQpLnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxpbmVS
ZWN0KTsKLSNlbHNlCi0gICAgSW50UmVjdCBpbmxpbmVXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+
cm9vdFZpZXdUb1dpbmRvdyhpbmxpbmVSZWN0LCBpbmxpbmVXaW5kb3dSZWN0KTsKLSAgICBlbnN1
cmVJbnRlcmZhY2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwg
aW5saW5lV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpKTsKLSNlbmRpZgotfQot
Ci0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0RnVs
bHNjcmVlbk1vZGUoY29udGV4dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
U2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVlbihj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRp
ZEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFn
ZS0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFbnRl
ckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5k
aWRFbnRlckZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICBSZWZQdHI8
UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLQotICAgIHN0
ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4
dElkKTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKLSAgICBbbW9kZWwtPmxheWVySG9z
dFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0Vmll
dyhudWxscHRyKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4
dElkKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVv
TGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkK
LXsKLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIG1h
Y2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gW1VJV2luZG93IF9zeW5jaHJvbml6ZURyYXdpbmdB
Y3Jvc3NQcm9jZXNzZXNdOwotI2Vsc2UKLSAgICAgICAgTWFjaFNlbmRSaWdodCBmZW5jZVNlbmRS
aWdodDsKLSAgICAgICAgaWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV9wYWdl
LT5kcmF3aW5nQXJlYSgpKQotICAgICAgICAgICAgZmVuY2VTZW5kUmlnaHQgPSBkcmF3aW5nQXJl
YS0+Y3JlYXRlRmVuY2UoKTsKLSAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBvcnQgPSBm
ZW5jZVNlbmRSaWdodC5sZWFrU2VuZFJpZ2h0KCk7Ci0jZW5kaWYKLQotICAgICAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJG
cmFtZUZlbmNlZChjb250ZXh0SWQsIGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBN
QUNIX01TR19UWVBFX01PVkVfU0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jhdml0
eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkgZ3Jhdml0eSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQs
ICh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkKLXsKLSAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJ
blBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCBtb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKGNvbnRl
eHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdl
LT5pc1ZpZXdWaXNpYmxlKCkgJiYgbV9wYWdlLT5pc0luV2luZG93KCk7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkKQotewotICAgIGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFnZS0+
aXNWaWV3VmlzaWJsZSgpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNW
aWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi0jZW5kaWYKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KaW5kZXggN2YxZTk4NTk4NmU1MzU4YzQ1NDhj
YTU5OTNlYWE2M2VjMWJhOWMwMy4uYzViNDJhMDAzMDg3MjU4NDkxYThkODM2MWY3N2RlYzVmNTg5
YjIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5t
bQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiUGFn
ZUNsaWVudEltcGwuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgorI2ltcG9ydCAiUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVPYmplY3RSZWdpc3RyeS5oIgogI2ltcG9y
dCAiUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oIgpAQCAtNjIsNyArNjMsNiBAQAogI2lt
cG9ydCAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgog
I2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0ICJXZWJQcm9j
ZXNzUHJveHkuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYTY0YTFjNmYz
NDZiOWY1NWNiYTY0OTdkOTQ5Y2I0ZmY3YWY0MGJiNi4uMWY1ODE2ODE4MTk5YTU5NGFjZDhhMjM4
YzdlNTAxNmRhM2MzNTgxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKQEAgLTE1Miw5ICsxNTIsOSBAQAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUg
IlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJSZW1vdGVMYXll
clRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCi0jaW5jbHVkZSAiV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL01hY2hTZW5kUmln
aHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3BPYnNlcnZlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dEluZGljYXRvcldpbmRvdy5oPgpAQCAtMTgwLDcgKzE4MCw3IEBACiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgog
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggYzFiYTc2NGYwMTU0MjcxMWUyOWFkNWY5YTA3
MzQyNzc2ODI4YWJiYS4uYzkyZWE5ZjRjM2IzM2YzYThmY2M5YTIwZGRmMjYyODA1ZTQ5YzlkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0K
QEAgLTQxLDExICs0MSwxMSBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24u
aCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0ICJVc2VyRGF0YS5oIgorI2ltcG9ydCAi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJWaWV3VXBkYXRlRGlzcGF0
Y2hlck1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRl
cm5hbC5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNz
UHJveHkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50
ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ZWFmNDZmZGVi
NWE4YWE5OWI1MGQwNmYxZGY1MGYxYzQxZTY4YmZkLi40ODBkZWRjYWQxYWRlMTRjYjRhOGNiMTBm
NDFmMmM5ODA5NzI5OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NzEsOCArODcxLDggQEAKIAkJMzdGQzE5NDcxODUwRkJG
MjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5NDYxODUwRkJG
MjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RkMxOTRBMTg1
MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0ODE4NTEwRDZB
MDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICovOyB9OwogCQkz
N0ZDMTk0QjE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0
OTE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi87
IH07Ci0JCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJM0Y0MThFRkIxODg3QkQ5NzAw
Mjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVG
NzE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkzRjQxOEVG
QjE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkzRjg3QjlCRDE1ODk0MDEyMDA5MEZGNjIgLyog
V2ViQ29sb3JDaG9vc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuY3Bw
ICovOyB9OwogCQkzRjg3QjlCRTE1ODk0MDE5MDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlCQjE1
ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi87IH07CiAJCTNGODdCOUMwMTU4
OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNv
bG9yUGlja2VyLmggKi87IH07CkBAIC0xMTE0LDkgKzExMTQsOSBAQAogCQk1MjcyRDRDOTFFNzM1
RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkQ0QzcxRTczNUYwOTAwRUI0MjkwIC8qIFdL
UHJvdGVjdGlvblNwYWNlTlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MjcyRDRDQTFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3Bh
Y2VOUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
NzJENEM4MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tICovOyB9Owog
CQk1MjhDMzdDMTE5NUNCQjFBMDBEOEI5Q0MgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTlGMjgxMDE5
NThGNDc4MDA4Q0FDNzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQjAxQzU3NDk1QTAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0RTAwREUzNEEz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OwotCQk1MkQ1QTFCMTFD
NTc0OTYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMxQzU3NDk0
RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKLQkJ
NTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFCNDFD
NTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKKwkJ
NTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUEx
QzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9Owor
CQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUEx
QUMxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsg
fTsKKwkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFC
NDFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKIAkJ
NTMwMjU4M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkUxRENC
QkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovOyB9OwogCQk1MzAy
NTgzQzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkYxRENCQkQxRDAw
REE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLzsgfTsKIAkJNTMwMjU4M0QxRENC
QkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovOyB9OwpAQCAtMTkyOSwxNCArMTkyOSwxNCBAQAog
CQlDRDc4RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTYxREI3REMw
QTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLzsgfTsKIAkJQ0Q3OEUxMTkxREI3
RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTgxREI3RTVBRDAwMTRBMkRFIC8q
IF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRT
ZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMDQxRjMxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggKi87
IH07Ci0JCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RB
MjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi87
IH07Ci0JCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovOyB9
OwotCQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggKi87IH07Ci0JCUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Lm1tICovOyB9OwotCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCUNE
QTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMu
aCAqLzsgfTsKLQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJQ0RB
MjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
TWVzc2FnZXMuaCAqLzsgfTsKKwkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
ci5tbSAqLzsgfTsKKwkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi87
IH07CisJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAq
LzsgfTsKKwkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bW0gKi87IH07CisJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQ0RBMjlBMjkxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OworCQlDREEyOUEyQTFD
QkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQlDREMzODJGRTE3MjEx
Nzk5MDA4QTJGQzMgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0IC8qIFNl
Y0l0ZW1TaGltTGlicmFyeS5tbSAqLzsgfTsKIAkJQ0RDMzgzMDcxNzIxMTdERDAwOEEyRkMzIC8q
IENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3Rv
cmFnZVNoaW1MaWJyYXJ5LmNwcCAqLzsgfTsKIAkJQ0RDMzgzMEMxNzIxMjI4MjAwOEEyRkMzIC8q
IENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RDMzgzMEIxNzIxMjFDRTAwOEEyRkMzIC8qIENvb2tpZVN0b3Jh
Z2VTaGltTGlicmFyeS5oICovOyB9OwpAQCAtMzA5OCwxMCArMzA5OCwxMCBAQAogCQkzN0ZDMTk0
NjE4NTBGQkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0TG9h
ZERlbGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDMTk0
ODE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDMTk0OTE4
NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1
RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThF
RjYxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjcxODg3
QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5
NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJBMTU4OTNGNjMwMDkwRkY2
MiAvKiBXZWJDb2xvckNob29zZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViQ29sb3JDaG9vc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
M0Y4N0I5QkIxNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvckNob29zZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzg1LDEyICszMzg1LDEyIEBACiAJCTUyNzJC
Mjg5MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MjcyRDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Byb3RlY3Rpb25TcGFjZU5TLmg7
IHBhdGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MjcyRDRDODFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUHJvdGVjdGlvblNw
YWNlTlMubW07IHBhdGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjMxQzU3NDlGMjAwREUz
NEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFB
QjFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQUMxQzU3NDk0
RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
ZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFCNDFDNTc0
OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODJFMURDQkJEMUQwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXNvdXJj
ZS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODMwMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQyNzIsMTYgKzQyNzIsMTYgQEAKIAkJQ0Q3OEUxMTYxREI3REMwQTAwMTRBMkRFIC8q
IEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVBJRnVsbHNjcmVlbkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDc4
RTExODFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREEwNDFGMzFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0Jv
YXJkU2VydmljZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0Jv
YXJkU2VydmljZXNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMTgx
Q0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExOTFDQkRCRjQxMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTFGMUNC
RUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTIyMUNCRUI2
MUEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNDFDQkVCNjdB
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
Q0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNz
YWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlB
MjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
QTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTIyMUNC
RUI2MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNDFDQkVCNjdBMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjUx
Q0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVz
c2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RD
MzgyRjcxNzIxMTUwNjAwOEEyRkMzIC8qIENGTmV0d29yay5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
bmFtZSA9IENGTmV0d29yay5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9DRk5ldHdvcmsuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9Owog
CQlDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MzA2MTcyMTE3OTkwMDhBMkZDMyAvKiBXZWJQ
cm9jZXNzU2hpbS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0
aCA9IFdlYlByb2Nlc3NTaGltLmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwpAQCAtNTIxNywxNyArNTIxNywxNyBAQAogCQkJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5
NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUFDMDI3M0Ux
OTY2MjJENjAwQzEyQjc1IC8qIFdlYlBhZ2VQcm94eUNvY29hLm1tICovLAogCQkJCTdDNDY5NENC
MUE0QjUxMEEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSAqLywKLQkJCQlD
REEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggKi8sCi0JCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAorCQkJCUNEQTI5QTFF
MUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKKwkJ
CQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluICovLAorCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJN0NFNEQyMTUxQTQ5MTQ4NDAwQzdGMTUy
IC8qIFdlYlByb2Nlc3NQb29sQ29jb2EubW0gKi8sCiAJCQkJMUEwNEY2MTcxQTRBM0E3QTAwQTIx
QjZFIC8qIFdlYlByb2Nlc3NQcm94eUNvY29hLm1tICovLAogCQkJCTdBQUQxNzVFMUVBNkFGMzcw
MDNCMDg5NCAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAqLywKIAkJ
CQk1MUQxMjQzMTFFNkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlckNvY29hLmgg
Ki8sCiAJCQkJNTFEMTI0MzIxRTZERTUyMTAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXJD
b2NvYS5tbSAqLywKLQkJCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5LmggKi8sCi0JCQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQk1MkQ1
QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1t
ICovLAorCQkJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkuaCAqLywKKwkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTUyRDVBMUFDMUM1NzQ5NEUw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJMkRGQzdE
QjkxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggKi8sCiAJCQkJMkRGQzdEQkExQkND
QzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tICovLAogCQkJCTFBRDAxQkNCMTkwNUQ1NDkw
MEM5QzQ1RiAvKiBXS1JlbG9hZEZyYW1lRXJyb3JSZWNvdmVyeUF0dGVtcHRlci5oICovLApAQCAt
NjQxMSwxNCArNjQxMSwxNCBAQAogCQkJCUNENDkxQjA1MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2Vy
TWVkaWFDYXB0dXJlTWFuYWdlci5jcHAgKi8sCiAJCQkJQ0Q0OTFCMDYxRTcwRDA1RjAwMDA5MDY2
IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q0OTFCMEExRTczMkQxMjAw
MDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCUNE
QTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8s
Ci0JCQkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8sCisJCQkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLywKKwkJCQlDREEyOUExQzFDQkRCRjVCMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKKwkJCQlDREEy
OUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLywKIAkJ
CQlFQ0E2ODBENzFFNjkwREY4MDA3MzFEMjAgLyogV2ViUHJvY2Vzc0NvY29hLmggKi8sCiAJCQkJ
N0M2RTcwRjkxOEIyRDRBMDAwRjI0RTJFIC8qIFdlYlByb2Nlc3NDb2NvYS5tbSAqLywKLQkJCQk1
MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICov
LAotCQkJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1lc3NhZ2VzLmluICovLAotCQkJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovLAorCQkJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRB
MyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8sCisJCQkJNTJENUExQjMxQzU3NDlGMjAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNTJE
NUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc5
MDMsMTAgKzc5MDMsMTAgQEAKIAkJCQkxQUIxRjc5MzFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5
bWVudENvb3JkaW5hdG9yTWVzc2FnZXMuaCAqLywKIAkJCQkxQUIxRjc5NDFEMUIzNjEzMDA3QzlC
RDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAog
CQkJCTFBQjFGNzk1MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eU1lc3NhZ2VzLmggKi8sCi0JCQkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCUNEQTI5QTI1MUNC
RUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLywK
LQkJCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKKwkJCQlD
REEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8sCisJCQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAor
CQkJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oICovLAogCQkJCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9j
ZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUEwNDNGNjgxMjUxNEQ4
QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJCQlCQzMw
NjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8s
CkBAIC03OTI4LDEwICs3OTI4LDEwIEBACiAJCQkJMUFBRjA4QjYxOTI2OUU2RDAwQjYzOTBDIC8q
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2VzLmggKi8sCiAJCQkJN0MzNjFENzYxOTI4
MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLywKIAkJCQk3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovLAotCQkJCTNGNDE4RUY1MTg4N0JEOTcwMDI3
OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywK
LQkJCQkzRjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ck1lc3NhZ2VzLmggKi8sCi0JCQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJM0Y0MThF
RjgxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmggKi8sCisJCQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTNGNDE4RUY2MTg4N0JEOTcwMDI3
OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLywKKwkJCQkzRjQxOEVG
NzE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLywKKwkJCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gIkRlcml2
ZWQgU291cmNlcyI7CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0MjsKQEAgLTg3NzIs
MTAgKzg3NzIsMTAgQEAKIAkJCQkxQUIxRjc5OTFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVu
dENvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4NTBGRTcx
RUQ3QzM5RjAwRkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUEzRTczNjExMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTI5MUNC
RUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTJCMUNCRUI2N0Ew
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNE
QTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBp
biBIZWFkZXJzICovLAorCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFENTkyOUYx
NjZFMDYwMDAwRTZCRjAyIC8qIFdlYlBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM1NzQ0RjAxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNkE1MDgwQkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKQEAgLTg4MjksNyArODgyOSw3IEBACiAJCQkJN0MzNjFENzkxOTI4
MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThDMSAvKiBXZWJVc2VyTWVk
aWFDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRUU1NzVDMURCN0Q2MTEwMEM3NEM1MCAv
KiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUEx
QjAxQzU3NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRGQzdEQkIxQkNDQzE5NTAw
QzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUNENTVBQTEyOEUy
OTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI5MjMyREY0MThCMjlENjgwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzg0LDEwICsxMDM4NCwxMCBA
QAogCQkJCTFBM0U3MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEREQxMjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBs
YXRmb3JtVG91Y2hQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDRBMjE4ODRFNEYw
MDBFRDg2REIgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMUQ1OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBMDhGRUU0MUQ1OTNFMkEwMDhCQThDQiAvKiBXZWJQbHVnaW5J
bmZvUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZCMzAwNkYw
RjEyIC8qIFdlYlBvcHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDYwLDEwICsxMDQ2
MCwxMCBAQAogCQkJCTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTcz
OUJCRTFCNDIwNDY2MDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTgzRUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2Fn
ZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTNGNDE4
RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKLQkJCQkz
RjQxOEVGQjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyRDVBMUI3MUM1NzRBMDIw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
M0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNG
NDE4RUZCMTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGQzdEQkMxQkNDQzE5NTAwQzE1
NDhDIC8qIFdlYlZpZXdJbXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDExMjdBMjk4
MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4MTYw
RDAxODc2NDU1NzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA0ZDIyYWZmMTI4OWY3MDJlOGU1ODRh
NjcyM2I1YzZhZTllZGQ5YjhmLi5mZWUwZDI4Njc3ZDAwMGE1YTc5NzBkYWQ0OWE1MTkwZjRkMjhh
ZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC03OCw4ICs3OCw4IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1ZGUgIldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApp
bmRleCAwODU5ZjY2NWY3MGVlNjFiZTUyMDdkNTJhNTgzOWJiZWRjYTEzNzQ2Li42NWRmNjAzMDUw
MWE2MmMzNjhhMWQ1ZjZjMjA2MjdhMjg4NGNjZDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUERGUGx1Z2luLmgiCisjaW5jbHVkZSAiUGxheWJh
Y2tTZXNzaW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
LmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIldLU3Ry
aW5nQ0YuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5
V2ViQXJjaGl2ZS5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTkzYzhh
YmJhMWVhMGYyMDRmODIyNDk1NjM4M2E0MGVkMzcyMzJhMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCkBA
IC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRXZlbnRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVu
dW1zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNz
IEF0dGFjaG1lbnQ7CitjbGFzcyBDb25uZWN0aW9uOworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIE1l
c3NhZ2VSZWNlaXZlcjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTm9kZTsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOworCitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0IGZpbmFsCisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0PgorICAgICwgcHVibGljIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZQorICAgICwgcHVibGljIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50
NjRfdCBjb250ZXh0SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KCk7CisK
KyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDsK
KworICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgIHZvaWQgcmVzZXRNZWRp
YVN0YXRlKCkgZmluYWw7CisKKyAgICAvLyBXZWJQbGF5YmFja01vZGVsQ2xpZW50CisgICAgdm9p
ZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIGN1cnJlbnRUaW1lQ2hh
bmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBmaW5hbDsKKyAgICB2
b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIHBsYXliYWNr
U3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKSBmaW5hbDsKKyAg
ICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIGZp
bmFsOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlRpbWVS
YW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZh
bCkgZmluYWw7CisgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgdmFsdWUp
IGZpbmFsOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpIGZpbmFsOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYg
b3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7CisgICAgdm9pZCBhdWRpb01l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIGxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYkNvcmU6OldlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBs
b2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsKKyAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZChib29sKSBmaW5hbDsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZChib29s
KSBmaW5hbDsKKworICAgIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7
Cit9OworCitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4g
Y3JlYXRlKFdlYlBhZ2UmKTsKKyAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KCk7CisKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIGZpbmFsOworCisgICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmKTsKKyAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250
cm9sc01hbmFnZXIoKTsKKyAgICB1aW50NjRfdCBjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCYpOworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisKKyAgICBleHBsaWNpdCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKFdlYlBhZ2UmKTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+LCBSZWZQdHI8V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAg
TW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAv
LyBJbnRlcmZhY2UgdG8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAorICAgIHZv
aWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkdXJhdGlv
bkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUpOworICAgIHZvaWQgY3VycmVudFRp
bWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSk7CisgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsK
KyAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcs
IGZsb2F0IHBsYXliYWNrUmF0ZSk7CisgICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RN
b2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2FuUGxh
eUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOworICAg
IHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwor
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9p
ZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sKTsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wp
OworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkK
KyAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4
dElkKTsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1Rp
bWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdG
b3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dh
cmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9u
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgaGFuZGxlQ29u
dHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRv
Z2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2ds
ZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXRNdXRlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgbXV0ZWQpOworCisgICAgV2ViUGFnZSogbV9wYWdlOworICAgIEhhc2hN
YXA8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCosIHVpbnQ2NF90PiBtX21lZGlhRWxlbWVudHM7
CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFw
OworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAgIEhh
c2hDb3VudGVkU2V0PHVpbnQ2NF90PiBtX2NsaWVudENvdW50czsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1NjY2YTcxNTRjYzRhOTQ0ZDA0ZWNhODZjYjMwMzAw
NmJkNzc4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw0MyBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFBMQVRGT1JNKElPUykg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKK21l
c3NhZ2VzIC0+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgeworICAgIFBsYXkodWludDY0X3Qg
Y29udGV4dElkKQorICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBUb2dnbGVQbGF5
U3RhdGUodWludDY0X3QgY29udGV4dElkKQorICAgIEJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICBFbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQorICAgIFNlZWtU
b1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKKyAgICBGYXN0U2Vlayh1aW50
NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVp
bnQ2NF90IGNvbnRleHRJZCkKKyAgICBCZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29u
dGV4dElkKQorICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZWxlY3RB
dWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCisgICAg
U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5k
ZXgpCisgICAgSGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4
dElkKQorICAgIFRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQorICAg
IFRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZXRNdXRlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgbXV0ZWQpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YzVjMjlhOGZkMDIzNTgzNDI3MTFjMTgxOTk3ODFmZjYyNWFmMTUwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1tCkBAIC0wLDAgKzEsNDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKworI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKKworI2ltcG9ydCAiQXR0YWNobWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9u
TWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJX
ZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0NvbG9y
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFt
ZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CisjaW1wb3J0IDxtYWNoL21hY2hfcG9y
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3N0YXRpYyB1aW50NjRfdCBuZXh0Q29udGV4dElkKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3Qg
Y29udGV4dElkID0gMDsKKyAgICByZXR1cm4gKytjb250ZXh0SWQ7Cit9CisKKyNwcmFnbWEgbWFy
ayAtIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQKKworV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7
Cit9CisKK1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0KCkKK3sKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+cmVzZXRNZWRpYVN0YXRlKG1fY29udGV4dElkKTsKK30KKwor
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQo
ZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+ZHVyYXRpb25DaGFuZ2VkKG1fY29udGV4dElkLCBkdXJhdGlvbik7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJs
ZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikK
KyAgICAgICAgbV9tYW5hZ2VyLT5jdXJyZW50VGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGN1cnJl
bnRUaW1lLCBhbmNob3JUaW1lKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5idWZmZXJlZFRpbWVDaGFuZ2Vk
KG1fY29udGV4dElkLCBidWZmZXJlZFRpbWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5
YmFja1JhdGUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5yYXRl
Q2hhbmdlZChtX2NvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOworfQorCit2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVD
aGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQobV9jb250ZXh0
SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpUaW1l
UmFuZ2VzJiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0
ZUludGVydmFsKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2Vl
a2FibGVSYW5nZXNDaGFuZ2VkKG1fY29udGV4dElkLCByYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUs
IGxpdmVVcGRhdGVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIHZhbHVlKQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZChtX2NvbnRleHRJZCwgdmFsdWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9j
b250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3Rl
ZEluZGV4KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2Fs
aXplZERldmljZU5hbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9j
YWxpemVkRGV2aWNlTmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJs
ZWQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQobV9jb250ZXh0SWQsIGRpc2FibGVkKTsKK30KKwor
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENoYW5nZWQoYm9v
bCBtdXRlZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPm11dGVk
Q2hhbmdlZChtX2NvbnRleHRJZCwgbXV0ZWQpOworfQorCisjcHJhZ21hIG1hcmsgLSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyCisKK1JlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBhZ2UpKTsKK30KKwor
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQ
YWdlJiBwYWdlKQorICAgIDogbV9wYWdlKCZwYWdlKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7Cit9CisK
K1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6On5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkK
K3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAg
ICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7Cisg
ICAgICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZh
Y2U7CisgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CisgICAgICAg
IG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisgICAgICAgIG1vZGVsLT5zZXRNZWRp
YUVsZW1lbnQobnVsbHB0cik7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7Cisg
ICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV9tZWRpYUVsZW1lbnRzLmNs
ZWFyKCk7CisgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKKworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
KworV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
PiBtb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNl
ID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250
ZXh0SWQpOworICAgIG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFjZSk7CisKKyAgICByZXR1cm4g
c3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQor
CitXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJ
ZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwor
fQorCitXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KSk7Cit9CisKK1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQp
KTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgUmVmUHRyPEhUTUxNZWRp
YUVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IG1vZGVsLT5tZWRpYUVsZW1lbnQoKTsKKyAgICBtb2Rl
bC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmlu
dGVyZmFjZSk7CisgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CisgICAgbV9tZWRpYUVsZW1l
bnRzLnJlbW92ZShtZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIG1fY29udGV4dE1hcC5yZW1vdmUo
Y29udGV4dElkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGll
bnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX2NsaWVudENvdW50cy5h
ZGQoY29udGV4dElkKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1v
dmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBBU1NFUlQobV9j
bGllbnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7CisgICAgaWYgKG1fY2xpZW50Q291bnRz
LnJlbW92ZShjb250ZXh0SWQpKQorICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7Cit9
CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCit7CisjaWYg
UExBVEZPUk0oTUFDKQorICAgIGF1dG8gZm91bmRJdGVyYXRvciA9IG1fbWVkaWFFbGVtZW50cy5m
aW5kKCZtZWRpYUVsZW1lbnQpOworICAgIGlmIChmb3VuZEl0ZXJhdG9yICE9IG1fbWVkaWFFbGVt
ZW50cy5lbmQoKSkgeworICAgICAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBmb3VuZEl0ZXJhdG9y
LT52YWx1ZTsKKyAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRl
eHRJZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQpCisgICAgICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQg
PSBjb250ZXh0SWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX21l
ZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4
dElkKCk7IH0pOworICAgICAgICBhdXRvIGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CisgICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAg
ICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwor
ICAgICAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsKKyAgICAgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7Cisg
ICAgfQorCisgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OlNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQobV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQorewor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQor
ICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKTsKKyAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisjZW5k
aWYKK30KKwordWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y29udGV4dElkRm9y
TWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKK3sK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1lZGlhRWxlbWVu
dCwgWyZdIHsgcmV0dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7CisgICAgdWludDY0X3QgY29udGV4
dElkID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLnNldE1lZGlhRWxlbWVudCgmbWVkaWFFbGVtZW50KTsKKyAgICByZXR1cm4gY29udGV4dElk
OworfQorCisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVzZXRNZWRp
YVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRleHRJ
ZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikK
K3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6RHVyYXRpb25DaGFuZ2VkKGNvbnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpDdXJyZW50VGltZUNoYW5nZWQoY29udGV4dElkLCBjdXJyZW50VGltZSwg
YW5jaG9yVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgYnVmZmVyZWRUaW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpCdWZmZXJlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgYnVm
ZmVyZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UGxheWJhY2tTdGFydGVkVGltZUNo
YW5nZWQoY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpS
YXRlQ2hhbmdlZChjb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVS
YW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdl
cyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRl
SW50ZXJ2YWwpCit7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdl
c1ZlY3RvcjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgo
KTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuc3Rh
cnQoaSkudG9Eb3VibGUoKTsKKyAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMucmFuZ2Vz
KCkuZW5kKGkpLnRvRG91YmxlKCk7CisgICAgICAgIHJhbmdlc1ZlY3Rvci5hcHBlbmQoeyBzdGFy
dCwgZW5kIH0pOworICAgIH0KKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6U2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKGNvbnRleHRJ
ZCwgV1RGTW92ZShyYW5nZXNWZWN0b3IpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50
ZXJ2YWwpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCB2YWx1ZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjb250ZXh0SWQsIHZhbHVl
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Y29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRl
eHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVu
YWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJuYWxQ
bGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHRhcmdldFR5cGUpLCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBz
ZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJs
ZWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OldpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChjb250ZXh0SWQs
IGRpc2FibGVkKSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3sKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFuZ2Vk
KGNvbnRleHRJZCwgbXV0ZWQpKTsKK30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OgorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnBsYXkodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkucGxheSgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBh
dXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnBhdXNlKCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxh
eVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLnRvZ2dsZVBsYXlTdGF0ZSgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjcnViYmluZygpOworfQorCit2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgdGltZSkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWtUb1RpbWUodGlt
ZSk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWsodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmZhc3RTZWVrKHRpbWUpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCk7Cit9CisKK3ZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNv
bnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdC
YWNrd2FyZCgpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5u
aW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LmVuZFNjYW5uaW5nKCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQor
eworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihp
bmRleCk7Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJs
ZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Cisg
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgp
OworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRF
bGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGVsZW1lbnQg
PSBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm1lZGlhRWxlbWVudCgpOworICAgIGlmIChlbGVtZW50
KQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNvbnRleHRJZCwgZWxl
bWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSkpOworfQorCit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQoreworICAg
IFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwor
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOworfQor
Cit2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNv
bnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZU11dGVkKCk7
Cit9CisKK3ZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0ZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIG11dGVkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGlj
YXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
c2V0TXV0ZWQobXV0ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2Ev
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2Nv
YS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcwYzA1YjEwYzgxZTAzZDdh
OWI0YWI0YTdkYmE1YjJmMjAyYjRjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCkBAIC0wLDAgKzEsMTU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBI
QVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRXZlbnRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVu
dW1zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBdHRhY2htZW50OworY2xhc3MgQ29u
bmVjdGlvbjsKK2NsYXNzIERlY29kZXI7CitjbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Cit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIE5vZGU7Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllckhvc3RpbmdDb250ZXh0OworY2xhc3MgV2Vi
UGFnZTsKK2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7CitjbGFzcyBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjsKKworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAorICAgIDogcHVi
bGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4KKyAgICAs
IHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBjcmVh
dGUoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElk
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVh
bCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpOworCisgICAgdm9pZCBpbnZh
bGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisKKyAgICBMYXllckhvc3RpbmdDb250
ZXh0KiBsYXllckhvc3RpbmdDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0
LmdldCgpOyB9CisgICAgdm9pZCBzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0
cjxMYXllckhvc3RpbmdDb250ZXh0PiYmKTsKKworICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25z
dCB7IHJldHVybiBtX2lzQW5pbWF0aW5nOyB9CisgICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29s
IGZsYWcpIHsgbV9pc0FuaW1hdGluZyA9IGZsYWc7IH0KKworICAgIGJvb2wgdGFyZ2V0SXNGdWxs
c2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRJc0Z1bGxzY3JlZW47IH0KKyAgICB2b2lk
IHNldFRhcmdldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4g
PSBmbGFnOyB9CisKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgZnVsbHNjcmVlbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5N
b2RlOyB9CisgICAgdm9pZCBzZXRGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgeyBtX2Z1bGxzY3JlZW5Nb2RlID0g
bW9kZTsgfQorCisgICAgYm9vbCBpc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVs
bHNjcmVlbjsgfQorICAgIHZvaWQgc2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX2lzRnVs
bHNjcmVlbiA9IGZsYWc7IH0KKworcHJpdmF0ZToKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudAorICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBv
dmVycmlkZTsKKworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7
CisgICAgc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5n
Q29udGV4dDsKKyAgICBib29sIG1faXNBbmltYXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV90
YXJnZXRJc0Z1bGxzY3JlZW4geyBmYWxzZSB9OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX2Z1bGxzY3JlZW5Nb2RlIHsgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OworICAgIGJv
b2wgbV9pc0Z1bGxzY3JlZW4geyBmYWxzZSB9OworfTsKKworY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJiwgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlciYpOworICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIo
KTsKKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICAKKyAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisg
ICAgLy8gSW50ZXJmYWNlIHRvIENocm9tZUNsaWVudAorICAgIGJvb2wgc3VwcG9ydHNWaWRlb0Z1
bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKSBjb25zdDsKKyAgICB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50
KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbkZv
clZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Jik7CisgICAgdm9pZCBleGl0
VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9F
bGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKTsKKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0OworCisgICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cihXZWJQYWdlJiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOworCisgICAgdHlwZWRlZiBz
dGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4sIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJ
bnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1
cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQo
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKTsKKworICAgIC8vIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0CisgICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sIGhhc1ZpZGVvKTsKKyAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKworICAgIC8vIE1lc3Nh
Z2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisgICAgdm9pZCByZXF1ZXN0
RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpOwor
ICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9p
ZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRW50
ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRDbGVhbnVwRnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1l
RmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBD
OjpBdHRhY2htZW50IGZlbmNlUG9ydCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eUVu
dW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KTsKKyAgICB2b2lkIGZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpOwor
ICAgIAorICAgIFdlYlBhZ2UqIG1fcGFnZTsKKyAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRN
TFZpZGVvRWxlbWVudCosIHVpbnQ2NF90PiBtX3ZpZGVvRWxlbWVudHM7CisgICAgSGFzaE1hcDx1
aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90
IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAgIEhhc2hNYXA8dWludDY0X3Qs
IGludD4gbV9jbGllbnRDb3VudHM7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5p
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xMzU5YzI1YWFlN2IwMTVlMzAxM2Q5YTFiMTUwN2I2MTBhMmZiY2E1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUo
QVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQorbWVzc2FnZXMgLT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciB7CisgICAgUmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wg
ZmluaXNoZWRXaXRoTWVkaWEpCisgICAgRGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKKyAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlk
RW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRDbGVhbnVwRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2ht
ZW50IGZlbmNlUG9ydCkKKyAgICBTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29u
dGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQorICAgIEZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQorICAgIEZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK30KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyODBjZmY0YTJlOTYwMWEwODc3OGQyNjA0
NGRiODVhODg1ODJkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KQEAgLTAsMCArMSw0NjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIuaCIKKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0
ICJBdHRhY2htZW50LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW1w
b3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNp
bXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xv
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5h
bWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9I
VE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJM
YXllckJhY2tpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlkZW8uaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRp
YyBJbnRSZWN0IGlubGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxlbWVudCYgZWxlbWVudCkKK3sK
KyAgICBlbGVtZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYg
KCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHJlY3QgPSByZW5kZXJl
ci0+dmlkZW9Cb3goKTsKKyAgICByZWN0Lm1vdmVCeShyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZp
ZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOworfQorCisjcHJhZ21hIG1hcmsgLSBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIDogbV9t
YW5hZ2VyKCZtYW5hZ2VyKQorICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQoreworfQorCitX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0
aW5nQ29udGV4dD4mJiBjb250ZXh0KQoreworICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdU
Rk1vdmUoY29udGV4dCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5oYXNWaWRlb0NoYW5nZWQobV9jb250ZXh0SWQsIGhhc1Zp
ZGVvKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2aWRl
b0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dmlkZW9EaW1lbnNpb25zQ2hh
bmdlZChtX2NvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKTsKK30KKworI3ByYWdtYSBtYXJrIC0g
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCitSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cj4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UsIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlLCBwbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKSk7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAgICAs
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcihwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQoreworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJ
RCgpLCAqdGhpcyk7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFw
LnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2Up
ID0gdHVwbGU7CisKKyAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAg
ICAgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKworICAgICAgICBpbnRlcmZh
Y2UtPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKKyAg
ICBtX3ZpZGVvRWxlbWVudHMuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwor
ICAgIAorICAgIGlmIChtX3BhZ2UpCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9wYWdl
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlID0gbnVsbHB0cjsKK30KKworV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbCA9IFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAg
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQp
OworCisgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0Nv
bnRleHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7CisgICAgbW9kZWwtPmFk
ZENsaWVudCgqaW50ZXJmYWNlKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92
ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxl
KCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAg
cmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpl
bnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDww
PihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJl
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+
KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Cisg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
KyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7CisKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPnJlbW92ZUNsaWVu
dEZvckNvbnRleHQoY29udGV4dElkKTsKKworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2
aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7CisgICAgbW9kZWwtPnNldFZpZGVv
RWxlbWVudChudWxscHRyKTsKKyAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwor
ICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIG1fdmlkZW9FbGVtZW50cy5yZW1vdmUo
dmlkZW9FbGVtZW50LmdldCgpKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENv
dW50cy5hZGQoY29udGV4dElkLCAxKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwor
CisgICAgaW50IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7Cisg
ICAgQVNTRVJUKGNsaWVudENvdW50ID4gMCk7CisgICAgY2xpZW50Q291bnQtLTsKKworICAgIGlm
IChjbGllbnRDb3VudCA8PSAwKSB7CisgICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250
ZXh0SWQpOworICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3Vu
dCk7Cit9CisKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50OgorCitib29s
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25z
dAoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgcmV0
dXJuIFNldHRpbmdzOjphdktpdEVuYWJsZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1vZGUgPT0g
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSAmJiBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50
KEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgQVNT
RVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9u
ZSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIt
PmNvbnRleHRJZEZvck1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQpOworICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV92aWRlb0VsZW1lbnRzLmFkZCgmdmlkZW9FbGVtZW50LCBjb250ZXh0SWQpOworICAg
IFVOVVNFRF9QQVJBTShhZGRSZXN1bHQpOworICAgIEFTU0VSVChhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID09IGNvbnRleHRJZCk7CisKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkg
PSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworICAgIGFkZENsaWVudEZvckNv
bnRleHQoY29udGV4dElkKTsKKyAgICBpZiAoIWludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4
dCgpKQorICAgICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0
aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKKworICAgIGF1
dG8gdmlkZW9SZWN0ID0gaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpOworICAgIEZsb2F0
UmVjdCB2aWRlb0xheWVyRnJhbWUgPSBGbG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCks
IHZpZGVvUmVjdC5oZWlnaHQoKSk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgb2xkTW9kZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsKKyAg
ICBpbnRlcmZhY2UtPnNldFRhcmdldElzRnVsbHNjcmVlbih0cnVlKTsKKyAgICBpbnRlcmZhY2Ut
PnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOworICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQoJnZp
ZGVvRWxlbWVudCk7CisgICAgaWYgKG9sZE1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSkKKyAgICAgICAgbW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFt
ZSh2aWRlb0xheWVyRnJhbWUpOworCisgICAgaWYgKGludGVyZmFjZS0+aXNBbmltYXRpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcodHJ1ZSk7CisK
KyAgICBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUgPSB2aWRlb0VsZW1lbnQud2Via2l0U3Vw
cG9ydHNQcmVzZW50YXRpb25Nb2RlKEhUTUxWaWRlb0VsZW1lbnQ6OlZpZGVvUHJlc2VudGF0aW9u
TW9kZTo6UGljdHVyZUluUGljdHVyZSk7CisgICAgCisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChj
b250ZXh0SWQsIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5jb250ZXh0SUQoKSwg
dmlkZW9SZWN0LCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNj
cmVlbk1vZGUoKSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50KQor
eworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFp
bnMoJnZpZGVvRWxlbWVudCkpOworCisgICAgdWludDY0X3QgY29udGV4dElkID0gbV92aWRlb0Vs
ZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKKyAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJ
bnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3Jl
ZW4oZmFsc2UpOworCisgICAgaWYgKGludGVyZmFjZS5pc0FuaW1hdGluZygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnRlcmZhY2Uuc2V0SXNBbmltYXRpbmcodHJ1ZSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxs
c2NyZWVuKGNvbnRleHRJZCwgaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZp
ZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxl
bWVudCYgdmlkZW9FbGVtZW50LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBBU1NF
UlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKKworICAgIHVpbnQ2
NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZpZGVvRWxlbWVudCk7CisgICAg
YXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRl
cmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbldp
dGhvdXRBbmltYXRpb25Ub01vZGUoY29udGV4dElkLCB0YXJnZXRNb2RlKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aWRlb0VsZW1lbnQpOworICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXRNb2RlKTsKKyNlbmRpZgorfQorCisjcHJhZ21hIG1hcmsgSW50ZXJmYWNl
IHRvIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6aGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBoYXNWaWRlbykKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0SGFzVmlkZW8oY29udGV4
dElkLCBoYXNWaWRlbyksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAobV9wYWdlKQor
ICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6U2V0VmlkZW9EaW1lbnNpb25zKGNvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eToKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hl
ZFdpdGhNZWRpYSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZShtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVv
RnVsbHNjcmVlbk1vZGUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mdWxsc2NyZWVu
TW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NB
TGF5ZXIgbGF5ZXJdOworI2lmbmRlZiBOREVCVUcKKyAgICBbdmlkZW9MYXllciBzZXROYW1lOkAi
V2ViIHZpZGVvIGZ1bGxzY3JlZW4gbWFuYWdlciBsYXllciJdOworI2VuZGlmCisKKyAgICBbQ0FU
cmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6
WUVTXTsKKworICAgIFt2aWRlb0xheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDAsIDApXTsK
KyAgICBbdmlkZW9MYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3Jl
OjpDb2xvcjo6dHJhbnNwYXJlbnQpXTsKKworICAgIC8vIFNldCBhIHNjYWxlIGZhY3RvciBoZXJl
IHRvIG1ha2UgY29udmVydFJlY3Q6dG9MYXllcjpuaWwgdGFrZSBzY2FsZSBmYWN0b3IgaW50byBh
Y2NvdW50LiA8cmRhcjovL3Byb2JsZW0vMTgzMTY1NDI+LgorICAgIC8vIFRoaXMgc2NhbGUgZmFj
dG9yIGlzIGludmVydGVkIGluIHRoZSBob3N0aW5nIHByb2Nlc3MuCisgICAgZmxvYXQgaG9zdGlu
Z1NjYWxlRmFjdG9yID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIFt2aWRlb0xh
eWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3Rv
ciwgaG9zdGluZ1NjYWxlRmFjdG9yLCAxKV07CisKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVy
ZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgaW50ZXJm
YWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKKwor
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OworICAgIAorICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyLCBb
cHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250ZXh0
SWRdIHsKKyAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCisgICAgICAgICAg
ICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OkVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24g
Y29tbWl0XTsKK30KKyAgICAKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50
ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAg
aW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisgICAgaW50ZXJmYWNlLT5zZXRJc0Z1
bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYgKGludGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVu
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRl
b0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7CisgICAgaWYgKCF2aWRlb0VsZW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIGV4aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2Fz
IHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1cmluZyBhbiBhbmltYXRpb24uCisgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVv
RWxlbWVudF0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlk
ZW9FbGVtZW50KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsK
KyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICAKKyAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihbcHJvdGVj
dGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7CisgICAgICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0
SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKKyAgICAgICAgICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxz
Y3JlZW5MYXllcihuaWwsIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0gewor
ICAgICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0geworICAgICAgICAgICAgICAg
ICAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5
ZXIobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UtPnNldExheWVy
SG9zdGluZ0NvbnRleHQobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0
ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQor
eworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsK
KyAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7CisgICAgSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3Jl
ZW5Nb2RlKCk7CisgICAgYm9vbCB0YXJnZXRJc0Z1bGxzY3JlZW4gPSBpbnRlcmZhY2UtPnRhcmdl
dElzRnVsbHNjcmVlbigpOworCisgICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5p
bCk7CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52
aWRlb0VsZW1lbnQoKTsKKworICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgcmVtb3ZlQ2xp
ZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworCisgICAgaWYgKCF2aWRlb0VsZW1lbnQgfHwgIXRh
cmdldElzRnVsbHNjcmVlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVu
dCwgbW9kZV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZp
ZGVvRWxlbWVudCwgbW9kZSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQs
IHVuc2lnbmVkIGdyYXZpdHkpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRWaWRl
b0xheWVyR3Jhdml0eSgoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSlncmF2
aXR5KTsKK30KKyAgICAKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxl
KQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBtb2Rl
bCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJZCk7CisKKyAgICBpZiAoIWlzUGFnZVZpc2libGUpCisg
ICAgICAgIG1vZGVsLnZpZGVvRWxlbWVudCgpLT5zY3JvbGxJbnRvVmlld0lmTm90VmlzaWJsZShm
YWxzZSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIHRydWUsIGlubGlu
ZVZpZGVvRnJhbWUoKm1vZGVsLnZpZGVvRWxlbWVudCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorICAgIAordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJh
bWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJ
UEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJm
YWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpZiAoc3Rk
Ojppc25hbihib3VuZHMueCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy55KCkpIHx8IHN0ZDo6aXNu
YW4oYm91bmRzLndpZHRoKCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLmhlaWdodCgpKSkgeworICAg
ICAgICBhdXRvIHZpZGVvUmVjdCA9IGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLT52aWRlb0VsZW1l
bnQoKSk7CisgICAgICAgIGJvdW5kcyA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgo
KSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKKyAgICB9CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24g
YmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOworICAg
IGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKKyAgICAgICAgaW50ZXJmYWNl
LT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgpKTsK
KyAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7CisgICAgbWFjaF9wb3J0X2Rl
YWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7CisgICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3NTNjYjE2OThiZGIxNTVmOTY2OTgxMTFmMDUxNWYyMzg4N2Y1ZGEyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50
RW51bXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBJUEMg
ewotY2xhc3MgQXR0YWNobWVudDsKLWNsYXNzIENvbm5lY3Rpb247Ci1jbGFzcyBEZWNvZGVyOwot
Y2xhc3MgTWVzc2FnZVJlY2VpdmVyOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBO
b2RlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQgZmluYWwKLSAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFn
ZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElk
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQot
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgdm9pZCBy
ZXNldE1lZGlhU3RhdGUoKSBmaW5hbDsKLQotICAgIC8vIFdlYlBsYXliYWNrTW9kZWxDbGllbnQK
LSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOwotICAgIHZvaWQgY3VycmVu
dFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIGZpbmFs
OwotICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIGZpbmFsOwotICAgIHZvaWQg
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpIGZp
bmFsOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNr
UmF0ZSkgZmluYWw7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29y
ZTo6VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0
ZUludGVydmFsKSBmaW5hbDsKLSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9v
bCB2YWx1ZSkgZmluYWw7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKLSAgICB2b2lk
IGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAgIHZv
aWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAg
ICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOwotICAgIHZvaWQgd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIGZpbmFsOwotICAgIHZvaWQgbXV0ZWRDaGFu
Z2VkKGJvb2wpIGZpbmFsOwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKLQotICAg
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2Nv
bnRleHRJZDsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIoKTsKLQotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgZmluYWw7Ci0KLSAgICB2b2lkIHNldFVwUGxheWJhY2tDb250cm9s
c01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYpOwotICAgIHZvaWQgY2xlYXJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIHVpbnQ2NF90IGNvbnRleHRJZEZvck1lZGlhRWxl
bWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7Ci0KLXByb3RlY3RlZDoKLSAgICBmcmll
bmQgY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLSAgICBmcmllbmQg
Y2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKLQotICAgIGV4cGxpY2l0IFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJl
ZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4sIFJlZlB0
cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBs
ZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2
NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJDb3JlOjpXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsK
LSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsK
LQotICAgIC8vIEludGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
Ci0gICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSk7Ci0gICAgdm9pZCBj
dXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUs
IGRvdWJsZSBhbmNob3JUaW1lKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKLSAgICB2b2lkIHBsYXliYWNrU3Rh
cnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRl
ZFRpbWUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlz
UGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3Vi
bGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAgdm9p
ZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1
ZSk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFdl
YkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsK
LSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCk7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eQotICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcGF1
c2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRf
dCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQg
c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKLSAgICB2b2lkIGZh
c3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOwotICAgIHZvaWQgYmVnaW5T
Y2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5p
bmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZW5kU2Nhbm5pbmcodWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBo
YW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAg
IHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNldE11dGVkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7Ci0KLSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0g
ICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiwgdWludDY0X3Q+IG1fbWVkaWFF
bGVtZW50czsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2Nv
bnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07
Ci0gICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDk1NjY2YTcxNTRjYzRhOTQ0ZDA0ZWNhODZjYjMwMzAwNmJkNzc4YTEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251
bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6
Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIg
ewotICAgIFBsYXkodWludDY0X3QgY29udGV4dElkKQotICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLSAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQotICAgIEJlZ2lu
U2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBFbmRTY3J1YmJpbmcodWludDY0X3Qg
Y29udGV4dElkKQotICAgIFNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGlt
ZSkKLSAgICBGYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQotICAgIEJl
Z2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBCZWdpblNjYW5uaW5n
QmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQotICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCkKLSAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDY0X3QgaW5kZXgpCi0gICAgU2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi0gICAgSGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJl
cXVlc3QodWludDY0X3QgY29udGV4dElkKQotICAgIFRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWlu
dDY0X3QgY29udGV4dElkKQotICAgIFRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAg
ICBTZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi19Ci0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1YTI3
ZTQ4YjJhNDI4MjlmYjQ0MjI0YzE3NGQ5YjIzODM1NWI1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIkF0
dGFjaG1lbnQuaCIKLSNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAi
V2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgi
Ci0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2lt
cG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgotI2ltcG9ydCA8
V2ViQ29yZS9FdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3Mu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9Vc2Vy
R2VzdHVyZUluZGljYXRvci5oPgotI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdWludDY0
X3QgbmV4dENvbnRleHRJZCgpCi17Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnRleHRJZCA9IDA7
Ci0gICAgcmV0dXJuICsrY29udGV4dElkOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIDogbV9tYW5hZ2Vy
KCZtYW5hZ2VyKQotICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotewotfQotCi1XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6cmVzZXRNZWRpYVN0YXRlKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPnJlc2V0TWVkaWFTdGF0ZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlv
bikKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmR1cmF0aW9uQ2hh
bmdlZChtX2NvbnRleHRJZCwgZHVyYXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUs
IGRvdWJsZSBhbmNob3JUaW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+Y3VycmVudFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9y
VGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YnVm
ZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQotewotICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YnVmZmVyZWRUaW1lQ2hhbmdlZChtX2NvbnRleHRJZCwg
YnVmZmVyZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cmF0ZUNoYW5nZWQobV9jb250
ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUg
cGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBwbGF5YmFja1N0
YXJ0ZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgcmFuZ2Vz
LCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsK
LSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlZWthYmxlUmFuZ2VzQ2hh
bmdlZChtX2NvbnRleHRJZCwgcmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50
ZXJ2YWwpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQobV9jb250ZXh0
SWQsIHZhbHVlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBp
ZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAg
ICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29u
dGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxl
Y3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1l
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQobV9jb250ZXh0SWQsIGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5h
bWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OndpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQotewotICAgIGlm
IChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWRDaGFuZ2VkKG1fY29udGV4dElkLCBkaXNhYmxlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5tdXRlZENoYW5nZWQobV9jb250
ZXh0SWQsIG11dGVkKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcgotCi1SZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihwYWdlKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSkKLSAg
ICA6IG1fcGFnZSgmcGFnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCi17Ci0gICAgZm9yIChh
dXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgICAgICBz
dGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotICAgICAgICBtb2RlbC0+cmVtb3Zl
Q2xpZW50KCppbnRlcmZhY2UpOwotICAgICAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxw
dHIpOwotCi0gICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIG1f
Y29udGV4dE1hcC5jbGVhcigpOwotICAgIG1fbWVkaWFFbGVtZW50cy5jbGVhcigpOwotICAgIG1f
Y2xpZW50Q291bnRzLmNsZWFyKCk7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLVdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAg
IFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWwgPSBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAgICBt
b2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2UpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBs
ZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKLX0KLQotV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJm
YWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViQ29yZTo6
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0
ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi1XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3Rk
OjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpCi17Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBt
b2RlbDsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtZWRp
YUVsZW1lbnQgPSBtb2RlbC0+bWVkaWFFbGVtZW50KCk7Ci0gICAgbW9kZWwtPnNldE1lZGlhRWxl
bWVudChudWxscHRyKTsKLSAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAg
IGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIG1fbWVkaWFFbGVtZW50cy5yZW1vdmUobWVk
aWFFbGVtZW50LmdldCgpKTsKLSAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29u
dGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNv
bnRhaW5zKGNvbnRleHRJZCkpOwotICAgIGlmIChtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4
dElkKSkKLSAgICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQotewotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBhdXRvIGZvdW5kSXRlcmF0b3IgPSBtX21lZGlhRWxlbWVudHMuZmluZCgmbWVkaWFFbGVt
ZW50KTsKLSAgICBpZiAoZm91bmRJdGVyYXRvciAhPSBtX21lZGlhRWxlbWVudHMuZW5kKCkpIHsK
LSAgICAgICAgdWludDY0X3QgY29udGV4dElkID0gZm91bmRJdGVyYXRvci0+dmFsdWU7Ci0gICAg
ICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9PSBjb250ZXh0SWQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQot
ICAgICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRl
eHRJZCk7Ci0gICAgICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1lbnRzLmVu
c3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9KTsKLSAg
ICAgICAgYXV0byBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgICAg
ICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgICAgICByZW1vdmVDbGll
bnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICAgICAgbV9jb250
cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7Ci0gICAgICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkuc2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOwotICAgIH0KLQotICAgIGFk
ZENsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZXRVcFBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCk7Ci0gICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOwotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDbGVhclBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotI2VuZGlmCi19Ci0KLXVpbnQ2
NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1lZGlhRWxlbWVudChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCi17Ci0gICAgYXV0byBhZGRS
ZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVy
biBuZXh0Q29udGV4dElkKCk7IH0pOwotICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRNZWRpYUVs
ZW1lbnQoJm1lZGlhRWxlbWVudCk7Ci0gICAgcmV0dXJuIGNvbnRleHRJZDsKLX0KLQotI3ByYWdt
YSBtYXJrIEludGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ogot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1cmF0aW9u
Q2hhbmdlZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKLXsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpi
dWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGlt
ZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6QnVmZmVyZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBs
YXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXli
YWNrU3RhcnRlZFRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNvbnRleHRJ
ZCwgcGxheWJhY2tTdGFydGVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5nZWQoY29u
dGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVSYW5nZXMs
IGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewotICAg
ICAgICBkb3VibGUgc3RhcnQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLnN0YXJ0KGkpLnRvRG91Ymxl
KCk7Ci0gICAgICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLmVuZChpKS50b0Rv
dWJsZSgpOwotICAgICAgICByYW5nZXNWZWN0b3IuYXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsKLSAg
ICB9Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OlNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZChjb250ZXh0SWQsIFdURk1vdmUocmFu
Z2VzVmVjdG9yKSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxh
eUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi17Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY29udGV4dElkLCB2YWx1ZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMs
IHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwg
U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkV4dGVybmFsUGxheWJhY2tQcm9wZXJ0
aWVzQ2hhbmdlZChjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0YXJn
ZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpB
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCks
IG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQotewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpXaXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoY29udGV4dElkLCBkaXNhYmxlZCkpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok11dGVkQ2hhbmdlZChjb250ZXh0SWQsIG11
dGVkKSk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eToKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXko
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwYXVzZSh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wYXVzZSgpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQbGF5
U3RhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjcnVi
YmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5iZWdpblNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5lbmRTY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi17Ci0g
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7
Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9UaW1lKHRpbWUpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIHRpbWUpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mYXN0U2Vlayh0
aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5n
Rm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7
Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY2FubmluZygp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKLXsKLSAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewotICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVz
dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBlbGVtZW50ID0gZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5tZWRpYUVsZW1lbnQoKTsKLSAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkhhbmRs
ZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQsIGVsZW1lbnQtPmdldElkQXR0
cmlidXRlKCkpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7
Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVNdXRlZCgpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBtdXRlZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE11dGVkKG11dGVk
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTlhMDBm
MTFhZWE0NDRmOTY4NTEzNWI5OTcwY2NhMmQ4YWU3MzI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIChQTEFURk9STShJT1MpICYmIEhB
VkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9FdmVudExpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50RW51
bXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIEF0dGFjaG1lbnQ7Ci1jbGFzcyBD
b25uZWN0aW9uOwotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIE1lc3NhZ2VSZWNlaXZlcjsKLX0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgTm9kZTsKLX0KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIExheWVySG9zdGluZ0NvbnRleHQ7Ci1jbGFzcyBX
ZWJQYWdlOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ci0gICAgOiBw
dWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PgotICAg
ICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGNy
ZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0
SWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwotICAgIH0KLSAgICB2aXJ0
dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCk7Ci0KLSAgICB2b2lkIGlu
dmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotICAgIExheWVySG9zdGluZ0Nv
bnRleHQqIGxheWVySG9zdGluZ0NvbnRleHQoKSB7IHJldHVybiBtX2xheWVySG9zdGluZ0NvbnRl
eHQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVf
cHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYpOwotCi0gICAgYm9vbCBpc0FuaW1hdGluZygpIGNv
bnN0IHsgcmV0dXJuIG1faXNBbmltYXRpbmc7IH0KLSAgICB2b2lkIHNldElzQW5pbWF0aW5nKGJv
b2wgZmxhZykgeyBtX2lzQW5pbWF0aW5nID0gZmxhZzsgfQotCi0gICAgYm9vbCB0YXJnZXRJc0Z1
bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX3RhcmdldElzRnVsbHNjcmVlbjsgfQotICAgIHZv
aWQgc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX3RhcmdldElzRnVsbHNjcmVl
biA9IGZsYWc7IH0KLQotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSBmdWxsc2NyZWVuTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVl
bk1vZGU7IH0KLSAgICB2b2lkIHNldEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSB7IG1fZnVsbHNjcmVlbk1vZGUg
PSBtb2RlOyB9Ci0KLSAgICBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1faXNG
dWxsc2NyZWVuOyB9Ci0gICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1faXNG
dWxsc2NyZWVuID0gZmxhZzsgfQotCi1wcml2YXRlOgotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Ci0gICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYp
IG92ZXJyaWRlOwotCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKLQotICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2NvbnRleHRJ
ZDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3Rp
bmdDb250ZXh0OwotICAgIGJvb2wgbV9pc0FuaW1hdGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X3RhcmdldElzRnVsbHNjcmVlbiB7IGZhbHNlIH07Ci0gICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fZnVsbHNjcmVlbk1vZGUgeyBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07Ci0gICAg
Ym9vbCBtX2lzRnVsbHNjcmVlbiB7IGZhbHNlIH07Ci19OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2UmLCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyJik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cigpOwotICAgIAotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIAotICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0K
LSAgICAvLyBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50Ci0gICAgYm9vbCBzdXBwb3J0c1ZpZGVv
RnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUpIGNvbnN0OwotICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1l
bnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVu
Rm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmKTsKLSAgICB2b2lkIGV4
aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ7Ci0KLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyKFdlYlBhZ2UmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7Ci0KLSAgICB0eXBlZGVm
IHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiwgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+PiBNb2Rl
bEludGVyZmFjZVR1cGxlOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYkNvcmU6
OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIGVu
c3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRf
dCBjb250ZXh0SWQpOwotCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQKLSAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgaGFzVmlkZW8pOwotICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotCi0gICAgLy8gTWVz
c2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKLSAgICB2b2lkIHJlcXVl
c3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSk7
Ci0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2
b2lkIGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkaWRF
bnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZENsZWFudXBG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyRnJh
bWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJ
UEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5
RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpOwotICAgIHZvaWQgZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSk7
Ci0gICAgCi0gICAgV2ViUGFnZSogbV9wYWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyPiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50KiwgdWludDY0X3Q+IG1fdmlkZW9FbGVtZW50czsKLSAgICBIYXNoTWFw
PHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0
X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaE1hcDx1aW50NjRf
dCwgaW50PiBtX2NsaWVudENvdW50czsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1l
c3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzU5YzI1YWFlN2IwMTVl
MzAxM2Q5YTFiMTUwN2I2MTBhMmZiY2E1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAg
QEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIChQTEFURk9S
TShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ciB7Ci0gICAgUmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNj
cmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi0gICAgRGlkU2V0dXBGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCi0gICAgRGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBE
aWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgU2V0VmlkZW9MYXll
ckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5k
cywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKLSAgICBTZXRWaWRlb0xheWVyR3Jhdml0eUVu
dW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQotICAgIEZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotICAgIEZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlz
aWJsZSkKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyNGM5OGNhOGVjNjMzYWU2ODY4OTU5NjUwZWU4MjEyOWUyMzhlYjcxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDQ2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCi0KLSNpZiAoUExBVEZP
Uk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQXR0YWNobWVudC5oIgotI2ltcG9ydCAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0ICJXZWJQYWdlLmgiCi0jaW1wb3J0ICJX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzLmgiCi0jaW1w
b3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3Jl
L0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
UmVuZGVyTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZGVvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZp
ZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGlt
ZVJhbmdlcy5oPgotI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgSW50UmVjdCBpbmxpbmVW
aWRlb0ZyYW1lKEhUTUxWaWRlb0VsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgZWxlbWVudC5kb2N1
bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGF1dG8q
IHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgYXV0byByZWN0ID0gcmVuZGVyZXItPnZpZGVvQm94KCk7Ci0g
ICAgcmVjdC5tb3ZlQnkocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkubG9jYXRp
b24oKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9S
b290VmlldyhyZWN0KTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dAotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIm
IG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikK
LSAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKQot
ewotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVy
SG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYgY29u
dGV4dCkKLXsKLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhhc1ZpZGVvQ2hh
bmdlZChib29sIGhhc1ZpZGVvKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+aGFzVmlkZW9DaGFuZ2VkKG1fY29udGV4dElkLCBoYXNWaWRlbyk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV9jb250ZXh0SWQs
IHZpZGVvRGltZW5zaW9ucyk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIKLQotUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikp
OwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIHBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIpCi0gICAgOiBtX3BhZ2UoJnBhZ2UpCi0gICAgLCBtX3BsYXliYWNrU2Vzc2lv
bk1hbmFnZXIocGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOwotfQot
Ci1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigp
Ci17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAg
ICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwot
ICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotCi0gICAg
ICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7Ci0gICAgICAgIG1vZGVsLT5yZW1v
dmVDbGllbnQoKmludGVyZmFjZSk7Ci0KLSAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7
Ci0gICAgfQotCi0gICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7Ci0gICAgbV92aWRlb0VsZW1lbnRz
LmNsZWFyKCk7Ci0gICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKLSAgICAKLSAgICBpZiAobV9w
YWdlKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6aW52YWxpZGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkp
OwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lv
bk1hbmFnZXItPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIGludGVyZmFj
ZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JF
eHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOwotICAgIG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFj
ZSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3Zl
KGludGVyZmFjZSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVy
ZmFjZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVy
ZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRl
eHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKLSAgICBpZiAoYWRk
UmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBj
cmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0
X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9k
ZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0g
ICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5yZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRl
eHRJZCk7Ci0KLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0gbW9k
ZWwtPnZpZGVvRWxlbWVudCgpOwotICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7
Ci0gICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLSAgICBpbnRlcmZhY2UtPmlu
dmFsaWRhdGUoKTsKLSAgICBtX3ZpZGVvRWxlbWVudHMucmVtb3ZlKHZpZGVvRWxlbWVudC5nZXQo
KSk7Ci0gICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4
dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJ
ZCwgMSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSsrOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIEFTU0VS
VChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKLQotICAgIGludCBjbGllbnRD
b3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOwotICAgIEFTU0VSVChjbGllbnRD
b3VudCA+IDApOwotICAgIGNsaWVudENvdW50LS07Ci0KLSAgICBpZiAoY2xpZW50Q291bnQgPD0g
MCkgewotICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKTsKLSAgICAgICAg
cmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOwotfQotCi0jcHJhZ21h
IG1hcmsgSW50ZXJmYWNlIHRvIENocm9tZUNsaWVudDoKLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKLXsKLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIHJldHVybiBTZXR0aW5nczo6YXZL
aXRFbmFibGVkKCk7Ci0jZWxzZQotICAgIHJldHVybiBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgJiYgc3VwcG9ydHNQaWN0
dXJlSW5QaWN0dXJlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50
JiB2aWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlKQotewotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVChtb2RlICE9IEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotCi0gICAgdWludDY0
X3QgY29udGV4dElkID0gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5jb250ZXh0SWRGb3JNZWRp
YUVsZW1lbnQodmlkZW9FbGVtZW50KTsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmlkZW9FbGVt
ZW50cy5hZGQoJnZpZGVvRWxlbWVudCwgY29udGV4dElkKTsKLSAgICBVTlVTRURfUEFSQU0oYWRk
UmVzdWx0KTsKLSAgICBBU1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9PSBjb250ZXh0
SWQpOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBt
b2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7
Ci0gICAgaWYgKCFpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKLSAgICAgICAgaW50
ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0
ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7Ci0KLSAgICBhdXRvIHZpZGVvUmVjdCA9IGlu
bGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KTsKLSAgICBGbG9hdFJlY3QgdmlkZW9MYXllckZy
YW1lID0gRmxvYXRSZWN0KDAsIDAsIHZpZGVvUmVjdC53aWR0aCgpLCB2aWRlb1JlY3QuaGVpZ2h0
KCkpOwotCi0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG9s
ZE1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCk7Ci0gICAgaW50ZXJmYWNlLT5zZXRU
YXJnZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7Ci0gICAgaW50ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9k
ZShtb2RlKTsKLSAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KCZ2aWRlb0VsZW1lbnQpOwotICAg
IGlmIChvbGRNb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZU5vbmUpCi0gICAgICAgIG1vZGVsLT5zZXRWaWRlb0xheWVyRnJhbWUodmlkZW9MYXllckZyYW1l
KTsKLQotICAgIGlmIChpbnRlcmZhY2UtPmlzQW5pbWF0aW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKHRydWUpOwotCi0gICAgYm9vbCBhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlID0gdmlkZW9FbGVtZW50LndlYmtpdFN1cHBvcnRzUHJlc2VudGF0aW9u
TW9kZShIVE1MVmlkZW9FbGVtZW50OjpWaWRlb1ByZXNlbnRhdGlvbk1vZGU6OlBpY3R1cmVJblBp
Y3R1cmUpOwotICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQoY29udGV4dElkLCBpbnRlcmZh
Y2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+Y29udGV4dElEKCksIHZpZGVvUmVjdCwgbV9wYWdl
LT5kZXZpY2VTY2FsZUZhY3RvcigpLCBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCksIGFsbG93
c1BpY3R1cmVJblBpY3R1cmUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCkKLXsKLSAgICBBU1NFUlQobV9w
YWdlKTsKLSAgICBBU1NFUlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQp
KTsKLQotICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZpZGVv
RWxlbWVudCk7Ci0gICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJ
ZCk7Ci0KLSAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKLQotICAg
IGlmIChpbnRlcmZhY2UuaXNBbmltYXRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50
ZXJmYWNlLnNldElzQW5pbWF0aW5nKHRydWUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQs
IGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01v
ZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVu
dCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRh
cmdldE1vZGUpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCi0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50
cy5jb250YWlucygmdmlkZW9FbGVtZW50KSk7Ci0KLSAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBt
X3ZpZGVvRWxlbWVudHMuZ2V0KCZ2aWRlb0VsZW1lbnQpOwotICAgIGF1dG8mIGludGVyZmFjZSA9
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLnNldFRhcmdldElz
RnVsbHNjcmVlbihmYWxzZSk7Ci0KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9N
b2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0odmlkZW9FbGVtZW50KTsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0TW9k
ZSk7Ci0jZW5kaWYKLX0KLQotI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0OgotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCi17Ci0g
ICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNvbnRleHRJZCwgaGFzVmlkZW8pLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgRmxvYXRTaXpl
JiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFZpZGVvRGlt
ZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyksIG1fcGFnZS0+cGFnZUlEKCkpOwot
fQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1bGxzY3Jl
ZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0g
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobW9kZSwgZmlu
aXNoZWRXaXRoTWVkaWEpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQot
ewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVv
RnVsbHNjcmVlbk1vZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRp
ZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgQVNTRVJUKG1fcGFn
ZSk7Ci0gICAgUGxhdGZvcm1MYXllciogdmlkZW9MYXllciA9IFtDQUxheWVyIGxheWVyXTsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgW3ZpZGVvTGF5ZXIgc2V0TmFtZTpAIldlYiB2aWRlbyBmdWxsc2Ny
ZWVuIG1hbmFnZXIgbGF5ZXIiXTsKLSNlbmRpZgotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5d
OwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBbdmlk
ZW9MYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgwLCAwKV07Ci0gICAgW3ZpZGVvTGF5ZXIg
c2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFy
ZW50KV07Ci0KLSAgICAvLyBTZXQgYSBzY2FsZSBmYWN0b3IgaGVyZSB0byBtYWtlIGNvbnZlcnRS
ZWN0OnRvTGF5ZXI6bmlsIHRha2Ugc2NhbGUgZmFjdG9yIGludG8gYWNjb3VudC4gPHJkYXI6Ly9w
cm9ibGVtLzE4MzE2NTQyPi4KLSAgICAvLyBUaGlzIHNjYWxlIGZhY3RvciBpcyBpbnZlcnRlZCBp
biB0aGUgaG9zdGluZyBwcm9jZXNzLgotICAgIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciA9IG1f
cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBbdmlkZW9MYXllciBzZXRUcmFuc2Zvcm06
Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0b3IsIGhvc3RpbmdTY2FsZUZh
Y3RvciwgMSldOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5n
Q29udGV4dCgpLT5zZXRSb290TGF5ZXIodmlkZW9MYXllcik7Ci0KLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAKLSAgICBtb2Rl
bC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9MYXllciwgW3Byb3RlY3RlZFRoaXMsIHRo
aXMsIGNvbnRleHRJZF0gewotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7Ci0gICAgICAgICAg
ICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1bGxzY3Jl
ZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0gICAg
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+c2V0SXNB
bmltYXRpbmcoZmFsc2UpOwotICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsK
LQotICAgIGlmIChpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0gbW9kZWwt
PnZpZGVvRWxlbWVudCgpOwotICAgIGlmICghdmlkZW9FbGVtZW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVl
c3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnRdIHsKLSAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
PmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgCi0gICAgbW9k
ZWwtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJ
ZCwgaW50ZXJmYWNlLCBtb2RlbF0gewotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1v
ZGVsXSB7Ci0gICAgICAgICAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsLCBb
cHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKLSAgICAgICAgICAgICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywg
Y29udGV4dElkLCBpbnRlcmZhY2VdIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyZmFj
ZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRl
cmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9vdExheWVyKG51bGxwdHIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KG51
bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5w
YWdlSUQoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fSk7Ci0gICAgfSk7Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRp
ZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUo
bW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwot
Ci0gICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7Ci0gICAgaW50ZXJmYWNlLT5z
ZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSBtb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOwotICAgIGJv
b2wgdGFyZ2V0SXNGdWxsc2NyZWVuID0gaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKTsK
LQotICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwotICAgIFJlZlB0cjxI
VE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7Ci0K
LSAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQoY29u
dGV4dElkKTsKLQotICAgIGlmICghdmlkZW9FbGVtZW50IHx8ICF0YXJnZXRJc0Z1bGxzY3JlZW4p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnQsIG1vZGVdIHsKLSAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
PmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQsIG1vZGUp
OwotICAgIH0pOwotfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRW
aWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5
KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdyYXZpdHkoKFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7Ci19Ci0gICAgCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKLXsKLSAgICBpZiAoIW1f
cGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgbW9kZWwgPSBlbnN1cmVNb2RlbChj
b250ZXh0SWQpOwotCi0gICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQotICAgICAgICBtb2RlbC52aWRl
b0VsZW1lbnQoKS0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2UpOwotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpQcmVwYXJl
ZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVlLCBpbmxpbmVWaWRlb0ZyYW1lKCptb2Rl
bC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLSAgICAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZl
bmNlUG9ydCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oYm91bmRzLngo
KSkgfHwgc3RkOjppc25hbihib3VuZHMueSgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy53aWR0aCgp
KSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy5oZWlnaHQoKSkpIHsKLSAgICAgICAgYXV0byB2aWRlb1Jl
Y3QgPSBpbmxpbmVWaWRlb0ZyYW1lKCptb2RlbC0+dmlkZW9FbGVtZW50KCkpOwotICAgICAgICBi
b3VuZHMgPSBGbG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZpZGVvUmVjdC5oZWln
aHQoKSk7Ci0gICAgfQotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FU
cmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsKLSAgICBpZiAoaW50ZXJmYWNlLT5s
YXllckhvc3RpbmdDb250ZXh0KCkpCi0gICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29u
dGV4dCgpLT5zZXRGZW5jZVBvcnQoZmVuY2VQb3J0LnBvcnQoKSk7Ci0gICAgbW9kZWwtPnNldFZp
ZGVvTGF5ZXJGcmFtZShib3VuZHMpOwotICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFz
a19zZWxmKCksIGZlbmNlUG9ydC5wb3J0KCkpOwotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316134</attachid>
            <date>2017-07-21 16:15:33 -0700</date>
            <delta_ts>2017-07-21 21:03:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174437-20170721161533.patch</filename>
            <type>text/plain</type>
            <size>730160</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmExYTViMTM2MWYyOWJh
MGExZmZmZjJkYmExZDYzNzY5NDVhNjQ3YS4uMmU0ZjkxNjQ1MWEwMzMzNzhhZTliYzQyYWE0ZTlm
MjBkNDg1NWJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0OCBAQAorMjAxNy0wNy0yMSAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVm
aXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2Ugbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgIFJlbW92ZSByZWR1
bmRhbnQgV2ViLSBwcmVmaXggZnJvbSBjbGFzc2VzIGluIFdlYkNvcmUgbmFtZXNwYWNlLgorCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVmlkZW9FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Uu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS5oLgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlOjp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsOjp+UGxheWJhY2tTZXNzaW9uTW9kZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6On5QbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Bs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5o
LgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0uCisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6On5QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6dXBkYXRlRm9yRXZlbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBsYXlT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZmFzdFNlZWspOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdG
b3J3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZU11dGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRN
dXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBs
YXliYWNrU3RhcnRlZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXZlbnROYW1lQWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3VycmVu
dFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmJ1ZmZlcmVkVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6aXNQbGF5aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxlUmFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVRp
bWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsaXZlVXBkYXRlSW50ZXJ2YWwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNhblBsYXlGYXN0UmV2ZXJz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNr
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWRE
ZXZpY2VOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNNdXRlZCk6CisgICAgICAgICog
cGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLmguCisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcjo6flZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaC4KKyAgICAgICAgKFdl
YkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjp+VmlkZW9GdWxsc2NyZWVuTW9kZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQ6On5WaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmguCisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tLgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KToKKyAgICAgICAg
KFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFZpZGVvRWxlbWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4p
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJlcXVlc3RGdWxs
c2NyZWVuTW9kZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpldmVudE5hbWVBbGwpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6YWRkQ2xpZW50KToKKyAgICAg
ICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZW1vdmVDbGllbnQpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmlzVmlzaWJsZSk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8pOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRGltZW5zaW9u
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmN1
cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y2FuUGxh
eUZhc3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OndpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mv
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbTogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5tbS4KKyAgICAgICAgKC1bV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRl
bGVnYXRlIGZ1bGxzY3JlZW5JbnRlcmZhY2VdKToKKyAgICAgICAgKC1bV2ViQVZQbGF5ZXJWaWV3
Q29udHJvbGxlckRlbGVnYXRlIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6XSk6CisgICAgICAgIChj
b252ZXJ0VG9FeGl0RnVsbFNjcmVlblJlYXNvbik6CisgICAgICAgICgtW1dlYkFWUGxheWVyTGF5
ZXIgZnVsbHNjcmVlbkludGVyZmFjZV0pOgorICAgICAgICAoLVtXZWJBVlBsYXllckxheWVyIHNl
dEZ1bGxzY3JlZW5JbnRlcmZhY2U6XSk6CisgICAgICAgICgtW1dlYkFWUGxheWVyTGF5ZXIgc2V0
VmlkZW9HcmF2aXR5Ol0pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmNyZWF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6VmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cGxheWVyQ29udHJvbGxlcik6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpoYXNWaWRlb0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4pOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGlj
dHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxs
c2NyZWVuU3RhbmRhcmQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpjbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGlj
dHVyZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxs
U3RvcFBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxl
dGlvbkhhbmRsZXIpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNo
b3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXRNb2RlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpjbGVhck1vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJBVlBs
YXllckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250
cm9sbGVyLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQVZLaXQubW06CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb25DaGFu
Z2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50
VGltZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVv
TGF5ZXJHcmF2aXR5KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6aGFzVmlkZW8pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmlzTXV0ZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6cGxheSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6cGF1c2UpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6dG9nZ2xlTXV0ZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnNldE11dGVkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpmYXN0U2Vlayk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZHVyYXRpb24pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1
cnJlbnRUaW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpi
dWZmZXJlZFRpbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmlzUGxheWluZyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
cGxheWJhY2tSYXRlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZWVrYWJsZVJhbmdlcyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGl2ZVVwZGF0ZUludGVydmFsKToKKyAgICAg
ICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2Up
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJ
bmRleCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJu
YWxQbGF5YmFja0VuYWJsZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKToKKyAgICAgICAgKFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFt
ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNldFVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjptb2RlOl0p
OgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRpZEZpbmlzaEZ1bGxz
Y3JlZW46XSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZGlkU2V0dXBGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3Jl
ZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50
VGltZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlb0No
YW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRDaGFuZ2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphZGRDbGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRl
b0xheWVyRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmlzVmlzaWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6aGFzVmlkZW8pOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzTXV0ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9ucyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGF1
c2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnRvZ2dsZVBsYXlTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlTXV0ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldE11dGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmlu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZW5kU2NydWJiaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zvcndh
cmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpi
dWZmZXJlZFRpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmlzUGxheWluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheWJhY2tSYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vl
a2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGl2ZVVwZGF0ZUludGVydmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5Q
bGF5RmFzdFJldmVyc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2Vs
ZWN0ZWRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2Vs
ZWN0ZWRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVsbHNjcmVlbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5tbS4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1
cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6Omlu
dmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjplbnN1cmVDb250cm9sc01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJD
b3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNldFBsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6dXBk
YXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcpOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbS4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2Jq
QyBpbml0V2l0aFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzpdKToKKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBpbnZhbGlkYXRlXSk6CisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgc2V0VXBQSVBGb3JWaWRlb1ZpZXc6
d2l0aEZyYW1lOmluV2luZG93Ol0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWNPYmpDIGJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjpdKToKKyAg
ICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBTaG91bGRDbG9z
ZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBE
aWRDbG9zZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2Jq
QyBwaXBBY3Rpb25QbGF5Ol0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWNPYmpDIHBpcEFjdGlvblBhdXNlOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWNPYmpDIHBpcEFjdGlvblN0b3A6XSk6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6On5WaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
c2V0TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmNsZWFyTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVu
dGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0RpbWVu
c2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbik6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tOgorICAgICAgICAoLVtXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyIHNlZWtUb1RpbWU6dG9sZXJhbmNlQmVmb3JlOnRvbGVyYW5jZUFmdGVyOl0p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBiZWdpblRvdWNoQmFyU2Ny
dWJiaW5nXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGVuZFRvdWNo
QmFyU2NydWJiaW5nXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNl
dEN1cnJlbnRBdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246XSk6CisgICAgICAgICgt
W1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldEN1cnJlbnRMZWdpYmxlVG91Y2hCYXJNZWRp
YVNlbGVjdGlvbk9wdGlvbjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFn
ZXIgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzpdKToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgdG9nZ2xlUGxheWJhY2tdKToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0UGxheWluZzpdKToKKyAgICAgICAg
KC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgaXNQbGF5aW5nXSk6CisgICAgICAgICgtW1dl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmVdKToKKyAgICAg
ICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
IHNldFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzpdKTogRGVsZXRlZC4KKwogMjAxNy0w
Ny0yMSAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAg
W2NtYWtlXVtNYWNdIFVucmV2aWV3ZWQsIGZpeCBsaW5raW5nIFdlYktpdFN5c3RlbUludGVyZmFj
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCA3ZDJhNmYyNWJmYjNjYmMxYTRjYmIxMjVjYzEyMTExZDJkNzJmZDE5Li5l
MGNjNDJlZDM4MmIxZWQzZDFlYzExYTFjZmFlODBmMzU4MGNjZDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI2MSBAQAorMjAxNy0wNy0yMSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5k
IFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHJlZHVuZGFudCBXZWItIHByZWZpeCBmcm9tIGNs
YXNzZXMgaW4gV2ViS2l0IG5hbWVzcGFjZS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1h
a2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5LmguCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbi4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphZGRD
bGllbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJl
bW92ZUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6cGxheSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
cGF1c2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRv
Z2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjYW5u
aW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZU11dGVkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZXRNdXRlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vla2FibGVSYW5n
ZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11
dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVs
QW5kSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVzZXRN
ZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmJ1ZmZlcmVkVGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2FuUGxheUZhc3RS
ZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpleHRl
cm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bXV0ZWRD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpk
dXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJl
c3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpw
bGF5KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwYXVz
ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xl
UGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSk6CisgICAgICAg
IChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldE11dGVkKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXF1ZXN0Q29udHJv
bGxlZEVsZW1lbnRJRCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW06IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
bW0uCisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNN
b2RlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlB
dXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YXBwbGlj
YXRpb25EaWRCZWNvbWVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YWRk
Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpy
ZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpp
c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJL
aXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp+VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1BsYXlp
bmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZh
Y2UpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3Vy
ZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpl
bnN1cmVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCk6
CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0SGFzVmlk
ZW8pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZp
ZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjbGVhbnVw
RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoV2Vi
S2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVlbik6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRXhpdEZ1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRp
ZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6aXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW06IFJlbW92ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJhcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1fd2Vha1B0ckZhY3RvcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlYXR0YWNoVG9XZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
Y29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1l
c3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Om5leHRDb250ZXh0SWQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpyZXNldE1lZGlhU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojpk
dXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpwbGF5YmFj
a1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojph
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjp+UGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ2xp
ZW50Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y29udGV4dElkRm9yTWVkaWFFbGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVzZXRNZWRpYVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZHVyYXRpb25D
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVu
dFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YnVmZmVyZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptdXRlZENoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGF1c2UpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjcnViYmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjcnViYmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWtUb1RpbWUpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3
YXJkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5p
bmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RBdWRp
b01lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlTXV0ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRNdXRlZCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5oLgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdl
YlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1t
LgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6flZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRM
YXllckhvc3RpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmludmFs
aWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGVN
b2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6CisgICAgICAg
IChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01v
ZGVXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbik6
CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRG
dWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlk
Q2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5t
bTogUmVtb3ZlZC4KKwogMjAxNy0wNy0yMSAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5
YW5kZXgucnU+CiAKICAgICAgICAgW2NtYWtlXVtNYWNdIFVucmV2aWV3ZWQsIGZpeCBsaW5raW5n
IFdlYktpdFN5c3RlbUludGVyZmFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDc0
M2ZjZGRmZmVhODliMmEwNzJiYTg4YWFmZGJkN2JjZThiYjBhZjYuLjE4OWIwZjcyYWNkNWQzYzU5
ZTI5Mzk3ZTFmYWQ3NTJlMzYxNDk1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxNy0wNy0yMSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4g
YW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHJlZHVuZGFudCBXZWItIHByZWZpeCBmcm9t
IGNsYXNzZXMgaW4gV2ViS2l0IG5hbWVzcGFjZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZv
ck1lZGlhRWxlbWVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAg
ICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKwogMjAxNy0wNy0yMSAgQW5kcmVhcyBLbGlu
ZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIG1vcmUgcmVmZXJlbmNlcyBpbiBl
dmVudCBkaXNwYXRjaCBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjJmY2Q0ZDljZTI2MjliMTFjNWVmZTIzNWZkZDFmMjZm
ZWNlMTFkOC4uYzMwZGQwY2E2YWYzYzBiODUyNjA1NjllYzdhZmM0ZTE1Yzk3NzhhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTY4Myw4ICsxNjgzLDggQEAKIAkJM0Y4MDIwMzYxRTlFNDdDMzAwREVDNjFEIC8qIENvcmVBdWRp
b0NhcHR1cmVEZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gM0Y4MDIwMzExRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZp
Y2UuY3BwICovOyB9OwogCQkzRjgwMjAzNzFFOUU0N0M1MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGODAyMDM0MUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2
aWNlTWFuYWdlci5oICovOyB9OwogCQkzRjgwMjAzODFFOUU0N0M5MDBERUM2MUQgLyogQ29yZUF1
ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gM0Y4MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCAqLzsgfTsKLQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OwotCQkzRkJDNEFGNDE4
OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgx
NTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNGQkM0QUYzMTg5ODgx
NTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYxMTg5ODgxNTYwMDQ2
RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKKwkJM0ZCQzRB
RjQxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMjE4OTg4
MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzRkYxRkE2NjFFNzM1MEZE
MDBDMTAwMkYgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyog
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi87IH07CiAJCTNGRjgxM0E3MURCQTg2NDAwMDlC
RjAwMSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRkM0MzRGMTkyNDA2QTkwMEEwRDNCNSAvKiBQb2ludGVy
TG9ja0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkzRkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRS
dWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
RkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovOyB9
OwpAQCAtMjQ2NiwxMSArMjQ2NiwxMSBAQAogCQk1MUZCNTUwNTExM0UzRTkxMDA4MjExNzYgLyog
SlNDbG9zZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRkI1NTAzMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovOyB9
OwogCQk1MUZCNjdEQjFBRTZCODJCMDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hl
ZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
QjY3RDkxQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcCAq
LzsgfTsKIAkJNTFGQjY3REMxQUU2QjgyRjAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUZCNjdEQTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MjEzMUU1
QjFDNEYxNTc2MDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzFFNUExQzRG
MTU2MTAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLzsgfTsK
KwkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMx
RTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi87
IH07CiAJCTUyNjcyNEYzMUNCMkZFQUQwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI2NzI0RjExQ0IyRkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2Eu
bW0gKi87IH07CiAJCTUyQjBENEJFMUM1N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjBENEJEMUM1
N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjBE
NEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkI2QzlDMjE1
RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkI2QzlCRDE1RTNGNERGMDA2OTBC
MDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTUyQjZDOUMzMTVFM0Y0
REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkI2QzlCRTE1RTNGNERGMDA2OTBCMDUgLyog
RE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovOyB9OwogCQk1MkI2QzlDNTE1RTNGNERGMDA2OTBC
MDUgLyogTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkI2QzlDMDE1RTNGNERGMDA2OTBCMDUgLyogTmFtZWRGbG93
Q29sbGVjdGlvbi5jcHAgKi87IH07CkBAIC0yNDc4LDkgKzI0NzgsOSBAQAogCQk1MkNDQTlFMjE1
RTNGNjJDMDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0NBOUUwMTVFM0Y2MkMwMDUz
Qzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk1MkNDQTlFMzE1
RTNGNjJDMDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNDQTlFMTE1RTNGNjJDMDA1M0M3
N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggKi87IH07CiAJCTUyRDVBMThGMUM1NDU5
MjMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTE4RDFDNTQ1OTAzMDBERTM0
QTMgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1tICovOyB9OwotCQk1MkQ1QTFBNzFD
NTc0ODlEMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE0MUM1NzQ4ODkwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OworCQk1MkQ1QTFBNzFD
NTc0ODlEMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OwogCQk1MkUyQ0FGQzE5RkYwMjA3MDAxRUVCNEYgLyog
TWVkaWFQcm9kdWNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkYxMDg2NTE2MkI2
REE0MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyog
TWl4ZWRDb250ZW50Q2hlY2tlci5jcHAgKi87IH07CiAJCTUyRjEwODY2MTYyQjZEQTgwMDlBQzgx
RSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50
Q2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC02MTczLDE1ICs2MTczLDE1IEBACiAJCUNEQTA3RkJFMThFMEExNkEwMDQ2OTlGQSAvKiBT
eXN0ZW1TbGVlcExpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREEwN0ZCQzE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNE
QTA3RkMxMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQkYxOEUwQTIy
QjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gKi87IH07CiAJCUNEQTA3RkMy
MThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwN0ZDMDE4RTBBMjJCMDA0Njk5
RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oICovOyB9OwotCQlDREEyOUEwOTFDQkQ5OUY0
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQubW0gKi87IH07Ci0JCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi87IH07Ci0JCUNEQTI5QTE3MUNCREE1NkMwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gKi87IH07CisJCUNEQTI5QTA5MUNCRDk5
RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNEQTI5
QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTBD
MUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSAq
LzsgfTsKKwkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RB
MjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAq
LzsgfTsKKwkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNEQTI5
QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJGMUNC
RjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsK
IAkJQ0RBMjlBMzExQ0JGNzREQTAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJEMUNC
RjczRkMwMDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0gKi87IH07Ci0JCUNEQTI5
QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkUx
Q0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMzIx
Q0MwMUE5NTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRTFDQkY3M0ZD
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREE3OTgyNDE3MEEyNTgzMDBE
NDVDNTUgLyogQXVkaW9TZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQTc5ODIzMTcwQTI1ODMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24u
Y3BwICovOyB9OwogCQlDREE3OTgyNzE3MEEyNzkxMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNzk4
MjUxNzBBMjc5MDAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSAqLzsgfTsKIAkJQ0RBNzk4
MkExNzBBM0QwMDAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1
ZGlvU2Vzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC05Mjk3LDggKzkyOTcsOCBAQAogCQkzRjgwMjAzMjFFOUUzODFEMDBERUM2MUQgLyog
Q29yZUF1ZGlvQ2FwdHVyZURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTNGODAyMDMzMUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3JlQXVkaW9DYXB0
dXJlRGV2aWNlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODAy
MDM0MUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRkJDNEFGMTE4OTg4MTU2MDA0
NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0ZCQzRBRjIxODk4ODE1NjAw
NDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0
UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkZGRjlBNzE1
OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzRkZGRjlBQjE1OUQ5QjA2MDAyMEJCRDUgLyogVmlld3BvcnRTdHls
ZVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdw
b3J0U3R5bGVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE5
MywxMiArMTAxOTMsMTIgQEAKIAkJNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VF
dmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nsb3NlRXZl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNjdEOTFBRTZCNUU0MDBE
MDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNjdEQTFBRTZCNUU0MDBEMDZDNUEgLyogQ29u
dGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0
RjExQ0IyRkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMjFDQjJG
REY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjBENEJEMUM1N0ZEMUUwMDc3Q0U1MyAvKiBQ
bGF0Zm9ybVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1W
aWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyQjBENEJGMUM1N0ZENjYwMDc3
Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkQxNUUzRjRE
RjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjZDOUJFMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1l
ZEZsb3dDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTU5h
bWVkRmxvd0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5
QkYxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTAyMDgsOSArMTAyMDgsOSBAQAogCQk1MkNDQTlFMTE1RTNGNjJD
MDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkQ1QTE4RDFDNTQ1OTAzMDBERTM0QTMgLyogVmlkZW9GdWxsc2Ny
ZWVuTGF5ZXJNYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkQ1QTE4RTFDNTQ1OTAzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJN
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVl
bkxheWVyTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBNDFD
NTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUEx
QTUxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE2MUM1NzQ4
ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkUyQ0FGQjE5RkYw
MjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVByb2R1Y2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
RjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1peGVkQ29udGVudENoZWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyog
TWl4ZWRDb250ZW50Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
aXhlZENvbnRlbnRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDY3
OSwxNiArMTQ2NzksMTYgQEAKIAkJQ0RBMDdGQkMxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3RlbVNs
ZWVwTGlzdGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtU2xl
ZXBMaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEwN0ZCRjE4RTBB
MjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTA3RkMwMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0
ZW1TbGVlcExpc3RlbmVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5
c3RlbVNsZWVwTGlzdGVuZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RB
MjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEExQ0JEOUE3NDAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlB
MTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTUxQ0JEQTU2
QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMjlBMkMxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYkFW
UGxheWVyQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJB
VlBsYXllckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMjlB
MkQxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkFWUGxheWVyQ29udHJvbGxlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQTc5ODIxMTcwQTIyREMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXVkaW9TZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTc5
ODIzMTcwQTI1ODMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0RBNzk4MjUxNzBBMjc5MDAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbklP
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MDY1LDE0ICsxOTA2NSwxNCBA
QAogCQkJCUUxQTMxNjJDMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdF
eHRyYXMubW0gKi8sCiAJCQkJQ0Q1ODk2RTAxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q1ODk2REYxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tICovLAotCQkJCUNEQTI5QTE1MUNCREE1NkMwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLywKLQkJCQlDREEyOUEx
NDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICov
LAorCQkJCUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMuaCAqLywKKwkJCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLm1tICovLAogCQkJCUNEODIwMzA2MTM5NUFCNkEwMEY5NTZDNiAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi8sCiAJCQkJQ0Q4MjAzMDcxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCiAJCQkJQ0Q4MjAz
MDgxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIuaCAqLywKIAkJCQlDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLywKLQkJCQk1MkIwRDRDMTFDNTdGRjkxMDA3N0NF
NTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi8sCi0JCQkJNTIxMzFFNUEx
QzRGMTU2MTAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLywK
KwkJCQk1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmggKi8sCisJCQkJNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy5tbSAqLywKIAkJCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2Vi
V2luZG93QW5pbWF0aW9uLmggKi8sCiAJCQkJQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1NkM2IC8qIFdl
YldpbmRvd0FuaW1hdGlvbi5tbSAqLywKIAkJCQk5MzgwRjQ3NzA5QTExQUNDMDAxRkRCMzQgLyog
V2lkZ2V0TWFjLm1tICovLApAQCAtMjEwNzIsMTQgKzIxMDcyLDE0IEBACiAJCQkJRkUwRDg0RUEx
MDQ4NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1tICovLAogCQkJCUY0ODIyMzBGMUUzODY5Qjgw
MDY2RkM3OSAvKiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggKi8sCiAJCQkJRjQ4MjIzMEUx
RTM4NjlCODAwNjZGQzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0gKi8sCi0JCQkJ
Q0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0LmggKi8sCi0JCQkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Lm1tICovLAorCQkJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovLAorCQkJCUNEQTI5QTJGMUNCRjcz
RkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQkx
Rjg3NTZCMTFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50
LmggKi8sCiAJCQkJMUY4NzU2QjAxRTIyQkVFRjAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNl
VHJhY2tlckNsaWVudC5tbSAqLywKIAkJCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8sCiAJCQkJM0Y0MkIzMUMxODgxMTkx
QjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLywKLQkJ
CQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaCAqLywKLQkJCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8sCisJCQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8sCisJCQkJM0ZCQzRBRjExODk4
ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovLAogCQkJ
CUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IGlvczsKQEAgLTIxMTI2LDE0ICsyMTEyNiwxNCBAQAogCQkJCUNEQzk3OUYzMUM0OThD
MDkwMERCNTBENCAvKiBXZWJDb3JlTlNFcnJvckV4dHJhcy5oICovLAogCQkJCUNEQzk3OUYyMUM0
OThDMDkwMERCNTBENCAvKiBXZWJDb3JlTlNFcnJvckV4dHJhcy5tbSAqLywKIAkJCQk1REZFQkFC
NjE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8sCi0JCQkJQ0RBMjlB
MDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovLAot
CQkJCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
ICovLAotCQkJCUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5oICovLAotCQkJCUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSAqLywKLQkJCQk1MkIwRDRCRjFD
NTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLywK
LQkJCQk1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aCAqLywKLQkJCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaCAqLywKLQkJCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi8sCisJCQkJQ0RBMjlBMDgx
Q0JEOTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovLAorCQkJCUNE
QTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovLAorCQkJ
CUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oICovLAorCQkJCUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5tbSAqLywKKwkJCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMg
LyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLywKKwkJCQk1MkQ1QTFBNDFDNTc0
ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywKKwkJCQk1MkQ1QTFBNTFD
NTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLywK
KwkJCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTMwMDEzLDExICszMDAxMywxMSBAQAogCQkJCTA3MDlENzkzMUFFNTU1
N0UwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMUEzMTYyRDEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0
cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU4OTZFMjFDRDJCMTUxMDBCM0JDQzggLyogV2Vi
UGxheWJhY2tDb250cm9sc01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTA5MUNC
RDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUNEQTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQ0RBMjlBMEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTA5
MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUNEQTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RB
MjlBMEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQUYzNDgxMEE2QzQwNTIwMEFC
RTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQUYzNDgzMEE2
QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTU2OUQxQjBEN0UyQjgyMDA3QzM5ODMgLyogV2ViU2NyaXB0T2JqZWN0UHJvdG9jb2wu
aCBpbiBIZWFkZXJzICovLApAQCAtMzAwMzQsMTQgKzMwMDM0LDE0IEBACiAJCQkJMUY4NzU2QjIx
RTIyQzMzNTAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzFERUE0NTYxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tk
cm9wTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAv
KiBXZWJUaWxlZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJCMEQ0QzAxQzU3
RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBBMTM5NUFCNkEwMEY5
NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzRjQyQjMxRDE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckFWS2l0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJM0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1
QTFBNzFDNTc0ODlEMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0ZCQzRBRjQxODk4ODE1
NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkQ1QTFBNzFDNTc0ODlEMDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRDVBMUE4MUM1NzQ4
QTMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjEyMTcxRjYxNkE4Q0YwQjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTVEMjFBODAzMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIxMEI2OTgwMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJW
VFRUb2tlbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzcxNiw5ICszMzcxNiw5IEBACiAJCQkJMDcw
OUQ3OTIxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFBMzE2MkUxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmli
dXRlZFN0cmluZ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENTg5NkUxMUNEMkIxNTEw
MEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAot
CQkJCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlD
REEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEy
OUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBRjM0ODIwQTZD
NDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3
QUFCRDFBMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTdBQUJEMUQxNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0zMzczNCw5ICszMzczNCw5IEBACiAJCQkJQ0Q4MjAzMEIxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCQkzRjQyQjMxRTE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAq
LywKLQkJCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKLQkJCQk1MjEzMUU1QjFDNEYxNTc2MDAzM0Y4
MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1
MTZBOENFRDIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmlu
ZGV4IGFmY2Q3MGI5MDg4MTY0OTI3ZTk3ODcxZDJhZWRkY2Y5YzMxYWRhODYuLmMwMjNjYWQ3N2Nk
MmMyOTEyNzgyZDI4NWUzN2ZhMjc0NzkwMjAyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcApAQCAtMTE3LDcgKzExNyw3IEBACiAKICNpZiBQTEFURk9STShJT1Mp
CiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW5jbHVkZSAiV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUKQpAQCAtMTU2LDcgKzE1Niw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNp
bmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmgiCiAjZW5kaWYKIAogI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZt
dCwgLi4uKSBSRUxFQVNFX0xPR19JRihkb2N1bWVudCgpLnBhZ2UoKSAmJiBkb2N1bWVudCgpLnBh
Z2UoKS0+aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBIVE1MTWVkaWFF
bGVtZW50OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IDdmZDEzZmFlYjYzODI4NTE0N2FkYTM0Yjc0N2QxYzEw
OTNjY2YzZjYuLmNmODUxNmQ4YzA2OTc0MTE3MzQ2MzIyODVhMjRhYjg1ODIxYTAzNDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApAQCAtNDcsNyArNDcsNyBAQAog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogI2lmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTA1ZWY2ZGIzMjcwZjMxNWI3NzVjNzQyZjM1MTVjZTAx
ODY3MDVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBUaW1lUmFuZ2VzOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UgeworcHVibGljOgorICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSgpIHsg
fTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgPSAwOworfTsKKworfQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODc0NDE1NzQ2OWEyYTdi
MmU3NjM5ZTFmOWEzYWU3MTRkZjI4NjQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaApAQCAtMCwwICsxLDEwNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGltZVJhbmdlczsK
K2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Oworc3RydWN0IE1lZGlhU2VsZWN0aW9u
T3B0aW9uOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbCB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENs
aWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHBsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJl
Z2luU2NydWJiaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJpbmcoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5TY2FubmluZ0ZvcndhcmQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdC
YWNrd2FyZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHRvZ2dsZU11dGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRN
dXRlZChib29sKSA9IDA7CisKKyAgICBlbnVtIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsg
VGFyZ2V0VHlwZU5vbmUsIFRhcmdldFR5cGVBaXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQgfTsKKwor
ICAgIHZpcnR1YWwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUg
Y3VycmVudFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgYnVmZmVyZWRUaW1l
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxv
YXQgcGxheWJhY2tSYXRlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmPFRpbWVSYW5nZXM+
IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIHNlZWthYmxl
VGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3Vi
bGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5Q
bGF5RmFzdFJldmVyc2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1aW50NjRfdCBsZWdpYmxlTWVk
aWFTZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBleHRlcm5hbFBs
YXliYWNrRW5hYmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNdXRlZCgpIGNvbnN0ID0gMDsKK307CisKK2Ns
YXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Q
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRp
b25DaGFuZ2VkKGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdl
ZChkb3VibGUgLyogY3VycmVudFRpbWUgKi8sIGRvdWJsZSAvKiBhbmNob3JUaW1lICovKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgLyogcGxheWJhY2tT
dGFydGVkVGltZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyog
aXNQbGF5aW5nICovLCBmbG9hdCAvKiBwbGF5YmFja1JhdGUgKi8pIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSAvKiBs
YXN0TW9kaWZpZWQgKi8sIGRvdWJsZSAvKiBsaXZlSW50ZXJ2YWwgKi8pIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRl
eCAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlvbnMgKi8s
IHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0
cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIHsgfQorfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA3YzRmNmNh
OTg3YmVhN2VhNTM5YTIxYTRiZWExY2Y1N2JkODljMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkhU
TUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlv
VHJhY2s7CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgVGV4dFRyYWNrOworY2xhc3Mg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2RlbCwgcHVibGljIEV2
ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpKTsKKyAgICB9CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50
Kik7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxl
RXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50Jikg
ZmluYWw7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJp
bmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25z
dCBmaW5hbCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVy
Kj4odGhpcykgPT0gJnJoczsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQo
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
bW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcGxheSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGF1c2UoKSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRTY2FubmluZygpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOworCisgICAgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3QgZmluYWw7CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWw7CisgICAgZG91
YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQbGF5aW5nKCkgY29u
c3QgZmluYWw7CisgICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWw7CisgICAgUmVmPFRp
bWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIHNlZWth
YmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUg
bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBjYW5QbGF5RmFzdFJl
dmVyc2UoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWw7CisgICAgdWludDY0X3QgYXVk
aW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbDsK
KyAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIEV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3Qg
ZmluYWw7CisgICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsOworCitwcm90ZWN0ZWQ6
CisgICAgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7CisgICAgc3Rh
dGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygp
OworICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKKworICAgIFJl
ZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBib29sIG1faXNMaXN0
ZW5pbmcgeyBmYWxzZSB9OworICAgIEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQq
PiBtX2NsaWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFj
a3NGb3JNZW51OworICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NG
b3JNZW51OworCisgICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdDsKKyAgICB2
b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOworICAgIHZvaWQgdXBkYXRlTWVkaWFT
ZWxlY3Rpb25JbmRpY2VzKCk7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjI5YzgwMDIwNjk3YWMzMjRiM2NjODMyNmRjNjI5
NjllZmNjMjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTAsMCArMSw1MzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAi
QXVkaW9UcmFja0xpc3QuaCIKKyNpbXBvcnQgIkV2ZW50LmgiCisjaW1wb3J0ICJFdmVudExpc3Rl
bmVyLmgiCisjaW1wb3J0ICJFdmVudE5hbWVzLmgiCisjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgor
I2ltcG9ydCAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9y
dCAiTWVkaWFDb250cm9sc0hvc3QuaCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgi
CisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIlRleHRU
cmFja0xpc3QuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUv
Q29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0
IDx3dGYvU29mdExpbmtpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQo
KQorICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlw
ZSkKK3sKK30KKworUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5QbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAg
ICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwg
KnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCkucmVt
b3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7
CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkucmVtb3ZlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7CisgICAgfQorICAgIG1f
aXNMaXN0ZW5pbmcgPSBmYWxzZTsKKworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnJlc2V0UGxheWJhY2tTZXNzaW9uU3RhdGUoKTsKKworICAgIG1fbWVk
aWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50KSB7Cisg
ICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAg
ICAgICAgICBtX21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlz
LCBmYWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLmFkZEV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAg
ICBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX2lzTGlzdGVuaW5nID0g
dHJ1ZTsKKyAgICB9CisKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV2ViQ29yZTo6RXZlbnQmIGV2ZW50KQor
eworICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC50eXBlKCkpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RG
OjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKK3sKKyAgICBpZiAobV9jbGllbnRzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnRO
YW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgeworICAgICAgICBkb3VibGUgZHVyYXRpb24gPSB0
aGlzLT5kdXJhdGlvbigpOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQor
ICAgICAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOworICAgICAgICAv
LyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdl
OyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBpdC4KKyAgICAgICAg
Ly8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5
LgorICAgICAgICBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSA9IHRoaXMtPmNhblBsYXlGYXN0UmV2
ZXJzZSgpOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAg
ICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7
CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLnBsYXlFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBsYXlp
bmdFdmVudCkgeworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICAgICAgY2xpZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChwbGF5YmFja1N0YXJ0ZWRU
aW1lKCkpOworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2
ZW50TmFtZXMoKS5wYXVzZUV2ZW50CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVz
KCkucGxheUV2ZW50CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmF0ZWNo
YW5nZUV2ZW50KSB7CisgICAgICAgIGJvb2wgaXNQbGF5aW5nID0gdGhpcy0+aXNQbGF5aW5nKCk7
CisgICAgICAgIGZsb2F0IHBsYXliYWNrUmF0ZSA9IHRoaXMtPnBsYXliYWNrUmF0ZSgpOworICAg
ICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5y
YXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CisgICAgfQorCisgICAgaWYgKGFs
bAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCkg
eworICAgICAgICBhdXRvIGN1cnJlbnRUaW1lID0gdGhpcy0+Y3VycmVudFRpbWUoKTsKKyAgICAg
ICAgYXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1V
cHRpbWVdOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAg
ICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOwor
ICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5wcm9ncmVzc0V2ZW50KSB7CisgICAgICAgIGF1dG8gYnVmZmVyZWRUaW1lID0gdGhpcy0+YnVm
ZmVyZWRUaW1lKCk7CisgICAgICAgIGF1dG8gc2Vla2FibGVSYW5nZXMgPSB0aGlzLT5zZWVrYWJs
ZVJhbmdlcygpOworICAgICAgICBhdXRvIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRp
bWUgPSB0aGlzLT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCk7CisgICAgICAg
IGF1dG8gbGl2ZVVwZGF0ZUludGVydmFsID0gdGhpcy0+bGl2ZVVwZGF0ZUludGVydmFsKCk7Cisg
ICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgICAgIGNsaWVu
dC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOworICAgICAgICAgICAgY2xpZW50
LT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQoc2Vla2FibGVSYW5nZXMsIHNlZWthYmxlVGltZVJhbmdl
c0xhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRk
dHJhY2tFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRy
YWNrRXZlbnQpCisgICAgICAgIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOworCisgICAg
aWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJl
bnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpIHsKKyAgICAgICAgYm9vbCBl
bmFibGVkID0gZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKTsKKyAgICAgICAgRXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSA9IGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCk7
CisgICAgICAgIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lID0gZXh0ZXJuYWxQbGF5YmFja0xv
Y2FsaXplZERldmljZU5hbWUoKTsKKworICAgICAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkID0gdGhpcy0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKTsKKworICAg
ICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgICAgICBjbGllbnQt
PmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHRhcmdldFR5cGUsIGxvY2FsaXplZERl
dmljZU5hbWUpOworICAgICAgICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gV2UgZG9uJ3QgY2FsbCB1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMo
KSBpbiB0aGUgYWxsIGNhc2UsIHNpbmNlCisgICAgLy8gdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRp
b25zKCkgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIGluZGljZXMuCisgICAgaWYgKGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpCisgICAgICAgIHVwZGF0ZU1lZGlh
U2VsZWN0aW9uSW5kaWNlcygpOworCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUg
PT0gZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50KSB7CisgICAgICAgIGZvciAoYXV0byBj
bGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChpc011
dGVkKCkpOworICAgIH0KK30KK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFT
U0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZj
bGllbnQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1v
dmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NF
UlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZj
bGllbnQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5
KCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5w
bGF5KCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNl
KCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5w
YXVzZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dn
bGVQbGF5U3RhdGUoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWVkaWFFbGVt
ZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKK3sKKyAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY3J1YmJp
bmcoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla1Rv
VGltZShkb3VibGUgdGltZSkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCit7CisgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdCYWNrd2FyZCgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlh
RWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJk
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Nhbm5p
bmcoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PmVuZFNjYW5uaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgc2VsZWN0ZWRBdWRpb0luZGV4KQor
eworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwLCBzaXplID0gbV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpIDwgc2l6
ZTsgKytpKQorICAgICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudVtpXS0+c2V0RW5hYmxlZChpID09
IHNlbGVjdGVkQXVkaW9JbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKK3sKKyAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0VHJhY2sq
IHRleHRUcmFjazsKKyAgICBpZiAoaW5kZXggPCBtX2xlZ2libGVUcmFja3NGb3JNZW51LnNpemUo
KSkKKyAgICAgICAgdGV4dFRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtzdGF0aWNfY2Fz
dDxzaXplX3Q+KGluZGV4KV0uZ2V0KCk7CisgICAgZWxzZQorICAgICAgICB0ZXh0VHJhY2sgPSBU
ZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOworCisgICAgbV9tZWRpYUVsZW1lbnQtPnNl
dFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjayk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIGlmICht
X21lZGlhRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSA9PSBNZWRpYVBsYXllckVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PmV4aXRGdWxsc2NyZWVuKCk7CisgICAgZWxzZQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50
ZXJGdWxsc2NyZWVuKE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJl
SW5QaWN0dXJlKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
dG9nZ2xlTXV0ZWQoKQoreworICAgIHNldE11dGVkKCFpc011dGVkKCkpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNdXRlZChib29sIG11dGVkKQorewor
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldE11dGVk
KG11dGVkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBk
YXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBh
Z2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0g
bV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJl
bmNlcygpOworICAgIGF1dG8mIHRleHRUcmFja3MgPSBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNr
cygpOworICAgIGlmICh0ZXh0VHJhY2tzLmxlbmd0aCgpKQorICAgICAgICBtX2xlZ2libGVUcmFj
a3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoJnRl
eHRUcmFja3MpOworICAgIGVsc2UKKyAgICAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5jbGVh
cigpOworCisgICAgYXV0byYgYXVkaW9UcmFja3MgPSBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFj
a3MoKTsKKyAgICBpZiAoYXVkaW9UcmFja3MubGVuZ3RoKCkgPiAxKQorICAgICAgICBtX2F1ZGlv
VHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51
KCZhdWRpb1RyYWNrcyk7CisgICAgZWxzZQorICAgICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudS5j
bGVhcigpOworCisgICAgYXV0byBhdWRpb09wdGlvbnMgPSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9ucygpOworICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7
CisgICAgYXV0byBsZWdpYmxlT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KTsKKyAgICBhdXRvIGxlZ2libGVJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsK
KworICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgY2xpZW50LT5h
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoYXVkaW9PcHRpb25zLCBhdWRpb0luZGV4
KTsKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChs
ZWdpYmxlT3B0aW9ucywgbGVnaWJsZUluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpCit7
CisgICAgYXV0byBhdWRpb0luZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKKyAgICBh
dXRvIGxlZ2libGVJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsKKworICAgIGZv
ciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgY2xpZW50LT5hdWRpb01lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGF1ZGlvSW5kZXgpOworICAgICAgICBjbGllbnQtPmxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChsZWdpYmxlSW5kZXgpOworICAgIH0KK30KKwor
ZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRU
aW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tTdGFydGVkVGltZSgpOwor
fQorCitjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6Om9ic2VydmVkRXZlbnROYW1lcygpCit7CisgICAgLy8gRklYTUUoMTU3NDUyKTog
UmVtb3ZlIHRoZSByaWdodC1oYW5kIGNvbnN0cnVjdG9yIG5vdGF0aW9uIG9uY2UgTmV2ZXJEZXN0
cm95ZWQgc3VwcG9ydHMgaW5pdGlhbGl6ZXJfbGlzdHMuCisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFZlY3RvcjxBdG9taWNTdHJpbmc+PiBuYW1lcyA9IFZlY3RvcjxBdG9taWNTdHJpbmc+KHsK
KyAgICAgICAgZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQsCisgICAgICAgIGV2ZW50
TmFtZXMoKS5wYXVzZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucGxheUV2ZW50LAorICAg
ICAgICBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCku
dGltZXVwZGF0ZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwKKyAg
ICAgICAgZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5y
ZW1vdmV0cmFja0V2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkudm9sdW1lY2hhbmdlRXZlbnQs
CisgICAgICAgIGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVs
ZXNzY2hhbmdlZEV2ZW50LAorICAgIH0pOworICAgIHJldHVybiBuYW1lcy5nZXQoKTsKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nJiAgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2
ZW50TmFtZUFsbCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
ZXZlbnROYW1lQWxsKCJhbGxFdmVudHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICByZXR1cm4gZXZlbnROYW1lQWxsOworfQorCitkb3VibGUgUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQt
PnN1cHBvcnRzU2Vla2luZygpID8gbV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkgOiBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworfQorCitkb3VibGUgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSA6IDA7Cit9
CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YnVmZmVyZWRUaW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+
bWF4QnVmZmVyZWRUaW1lKCkgOiAwOworfQorCitib29sIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Ojppc1BsYXlpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dCA/ICFtX21lZGlhRWxlbWVudC0+cGF1c2VkKCkgOiBmYWxzZTsKK30KKworZmxvYXQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUmF0ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrUmF0ZSgpIDog
MDsKK30KKworUmVmPFRpbWVSYW5nZXM+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8g
bV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlKCkgOiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKK30KKwor
ZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5n
ZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQg
PyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDog
MDsKK30KKworZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsaXZlVXBk
YXRlSW50ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVk
aWFFbGVtZW50LT5saXZlVXBkYXRlSW50ZXJ2YWwoKSA6IDA7Cit9CisgICAgCitib29sIFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAor
eworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2
ZXJzZVJhdGUoKSA8IDAuMCA6IGZhbHNlOworfQorCitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRp
b09wdGlvbnM7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+
ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBhdWRpb09wdGlvbnM7CisKKyAgICBh
dXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CisKKyAgICBhdWRpb09wdGlvbnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCkpOworICAgIGZv
ciAoYXV0byYgYXVkaW9UcmFjayA6IG1fYXVkaW9UcmFja3NGb3JNZW51KQorICAgICAgICBhdWRp
b09wdGlvbnMudW5jaGVja2VkQXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlv
bk9wdGlvbkZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpKTsKKworICAgIHJldHVybiBhdWRpb09w
dGlvbnM7Cit9CisKK3VpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojph
dWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgKytpbmRleCkgeworICAg
ICAgICBpZiAobV9hdWRpb1RyYWNrc0Zvck1lbnVbaW5kZXhdLT5lbmFibGVkKCkpCisgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KCk7Cit9CisKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMoKSBjb25zdAoreworICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9w
dGlvbnM7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKworICAgIGF1
dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKworICAgIGZvciAoYXV0byYgdHJhY2sg
OiBtX2xlZ2libGVUcmFja3NGb3JNZW51KQorICAgICAgICBsZWdpYmxlT3B0aW9ucy5hcHBlbmQo
Y2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sodHJhY2suZ2V0
KCkpKTsKKworICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKK30KKwordWludDY0X3QgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBj
b25zdAoreworICAgIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOworICAgIGJvb2wg
dHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7CisKKyAgICBhdXRvIGhvc3QgPSBtX21lZGlh
RWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpIDogbnVsbHB0cjsK
KworICAgIGlmICghaG9zdCkKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7CisKKyAgICBB
dG9taWNTdHJpbmcgZGlzcGxheU1vZGUgPSBob3N0LT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKKyAg
ICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBob3N0LT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsKKyAgICBU
ZXh0VHJhY2sqIGF1dG9tYXRpY0l0ZW0gPSBob3N0LT5jYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0o
KTsKKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX2xlZ2libGVUcmFja3NG
b3JNZW51LnNpemUoKTsgaW5kZXgrKykgeworICAgICAgICBhdXRvJiB0cmFjayA9IG1fbGVnaWJs
ZVRyYWNrc0Zvck1lbnVbaW5kZXhdOworICAgICAgICBpZiAodHJhY2sgPT0gb2ZmSXRlbSkKKyAg
ICAgICAgICAgIG9mZkluZGV4ID0gaW5kZXg7CisKKyAgICAgICAgaWYgKHRyYWNrID09IGF1dG9t
YXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tl
eXdvcmQoKSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAgICAgICAg
ICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChkaXNwbGF5TW9kZSAhPSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpICYm
IHRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7CisgICAgICAgICAg
ICBzZWxlY3RlZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0
ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG9mZkl0ZW0gJiYgIXRyYWNr
TWVudUl0ZW1TZWxlY3RlZCAmJiBkaXNwbGF5TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6Zm9y
Y2VkT25seUtleXdvcmQoKSkKKyAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9mZkluZGV4OworCisg
ICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPndlYmtpdEN1cnJlbnRQbGF5YmFj
a1RhcmdldElzV2lyZWxlc3MoKTsKK30KKworUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVu
dCB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCisgICAgICAgIHJldHVy
biBUYXJnZXRUeXBlTm9uZTsKKworICAgIHN3aXRjaCAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29u
dHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpKSB7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsK
KyAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpOb25lOgorICAgICAgICBy
ZXR1cm4gVGFyZ2V0VHlwZU5vbmU7CisgICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNl
VHlwZTo6QWlycGxheToKKyAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVBaXJQbGF5OworICAgIGNh
c2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6OlR2b3V0OgorICAgICAgICByZXR1cm4g
VGFyZ2V0VHlwZVRWT3V0OworICAgIH0KK30KKworU3RyaW5nIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0
Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRy
b2xzSG9zdCgpKQorICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNI
b3N0KCktPmV4dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKKyAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKK30KKworYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCkud2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKm1fbWVkaWFFbGVtZW50KTsKK30KKworYm9vbCBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6aXNNdXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm11dGVkKCkgOiBmYWxzZTsKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1YzE1YjExOTg3MjExM2Y0
ODBjOTgzMWFiYTg2OGQ4ZWZlYjA5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIHsgfTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1
bGxzY3JlZW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgPSAwOworfTsKKworfQorCisj
ZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1vZGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM4NDlmYzIwZGEwY2I0MmJkOTI3NjE3ZjE0MThm
OWI3NzMwYzI3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50OworCitj
bGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlkZW9G
dWxsc2NyZWVuTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50
KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jik9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpID0gMDsKKyAgICBlbnVtIFZpZGVvR3Jh
dml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsIH07CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVu
TW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSA9
IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVmlkZW8oKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSA9
IDA7Cit9OworCitXRUJDT1JFX0VYUE9SVCBib29sIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgp
OworICAgIAorfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjA3Mzc0ODZhNDRmZTk5NTRkNzVjYTVmOTFhOWNlNjJjNDE0ODkzMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXVkaW9UcmFjazsKK2NsYXNzIEhUTUxW
aWRlb0VsZW1lbnQ7CitjbGFzcyBUZXh0VHJhY2s7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQg
OiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKSk7CisgICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopOworICAgIEhUTUxW
aWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50
LmdldCgpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXll
cihQbGF0Zm9ybUxheWVyKiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIgPSBbXSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2FpdEZvclByZXBhcmVkRm9y
SW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtd
IHsgfSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVFdmVudChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV2ViQ29yZTo6RXZlbnQmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqPih0aGlz
KSA9PSAmcmhzOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFs
c2UpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckZyYW1l
KEZsb2F0UmVjdCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0xh
eWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Zpc2libGUo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgdmlkZW9EaW1l
bnNpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0KKyAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9oYXNWaWRlbzsgfQorCisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0SGFz
VmlkZW8oYm9vbCk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoY29uc3QgRmxvYXRTaXpl
Jik7CisKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2
ZWRFdmVudE5hbWVzKCk7CisgICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFs
bCgpOworCisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVtZW50OworICAg
IFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyOworICAgIGJv
b2wgbV9pc0xpc3RlbmluZyB7IGZhbHNlIH07CisgICAgSGFzaFNldDxWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCo+IG1fY2xpZW50czsKKyAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9Owor
ICAgIEZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsKKyAgICBGbG9hdFJlY3QgbV92aWRlb0Zy
YW1lOworICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9yTWVu
dTsKKyAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVudTsK
K307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjJlZDIxMzU4Y2U2M2ZlM2VmYmY5MGQ4NTBjZjRlMTVjOTJmNjQ1MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgor
CisjaW1wb3J0ICJET01XaW5kb3cuaCIKKyNpbXBvcnQgIkhpc3RvcnkuaCIKKyNpbXBvcnQgIkxv
Z2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCisjaW1wb3J0ICJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5p
bWF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2
ZW50TGlzdGVuZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9IVE1MRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNr
TGlzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRM
aXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCit7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQorewor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1l
bnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQoreworICAgIGlmIChtX3ZpZGVvRWxl
bWVudCA9PSB2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3ZpZGVv
RWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKKyAgICAg
ICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOworCisg
ICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAgIG1fdmlk
ZW9FbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsK
KyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisgICAgbV92aWRlb0VsZW1lbnQg
PSB2aWRlb0VsZW1lbnQ7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAgIG1f
dmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsK
KyAgICAgICAgbV9pc0xpc3RlbmluZyA9IHRydWU7CisgICAgfQorCisgICAgdXBkYXRlRm9yRXZl
bnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IFdlYkNvcmU6OkV2ZW50JiBldmVudCkKK3sKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQu
dHlwZSgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBk
YXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit7Cisg
ICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBi
b29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVBbGwoKTsKKworICAgIGlmIChhbGwKKyAg
ICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCkgeworICAgICAg
ICBzZXRIYXNWaWRlbyhtX3ZpZGVvRWxlbWVudCk7CisgICAgICAgIHNldFZpZGVvRGltZW5zaW9u
cyhtX3ZpZGVvRWxlbWVudCA/IEZsb2F0U2l6ZShtX3ZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgp
LCBtX3ZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSkgOiBGbG9hdFNpemUoKSk7CisgICAgfQor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxz
Y3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXll
ciA9PSB2aWRlb0xheWVyKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IHZpZGVv
TGF5ZXI7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNl
dEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAsIDApXTsKKyNlbHNlCisgICAgW21fdmlkZW9GdWxs
c2NyZWVuTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UoMC41LCAwLjUpXTsKKyNlbmRp
ZgorICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVdOwor
ICAgIAorICAgIGlmICghbV92aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdmlkZW9FbGVtZW50LT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV92aWRlb0VsZW1lbnQtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7CisgICAgaWYg
KG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpICE9IG1v
ZGUpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKKwor
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBmaW5pc2hlZFdpdGhNZWRpYSAmJiBtb2RlID09IE1l
ZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKSB7CisgICAgICAgIGlmICht
X3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgaWYgKERPTVdpbmRvdyogd2luZG93ID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuZG9t
V2luZG93KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeSogaGlzdG9yeSA9IHdpbmRv
dy0+aGlzdG9yeSgpKQorICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LT5iYWNrKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKK3sKKyAg
ICBtX3ZpZGVvRnJhbWUgPSByZWN0OworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJv
dW5kczpDR1JlY3QocmVjdCldOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92
aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit7CisgICAgTWVkaWFQbGF5
ZXI6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5
UmVzaXplQXNwZWN0OworICAgIGlmIChncmF2aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHlSZXNpemUpCisgICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpW
aWRlb0dyYXZpdHlSZXNpemU7CisgICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQorICAgICAgICB2aWRlb0dyYXZpdHkg
PSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OworICAgIGVsc2UgaWYgKGdy
YXZpdHkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZp
bGwpCisgICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3RGaWxsOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgCisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkodmlkZW9H
cmF2aXR5KTsKK30KKworY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQoreworICAgIHN0YXRpYyBj
b25zdCBhdXRvIG5hbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxBdG9taWNTdHJpbmc+
IHsgZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50IH0pOworICAgIHJldHVybiBuYW1lczsKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZl
bnROYW1lQWxsKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBz
RXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7CisgICAgcmV0dXJuIHNFdmVudE5hbWVBbGw7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9G
dWxsc2NyZWVuTW9kZSkKK3sKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlk
ZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENsaWVudChWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnRz
LmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZW1vdmVDbGllbnQoVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnRzLmNv
bnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOworfQorCiti
b29sIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAor
eworICAgIGlmICghbV92aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChQYWdlKiBwYWdlID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAg
ICAgICByZXR1cm4gcGFnZS0+aXNWaXNpYmxlKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhhc1ZpZGVvKGJvb2wg
aGFzVmlkZW8pCit7CisgICAgaWYgKGhhc1ZpZGVvID09IG1faGFzVmlkZW8pCisgICAgICAgIHJl
dHVybjsKKworICAgIG1faGFzVmlkZW8gPSBoYXNWaWRlbzsKKworICAgIGZvciAoYXV0byYgY2xp
ZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmhhc1ZpZGVvQ2hhbmdlZChtX2hhc1Zp
ZGVvKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0Vmlk
ZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIGlm
IChtX3ZpZGVvRGltZW5zaW9ucyA9PSB2aWRlb0RpbWVuc2lvbnMpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fdmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1lbnNpb25zOworCisgICAgZm9yIChh
dXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+dmlkZW9EaW1lbnNpb25z
Q2hhbmdlZChtX3ZpZGVvRGltZW5zaW9ucyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA5ZTc5NzQ0YjQ5ODlhM2E3Yjkz
NTcwYWFlYjdlODJlYjA3ZTkzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgVGltZVJhbmdlczsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpID0gMDsKLX07Ci0K
LX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDA2ZDUzZjBmNzc2OTM3NzVhZDQ4NjFjMjIzMDRhYzkzODAwOWM4MjMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBUaW1lUmFuZ2VzOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ7
Ci1zdHJ1Y3QgTWVkaWFTZWxlY3Rpb25PcHRpb247Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgp
IHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBs
YXlTdGF0ZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuZFNjcnViYmluZygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Vl
a1RvVGltZShkb3VibGUgdGltZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmYXN0U2Vlayhkb3Vi
bGUgdGltZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBlbmRTY2FubmluZygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xl
TXV0ZWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wpID0gMDsKLQotICAg
IGVudW0gRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgeyBUYXJnZXRUeXBlTm9uZSwgVGFyZ2V0
VHlwZUFpclBsYXksIFRhcmdldFR5cGVUVk91dCB9OwotCi0gICAgdmlydHVhbCBkb3VibGUgcGxh
eWJhY2tTdGFydGVkVGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlv
bigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGlzUGxheWluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3J1
YmJpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9hdCBwbGF5YmFja1JhdGUoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBSZWY8VGltZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVk
VGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB1aW50NjRfdCBhdWRp
b01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZXh0ZXJuYWxQ
bGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBpc011dGVkKCkgY29uc3QgPSAwOwotfTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91Ymxl
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKiBjdXJy
ZW50VGltZSAqLywgZG91YmxlIC8qIGFuY2hvclRpbWUgKi8pIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSAvKiBwbGF5YmFja1N0YXJ0ZWRUaW1lICovKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAvKiBpc1BsYXlpbmcgKi8sIGZs
b2F0IC8qIHBsYXliYWNrUmF0ZSAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlZWthYmxlUmFu
Z2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIC8qIGxhc3RNb2RpZmllZCAqLywg
ZG91YmxlIC8qIGxpdmVJbnRlcnZhbCAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiAvKiBvcHRpb25zICovLCB1aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4ICovKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2Vs
ZWN0ZWRJbmRleCAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2Nh
bGl6ZWREZXZpY2VOYW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBtdXRlZENo
YW5nZWQoYm9vbCkgeyB9Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTI4NDY5NDY0OTZhOWFjNDk1OTUxYmRmMWM4MTdkY2ViYjc1ZWQyMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkhU
TUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1
ZGlvVHJhY2s7Ci1jbGFzcyBIVE1MTWVkaWFFbGVtZW50OwotY2xhc3MgVGV4dFRyYWNrOwotY2xh
c3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgp
KTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhRWxl
bWVudChIVE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0KLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdlYkNvcmU6OkV2ZW50JikgZmluYWw7Ci0gICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUo
Y29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZl
bnRMaXN0ZW5lciYgcmhzKSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBX
ZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxheSgpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcGF1c2UoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5T
Y3J1YmJpbmcoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY2FubmluZygpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWlu
dDY0X3QgaW5kZXgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGljdHVy
ZUluUGljdHVyZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlTXV0ZWQo
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwot
Ci0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGN1cnJlbnRU
aW1lKCkgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1NjcnViYmlu
ZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgZmxvYXQgcGxheWJhY2tSYXRl
KCkgY29uc3QgZmluYWw7Ci0gICAgUmVmPFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29u
c3QgZmluYWw7Ci0gICAgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUo
KSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCBmaW5hbDsKLSAgICBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29u
c3QgZmluYWw7Ci0gICAgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBm
aW5hbDsKLSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxl
Y3RlZEluZGV4KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxl
ZCgpIGNvbnN0IGZpbmFsOwotICAgIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWw7Ci0gICAgU3RyaW5nIGV4dGVybmFsUGxh
eWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCB3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNNdXRlZCgp
IGNvbnN0IGZpbmFsOwotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHByb2dy
ZXNzRXZlbnRUaW1lckZpcmVkKCk7Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21p
Y1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3Ry
aW5nJiBldmVudE5hbWVBbGwoKTsKLQotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21l
ZGlhRWxlbWVudDsKLSAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hT
ZXQ8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51OwotICAgIFZlY3RvcjxS
ZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51OwotCi0gICAgZG91YmxlIHBs
YXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucygpOwotICAgIHZvaWQgdXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCk7Ci19Owot
Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhZGQ0OWJhNmJkNzQ5MmFkYTAyN2U3MzJkNjMy
ZTY3MmI2YTFhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDUzNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50LmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIkF1ZGlvVHJh
Y2tMaXN0LmgiCi0jaW1wb3J0ICJFdmVudC5oIgotI2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgot
I2ltcG9ydCAiRXZlbnROYW1lcy5oIgotI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKLSNpbXBvcnQg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk1lZGlh
Q29udHJvbHNIb3N0LmgiCi0jaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgotI2ltcG9y
dCAiUGFnZS5oIgotI2ltcG9ydCAiUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJUZXh0VHJhY2tMaXN0
LmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmlt
YXRpb24uaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3RmL1Nv
ZnRMaW5raW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkK
LSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUp
Ci17Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp+V2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKQotewotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50KQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCA9PSBtZWRpYUVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX2lzTGlzdGVu
aW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVz
KCkpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWUsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNr
cygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywg
ZmFsc2UpOwotICAgICAgICBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLnJlbW92ZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOwotICAgIH0K
LSAgICBtX2lzTGlzdGVuaW5nID0gZmFsc2U7Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0g
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZXNldFBsYXliYWNrU2Vzc2lvblN0YXRlKCk7Ci0KLSAg
ICBtX21lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudDsKLQotICAgIGlmIChtX21lZGlhRWxlbWVu
dCkgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygp
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
LCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKS5h
ZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsK
LSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9pc0xpc3Rl
bmluZyA9IHRydWU7Ci0gICAgfQotCi0gICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFs
bCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aGFu
ZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50
JiBldmVudCkKLXsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQudHlwZSgpKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnRO
YW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgaWYgKG1fY2xp
ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgYWxsID0gZXZlbnRO
YW1lID09IGV2ZW50TmFtZUFsbCgpOwotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpIHsKLSAgICAgICAgZG91Ymxl
IGR1cmF0aW9uID0gdGhpcy0+ZHVyYXRpb24oKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6
IG1fY2xpZW50cykKLSAgICAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9u
KTsKLSAgICAgICAgLy8gVGhlc2UgaXMgbm8gc3RhbmRhcmQgZXZlbnQgZm9yIG1pbkZhc3RSZXZl
cnNlUmF0ZUNoYW5nZTsgZHVyYXRpb24gY2hhbmdlIGlzIGEgcmVhc29uYWJsZSBwcm94eSBmb3Ig
aXQuCi0gICAgICAgIC8vIEl0IGhhcHBlbnMgZXZlcnkgdGltZSBhIG5ldyBpdGVtIGJlY29tZXMg
cmVhZHkgdG8gcGxheS4KLSAgICAgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UgPSB0aGlzLT5j
YW5QbGF5RmFzdFJldmVyc2UoKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50
cykKLSAgICAgICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5
RmFzdFJldmVyc2UpOwotICAgIH0KLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50
TmFtZXMoKS5wbGF5aW5nRXZlbnQpIHsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xp
ZW50cykKLSAgICAgICAgICAgIGNsaWVudC0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxh
eWJhY2tTdGFydGVkVGltZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVudAotICAgICAgICB8fCBldmVudE5hbWUg
PT0gZXZlbnROYW1lcygpLnBsYXlFdmVudAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnRO
YW1lcygpLnJhdGVjaGFuZ2VFdmVudCkgewotICAgICAgICBib29sIGlzUGxheWluZyA9IHRoaXMt
PmlzUGxheWluZygpOwotICAgICAgICBmbG9hdCBwbGF5YmFja1JhdGUgPSB0aGlzLT5wbGF5YmFj
a1JhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAg
ICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwotICAgIH0K
LQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS50aW1l
dXBkYXRlRXZlbnQpIHsKLSAgICAgICAgYXV0byBjdXJyZW50VGltZSA9IHRoaXMtPmN1cnJlbnRU
aW1lKCk7Ci0gICAgICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNz
SW5mb10gc3lzdGVtVXB0aW1lXTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50
cykKLSAgICAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBh
bmNob3JUaW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCkgewotICAgICAgICBhdXRvIGJ1ZmZlcmVkVGlt
ZSA9IHRoaXMtPmJ1ZmZlcmVkVGltZSgpOwotICAgICAgICBhdXRvIHNlZWthYmxlUmFuZ2VzID0g
dGhpcy0+c2Vla2FibGVSYW5nZXMoKTsKLSAgICAgICAgYXV0byBzZWVrYWJsZVRpbWVSYW5nZXNM
YXN0TW9kaWZpZWRUaW1lID0gdGhpcy0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGlt
ZSgpOwotICAgICAgICBhdXRvIGxpdmVVcGRhdGVJbnRlcnZhbCA9IHRoaXMtPmxpdmVVcGRhdGVJ
bnRlcnZhbCgpOwotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAg
ICAgICAgICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKLSAgICAg
ICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBzZWVr
YWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZl
bnROYW1lcygpLmFkZHRyYWNrRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5yZW1vdmV0cmFja0V2ZW50KQotICAgICAgICB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMoKTsKLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KSB7Ci0g
ICAgICAgIGJvb2wgZW5hYmxlZCA9IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCk7Ci0gICAgICAg
IEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBleHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSgpOwotICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGV4dGVy
bmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCk7Ci0KLSAgICAgICAgYm9vbCB3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZCA9IHRoaXMtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAg
ICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0YXJnZXRUeXBl
LCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLSAgICAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IGNhbGwgdXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKCkgaW4gdGhlIGFsbCBjYXNlLCBzaW5jZQotICAgIC8vIHVwZGF0ZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucygpIHdpbGwgYWxzbyB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpbmRpY2Vz
LgotICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50KQotICAgICAg
ICB1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKTsKLQotICAgIGlmIChhbGwKLSAgICAgICAg
fHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCkgewotICAgICAg
ICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICAgICAgY2xpZW50LT5tdXRl
ZENoYW5nZWQoaXNNdXRlZCgpKTsKLSAgICB9Ci19Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjphZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQm
IGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0g
ICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
Ci0gICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50
KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxheSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwYXVzZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVt
ZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBp
ZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5U3Rh
dGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVn
aW5TY3J1YmJpbmcoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVt
ZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRp
bWUpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+
c2V0Q3VycmVudFRpbWUodGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21lZGlhRWxl
bWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2Fy
ZCgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+
YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFj
a3dhcmQoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpCYWNrd2FyZCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjYW5uaW5n
KCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5l
bmRTY2FubmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVjdGVkQXVkaW9JbmRleCkK
LXsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMCwgc2l6ZSA9IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJsZWQoaSA9
PSBzZWxlY3RlZEF1ZGlvSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17
Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGV4dFRy
YWNrKiB0ZXh0VHJhY2s7Ci0gICAgaWYgKGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5z
aXplKCkpCi0gICAgICAgIHRleHRUcmFjayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnVbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmRleCldLmdldCgpOwotICAgIGVsc2UKLSAgICAgICAgdGV4dFRyYWNr
ID0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKLQotICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2spOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgPT0gTWVkaWFQbGF5ZXJFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgIG1fbWVkaWFF
bGVtZW50LT5leGl0RnVsbHNjcmVlbigpOwotICAgIGVsc2UKLSAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmVudGVyRnVsbHNjcmVlbihNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnRvZ2dsZU11dGVkKCkKLXsKLSAgICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9v
bCBtdXRlZCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVt
ZW50LT5zZXRNdXRlZChtdXRlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpCi17Ci0gICAgaWYgKCFt
X21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVu
dC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGNhcHRp
b25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAo
KS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKLSAgICBhdXRvJiB0ZXh0VHJhY2tzID0gbV9tZWRpYUVs
ZW1lbnQtPnRleHRUcmFja3MoKTsKLSAgICBpZiAodGV4dFRyYWNrcy5sZW5ndGgoKSkKLSAgICAg
ICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFj
a0xpc3RGb3JNZW51KCZ0ZXh0VHJhY2tzKTsKLSAgICBlbHNlCi0gICAgICAgIG1fbGVnaWJsZVRy
YWNrc0Zvck1lbnUuY2xlYXIoKTsKLQotICAgIGF1dG8mIGF1ZGlvVHJhY2tzID0gbV9tZWRpYUVs
ZW1lbnQtPmF1ZGlvVHJhY2tzKCk7Ci0gICAgaWYgKGF1ZGlvVHJhY2tzLmxlbmd0aCgpID4gMSkK
LSAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVk
VHJhY2tMaXN0Rm9yTWVudSgmYXVkaW9UcmFja3MpOwotICAgIGVsc2UKLSAgICAgICAgbV9hdWRp
b1RyYWNrc0Zvck1lbnUuY2xlYXIoKTsKLQotICAgIGF1dG8gYXVkaW9PcHRpb25zID0gYXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKLSAgICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlh
U2VsZWN0ZWRJbmRleCgpOwotICAgIGF1dG8gbGVnaWJsZU9wdGlvbnMgPSBsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zKCk7Ci0gICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFT
ZWxlY3RlZEluZGV4KCk7Ci0KLSAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0g
ICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvT3B0
aW9ucywgYXVkaW9JbmRleCk7Ci0gICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQobGVnaWJsZU9wdGlvbnMsIGxlZ2libGVJbmRleCk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNl
bGVjdGlvbkluZGljZXMoKQotewotICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxl
Y3RlZEluZGV4KCk7Ci0gICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3Rl
ZEluZGV4KCk7Ci0KLSAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAg
IGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChhdWRpb0luZGV4KTsKLSAg
ICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobGVnaWJsZUlu
ZGV4KTsKLSAgICB9Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6cGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX21lZGlhRWxl
bWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnBs
YXliYWNrU3RhcnRlZFRpbWUoKTsKLX0KLQotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQot
ewotICAgIC8vIEZJWE1FKDE1NzQ1Mik6IFJlbW92ZSB0aGUgcmlnaHQtaGFuZCBjb25zdHJ1Y3Rv
ciBub3RhdGlvbiBvbmNlIE5ldmVyRGVzdHJveWVkIHN1cHBvcnRzIGluaXRpYWxpemVyX2xpc3Rz
LgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gbmFtZXMg
PSBWZWN0b3I8QXRvbWljU3RyaW5nPih7Ci0gICAgICAgIGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNo
YW5nZUV2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkucGF1c2VFdmVudCwKLSAgICAgICAgZXZl
bnROYW1lcygpLnBsYXlFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVu
dCwKLSAgICAgICAgZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwKLSAgICAgICAgZXZlbnRO
YW1lcygpLnByb2dyZXNzRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50
LAotICAgICAgICBldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwKLSAgICAgICAgZXZlbnRO
YW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkud2Via2l0Y3Vy
cmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCwKLSAgICB9KTsKLSAgICBy
ZXR1cm4gbmFtZXMuZ2V0KCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGV2ZW50TmFtZUFsbCgiYWxsRXZlbnRzIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZUFs
bDsKLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJh
dGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVk
aWFFbGVtZW50LT5kdXJhdGlvbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKTsKLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpjdXJyZW50VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9t
ZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkgOiAwOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1heEJ1ZmZlcmVkVGltZSgpIDog
MDsKLX0KLQotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNQbGF5
aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyAhbV9tZWRpYUVsZW1l
bnQtPnBhdXNlZCgpIDogZmFsc2U7Ci19Ci0KLWZsb2F0IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlh
RWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSA6IDA7Ci19Ci0KLVJlZjxU
aW1lUmFuZ2VzPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVS
YW5nZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVt
ZW50LT5zZWVrYWJsZSgpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci19Ci0KLWRvdWJsZSBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1v
ZGlmaWVkVGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRp
YUVsZW1lbnQtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7Ci19Ci0K
LWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUlu
dGVydmFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxl
bWVudC0+bGl2ZVVwZGF0ZUludGVydmFsKCkgOiAwOwotfQotICAgIAotYm9vbCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWluRmFzdFJldmVy
c2VSYXRlKCkgPCAwLjAgOiBmYWxzZTsKLX0KLQotVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnMoKSBjb25zdAotewotICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVk
aW9PcHRpb25zOwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQt
PmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gYXVkaW9PcHRpb25zOwotCi0gICAg
YXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFn
ZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOwotCi0gICAgYXVkaW9PcHRpb25zLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpKTsKLSAgICBm
b3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBtX2F1ZGlvVHJhY2tzRm9yTWVudSkKLSAgICAgICAgYXVk
aW9PcHRpb25zLnVuY2hlY2tlZEFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rp
b25PcHRpb25Gb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gYXVkaW9P
cHRpb25zOwotfQotCi11aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGlu
ZGV4ID0gMDsgaW5kZXggPCBtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgaWYgKG1fYXVkaW9UcmFja3NGb3JNZW51W2luZGV4XS0+ZW5hYmxlZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpOwotfQotCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxl
Z2libGVPcHRpb25zOwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1l
bnQtPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Ci0K
LSAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9yTWVudSkKLSAgICAgICAgbGVnaWJsZU9wdGlvbnMu
YXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRy
YWNrLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Ci19Ci0KLXVpbnQ2NF90
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rl
ZEluZGV4KCkgY29uc3QKLXsKLSAgICB1aW50NjRfdCBzZWxlY3RlZEluZGV4ID0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOwotICAgIHVpbnQ2NF90IG9mZkluZGV4ID0gMDsK
LSAgICBib29sIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IGZhbHNlOwotCi0gICAgYXV0byBob3N0
ID0gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSA6
IG51bGxwdHI7Ci0KLSAgICBpZiAoIWhvc3QpCi0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4
OwotCi0gICAgQXRvbWljU3RyaW5nIGRpc3BsYXlNb2RlID0gaG9zdC0+Y2FwdGlvbkRpc3BsYXlN
b2RlKCk7Ci0gICAgVGV4dFRyYWNrKiBvZmZJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVPZmZJdGVt
KCk7Ci0gICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVBdXRv
bWF0aWNJdGVtKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9sZWdp
YmxlVHJhY2tzRm9yTWVudS5zaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgYXV0byYgdHJhY2sg
PSBtX2xlZ2libGVUcmFja3NGb3JNZW51W2luZGV4XTsKLSAgICAgICAgaWYgKHRyYWNrID09IG9m
Zkl0ZW0pCi0gICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OwotCi0gICAgICAgIGlmICh0cmFj
ayA9PSBhdXRvbWF0aWNJdGVtICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0Ojph
dXRvbWF0aWNLZXl3b3JkKCkpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsK
LSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoZGlzcGxheU1vZGUgIT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tl
eXdvcmQoKSAmJiB0cmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgewot
ICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJhY2tNZW51
SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChvZmZJdGVt
ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9s
c0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpCi0gICAgICAgIHNlbGVjdGVkSW5kZXggPSBvZmZJ
bmRleDsKLQotICAgIHJldHVybiBzZWxlY3RlZEluZGV4OwotfQotCi1ib29sIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT53ZWJraXRD
dXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAotewotICAg
IGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9z
dCgpKQotICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7Ci0KLSAgICBzd2l0Y2ggKG1fbWVk
aWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZVR5cGUoKSkgewot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gVGFyZ2V0VHlwZU5vbmU7Ci0gICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlw
ZTo6Tm9uZToKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwotICAgIGNhc2UgTWVkaWFD
b250cm9sc0hvc3Q6OkRldmljZVR5cGU6OkFpcnBsYXk6Ci0gICAgICAgIHJldHVybiBUYXJnZXRU
eXBlQWlyUGxheTsKLSAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpUdm91
dDoKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVUVk91dDsKLSAgICB9Ci19Ci0KLVN0cmluZyBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUoKSBjb25zdAotewotICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21l
ZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7
Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vz
c2lvbigpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7Ci19
Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBj
b25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tdXRl
ZCgpIDogZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzMmI0MzkzNWQyYjI4MWQ4MTYz
ZmIxNzY1OGExYzdjZTQ0YTM2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1
cEZ1bGxzY3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBm
dWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZgotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyNzAyZGI4NmI1OTI2
NDkyMmFlYjQwMWNkYjIyMjE5ZDlmZGU0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJIVE1MTWVk
aWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xp
ZW50OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGFk
ZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jik9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNl
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpID0g
MDsKLSAgICBlbnVtIFZpZGVvR3Jhdml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSwgVmlkZW9HcmF2
aXR5UmVzaXplQXNwZWN0LCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsIH07Ci0gICAgdmly
dHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCA9IDA7Ci19OwotCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaGFz
VmlkZW9DaGFuZ2VkKGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlkZW9EaW1lbnNpb25z
Q2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci19OwotCi1XRUJDT1JFX0VYUE9SVCBib29s
IHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOwotICAgIAotfQotCi0jZW5kaWYKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDlhMGZiMTcwOTE5ZmQxODdmMjAwZjY4OWI3MjJhNWVkYWE1ZDZjMTMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRl
ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEF1ZGlvVHJhY2s7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50Owot
Y2xhc3MgVGV4dFRyYWNrOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IDogcHVibGlj
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
Y3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkpOwotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKLSAgICBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRWxl
bWVudC5nZXQoKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVu
TGF5ZXIoUGxhdGZvcm1MYXllciosIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyID0gW10geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdhaXRGb3JQcmVwYXJl
ZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIg
PSBbXSB7IH0pOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsK
LSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4o
dGhpcykgPT0gJnJoczsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJy
aWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhN
ZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVv
TGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
aXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXpl
IHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNp
b25zOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1faGFzVmlkZW87IH0KLQotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIHNldEhhc1ZpZGVvKGJvb2wpOwotICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGNv
bnN0IEZsb2F0U2l6ZSYpOwotCi0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0
cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5n
JiBldmVudE5hbWVBbGwoKTsKLQotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVv
RWxlbWVudDsKLSAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5M
YXllcjsKLSAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgYm9vbCBtX2hhc1Zp
ZGVvIHsgZmFsc2UgfTsKLSAgICBGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lvbnM7Ci0gICAgRmxv
YXRSZWN0IG1fdmlkZW9GcmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVn
aWJsZVRyYWNrc0Zvck1lbnU7Ci0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRp
b1RyYWNrc0Zvck1lbnU7Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGJmNDdj
MGM0ZGU2NWZlY2M0NWZjNWZmNzQ1NzY4NWIwYzU1YzVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCisrKyAvZGV2L251bGwKQEAgLTEs
MjM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbXBvcnQgIldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCi0KLSNpbXBvcnQgIkRPTVdpbmRvdy5oIgot
I2ltcG9ydCAiSGlzdG9yeS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFD
b250cm9sc0hvc3QuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50LmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPFdl
YkNvcmUvRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9y
dCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
UGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9y
dCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQoKQotICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVu
dExpc3RlbmVyVHlwZSkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1M
VmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCi17Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50ID09
IHZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50
ICYmIG1fdmlkZW9FbGVtZW50LT52aWRlb0Z1bGxzY3JlZW5MYXllcigpKQotICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobnVsbHB0cik7Ci0KLSAgICBpZiAo
bV92aWRlb0VsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3IgKGF1dG8mIGV2
ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV92aWRlb0VsZW1l
bnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgIH0K
LSAgICBtX2lzTGlzdGVuaW5nID0gZmFsc2U7Ci0KLSAgICBtX3ZpZGVvRWxlbWVudCA9IHZpZGVv
RWxlbWVudDsKLQotICAgIGlmIChtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBmb3IgKGF1dG8m
IGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV92aWRlb0Vs
ZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgICAg
ICBtX2lzTGlzdGVuaW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1cGRhdGVGb3JFdmVudE5hbWUo
ZXZlbnROYW1lQWxsKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV2Vi
Q29yZTo6RXZlbnQmIGV2ZW50KQotewotICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC50eXBl
KCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRh
dGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKLXsKLSAg
ICBpZiAobV9jbGllbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJv
b2wgYWxsID0gZXZlbnROYW1lID09IGV2ZW50TmFtZUFsbCgpOwotCi0gICAgaWYgKGFsbAotICAg
ICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KSB7Ci0gICAgICAg
IHNldEhhc1ZpZGVvKG1fdmlkZW9FbGVtZW50KTsKLSAgICAgICAgc2V0VmlkZW9EaW1lbnNpb25z
KG1fdmlkZW9FbGVtZW50ID8gRmxvYXRTaXplKG1fdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCks
IG1fdmlkZW9FbGVtZW50LT52aWRlb0hlaWdodCgpKSA6IEZsb2F0U2l6ZSgpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxh
eWVyID09IHZpZGVvTGF5ZXIpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gdmlk
ZW9MYXllcjsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIg
c2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UoMCwgMCldOwotI2Vsc2UKLSAgICBbbV92aWRlb0Z1
bGxzY3JlZW5MYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLjUsIDAuNSldOwotI2Vu
ZGlmCi0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOm1fdmlkZW9GcmFtZV07
Ci0gICAgCi0gICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92aWRlb0VsZW1lbnQtPnNl
dFZpZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fdmlkZW9FbGVtZW50
KSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX3ZpZGVvRWxlbWVudC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKLXsK
LSAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2Rl
KCkgIT0gbW9kZSkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldEZ1bGxzY3JlZW5Nb2RlKG1v
ZGUpOwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIGZpbmlzaGVkV2l0aE1lZGlhICYmIG1v
ZGUgPT0gTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpIHsKLSAgICAg
ICAgaWYgKG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLmlzTWVkaWFEb2N1bWVudCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1l
bnQoKS5kb21XaW5kb3coKSkgewotICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5KiBoaXN0b3J5
ID0gd2luZG93LT5oaXN0b3J5KCkpCi0gICAgICAgICAgICAgICAgICAgIGhpc3RvcnktPmJhY2so
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBy
ZWN0KQotewotICAgIG1fdmlkZW9GcmFtZSA9IHJlY3Q7Ci0gICAgW21fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgc2V0Qm91bmRzOkNHUmVjdChyZWN0KV07Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50KQot
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkK
LXsKLSAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxh
eWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7Ci0gICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZSkKLSAgICAgICAgdmlkZW9HcmF2
aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKLSAgICBlbHNlIGlmIChncmF2
aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Qp
Ci0gICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVB
c3BlY3Q7Ci0gICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCkKLSAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVk
aWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7Ci0gICAgZWxzZQotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAKLSAgICBtX3ZpZGVvRWxlbWVudC0+c2V0Vmlk
ZW9GdWxsc2NyZWVuR3Jhdml0eSh2aWRlb0dyYXZpdHkpOwotfQotCi1jb25zdCBWZWN0b3I8QXRv
bWljU3RyaW5nPiYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVk
RXZlbnROYW1lcygpCi17Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gbmFtZXMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoVmVjdG9yPEF0b21pY1N0cmluZz4geyBldmVudE5hbWVzKCkucmVzaXplRXZlbnQg
fSk7Ci0gICAgcmV0dXJuIG5hbWVzOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZlbnRz
IjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotewotICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVu
dCkpOwotICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNs
aWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLWJvb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJl
dHVybiBwYWdlLT5pc1Zpc2libGUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8oYm9vbCBoYXNW
aWRlbykKLXsKLSAgICBpZiAoaGFzVmlkZW8gPT0gbV9oYXNWaWRlbykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9oYXNWaWRlbyA9IGhhc1ZpZGVvOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQg
OiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+aGFzVmlkZW9DaGFuZ2VkKG1faGFzVmlkZW8p
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0RpbWVuc2lvbnMoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgaWYg
KG1fdmlkZW9EaW1lbnNpb25zID09IHZpZGVvRGltZW5zaW9ucykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV92aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnM7Ci0KLSAgICBmb3IgKGF1
dG8mIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT52aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKG1fdmlkZW9EaW1lbnNpb25zKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlmY2Q3YjRiY2YxNGJjNzRhNjUyNTIwOGNiZjMxMmNlNjI1ZDM2MTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFU
Rk9STShJT1MpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSFRNTE1l
ZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgi
CisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKK09CSkNf
Q0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxl
cjsKK09CSkNfQ0xBU1MgVUlXaW5kb3c7CitPQkpDX0NMQVNTIFVJVmlldzsKKworbmFtZXNwYWNl
IFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIElu
dFJlY3Q7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKK2NsYXNzIFdlYlBsYXliYWNrU2Vz
c2lvbkNoYW5nZU9ic2VydmVyOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdAorICAgIDogcHVibGljIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQor
ICAgICwgcHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVm
Q291bnRlZDxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4geworCitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFBsYXliYWNr
U2Vzc2lvbk1vZGVsJiBtb2RlbCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1vZGVsKSk7CisgICAgfQorICAgIHZpcnR1
YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCk7CisgICAgUGxheWJhY2tTZXNzaW9u
TW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbDsgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKKworICAgIC8vIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlv
bkNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJl
bnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVy
cmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91Ymxl
KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgbGFz
dE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgb3ZlcnJpZGU7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJy
aWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJs
ZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29u
c3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVy
cmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlk
ZTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAg
ICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVy
biBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbk1vZGVs
Jik7CisKKyAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRy
b2xsZXI7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwg
eyBudWxscHRyIH07Cit9OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTViYTkwNWE3MDE5NDk2NTc3MzE3YjEwZDUzMDAyN2ZjMWM1MTUxMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5tbQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorCisjaWYgUExBVEZPUk0o
SU9TKQorI2lmIEhBVkUoQVZLSVQpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJM
b2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIldl
YkFWUGxheWVyQ29udHJvbGxlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRM
aW5rLmgiCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktf
Q0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKKyAgICA6IG1fcGxheWVyQ29u
dHJvbGxlcihhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSkpCisg
ICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKK3sKKyAgICBtb2RlbC5hZGRDbGll
bnQoKnRoaXMpOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlOnRoaXNdOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6Jm1vZGVs
XTsKKworICAgIGR1cmF0aW9uQ2hhbmdlZChtb2RlbC5kdXJhdGlvbigpKTsKKyAgICBjdXJyZW50
VGltZUNoYW5nZWQobW9kZWwuY3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJ
bmZvXSBzeXN0ZW1VcHRpbWVdKTsKKyAgICBidWZmZXJlZFRpbWVDaGFuZ2VkKG1vZGVsLmJ1ZmZl
cmVkVGltZSgpKTsKKyAgICByYXRlQ2hhbmdlZChtb2RlbC5pc1BsYXlpbmcoKSwgbW9kZWwucGxh
eWJhY2tSYXRlKCkpOworICAgIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChtb2RlbC5zZWVrYWJsZVJh
bmdlcygpLCBtb2RlbC5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCksIG1vZGVs
LmxpdmVVcGRhdGVJbnRlcnZhbCgpKTsKKyAgICBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKG1v
ZGVsLmNhblBsYXlGYXN0UmV2ZXJzZSgpKTsKKyAgICBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQobW9kZWwuYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwuYXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXgoKSk7CisgICAgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQobW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpLCBtb2RlbC5sZWdpYmxl
TWVkaWFTZWxlY3RlZEluZGV4KCkpOworICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKG1vZGVs
LmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkpOworICAg
IHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChtb2RlbC53aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZCgpKTsKK30KKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpCit7CisgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6bnVsbHB0cl07CisgICAgW21fcGxheWVy
Q29udHJvbGxlciBzZXRFeHRlcm5hbFBsYXliYWNrQWN0aXZlOmZhbHNlXTsKKworICAgIGludmFs
aWRhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmVzZXRN
ZWRpYVN0YXRlKCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHJlc2V0TWVkaWFTdGF0ZV07
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdl
ZChkb3VibGUgZHVyYXRpb24pCit7CisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJD
b250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworCisgICAgcGxheWVyQ29udHJv
bGxlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNv
bnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzID0gZHVyYXRpb247CisKKyAgICAvLyBGSVhNRTog
d2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KKyAg
ICBwbGF5ZXJDb250cm9sbGVyLmNhblBsYXkgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5j
YW5QYXVzZSA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNrID0g
WUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAgIHBs
YXllckNvbnRyb2xsZXIuY2FuU2VlayA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1
cyA9IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5OworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JU
aW1lU3RhbXAgPSAhW21fcGxheWVyQ29udHJvbGxlciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7
CisgICAgQVZWYWx1ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZh
bHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCisgICAgICAgIGFuY2hvclRpbWVT
dGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsKKworICAgIFttX3BsYXllckNvbnRyb2xsZXIg
c2V0VGltaW5nOnRpbWluZ107Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBXZWJB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIu
Z2V0KCk7CisgICAgZG91YmxlIGR1cmF0aW9uID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVy
YXRpb247CisgICAgZG91YmxlIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWU7CisgICAgaWYgKCFkdXJh
dGlvbikKKyAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IDA7CisgICAgZWxzZQorICAg
ICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247Cisg
ICAgcGxheWVyQ29udHJvbGxlci5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVk
QnVmZmVyZWRUaW1lKV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAg
W21fcGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAu
XTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5n
ZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZp
ZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gc2Vla2FibGVSYW5nZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxl
bmd0aCgpOyBpKyspIHsKKyAgICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJhbmdlcy5zdGFydChp
KS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMu
ZW5kKGkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworCisgICAgICAgIENNVGltZVJhbmdlIHJhbmdl
ID0gQ01UaW1lUmFuZ2VNYWtlKENNVGltZU1ha2VXaXRoU2Vjb25kcyhzdGFydCwgMTAwMCksIENN
VGltZU1ha2VXaXRoU2Vjb25kcyhlbmQtc3RhcnQsIDEwMDApKTsKKyAgICAgICAgW3NlZWthYmxl
UmFuZ2VzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOwor
ICAgIH0KKworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnNl
ZWthYmxlUmFuZ2VzLmdldCgpXTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxl
VGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWU6IGxhc3RNb2RpZmllZFRpbWVdOworICAgIFttX3Bs
YXllckNvbnRyb2xsZXIgc2V0TGl2ZVVwZGF0ZUludGVydmFsOmxpdmVVcGRhdGVJbnRlcnZhbF07
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2
ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit7CisgICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKK30KKworc3Rh
dGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCit7CisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7CisgICAgZm9yIChhdXRvJiBv
cHRpb24gOiBvcHRpb25zKSB7CisgICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlhU2VsZWN0aW9u
T3B0aW9uPiB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBh
bGxvY10gaW5pdF0pOworICAgICAgICBbd2ViT3B0aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1l
Om9wdGlvbi5kaXNwbGF5TmFtZV07CisgICAgICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJP
cHRpb24uZ2V0KCldOworICAgIH0KKyAgICByZXR1cm4gd2ViT3B0aW9uczsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJP
cHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOworICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07
CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisgICAgICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dl
Yk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZElu
ZGV4KV1dOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRp
b25zKTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0
aW9ucyBjb3VudF0pCisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19j
YXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwg
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5
cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBBVlBsYXllckNv
bnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZSBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxh
eWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlTm9uZTsKKyAgICBpZiAodGFyZ2V0VHlw
ZSA9PSBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCisgICAgICAgIGV4
dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5
cGVBaXJQbGF5OworICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OlRhcmdldFR5cGVUVk91dCkKKyAgICAgICAgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBs
YXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0OworCisgICAgV2ViQVZQbGF5
ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgp
OworICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2Nh
bGl6ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4
dGVybmFsUGxheWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7CisgICAgcGxheWVyQ29u
dHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRD
aGFuZ2VkKGJvb2wgZGlzYWJsZWQpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRBbGxv
d3NFeHRlcm5hbFBsYXliYWNrOiFkaXNhYmxlZF07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQoreworICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0TXV0ZWQ6bXV0ZWRdOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9u
TW9kZWwpCisgICAgICAgIHJldHVybjsKKworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVs
ZWdhdGU6bnVsbHB0cl07CisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKK30KKworfQor
CisjZW5kaWYgLy8gSEFWRShBVktJVCkKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyNzcxMDNjMzQxMWE5MzA5YzhmYzUyNDkzNjViZjA1
ODUxNDY1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgor
I2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW5jbHVkZSAiVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KKworT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOworT0JKQ19DTEFT
UyBVSVZpZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBVSVdpbmRvdzsKK09CSkNfQ0xBU1MgVUlW
aWV3OworT0JKQ19DTEFTUyBDQUxheWVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xs
ZXI7CitPQkpDX0NMQVNTIFdlYkFWUGxheWVyTGF5ZXJWaWV3OworT0JKQ19DTEFTUyBXZWJBVlBs
YXllckxheWVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7
CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgVmlkZW9GdWxsc2Ny
ZWVuTW9kZWw7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKKyAgICAKK2Ns
YXNzIFdFQkNPUkVfRVhQT1JUIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IGZpbmFsCisg
ICAgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQmKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwo
VmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7
CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3Qg
eyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCk7IH0KKworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwor
CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9u
TW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXpl
ZERldmljZU5hbWUpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNl
dHVwRnVsbHNjcmVlbihVSVZpZXcmLCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3
ICosIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxv
d3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0
IEludFJlY3QmIGlubGluZVJlY3QpOworCisgICAgZW51bSBjbGFzcyBFeGl0RnVsbFNjcmVlblJl
YXNvbiB7CisgICAgICAgIERvbmVCdXR0b25UYXBwZWQsCisgICAgICAgIEZ1bGxTY3JlZW5CdXR0
b25UYXBwZWQsCisgICAgICAgIFBpbmNoR2VzdHVyZUhhbmRsZWQsCisgICAgICAgIFJlbW90ZUNv
bnRyb2xTdG9wRXZlbnRSZWNlaXZlZCwKKyAgICAgICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQK
KyAgICB9OworCisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyByZXR1
cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQorICAgIGJvb2wgc2hvdWxkRXhpdEZ1bGxzY3Jl
ZW5XaXRoUmVhc29uKEV4aXRGdWxsU2NyZWVuUmVhc29uKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQorICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKCkgY29uc3QgeyByZXR1
cm4gbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7
CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lk
KGJvb2wpPiYmIGNhbGxiYWNrKTsKKyAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkKCkgY29uc3Q7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOworCisg
ICAgdm9pZCB3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBkaWRTdGFydFBp
Y3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJl
KCk7CisgICAgdm9pZCB3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGRpZFN0
b3BQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVy
ZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXikoQk9PTCkpOworCisgICAgdm9pZCBz
ZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAg
dm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KTsKKyAgICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7IH0KKyAgICBib29sIGlz
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29u
c3QgeyByZXR1cm4gbV9tb2RlID09IG1vZGU7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVf
RVhQT1JUIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Jik7CisgICAgdm9pZCBiZWdpblNlc3Npb24oKTsKKyAgICB2b2lkIGVudGVyUGlj
dHVyZUluUGljdHVyZSgpOworICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKKyAg
ICB2b2lkIHdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAq
cGxheWVyQ29udHJvbGxlcigpIGNvbnN0OworCisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyAgICBSZXRhaW5QdHI8V2Vi
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdDb250cm9sbGVyRGVs
ZWdhdGU7CisgICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmll
d0NvbnRyb2xsZXI7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwgeyBudWxscHRyIH07CisgICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhlc2UgYXJl
IG9ubHkgdXNlZCB3aGVuIGZ1bGxzY3JlZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2lu
ZG93LgorICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV93aW5kb3c7CisgICAgUmV0YWluUHRyPFVJ
Vmlld0NvbnRyb2xsZXI+IG1fdmlld0NvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFVJVmlldz4g
bV9wYXJlbnRWaWV3OworICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV9wYXJlbnRXaW5kb3c7Cisg
ICAgUmV0YWluUHRyPFdlYkFWUGxheWVyTGF5ZXJWaWV3PiBtX3BsYXllckxheWVyVmlldzsKKyAg
ICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OworICAgIFdURjo6
RnVuY3Rpb248dm9pZChib29sKT4gbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjazsKKyAgICBSdW5M
b29wOjpUaW1lcjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV93YXRjaGRvZ1RpbWVy
OworICAgIGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZXhpdENvbXBs
ZXRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2VudGVyUmVxdWVzdGVkIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyB0cnVlIH07CisgICAgYm9v
bCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5k
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBp
Y3R1cmVTdG9wIHsgZmFsc2UgfTsKKworICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4oKTsKK307
CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTMy
MGZkZTFlZWNiMDBkMjlkYmVlMjViOTg0OTI2NWNhZDI4MjE5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tCkBAIC0wLDAgKzEsMTA0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0oSU9T
KQorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKworI2lmIEhBVkUo
QVZLSVQpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJHZW9tZXRyeVV0aWxpdGll
cy5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgorI2ltcG9y
dCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIu
aCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW1wb3J0ICJXZWJBVlBsYXll
ckNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBv
cnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CisjaW1w
b3J0IDxvYmpjL21lc3NhZ2UuaD4KKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBT
b2Z0LWxpbmtpbmcgaGVhZGVycyBtdXN0IGJlIGluY2x1ZGVkIGxhc3Qgc2luY2UgdGhleSAjZGVm
aW5lIGZ1bmN0aW9ucywgY29uc3RhbnRzLCBldGMuCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGlu
ay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFT
UyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3Vu
ZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplLCBOU1N0cmluZyAqKQorU09GVF9MSU5L
X0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwg
TlNTdHJpbmcgKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsLCBOU1N0cmluZyAqKQorCitTT0ZUX0xJTktfRlJBTUVX
T1JLX09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBp
Y3R1cmVJblBpY3R1cmVDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0
LCBBVlBsYXllclZpZXdDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0
LCBfX0FWUGxheWVyTGF5ZXJWaWV3KQorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQorU09G
VF9MSU5LX0NMQVNTKFVJS2l0LCBVSUFwcGxpY2F0aW9uKQorU09GVF9MSU5LX0NMQVNTKFVJS2l0
LCBVSVNjcmVlbikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlXaW5kb3cpCitTT0ZUX0xJTktf
Q0xBU1MoVUlLaXQsIFVJVmlldykKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3Q29udHJv
bGxlcikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlDb2xvcikKK1NPRlRfTElOS19DT05TVEFO
VChVSUtpdCwgVUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCwgVUlXaW5k
b3dMZXZlbCkKKworc3RhdGljIFVJQ29sb3IgKmNsZWFyVUlDb2xvcigpCit7CisgICAgcmV0dXJu
IChVSUNvbG9yICopW2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdOworfQorCisjaWYgIUxP
R19ESVNBQkxFRAorc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCit7Cisg
ICAgcmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Cit9CisjZW5kaWYKKworc3RhdGljIGNv
bnN0IFNlY29uZHMgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCB7IDFfcyB9OworCitAY2xh
c3MgV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbjsKKworQGludGVyZmFjZSBXZWJBVlBsYXllclZp
ZXdDb250cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdCA8QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRl
bGVnYXRlX1dlYktpdE9ubHk+IHsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOworfQorQHByb3BlcnR5IChhc3NpZ24pIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOworLSAoQk9PTClw
bGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdD
b250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNvbjsKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQorLSAoVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAgICByZXR1cm4gX2Z1bGxz
Y3JlZW5JbnRlcmZhY2UuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFj
ZTooVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sK
KyAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Cit9CisKKy0g
KHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBs
YXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURf
UEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFj
ZS0+d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdD
b250cm9sbGVyRGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVy
ICopcGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0Nv
bnRyb2xsZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJGYWlsZWRUb1N0
YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdD
b250cm9sbGVyIHdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFN
KHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIHNl
bGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsK
K30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdG9wUGljdHVyZUluUGljdHVy
ZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAg
VU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5J
bnRlcmZhY2UtPndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXll
clZpZXdDb250cm9sbGVyRGlkU3RvcFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRy
b2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJW
aWV3Q29udHJvbGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdG9wUGlj
dHVyZUluUGljdHVyZSgpOworfQorCitzdGF0aWMgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uIGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKEFW
UGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCit7CisgICAg
c3dpdGNoIChyZWFzb24pIHsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVs
bFNjcmVlblJlYXNvbkRvbmVCdXR0b25UYXBwZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBw
ZWQ7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25G
dWxsU2NyZWVuQnV0dG9uVGFwcGVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpGdWxsU2NyZWVuQnV0dG9uVGFwcGVk
OworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGlj
dHVyZUluUGljdHVyZVN0YXJ0ZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVk
OworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGlu
Y2hHZXN0dXJlSGFuZGxlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGluY2hHZXN0dXJlSGFuZGxlZDsKKyAgICBj
YXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblJlbW90ZUNvbnRy
b2xTdG9wRXZlbnRSZWNlaXZlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJl
Y2VpdmVkOworICAgIH0KK30KKworLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5
ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2Ny
ZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29u
KXJlYXNvbgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAg
cmV0dXJuIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRo
UmVhc29uKGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKHJlYXNvbikpOworfQorCistICh2
b2lkKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVy
Vmlld0NvbnRyb2xsZXIgcmVzdG9yZVVzZXJJbnRlcmZhY2VGb3JQaWN0dXJlSW5QaWN0dXJlU3Rv
cFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCByZXN0b3JlZCkpY29tcGxldGlv
bkhhbmRsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAg
IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9w
V2l0aENvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyKTsKK30KK0BlbmQKKworQGlu
dGVyZmFjZSBXZWJBVlBsYXllckxheWVyIDogQ0FMYXllcgorQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgTlNTdHJpbmcgKnZpZGVvR3Jhdml0eTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBn
ZXR0ZXI9aXNSZWFkeUZvckRpc3BsYXkpIEJPT0wgcmVhZHlGb3JEaXNwbGF5OworQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxz
Y3JlZW5JbnRlcmZhY2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBBVlBsYXllckNv
bnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
KSBDQUxheWVyICp2aWRlb1N1YmxheWVyOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIG51
bGxhYmxlKSBOU0RpY3Rpb25hcnkgKnBpeGVsQnVmZmVyQXR0cmlidXRlczsKK0Bwcm9wZXJ0eSBD
R1NpemUgdmlkZW9EaW1lbnNpb25zOworQHByb3BlcnR5IENHUmVjdCBtb2RlbFZpZGVvTGF5ZXJG
cmFtZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyTGF5ZXIgeworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7
CisgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gX2F2UGxheWVyQ29udHJvbGxl
cjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX3ZpZGVvU3VibGF5ZXI7CisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBfdmlkZW9HcmF2aXR5OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKHNlbGYpIHsKKyAgICAgICAgW3NlbGYg
c2V0TWFza3NUb0JvdW5kczpZRVNdOworICAgICAgICBfdmlkZW9HcmF2aXR5ID0gZ2V0QVZMYXll
clZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9y
bVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRz
KSBvYmplY3Q6bmlsXTsKKyAgICBbX3BpeGVsQnVmZmVyQXR0cmlidXRlcyByZWxlYXNlXTsKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNl
LmdldCgpOworfQorCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgX2Z1bGxzY3Jl
ZW5JbnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOworfQorCistIChBVlBsYXllckNvbnRy
b2xsZXIgKilwbGF5ZXJDb250cm9sbGVyCit7CisgICAgcmV0dXJuIChBVlBsYXllckNvbnRyb2xs
ZXIgKilfYXZQbGF5ZXJDb250cm9sbGVyLmdldCgpOworfQorCistICh2b2lkKXNldFBsYXllckNv
bnRyb2xsZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKK3sKKyAgICBB
U1NFUlQoIXBsYXllckNvbnRyb2xsZXIgfHwgW3BsYXllckNvbnRyb2xsZXIgaXNLaW5kT2ZDbGFz
czpbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGNsYXNzXV0pOworICAgIF9hdlBsYXllckNvbnRyb2xs
ZXIgPSAoV2ViQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcjsKK30KKworLSAo
dm9pZClzZXRWaWRlb1N1YmxheWVyOihDQUxheWVyICopdmlkZW9TdWJsYXllcgoreworICAgIF92
aWRlb1N1YmxheWVyID0gdmlkZW9TdWJsYXllcjsKK30KKworLSAoQ0FMYXllciopdmlkZW9TdWJs
YXllcgoreworICAgIHJldHVybiBfdmlkZW9TdWJsYXllci5nZXQoKTsKK30KKworLSAodm9pZCls
YXlvdXRTdWJsYXllcnMKK3sKKyAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5ZXJdICE9
IHNlbGYpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIg
ZGVsZWdhdGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBbX3ZpZGVvU3VibGF5ZXIgc2V0UG9z
aXRpb246Q0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChzZWxmLmJvdW5kcyksIENHUmVjdEdldE1p
ZFkoc2VsZi5ib3VuZHMpKV07CisKKyAgICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0
IDw9IDAgfHwgc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRmxvYXRSZWN0IHNvdXJjZVZpZGVvRnJhbWU7CisgICAgRmxvYXRSZWN0IHRhcmdl
dFZpZGVvRnJhbWU7CisgICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlkZW9EaW1l
bnNpb25zLndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0OworICAgIAorICAgIGlm
IChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZp
ZGVvR3Jhdml0eV0pIHsKKyAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IHNlbGYubW9kZWxWaWRl
b0xheWVyRnJhbWU7CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzZWxmLmJvdW5kczsKKyAg
ICB9IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkgaXNFcXVh
bFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgeworICAgICAgICBzb3VyY2VWaWRlb0ZyYW1l
ID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8s
IHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0g
bGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNl
bGYuYm91bmRzKTsKKyAgICB9IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsKKyAgICAg
ICAgc291cmNlVmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJl
Y3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7CisgICAgICAg
IHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUgPSBDR1JlY3RNYWtlKDAsIDAsIHNvdXJjZVZpZGVv
RnJhbWUud2lkdGgoKSwgc291cmNlVmlkZW9GcmFtZS5oZWlnaHQoKSk7CisgICAgICAgIEFTU0VS
VChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7CisgICAgICAgIF9mdWxsc2NyZWVuSW50
ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2RlbFZpZGVvTGF5ZXJG
cmFtZSk7CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0
UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBVSVZpZXcgKnZpZXcgPSAo
VUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXTsKKyAgICBDR0FmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSh0YXJnZXRWaWRlb0ZyYW1l
LndpZHRoKCkgLyBzb3VyY2VWaWRlb0ZyYW1lLndpZHRoKCksIHRhcmdldFZpZGVvRnJhbWUuaGVp
Z2h0KCkgLyBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKKyAgICBbdmlldyBzZXRUcmFuc2Zv
cm06dHJhbnNmb3JtXTsKKyAgICAKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmltYXRpb25EdXJhdGlv
biA9IFtDQVRyYW5zYWN0aW9uIGFuaW1hdGlvbkR1cmF0aW9uXTsKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeIHsKKyAgICAgICAgW05TT2JqZWN0IGNhbmNl
bFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rv
cihyZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKKworICAgICAgICBbc2VsZiBwZXJmb3JtU2Vs
ZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6
YW5pbWF0aW9uRHVyYXRpb24gKyAwLjFdOworICAgIH0pOworfQorCistICh2b2lkKXJlc29sdmVC
b3VuZHMKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRo
VGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxd
OworICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKFtfdmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBzZWxmKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0KHNlbGYubW9k
ZWxWaWRlb0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pICYmIENHQWZmaW5lVHJhbnNmb3JtSXNJ
ZGVudGl0eShbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0gdHJhbnNmb3JtXSkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAg
W0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07CisgICAgW0NBVHJhbnNhY3Rp
b24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAKKyAgICBpZiAoIUNHUmVjdEVxdWFsVG9S
ZWN0KHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pKSB7CisgICAgICAg
IHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUgPSBbc2VsZiBib3VuZHNdOworICAgICAgICBBU1NF
UlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOworICAgICAgICBfZnVsbHNjcmVlbklu
dGVyZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKHNlbGYubW9kZWxWaWRlb0xheWVy
RnJhbWUpOworICAgIH0KKyAgICBbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0g
c2V0VHJhbnNmb3JtOkNHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHldOworICAgIAorICAgIFtDQVRy
YW5zYWN0aW9uIGNvbW1pdF07Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9HcmF2aXR5OihOU1N0cmlu
ZyAqKXZpZGVvR3Jhdml0eQoreworICAgIF92aWRlb0dyYXZpdHkgPSB2aWRlb0dyYXZpdHk7Cisg
ICAgCisgICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCisgICAgICAgIHJl
dHVybjsKKworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkg
Z3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3Q7CisgICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5
UmVzaXplKCkpCisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXll
clZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpKQorICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNl
IGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZp
bGwoKSkKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgCisgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2Rl
bCgpKTsKKyAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckdy
YXZpdHkoZ3Jhdml0eSk7Cit9CisKKy0gKE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Cit7CisgICAg
cmV0dXJuIF92aWRlb0dyYXZpdHkuZ2V0KCk7Cit9CisKKy0gKENHUmVjdCl2aWRlb1JlY3QKK3sK
KyAgICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0gMCB8fCBzZWxmLnZpZGVvRGlt
ZW5zaW9ucy5oZWlnaHQgPD0gMCkKKyAgICAgICAgcmV0dXJuIHNlbGYuYm91bmRzOworICAgIAor
ICAgIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCAv
IHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodDsKKworICAgIGlmIChbZ2V0QVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0p
CisgICAgICAgIHJldHVybiBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3Qodmlk
ZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOworICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdEZpbGwoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHld
KQorICAgICAgICByZXR1cm4gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2
aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisKKyAgICByZXR1cm4gc2VsZi5ib3VuZHM7
Cit9CisKKysgKE5TU2V0ICopa2V5UGF0aHNGb3JWYWx1ZXNBZmZlY3RpbmdWaWRlb1JlY3QKK3sK
KyAgICByZXR1cm4gW05TU2V0IHNldFdpdGhPYmplY3RzOkAidmlkZW9EaW1lbnNpb25zIiwgQCJ2
aWRlb0dyYXZpdHkiLCBuaWxdOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3IDogVUlWaWV3CitAZW5kCisKK3N0YXRpYyBDbGFzcyBX
ZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQor
eworICAgIHJldHVybiBbV2ViQVZQbGF5ZXJMYXllciBjbGFzc107Cit9CisKK3N0YXRpYyBXZWJB
VlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKmFsbG9jV2ViQVZQaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3SW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBDbGFzcyB0aGVDbGFz
cyA9IG5pbDsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF4geworICAgICAgICB0aGVDbGFzcyA9IG9iamNfYWxsb2Nh
dGVDbGFzc1BhaXIoZ2V0VUlWaWV3Q2xhc3MoKSwgIldlYkFWUGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyIsIDApOworICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNz
KTsKKyAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2JqY19nZXRNZXRhQ2xhc3MoIldlYkFWUGlj
dHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIpOworICAgICAgICBjbGFzc19hZGRNZXRob2Qo
bWV0YUNsYXNzLCBAc2VsZWN0b3IobGF5ZXJDbGFzcyksIChJTVApV2ViQVZQaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MsICJAQDoiKTsKKyAgICB9KTsKKyAgICAKKyAg
ICByZXR1cm4gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVt0aGVDbGFz
cyBhbGxvY107Cit9CisKK0BpbnRlcmZhY2UgV2ViQVZQbGF5ZXJMYXllclZpZXcgOiBfX0FWUGxh
eWVyTGF5ZXJWaWV3CitAcHJvcGVydHkgKHJldGFpbikgVUlWaWV3KiB2aWRlb1ZpZXc7CitAZW5k
CisKK3N0YXRpYyBDbGFzcyBXZWJBVlBsYXllckxheWVyVmlld19sYXllckNsYXNzKGlkLCBTRUwp
Cit7CisgICAgcmV0dXJuIFtXZWJBVlBsYXllckxheWVyIGNsYXNzXTsKK30KKworc3RhdGljIEFW
UGxheWVyQ29udHJvbGxlciAqV2ViQVZQbGF5ZXJMYXllclZpZXdfcGxheWVyQ29udHJvbGxlcihp
ZCBhU2VsZiwgU0VMKQoreworICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyID0g
YVNlbGY7CisgICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBs
YXllckxheWVyICopW3BsYXllckxheWVyIHBsYXllckxheWVyXTsKKyAgICByZXR1cm4gW3dlYkFW
UGxheWVyTGF5ZXIgcGxheWVyQ29udHJvbGxlcl07Cit9CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxh
eWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCwgQVZQbGF5ZXJD
b250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKQoreworICAgIF9fQVZQbGF5ZXJMYXllclZpZXcg
KnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxh
eWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5
ZXJdOworICAgIFt3ZWJBVlBsYXllckxheWVyIHNldFBsYXllckNvbnRyb2xsZXI6IHBsYXllckNv
bnRyb2xsZXJdOworfQorCitzdGF0aWMgVUlWaWV3ICpXZWJBVlBsYXllckxheWVyVmlld192aWRl
b1ZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJM
YXllciA9IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAo
V2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllciBwbGF5ZXJMYXllcl07CisgICAgQ0FMYXll
ciogdmlkZW9MYXllciA9IFt3ZWJBVlBsYXllckxheWVyIHZpZGVvU3VibGF5ZXJdOworICAgIGlm
ICghdmlkZW9MYXllciB8fCAhdmlkZW9MYXllci5kZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoW1t2aWRlb0xheWVyIGRlbGVnYXRlXSBpc0tpbmRPZkNsYXNzOmdldFVJ
Vmlld0NsYXNzKCldKTsKKyAgICByZXR1cm4gKFVJVmlldyAqKVt2aWRlb0xheWVyIGRlbGVnYXRl
XTsKK30KKworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3KGlk
IGFTZWxmLCBTRUwsIFVJVmlldyAqdmlkZW9WaWV3KQoreworICAgIF9fQVZQbGF5ZXJMYXllclZp
ZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFW
UGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVy
TGF5ZXJdOworICAgIFt3ZWJBVlBsYXllckxheWVyIHNldFZpZGVvU3VibGF5ZXI6W3ZpZGVvVmll
dyBsYXllcl1dOworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zdGFydFJv
dXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwgU0VM
KQoreworICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsK
KyAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2Vi
QVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW3BsYXllckxheWVyVmlldyBwaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKKworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBs
YXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxh
eWVyXTsKKyAgICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXll
ckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOworICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dyYXZp
dHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpXTsKKyAgICBbcGlwUGxheWVy
TGF5ZXIgc2V0VmlkZW9TdWJsYXllcjpwbGF5ZXJMYXllci52aWRlb1N1YmxheWVyXTsKKyAgICBb
cGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVvRGltZW5z
aW9uc107CisgICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpwbGF5ZXJMYXllci52
aWRlb0dyYXZpdHldOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFt
ZTpwbGF5ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJGcmFtZV07CisgICAgW3BpcFBsYXllckxheWVy
IHNldFBsYXllckNvbnRyb2xsZXI6cGxheWVyTGF5ZXIucGxheWVyQ29udHJvbGxlcl07CisgICAg
W3BpcFBsYXllckxheWVyIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6cGxheWVyTGF5ZXIuZnVsbHNj
cmVlbkludGVyZmFjZV07CisgICAgW3BpcFZpZXcgYWRkU3VidmlldzpwbGF5ZXJMYXllclZpZXcu
dmlkZW9WaWV3XTsKK30KKworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RvcFJv
dXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwgU0VM
KQoreworICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsK
KyAgICBpZiAoVUlWaWV3ICp2aWRlb1ZpZXcgPSBwbGF5ZXJMYXllclZpZXcudmlkZW9WaWV3KQor
ICAgICAgICBbcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKKyAgICBXZWJB
VlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3XTsKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9
IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAg
V2ViQVZQbGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtw
aXBWaWV3IGxheWVyXTsKKyAgICBbcGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6
cGlwUGxheWVyTGF5ZXIubW9kZWxWaWRlb0xheWVyRnJhbWVdOworfQorCitzdGF0aWMgV2ViQVZQ
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpXZWJBVlBsYXllckxheWVyVmlld19waWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCit7CisgICAgV2ViQVZQ
bGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFdlYkFWUGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IFtwbGF5ZXJMYXllclZpZXcgdmFs
dWVGb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOworICAgIGlmICgh
cGlwVmlldykgeworICAgICAgICBwaXBWaWV3ID0gW2FsbG9jV2ViQVZQaWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3SW5zdGFuY2UoKSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm9dOworICAg
ICAgICBbcGxheWVyTGF5ZXJWaWV3IHNldFZhbHVlOnBpcFZpZXcgZm9yS2V5OkAiX3BpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKKyAgICB9CisgICAgcmV0dXJuIHBpcFZpZXc7Cit9
CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MoaWQgYVNlbGYsIFNF
TCkKK3sKKyAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7
CisgICAgUmV0YWluUHRyPFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldz4gcGlw
VmlldyA9IGFkb3B0TlMoW3BsYXllckxheWVyVmlldyB2YWx1ZUZvcktleTpAIl9waWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3Il0pOworICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0VmFsdWU6
bmlsIGZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07CisgICAgb2Jq
Y19zdXBlciBzdXBlckNsYXNzIHsgcGxheWVyTGF5ZXJWaWV3LCBnZXRfX0FWUGxheWVyTGF5ZXJW
aWV3Q2xhc3MoKSB9OworICAgIGF1dG8gc3VwZXJfZGVhbGxvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCgqKShvYmpjX3N1cGVyKiwgU0VMKT4ob2JqY19tc2dTZW5kU3VwZXIpOworICAgIHN1cGVy
X2RlYWxsb2MoJnN1cGVyQ2xhc3MsIEBzZWxlY3RvcihkZWFsbG9jKSk7Cit9CisKKyNwcmFnbWEg
bWFyayAtIE1ldGhvZHMKKworc3RhdGljIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICphbGxvY1dlYkFW
UGxheWVyTGF5ZXJWaWV3SW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBDbGFzcyB0aGVDbGFzcyA9
IG5pbDsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRj
aF9vbmNlKCZvbmNlVG9rZW4sIF4geworICAgICAgICB0aGVDbGFzcyA9IG9iamNfYWxsb2NhdGVD
bGFzc1BhaXIoZ2V0X19BVlBsYXllckxheWVyVmlld0NsYXNzKCksICJXZWJBVlBsYXllckxheWVy
VmlldyIsIDApOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcihk
ZWFsbG9jKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19kZWFsbG9jLCAidkA6Iik7CisgICAg
ICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHNldFBsYXllckNvbnRyb2xs
ZXI6KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zZXRQbGF5ZXJDb250cm9sbGVyLCAidkA6
QCIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihwbGF5ZXJD
b250cm9sbGVyKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19wbGF5ZXJDb250cm9sbGVyLCAi
QEA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHNldFZp
ZGVvVmlldzopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFZpZGVvVmlldywgInZAOkAi
KTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IodmlkZW9WaWV3
KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld192aWRlb1ZpZXcsICJAQDoiKTsKKyAgICAgICAg
Y2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc3RhcnRSb3V0aW5nVmlkZW9Ub1Bp
Y3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3
X3N0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAidkA6
Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHN0b3BSb3V0
aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxh
eWVyTGF5ZXJWaWV3X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXcsICJ2QDoiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0
b3IocGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXll
clZpZXdfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgIkBAOiIpOworICAgICAgICAK
KyAgICAgICAgY2xhc3NfYWRkSXZhcih0aGVDbGFzcywgIl9waWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3Iiwgc2l6ZW9mKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAq
KSwgbG9nMihzaXplb2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopKSwg
IkAiKTsKKyAgICAgICAgCisgICAgICAgIG9iamNfcmVnaXN0ZXJDbGFzc1BhaXIodGhlQ2xhc3Mp
OworICAgICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFDbGFzcygiV2ViQVZQbGF5
ZXJMYXllclZpZXciKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1ldGFDbGFzcywgQHNlbGVj
dG9yKGxheWVyQ2xhc3MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MsICJA
QDoiKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKFdlYkFWUGxheWVyTGF5ZXJWaWV3ICopW3RoZUNs
YXNzIGFsbG9jXTsKK30KKworUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCit7CisgICAgUmVmPFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgIFtpbnRl
cmZhY2UtPm1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJm
YWNlOmludGVyZmFjZS5wdHIoKV07CisgICAgcmV0dXJuIGludGVyZmFjZTsKK30KKworVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisg
ICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Up
CisgICAgLCBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWUGxh
eWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pKQorICAgICwgbV93YXRjaGRv
Z1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQpCit7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKQoreworICAgIFdlYkFWUGxh
eWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IHRoaXMtPnBsYXllckNvbnRyb2xsZXIo
KTsKKyAgICBpZiAocGxheWVyQ29udHJvbGxlciAmJiBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFs
UGxheWJhY2tBY3RpdmUpCisgICAgICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGZhbHNlLCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUsICIiKTsKKyAgICBpZiAobV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3Zl
Q2xpZW50KCp0aGlzKTsKK30KKworV2ViQVZQbGF5ZXJDb250cm9sbGVyICpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6cGxheWVyQ29udHJvbGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5ZXJDb250cm9sbGVyKCk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNjcmVlbk1vZGVs
KFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKK3sKKyAgICBpZiAobV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0
aGlzKTsKKworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKKworICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5h
ZGRDbGllbnQoKnRoaXMpOworCisgICAgaGFzVmlkZW9DaGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5oYXNWaWRlbygpIDogZmFsc2UpOworICAg
IHZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnZpZGVvRGltZW5zaW9ucygpIDogRmxvYXRTaXplKCkpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCit7Cisg
ICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8p
Cit7CisgICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlkZW9d
OworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0SGFzVmlkZW86aGFzVmlkZW9dOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIFdlYkFWUGxheWVyTGF5
ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcg
cGxheWVyTGF5ZXJdOworCisgICAgW3BsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczp2aWRl
b0RpbWVuc2lvbnNdOworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0Q29udGVudERpbWVuc2lv
bnM6dmlkZW9EaW1lbnNpb25zXTsKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0TmVlZHNMYXlv
dXRdOworCisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3
ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVttX3BsYXllckxheWVy
VmlldyBwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKKyAgICBXZWJBVlBsYXllckxh
eWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJd
OworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5ZXIudmlk
ZW9EaW1lbnNpb25zXTsKKyAgICBbcGlwVmlldyBzZXROZWVkc0xheW91dF07Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlLCBjb25zdCBTdHJpbmcmKQoreworICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRkZW46
ZW5hYmxlZF07Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxp
Y2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0
aGlzKTsKKyAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9y
ZWdyb3VuZCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwtPmlzVmlzaWJsZSgpKSB7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQ
aWN0dXJlSW5QaWN0dXJlXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHdl
IGFyZSBib3RoIGluIFBpUCBhbmQgaW4gRnVsbHNjcmVlbiAoaS5lLiwgdmlhIGF1dG8tUGlQKSwg
YW5kIHdlIGRpZCBub3Qgc3RvcCBmdWxsc2NyZWVuIHVwb24gcmV0dXJuaW5nLCBpdCBtdXN0IGJl
CisgICAgLy8gYmVjYXVzZSB0aGUgb3JpZ2luYXRpbmcgdmlldyBpcyBub3QgdmlzaWJsZSwgc28g
aGlkZSB0aGUgZnVsbHNjcmVlbiB3aW5kb3cuCisgICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCB8IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKSB7CisgICAgICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpO
TyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3Iq
KSB7CisgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgICAgICBb
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107CisgICAgICAgIH1d
OworICAgIH0KK30KKworQGludGVyZmFjZSBVSVdpbmRvdyAoKQorLSAoQk9PTClfaXNIb3N0ZWRJ
bkFub3RoZXJQcm9jZXNzOworQGVuZAorCitAaW50ZXJmYWNlIFVJVmlld0NvbnRyb2xsZXIgKCkK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHNldHRlcj1fc2V0SWdub3JlQXBwU3VwcG9y
dGVkT3JpZW50YXRpb25zOikgQk9PTCBfaWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOwor
QGVuZAorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3Jl
ZW4oVUlWaWV3JiB2aWRlb1ZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0
LCBVSVZpZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3sKKyAg
ICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpzZXR1cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisKKyAgICBtX2FsbG93c1BpY3R1cmVJ
blBpY3R1cmVQbGF5YmFjayA9IGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsKKworICAg
IFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0
aW9uczpZRVNdOworICAgIGJvb2wgaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlID0gaGFzTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJl
KTsKKyAgICBtX21vZGUgPSBtb2RlOworICAgIG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7Cisg
ICAgbV9wYXJlbnRXaW5kb3cgPSBwYXJlbnRWaWV3LndpbmRvdzsKKworICAgIGlmICghW1twYXJl
bnRWaWV3IHdpbmRvd10gX2lzSG9zdGVkSW5Bbm90aGVyUHJvY2Vzc10pIHsKKyAgICAgICAgaWYg
KCFtX3dpbmRvdykKKyAgICAgICAgICAgIG1fd2luZG93ID0gYWRvcHROUyhbYWxsb2NVSVdpbmRv
d0luc3RhbmNlKCkgaW5pdFdpdGhGcmFtZTpbW2dldFVJU2NyZWVuQ2xhc3MoKSBtYWluU2NyZWVu
XSBib3VuZHNdXSk7CisgICAgICAgIFttX3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJV
SUNvbG9yKCldOworICAgICAgICBpZiAoIW1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgICAgICBt
X3ZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NVSVZpZXdDb250cm9sbGVySW5zdGFuY2Uo
KSBpbml0XSk7CisgICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbbV93
aW5kb3cgYm91bmRzXV07CisgICAgICAgIFttX3ZpZXdDb250cm9sbGVyIF9zZXRJZ25vcmVBcHBT
dXBwb3J0ZWRPcmllbnRhdGlvbnM6WUVTXTsKKyAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3
Q29udHJvbGxlcjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgW21fd2luZG93IHNl
dFdpbmRvd0xldmVsOmdldFVJVGV4dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwo
KSArIDFdOworICAgICAgICBbbV93aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOworICAgIH0KKwor
ICAgIGlmICghbV9wbGF5ZXJMYXllclZpZXcpCisgICAgICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0g
YWRvcHROUyhbYWxsb2NXZWJBVlBsYXllckxheWVyVmlld0luc3RhbmNlKCkgaW5pdF0pOworICAg
IFttX3BsYXllckxheWVyVmlldyBzZXRIaWRkZW46W3BsYXllckNvbnRyb2xsZXIoKSBpc0V4dGVy
bmFsUGxheWJhY2tBY3RpdmVdXTsKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3Vu
ZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKworICAgIGlmICghaXNJblBpY3R1cmVJblBpY3R1cmVN
b2RlKSB7CisgICAgICAgIFttX3BsYXllckxheWVyVmlldyBzZXRWaWRlb1ZpZXc6JnZpZGVvVmll
d107CisgICAgICAgIFttX3BsYXllckxheWVyVmlldyBhZGRTdWJ2aWV3OiZ2aWRlb1ZpZXddOwor
ICAgIH0KKworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVy
TGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworCisgICAgW3BsYXllckxh
eWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgaW5pdGlhbFJlY3Qu
d2lkdGgoKSwgaW5pdGlhbFJlY3QuaGVpZ2h0KCkpXTsKKyAgICBbcGxheWVyTGF5ZXIgc2V0Vmlk
ZW9EaW1lbnNpb25zOltwbGF5ZXJDb250cm9sbGVyKCkgY29udGVudERpbWVuc2lvbnNdXTsKKyAg
ICBwbGF5ZXJMYXllci5mdWxsc2NyZWVuSW50ZXJmYWNlID0gdGhpczsKKworICAgIGlmICghbV9w
bGF5ZXJWaWV3Q29udHJvbGxlcikKKyAgICAgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IGFk
b3B0TlMoW2FsbG9jQVZQbGF5ZXJWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhQbGF5
ZXJMYXllclZpZXc6bV9wbGF5ZXJMYXllclZpZXcuZ2V0KCldKTsKKworICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107CisgICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICop
cGxheWVyQ29udHJvbGxlcigpXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxl
Z2F0ZTptX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOworICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHNldEFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazptX2FsbG93
c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFja107CisKKyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNl
dFBpY3R1cmVJblBpY3R1cmVQb3NzaWJsZTptX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFj
a107CisKKyAgICBpZiAobV92aWV3Q29udHJvbGxlcikgeworICAgICAgICBbbV92aWV3Q29udHJv
bGxlciBhZGRDaGlsZFZpZXdDb250cm9sbGVyOm1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCld
OworICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gYWRkU3VidmlldzpbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XV07CisgICAgfSBlbHNlCisgICAgICAgIFtwYXJlbnRWaWV3IGFk
ZFN1YnZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld11dOworCisgICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbcGFyZW50VmlldyBjb252ZXJ0UmVjdDppbml0
aWFsUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsK
KworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6
Y2xlYXJVSUNvbG9yKCldOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRB
dXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUJvdHRvbU1hcmdpbiB8
IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlUmlnaHRNYXJnaW4pXTsKKworICAgIFtbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXROZWVkc0xheW91dF07CisgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKKworICAgIFtDQVRyYW5zYWN0aW9u
IGNvbW1pdF07CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIt
PmRpZFNldHVwRnVsbHNjcmVlbigpOworICAgIH0pOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVu
LCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0
aGlzKTsKKworICAgIG1fZXhpdENvbXBsZXRlZCA9IGZhbHNlOworICAgIG1fZXhpdFJlcXVlc3Rl
ZCA9IGZhbHNlOworICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSB0cnVlOworCisgICAgaWYgKG1vZGUo
KSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5Q
aWN0dXJlKQorICAgICAgICBlbnRlclBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICBlbHNlIGlmICht
b2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRh
cmQpCisgICAgICAgIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7CisgICAgZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoJXAp
IiwgdGhpcyk7CisgICAgCisgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVy
ZUluUGljdHVyZVBvc3NpYmxlXSkKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3Rh
cnRQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICBlbHNlCisgICAgICAgIGZhaWxlZFRvU3RhcnRQaWN0
dXJlSW5QaWN0dXJlKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCglcCkiLCB0
aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisKKyAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJl
SW5QaWN0dXJlQWN0aXZlXSkgeworICAgICAgICAvLyBOT1RFOiBUaGUgZnVsbHNjcmVlbiBtb2Rl
IHdpbGwgYmUgcmVzdG9yZWQgaW4gcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENv
bXBsZXRpb25IYW5kbGVyKCkuCisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hl
blN0b3BwaW5nUGlQID0gdHJ1ZTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3Rv
cFBpY3R1cmVJblBpY3R1cmVdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25I
YW5kbGVyOlt0aGlzLCBwcm90ZWN0ZWRUaGlzXSAoQk9PTCBzdWNjZWVkZWQsIE5TRXJyb3IqKSB7
CisgICAgICAgIFVOVVNFRF9QQVJBTShzdWNjZWVkZWQpOworICAgICAgICBMT0coRnVsbHNjcmVl
biwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFy
ZCAtIGxhbWJkYSglcCkgLSBzdWNjZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0cmluZyhzdWNjZWVk
ZWQpKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0Nv
bnRyb2xzOllFU107CisKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQor
ICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVl
bigpOworICAgIH1dOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpl
eGl0RnVsbHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCit7CisgICAg
bV93YXRjaGRvZ1RpbWVyLnN0b3AoKTsKKworICAgIG1fZXhpdFJlcXVlc3RlZCA9IHRydWU7Cisg
ICAgaWYgKG1fZXhpdENvbXBsZXRlZCkgeworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIpCisgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhp
dEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBMT0coRnVs
bHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbigl
cCkiLCB0aGlzKTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNr
Q29udHJvbHM6Tk9dOworICAgIAorICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZy
YW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJlY3QgdG9WaWV3OlttX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisKKyAgICBXZWJBVlBsYXllckxheWVy
ICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBs
YXllckxheWVyXTsKKyAgICBpZiAoW3BsYXllckxheWVyIHZpZGVvR3Jhdml0eV0gIT0gZ2V0QVZM
YXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpKQorICAgICAgICBbcGxheWVyTGF5ZXIgc2V0
VmlkZW9HcmF2aXR5OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKV07CisgICAg
W1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKKworICAgIGlm
IChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSkpIHsKKyAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3Rv
cHBpbmdQaVAgPSBmYWxzZTsKKyAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAg
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICB9
IGVsc2UgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVQaWN0dXJlSW5QaWN0dXJlIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlU3RhbmRhcmQpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVj
dGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBjbGVhck1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAg
ICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgICAgICAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAgICAgIH1dOworICAgIH0g
ZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVN0YW5kYXJkKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRU
aGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgIG1fZXhpdENvbXBsZXRl
ZCA9IHRydWU7CisKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAgICAg
ICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgICAgICAgICBb
bV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKyAg
ICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29s
b3I6Y2xlYXJVSUNvbG9yKCldOworICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsK
KworICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIHRoaXNdKCkgeworICAgICAgICAgICAgICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fV07CisgICAgfTsKK30KKworQGludGVyZmFjZSBVSUFwcGxpY2F0aW9uICgpCistICh2b2lkKV9z
ZXRTdGF0dXNCYXJPcmllbnRhdGlvbjooVUlJbnRlcmZhY2VPcmllbnRhdGlvbilvOworQGVuZAor
CitAaW50ZXJmYWNlIFVJV2luZG93ICgpCistIChVSUludGVyZmFjZU9yaWVudGF0aW9uKWludGVy
ZmFjZU9yaWVudGF0aW9uOworQGVuZAorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Cisg
ICAgaWYgKG1fd2luZG93KSB7CisgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAg
ICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOworICAgICAgICBpZiAo
bV9wYXJlbnRXaW5kb3cpCisgICAgICAgICAgICBbW2dldFVJQXBwbGljYXRpb25DbGFzcygpIHNo
YXJlZEFwcGxpY2F0aW9uXSBfc2V0U3RhdHVzQmFyT3JpZW50YXRpb246W21fcGFyZW50V2luZG93
IGludGVyZmFjZU9yaWVudGF0aW9uXV07CisgICAgfQorICAgIAorICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
c2V0UGxheWVyQ29udHJvbGxlcjpuaWxdOworICAgIAorICAgIGlmIChoYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQorICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAg
aWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpKQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFu
aW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltdIChCT09MLCBOU0Vycm9yICopIHsgfV07Cisg
ICAgCisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHJlbW92ZUZyb21TdXBlcnZp
ZXddOworICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciByZW1vdmVGcm9tUGFyZW50Vmlld0NvbnRyb2xsZXJdOworICAgIAorICAgIFttX3Bs
YXllckxheWVyVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBbW21fdmlld0NvbnRyb2xs
ZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBtX3BsYXllckxheWVyVmlldyA9
IG5pbDsKKyAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gbmlsOworICAgIG1fd2luZG93ID0g
bmlsOworICAgIG1fcGFyZW50VmlldyA9IG5pbDsKKyAgICBtX3BhcmVudFdpbmRvdyA9IG5pbDsK
KyAgICAKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOworCisgICAgbV9l
bnRlclJlcXVlc3RlZCA9IGZhbHNlOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmls
OworICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gbmlsOworICAgIAorICAgIGNsZWFu
dXBGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlmICghbV9lbnRlclJlcXVl
c3RlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKwor
ICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gc2V0SGlkZGVuOllFU107CisKKyAgICBpZiAocGxheWJhY2tTZXNzaW9uTW9kZWwo
KSAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsICYmICFtX2V4aXRSZXF1ZXN0ZWQpIHsKKyAgICAg
ICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKKyAgICAgICAgbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwg
Y29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApIC0g
dmlzaWJsZSglcykiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpKTsKKyAgICBpZiAobV9wcmVw
YXJlVG9JbmxpbmVDYWxsYmFjaykgeworICAgICAgICAKKyAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmlubGluZVJl
Y3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisKKyAg
ICAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURk1vdmUobV9wcmVw
YXJlVG9JbmxpbmVDYWxsYmFjayk7CisgICAgICAgIGNhbGxiYWNrKHZpc2libGUpOworICAgIH0K
K30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAoreworICAgIHJldHVybiBbcGxheWVy
Q29udHJvbGxlcigpIGlzUGxheWluZ10gJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkICYmIHN1cHBvcnRzUGljdHVyZUluUGljdHVy
ZSgpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQor
eworICAgIG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKKyAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgp
Cit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBzZXRNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJ
blBpY3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNr
Z3JvdW5kXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29u
dHJvbHM6WUVTXTsKKworICAgIGlmIChtX21vZGUgJiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgeworICAgICAgICBpZiAoIVttX3BsYXllclZpZXdD
b250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3Vu
ZF0pIHsKKyAgICAgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRU
aGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgICAgICBbbV93aW5kb3cg
c2V0SGlkZGVuOllFU107CisgICAgICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVy
IHZpZXddIHNldEhpZGRlbjpZRVNdOworICAgICAgICAgICAgfV07CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgIFtbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKKyAgICB9CisKKyAgICBp
ZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKQoreworICAg
IExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRv
U3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworCisgICAgaWYgKGhhc01vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOworCisgICAgaWYgKG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5N
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBp
Y3R1cmUoKQoreworICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQ
ID0gZmFsc2U7CisgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9y
ZWdyb3VuZCA9IGZhbHNlOworCisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAg
IGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0
YW5kYXJkKSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgW1tt
X3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107CisKKyAgICBpZiAobV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZU5vbmUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRT
dG9wUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7
CisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVT
dG9wKSB7CisgICAgICAgIC8vIEFTU1VNUFRJT046IHdlIGFyZSBleGl0aW5nIHBpcCBiZWNhdXNl
IHdlIGFyZSBlbnRlcmluZyBmdWxsc2NyZWVuCisgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwor
CisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3Io
KV07CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xv
cjpjbGVhclVJQ29sb3IoKV07CisKKyAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgCisgICAgaWYgKG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25I
YW5kbGVyKHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCit7CisgICAg
TE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZv
clBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMpOwor
ICAgIGlmIChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB8fCBtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kKSB7CisgICAgICAg
IG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7CisgICAg
ICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBm
YWxzZTsKKyAgICAgICAgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0
b3AgPSB0cnVlOworCisgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgICAgICBb
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKKworICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxl
dGlvbkhhbmRsZXI6XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBtX3Jl
c3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IGZhbHNlOworICAgICAg
ICAgICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsKKyAgICAg
ICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICBt
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisgICAgICAg
IH1dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJldGFpblB0cjxpZD4g
c3Ryb25nQ29tcGxldGlvbkhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5
XSk7CisgICAgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFtwcm90ZWN0ZWRUaGlzLCBzdHJv
bmdDb21wbGV0aW9uSGFuZGxlcl0oYm9vbCByZXN0b3JlZCkgIHsKKyAgICAgICAgTE9HKEZ1bGxz
Y3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJ
blBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyIGxhbWJkYSglcCkgLSByZXN0b3JlZCgl
cykiLCBwcm90ZWN0ZWRUaGlzLmdldCgpLCBib29sU3RyaW5nKHJlc3RvcmVkKSk7CisgICAgICAg
IHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkgPSBzdHJvbmdDb21wbGV0
aW9uSGFuZGxlci5nZXQoKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdG9yZWQpOwor
ICAgIH0pOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRF
eGl0RnVsbHNjcmVlbldpdGhSZWFzb24oVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4
aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKK3sKKyAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlYXNvbiA9PSBFeGl0RnVs
bFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVy
aW5nQmFja2dyb3VuZF0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9z
aG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBoYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgY2xl
YXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHBsYXliYWNrU2Vzc2lv
bk1vZGVsKCkgJiYgKHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRh
cHBlZCB8fCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9w
RXZlbnRSZWNlaXZlZCkpCisgICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7
CisgICAgCisgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUsIHJlYXNvbiA9
PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZCk7CisKKyAgICBpZiAoIW1f
d2F0Y2hkb2dUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRP
bmVTaG90KGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCglcCkgLSBu
byBleGl0IGZ1bGxzY3JlZW4gcmVzcG9uc2UgaW4gJWdzOyBmb3JjaW5nIGZ1bGxzY3JlZW4gaGlk
ZGVuLiIsIHRoaXMsIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwudmFsdWUoKSk7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7CisgICAg
aWYgKG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUgPSBu
ZXdNb2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7Cisg
ICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUg
PSBuZXdNb2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwor
I2VuZGlmIC8vIEhBVkUoQVZLSVQpCisKK2Jvb2wgV2ViQ29yZTo6c3VwcG9ydHNQaWN0dXJlSW5Q
aWN0dXJlKCkKK3sKKyNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpCisgICAgcmV0dXJu
IFtnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyQ2xhc3MoKSBpc1BpY3R1cmVJblBpY3R1
cmVTdXBwb3J0ZWRdOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJBVlBsYXllckNvbnRyb2xsZXIuaAppbmRleCBlNWNmZjEyYmJhZmFlNjkxMTgzMTI3YmYy
ODBmYTkzY2U5MGYyNTEyLi4xYjEwZmJhMGQ0MjE5ZjA5MWY3M2I4Yzc5NzA2MDRiYjVkMjBjMGVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29u
dHJvbGxlci5oCkBAIC0yOCw4ICsyOCw4IEBACiAjaW1wb3J0ICJBVktpdFNQSS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9k
ZWw7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDsKIH0KIAogQGludGVyZmFj
ZSBXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uIDogTlNPYmplY3QKQEAgLTQ0LDggKzQ0LDggQEAg
Y2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ7CiB9CiAKIEBwcm9wZXJ0eSAo
cmV0YWluKSBBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXJQcm94eTsKLUBwcm9w
ZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogZGVsZWdhdGU7
Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQqIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJD
b3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbCogZGVsZWdhdGU7CitAcHJvcGVydHkgKGFzc2lnbikg
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQqIHBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZTsKIAogQHByb3BlcnR5IChyZWFkb25seSkgQk9PTCBjYW5TY2FuRm9yd2FyZDsKIEBw
cm9wZXJ0eSBCT09MIGNhblNjYW5CYWNrd2FyZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tCmluZGV4IDZiZmM1Y2ExYWEyNmIy
M2U1ZThhNDdhMmY2OGMyMjg3ZjMxOGFhMDEuLjg1MDMwNmFjMTVlZDBhMThiYzhmMTdiNGYyYjdh
NjRjMTBkZWQzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJB
VlBsYXllckNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YkFWUGxheWVyQ29udHJvbGxlci5tbQpAQCAtMzEsOSArMzEsOSBAQAogCiAjaW1wb3J0ICJBVktp
dFNQSS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0
ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91
bmRhdGlvbi9BVlRpbWUuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbXBvcnQg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIzN2Q0ZTU2MzE4OTEwMTBhYThhN2JhNWRiOTY5ODE2
MmMyN2NkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JN
KElPUykKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgi
Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxvYmpjL29iamMuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0KLU9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9sbGVyOwotT0JK
Q19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBVSVZpZXdDb250cm9s
bGVyOwotT0JKQ19DTEFTUyBVSVdpbmRvdzsKLU9CSkNfQ0xBU1MgVUlWaWV3OwotCi1uYW1lc3Bh
Y2UgV1RGIHsKLWNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
SW50UmVjdDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOwotY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uQ2hhbmdlT2JzZXJ2ZXI7Ci0KLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ci0gICAgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAg
ICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiB7
Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQo
bW9kZWwpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQoKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9Ci0KLSAgICAv
LyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
c2V0TWVkaWFTdGF0ZSgpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUp
IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIG92ZXJyaWRlOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBs
YXliYWNrUmF0ZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWVrYWJsZVJh
bmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxv
Y2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIFdlYkFWUGxheWVy
Q29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyQ29u
dHJvbGxlci5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKLQot
ICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29udHJvbGxlcjsK
LSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51
bGxwdHIgfTsKLX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkMTZkYjFlZjRkZGZhM2VmYjA1M2Vl
MGY4NTBiOTU5YmZlMmIzNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotCi0j
aWYgUExBVEZPUk0oSU9TKQotI2lmIEhBVkUoQVZLSVQpCi0KLSNpbXBvcnQgIkFWS2l0U1BJLmgi
Ci0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgot
I2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgi
Ci0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2ltcG9ydCA8QVZGb3VuZGF0
aW9uL0FWVGltZS5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbXBvcnQg
IkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZL
aXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Oldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBt
b2RlbCkKLSAgICA6IG1fcGxheWVyQ29udHJvbGxlcihhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250
cm9sbGVyIGFsbG9jXSBpbml0XSkpCi0gICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2Rl
bCkKLXsKLSAgICBtb2RlbC5hZGRDbGllbnQoKnRoaXMpOwotICAgIFttX3BsYXllckNvbnRyb2xs
ZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOnRoaXNdOwotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0RGVsZWdhdGU6Jm1vZGVsXTsKLQotICAgIGR1cmF0aW9uQ2hhbmdlZChtb2RlbC5k
dXJhdGlvbigpKTsKLSAgICBjdXJyZW50VGltZUNoYW5nZWQobW9kZWwuY3VycmVudFRpbWUoKSwg
W1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICBidWZmZXJl
ZFRpbWVDaGFuZ2VkKG1vZGVsLmJ1ZmZlcmVkVGltZSgpKTsKLSAgICByYXRlQ2hhbmdlZChtb2Rl
bC5pc1BsYXlpbmcoKSwgbW9kZWwucGxheWJhY2tSYXRlKCkpOwotICAgIHNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChtb2RlbC5zZWVrYWJsZVJhbmdlcygpLCBtb2RlbC5zZWVrYWJsZVRpbWVSYW5nZXNM
YXN0TW9kaWZpZWRUaW1lKCksIG1vZGVsLmxpdmVVcGRhdGVJbnRlcnZhbCgpKTsKLSAgICBjYW5Q
bGF5RmFzdFJldmVyc2VDaGFuZ2VkKG1vZGVsLmNhblBsYXlGYXN0UmV2ZXJzZSgpKTsKLSAgICBh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobW9kZWwuYXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnMoKSwgbW9kZWwuYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucygpLCBtb2RlbC5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpOwotICAgIGV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKG1vZGVsLmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCksIG1vZGVs
LmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tMb2Nh
bGl6ZWREZXZpY2VOYW1lKCkpOwotICAgIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChtb2RlbC53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpKTsKLX0KLQotV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdCgpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2U6bnVsbHB0cl07Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRFeHRlcm5hbFBsYXli
YWNrQWN0aXZlOmZhbHNlXTsKLQotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmVzZXRNZWRpYVN0YXRlKCkKLXsKLSAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHJlc2V0TWVkaWFTdGF0ZV07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCi17
Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJD
b250cm9sbGVyLmdldCgpOwotCi0gICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb24g
PSBkdXJhdGlvbjsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbldpdGhpbkVu
ZFRpbWVzID0gZHVyYXRpb247Ci0KLSAgICAvLyBGSVhNRTogd2UgdGFrZSB0aGlzIGFzIGFuIGlu
ZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KLSAgICBwbGF5ZXJDb250cm9sbGVyLmNh
blBsYXkgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5jYW5QYXVzZSA9IFlFUzsKLSAgICBw
bGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwotICAgIHBsYXllckNvbnRy
b2xsZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIuY2FuU2Vl
ayA9IFlFUzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJvbGxl
clN0YXR1c1JlYWR5VG9QbGF5OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5j
aG9yVGltZSkKLXsKLSAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW21fcGxh
eWVyQ29udHJvbGxlciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7Ci0gICAgQVZWYWx1ZVRpbWlu
ZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hv
clZhbHVlOmN1cnJlbnRUaW1lCi0gICAgICAgIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3Rh
bXAgcmF0ZTowXTsKLQotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0VGltaW5nOnRpbWluZ107
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGlt
ZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBXZWJBVlBsYXllckNvbnRyb2xs
ZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAgZG91
YmxlIGR1cmF0aW9uID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb247Ci0gICAgZG91
YmxlIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWU7Ci0gICAgaWYgKCFkdXJhdGlvbikKLSAgICAgICAg
bm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IDA7Ci0gICAgZWxzZQotICAgICAgICBub3JtYWxpemVk
QnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247Ci0gICAgcGxheWVyQ29udHJv
bGxlci5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVkQnVmZmVyZWRUaW1lKV07
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVDaGFuZ2Vk
KGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17Ci0gICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5nZXNDaGFuZ2Vk
KGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gc2Vla2FibGVSYW5nZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRd
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBp
KyspIHsKLSAgICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJhbmdlcy5zdGFydChpKS5yZWxlYXNl
UmV0dXJuVmFsdWUoKTsKLSAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMuZW5kKGkpLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpOwotCi0gICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01UaW1l
UmFuZ2VNYWtlKENNVGltZU1ha2VXaXRoU2Vjb25kcyhzdGFydCwgMTAwMCksIENNVGltZU1ha2VX
aXRoU2Vjb25kcyhlbmQtc3RhcnQsIDEwMDApKTsKLSAgICAgICAgW3NlZWthYmxlUmFuZ2VzIGFk
ZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOwotICAgIH0KLQot
ICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnNlZWthYmxlUmFu
Z2VzLmdldCgpXTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdl
c0xhc3RNb2RpZmllZFRpbWU6IGxhc3RNb2RpZmllZFRpbWVdOwotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0TGl2ZVVwZGF0ZUludGVydmFsOmxpdmVVcGRhdGVJbnRlcnZhbF07Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNo
YW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKLX0KLQotc3RhdGljIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBvcHRpb24g
OiBvcHRpb25zKSB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9u
PiB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxvY10g
aW5pdF0pOwotICAgICAgICBbd2ViT3B0aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9wdGlv
bi5kaXNwbGF5TmFtZV07Ci0gICAgICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24u
Z2V0KCldOwotICAgIH0KLSAgICByZXR1cm4gd2ViT3B0aW9uczsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRp
b25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07Ci0g
ICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCi0gICAgICAgIFttX3Bs
YXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9w
dGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4
KV1dOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRp
b25zKTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07Ci0gICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0
aW9ucyBjb3VudF0pCi0gICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19j
YXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRh
cmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBBVlBs
YXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZSBleHRlcm5hbFBsYXliYWNrVHlwZSA9
IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlTm9uZTsKLSAgICBpZiAodGFy
Z2V0VHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCi0g
ICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQ
bGF5YmFja1R5cGVBaXJQbGF5OwotICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCkKLSAgICAgICAgZXh0ZXJuYWxQbGF5YmFj
a1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0OwotCi0g
ICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250
cm9sbGVyLmdldCgpOwotICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBs
YXlEZXZpY2VMb2NhbGl6ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKLSAgICBwbGF5ZXJD
b250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7Ci0g
ICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXRBbGxvd3NFeHRlcm5hbFBsYXliYWNrOiFkaXNhYmxlZF07Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVk
KQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0TXV0ZWQ6bXV0ZWRdOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBp
ZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Bs
YXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bnVsbHB0cl07Ci0gICAgbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
ID0gbnVsbHB0cjsKLX0KLQotfQotCi0jZW5kaWYgLy8gSEFWRShBVktJVCkKLSNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQppbmRleCBlYmM5YTY3
NjY0MWM5NzlhYjc4M2EwZGUxY2Q1MTBlNGVmOTgzZDE2Li4yNjg0ZGRkYjJmZjI5MTc3YWQ5NGI3
N2VlMDJhNDE3NzZlMmQ3NWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KQEAg
LTMxLDEzICszMSwxMyBAQAogCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYVNl
bGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCiAjaW1wb3J0
ICJRdWFydHpDb3JlU1BJLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
IgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKKyNpbXBv
cnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9y
dCA8VUlLaXQvVUlWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgpAQCAtOTIs
MjQgKzkyLDI0IEBAIHN0YXRpYyBJbnRSZWN0IGVsZW1lbnRSZWN0SW5XaW5kb3coSFRNTFZpZGVv
RWxlbWVudCogdmlkZW9FbGVtZW50KQogICAgIHJldHVybiB2aWV3LT5jb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKIH0KIAotY2xh
c3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ7CitjbGFzcyBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDsKIAogQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyIChkZWxlZ2F0ZSkKLS0odm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dDsKKy0odm9pZClkaWRGaW5pc2hG
dWxsc2NyZWVuOihWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dDsKIEBl
bmQKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQgZmluYWwKLSAg
ICA6IHByaXZhdGUgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICAsIHByaXZhdGUgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHByaXZhdGUgV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIKLSAgICAsIHByaXZhdGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKLSAg
ICAsIHByaXZhdGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
eworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQgZmluYWwKKyAgICA6IHBy
aXZhdGUgVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICAsIHByaXZhdGUgVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQKKyAgICAsIHByaXZhdGUgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIK
KyAgICAsIHByaXZhdGUgUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICAsIHByaXZhdGUgUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gewogCiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gY3JlYXRlKCkKKyAgICBz
dGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBjcmVhdGUoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRDb250cm9sbGVyKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpIHsgbV9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsgfQpAQCAtMTE5LDIyICsxMTksMjIgQEAgcHVibGljOgogICAgIHZvaWQgaW52
YWxpZGF0ZSgpOwogCiBwcml2YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0KCkgeyB9CisgICAgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQoKSB7IH0K
IAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisgICAgLy8gVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKICAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92
ZXJyaWRlOwogICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyB9CiAgICAg
dm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ2xlYW51cEZ1
bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAg
ICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAogICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2Vk
KGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBG
bG9hdFNpemUmKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0g
ICAgdm9pZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYp
IG92ZXJyaWRlOworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisgICAgdm9pZCBhZGRDbGll
bnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92
ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQg
cGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKICAgICB2b2lkIHRv
Z2dsZVBsYXlTdGF0ZSgpIG92ZXJyaWRlOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0b2dnbGVNdXRlZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkg
ZmluYWw7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIC8vIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91Ymxl
KSBvdmVycmlkZTsKICAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRp
bWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGJ1ZmZlcmVkVGltZUNo
YW5nZWQoZG91YmxlKSBvdmVycmlkZTsKQEAgLTE3OSwzOSArMTc5LDM5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZv
aWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRl
OwogICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJs
ZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwg
Y29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmlj
ZU5hbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRD
aGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIG92ZXJy
aWRlOwogCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICB2b2lkIGFkZENsaWVu
dChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVt
b3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAg
Ly8gVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVl
bk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZp
bmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VmlkZW9MYXll
ckZyYW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0
eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKKyAgICB2
b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZp
dHkpIG92ZXJyaWRlOwogICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc1Zp
c2libGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlOwogICAg
IGJvb2wgaXNNdXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSGFzaFNldDxXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fcGxheWJhY2tDbGllbnRzOwotICAgIEhhc2hTZXQ8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2Z1bGxzY3JlZW5DbGllbnRzOwotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtX2Z1bGxzY3JlZW5N
b2RlbDsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1f
cGxheWJhY2tNb2RlbDsKKyAgICBIYXNoU2V0PFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4g
bV9wbGF5YmFja0NsaWVudHM7CisgICAgSGFzaFNldDxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVu
dCo+IG1fZnVsbHNjcmVlbkNsaWVudHM7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IG1fZnVsbHNjcmVlbk1vZGVsOworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudD4gbV9wbGF5YmFja01vZGVsOwogICAgIFJlZlB0cjxIVE1MVmlk
ZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRhaW5QdHI8VUlWaWV3PiBtX3ZpZGVv
RnVsbHNjcmVlblZpZXc7CiAgICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXI+IG1fY29udHJvbGxlcjsKIH07CiAKLSNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcgorI3ByYWdtYSBtYXJrIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVs
bHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1
cEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIFJldGFpblB0
cjxDQUxheWVyPiB2aWRlb0Z1bGxzY3JlZW5MYXllciA9IFttX3ZpZGVvRnVsbHNjcmVlblZpZXcg
bGF5ZXJdOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0
ZWRUaGlzLCB0aGlzLCB2aWRlb0Z1bGxzY3JlZW5MYXllcl0gewogICAgICAgICBbdmlkZW9GdWxs
c2NyZWVuTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29s
b3I6OnRyYW5zcGFyZW50KV07CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcih2aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgW3Byb3RlY3RlZFRoaXMs
IHRoaXNdIHsKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVu
KCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwog
ICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBtX2Z1bGxz
Y3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsLCBbcHJvdGVjdGVkVGhpcywg
dGhpc10gewogICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKQEAgLTIzNSwxNSArMjM1LDE1IEBAIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKCkK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwotICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxscHRyKTsK
LSAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIobnVs
bHB0cik7CisgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIp
OworICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxs
cHRyKTsKICAgICBtX2ludGVyZmFjZSA9IG51bGxwdHI7CiAgICAgbV92aWRlb0Z1bGxzY3JlZW5W
aWV3ID0gbmlsOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3By
b3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKG5pbCk7CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRl
b0VsZW1lbnQobnVsbHB0cik7CkBAIC0yNTYsMTAgKzI1NiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCiAgICAgfSk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3Jl
ZW5NYXlSZXR1cm5Ub0lubGluZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0
ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIEludFJlY3QgY2xpZW50UmVjdCA9IGVsZW1lbnRSZWN0
SW5XaW5kb3cobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY2xpZW50UmVj
dF0gewpAQCAtMjY4LDEyICsyNjgsMTIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKICAgICB9KTsKIH0KIAot
I3ByYWdtYSBtYXJrIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisjcHJhZ21hIG1hcmsg
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVy
YXRpb24pCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgZHVyYXRpb25dIHsKICAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7CiAgICAgICAgIH0pOwpAQCAtMjg0
LDEwICsyODQsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKICAgICAgICAgY2xpZW50LT5kdXJhdGlv
bkNoYW5nZWQoZHVyYXRpb24pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJl
bnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQogewog
ICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lXSB7CiAgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hvclRpbWUp
OwogICAgICAgICB9KTsKQEAgLTI5OCwxMCArMjk4LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRp
bWUsCiAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNo
b3JUaW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVy
ZWRUaW1lKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGJ1ZmZlcmVkVGltZV0gewogICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwogICAgICAg
ICB9KTsKQEAgLTMxMiwxMCArMzEyLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltCiAgICAg
ICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlz
UGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZV0gewogICAgICAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUp
OwogICAgICAgICB9KTsKQEAgLTMyNiwxMCArMzI2LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBw
bGF5CiAgICAgICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRl
b0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewogICAgIGlmIChXZWJUaHJl
YWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMs
IGhhc1ZpZGVvXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5oYXNWaWRlb0NoYW5nZWQo
aGFzVmlkZW8pOwogICAgICAgICB9KTsKQEAgLTM0MCwxMCArMzQwLDEwIEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1Zp
ZGVvKQogICAgICAgICBjbGllbnQtPmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0No
YW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0
U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkg
ewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRGltZW5zaW9u
cyA9IHZpZGVvRGltZW5zaW9uc10gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+dmlkZW9E
aW1lbnNpb25zQ2hhbmdlZCh2aWRlb0RpbWVuc2lvbnMpOwogICAgICAgICB9KTsKQEAgLTM1NCwx
MCArMzU0LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplCiAgICAgICAgIGNsaWVudC0+dmlk
ZW9EaW1lbnNpb25zQ2hhbmdlZCh2aWRlb0RpbWVuc2lvbnMpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3Qg
VGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBs
aXZlVXBkYXRlSW50ZXJ2YWwpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91
YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCiB7CiAgICAg
aWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJv
dGVjdGVkVGhpcywgcGxhdGZvcm1UaW1lUmFuZ2VzID0gdGltZVJhbmdlcy5yYW5nZXMoKSwgbGFz
dE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsXSB7CiAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQoVGltZVJhbmdlczo6Y3JlYXRlKHBsYXRmb3Jt
VGltZVJhbmdlcyksIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7CiAgICAg
ICAgIH0pOwpAQCAtMzY4LDEwICszNjgsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMKICAg
ICAgICAgY2xpZW50LT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1vZGlm
aWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBs
YXlGYXN0UmV2ZXJzZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCiB7CiAgICAg
aWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJv
dGVjdGVkVGhpcywgY2FuUGxheUZhc3RSZXZlcnNlXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7CiAgICAg
ICAgIH0pOwpAQCAtMzkxLDEwICszOTEsMTAgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gaXNvbGF0ZWRDb3B5KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGkKICAg
ICByZXR1cm4gb3B0aW9uc0NvcHk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3Vy
cmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgb3B0aW9u
cyA9IGlzb2xhdGVkQ29weShvcHRpb25zKSwgc2VsZWN0ZWRJbmRleF0gewogICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMs
IHNlbGVjdGVkSW5kZXgpOwogICAgICAgICB9KTsKQEAgLTQwNSwxMCArNDA1LDEwIEBAIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zCiAgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAg
ICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtw
cm90ZWN0ZWRUaGlzLCBvcHRpb25zID0gaXNvbGF0ZWRDb3B5KG9wdGlvbnMpLCBzZWxlY3RlZElu
ZGV4XSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKICAgICAgICAgfSk7CkBAIC00
MTksNyArNDE5LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY28KICAgICAgICAgY2xpZW50LT5s
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZp
Y2VOYW1lKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewogICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHRoaXMsIGVuYWJs
ZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lLmlzb2xh
dGVkQ29weSgpXSB7CkBAIC00MzMsMTAgKzQzMywxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQs
CiAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlwZSwg
bG9jYWxpemVkRGV2aWNlTmFtZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRp
c2FibGVkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCiB7CiAgICAgaWYgKFdl
YlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
ICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVk
VGhpcywgZGlzYWJsZWRdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7CiAgICAgICAgIH0pOwpAQCAtNDQ3
LDEwICs0NDcsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGIKICAgICAgICAgY2xpZW50LT53
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBt
dXRlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdl
ZChib29sIG11dGVkKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIG11dGVkXSB7CiAgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5tdXRlZENoYW5nZWQobXV0ZWQpOwogICAgICAgICB9KTsKQEAgLTQ2MSwz
NCArNDYxLDM0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11
dGVkQ2hhbmdlZChib29sIG11dGVkKQogICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChtdXRl
ZCk7CiB9CiAKLSNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorI3ByYWdtYSBt
YXJrIFZpZGVvRnVsbHNjcmVlbk1vZGVsCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xp
ZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKCFtX2Z1bGxz
Y3JlZW5DbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2Z1bGxzY3JlZW5DbGllbnRz
LmFkZCgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQoVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9mdWxsc2Ny
ZWVuQ2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9mdWxsc2NyZWVuQ2xpZW50cy5y
ZW1vdmUoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdp
dGhNZWRpYSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgbW9kZSwgZmluaXNo
ZWRXaXRoTWVkaWFdIHsKICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbk1vZGVsKQogICAgICAgICAg
ICAgbV9mdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtb2RlLCBmaW5pc2hl
ZFdpdGhNZWRpYSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgZnJhbWUpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRS
ZWN0IGZyYW1lKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHZpZGVvRnVsbHNjcmVlbkxheWVyID0gW21f
dmlkZW9GdWxsc2NyZWVuVmlldyBsYXllcl07CiAgICAgCiAgICAgW3ZpZGVvRnVsbHNjcmVlbkxh
eWVyIHNldFN1YmxheWVyVHJhbnNmb3JtOlt2aWRlb0Z1bGxzY3JlZW5MYXllciB0cmFuc2Zvcm1d
XTsKQEAgLTUwOCwxMDUgKzUwOCwxMDUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9M
YXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSB2aWRlb0dy
YXZpdHkpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xh
eWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0
eSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwog
ICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgdmlkZW9HcmF2aXR5XSB7CiAg
ICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVsbHNjcmVlbk1v
ZGVsLT5zZXRWaWRlb0xheWVyR3Jhdml0eSh2aWRlb0dyYXZpdHkpOwogICAgIH0pOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7CiAg
ICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJU
aHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIG1vZGVdIHsKICAgICAgICAgaWYgKG1fZnVs
bHNjcmVlbk1vZGVsKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZChtb2RlKTsKICAgICB9KTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6aXNWaXNpYmxlKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9mdWxsc2NyZWVuTW9k
ZWwtPmlzVmlzaWJsZSgpIDogZmFsc2U7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZWwgPyBtX2Z1bGxzY3JlZW5Nb2RlbC0+
aGFzVmlkZW8oKSA6IGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0Ojppc011dGVkKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmlzTXV0ZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwog
ICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmlzTXV0ZWQoKSA6
IGZhbHNlOwogfQogCi1GbG9hdFNpemUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnZpZGVvRGltZW5zaW9ucygpIGNvbnN0CitGbG9hdFNpemUgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnZpZGVvRGltZW5zaW9ucygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9mdWxsc2NyZWVu
TW9kZWwtPnZpZGVvRGltZW5zaW9ucygpIDogRmxvYXRTaXplKCk7CiB9CiAKLSNwcmFnbWEgbWFy
ayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Np
b25Nb2RlbAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRD
bGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCghbV9wbGF5YmFja0NsaWVudHMuY29udGFp
bnMoJmNsaWVudCkpOwogICAgIG1fcGxheWJhY2tDbGllbnRzLmFkZCgmY2xpZW50KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9wbGF5YmFja0NsaWVudHMuY29udGFpbnMoJmNs
aWVudCkpOwogICAgIG1fcGxheWJhY2tDbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSgpCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KCkKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVj
dGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAg
ICAgbV9wbGF5YmFja01vZGVsLT5wbGF5KCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBhdXNlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnBhdXNlKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywg
dGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5
YmFja01vZGVsLT5wYXVzZSgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJv
dGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAg
ICAgICAgbV9wbGF5YmFja01vZGVsLT50b2dnbGVQbGF5U3RhdGUoKTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQogewog
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2Vi
VGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNr
TW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnRvZ2dsZU11dGVkKCk7CiAgICAg
fSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldE11
dGVkKGJvb2wgbXV0ZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZXRNdXRlZChib29sIG11dGVkKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIFdl
YlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIodGhpcyksIHRoaXMsIG11dGVk
XSB7CkBAIC02MTUsMTUxICs2MTUsMTUxIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCiAgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKIHsKICAg
ICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01v
ZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjcnViYmluZygpOwogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRT
Y3J1YmJpbmcoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Ny
dWJiaW5nKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBp
ZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5lbmRTY3J1
YmJpbmcoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCiB7CiAgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3By
b3RlY3RlZFRoaXMsIHRoaXMsIHRpbWVdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkK
ICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+c2Vla1RvVGltZSh0aW1lKTsKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWso
ZG91YmxlIHRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0
U2Vlayhkb3VibGUgdGltZSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgdGlt
ZV0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFj
a01vZGVsLT5mYXN0U2Vlayh0aW1lKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQogewog
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2Vi
VGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNr
TW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2Nhbm5pbmdGb3J3YXJk
KCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0
ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAg
ICBtX3BsYXliYWNrTW9kZWwtPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOwogICAgIH0pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY2FubmluZygp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY2FubmluZygpCiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJh
Y2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZW5kU2Nhbm5pbmcoKTsKICAg
ICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGluZGV4XSB7CiAgICAgICAgIGlm
IChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qg
aW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRo
aXMsIHRoaXMsIGluZGV4XSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAg
ICAgICBtX3BsYXliYWNrTW9kZWwtPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7CiAg
ICAgfSk7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZHVyYXRpb24oKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpkdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0
dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+ZHVyYXRpb24oKSA6IDA7CiB9
CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRp
bWUoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJy
ZW50VGltZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJu
IG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+Y3VycmVudFRpbWUoKSA6IDA7CiB9
CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YnVmZmVyZWRU
aW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YnVm
ZmVyZWRUaW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1
cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5idWZmZXJlZFRpbWUoKSA6IDA7
CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzUGxheWlu
ZygpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlp
bmcoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3Bs
YXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmlzUGxheWluZygpIDogZmFsc2U7CiB9CiAK
LWZsb2F0IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5YmFja1JhdGUo
KSBjb25zdAorZmxvYXQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNr
UmF0ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1f
cGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+cGxheWJhY2tSYXRlKCkgOiAwOwogfQog
Ci1SZWY8VGltZVJhbmdlcz4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
ZWthYmxlUmFuZ2VzKCkgY29uc3QKK1JlZjxUaW1lUmFuZ2VzPiBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwt
PnNlZWthYmxlUmFuZ2VzKCkgOiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAotZG91YmxlIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0
TW9kaWZpZWRUaW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxh
eWJhY2tNb2RlbC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDogMDsKIH0K
IAotZG91YmxlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpsaXZlVXBkYXRl
SW50ZXJ2YWwoKSBjb25zdAorZG91YmxlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmxpdmVVcGRh
dGVJbnRlcnZhbCgpIDogMDsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJh
Y2tNb2RlbC0+Y2FuUGxheUZhc3RSZXZlcnNlKCkgOiBmYWxzZTsKIH0KIAotVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIGlmICht
X3BsYXliYWNrTW9kZWwpCkBAIC03NjcsMTMgKzc2NywxMyBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlh
U2VsZQogICAgIHJldHVybiB7IH07CiB9CiAKLXVpbnQ2NF90IFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit1aW50NjRf
dCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3Bs
YXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkg
OiAtMTsKIH0KIAotVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0
CitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICBpZiAobV9wbGF5YmFja01vZGVsKQpAQCAtNzgxLDMxICs3
ODEsMzEgQEAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2UKICAgICByZXR1cm4geyB9OwogfQogCi11
aW50NjRfdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit1aW50NjRfdCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tN
b2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIDogLTE7CiB9CiAKLWJvb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkg
Y29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxh
eWJhY2tFbmFibGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBy
ZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5leHRlcm5hbFBsYXliYWNr
RW5hYmxlZCgpIDogZmFsc2U7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAorUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2Rl
bC0+ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSA6IFRhcmdldFR5cGVOb25lOwogfQogCi1T
dHJpbmcgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJh
Y2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QKK1N0cmluZyBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25z
dAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9k
ZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1l
KCkgOiBTdHJpbmcoKTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAorYm9vbCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQo
KSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXli
YWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
KCkgOiB0cnVlOwpAQCAtODEzLDE2ICs4MTMsMTYgQEAgYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAog
CiAjcHJhZ21hIG1hcmsgT3RoZXIKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwg
VUlWaWV3ICp2aWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVsbHNj
cmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFVJVmlldyAqdmlldywgSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBSZXRhaW5QdHI8VUlWaWV3PiB2aWV3UmVmID0gdmlldzsK
ICAgICBtX3ZpZGVvRWxlbWVudCA9ICZ2aWRlb0VsZW1lbnQ7Ci0gICAgbV9wbGF5YmFja01vZGVs
ID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOworICAgIG1f
cGxheWJhY2tNb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUo
KTsKICAgICBtX3BsYXliYWNrTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7CiAgICAgbV9wbGF5YmFj
a01vZGVsLT5zZXRNZWRpYUVsZW1lbnQobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwogCi0gICAgbV9m
dWxsc2NyZWVuTW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3Jl
YXRlKCk7CisgICAgbV9mdWxsc2NyZWVuTW9kZWwgPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6Y3JlYXRlKCk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgqdGhp
cyk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRWxlbWVudChtX3ZpZGVvRWxlbWVu
dC5nZXQoKSk7CiAKQEAgLTgzMiwxNSArODMyLDE1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRl
CiAgICAgRmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IHZpZGVvRWxlbWVudENsaWVudFJlY3Quc2l6ZSgpKTsKICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+
c2V0VmlkZW9MYXllckZyYW1lKHZpZGVvTGF5ZXJGcmFtZSk7CiAKLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90
ZWN0ZWRUaGlzLCB0aGlzLCB2aWRlb0VsZW1lbnRDbGllbnRSZWN0LCB2aWV3UmVmLCBtb2RlLCBh
bGxvd3NQaWN0dXJlSW5QaWN0dXJlXSB7CiAgICAgICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwog
Ci0gICAgICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gc2Vzc2lvbklu
dGVyZmFjZSA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoKnRoaXMp
OwotICAgICAgICBtX2ludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpjcmVhdGUoc2Vzc2lvbkludGVyZmFjZS5nZXQoKSk7Ci0gICAgICAgIG1faW50ZXJmYWNlLT5z
ZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKLSAgICAgICAgbV9pbnRl
cmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKHRoaXMpOwotICAgICAgICBtX2ludGVy
ZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CisgICAgICAg
IFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gc2Vzc2lvbkludGVyZmFjZSA9IFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoKnRoaXMpOworICAgICAgICBtX2lu
dGVyZmFjZSA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoc2Vzc2lvbklu
dGVyZmFjZS5nZXQoKSk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNj
cmVlbk1vZGVsKHRoaXMpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIodGhpcyk7CiAKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5WaWV3ID0g
YWRvcHROUyhbYWxsb2NVSVZpZXdJbnN0YW5jZSgpIGluaXRdKTsKICAgICAgICAgCkBAIC04NDgs
MjUgKzg0OCwyNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZQogICAgIH0pOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleGl0RnVsbHNjcmVlbigpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleGl0RnVsbHNjcmVlbigpCiB7
CiAgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpIHx8IGlzTWFpblRocmVhZCgpKTsKICAg
ICBJbnRSZWN0IGNsaWVudFJlY3QgPSBlbGVtZW50UmVjdEluV2luZG93KG1fdmlkZW9FbGVtZW50
LmdldCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjbGllbnRSZWN0XSB7
CiAgICAgICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgICAgICBtX2ludGVyZmFjZS0+ZXhp
dEZ1bGxzY3JlZW4oY2xpZW50UmVjdCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgbV9pbnRlcmZh
Y2UtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogQGltcGxlbWVudGF0aW9u
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gX2NvbnRleHQ7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBfY29udGV4dDsKICAgICBSZWZQdHI8SFRNTFZpZGVvRWxl
bWVudD4gX3ZpZGVvRWxlbWVudDsKIH0KIApAQCAtODkxLDcgKzg5MSw3IEBAIC0gKEhUTUxWaWRl
b0VsZW1lbnQqKXZpZGVvRWxlbWVudAogLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KFVJVmlldyAq
KXZpZXcgbW9kZTooSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKW1v
ZGUKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIF9jb250ZXh0ID0gV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNyZWF0ZSgpOworICAgIF9jb250ZXh0ID0g
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNyZWF0ZSgpOwogICAgIF9jb250ZXh0
LT5zZXRDb250cm9sbGVyKHNlbGYpOwogICAgIF9jb250ZXh0LT5zZXRVcEZ1bGxzY3JlZW4oKl92
aWRlb0VsZW1lbnQuZ2V0KCksIHZpZXcsIG1vZGUpOwogfQpAQCAtOTA5LDcgKzkwOSw3IEBAIC0g
KHZvaWQpcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbgogICAgICAgICBfY29udGV4dC0+cmVx
dWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwogfQogCi0tICh2b2lkKWRpZEZpbmlzaEZ1bGxz
Y3JlZW46KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0CistICh2
b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
Kiljb250ZXh0CiB7CiAgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKICAgICBBU1NF
UlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQgPT0gX2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFjNzA0N2FiNzJjYjM0
ZGY2MThjNjRlMDY2MzI5MjViNmRlNzhkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIFBMQVRGT1JNKElPUykKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVy
LmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbmNs
dWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2luY2x1ZGUgPG9iamMvb2JqYy5oPgot
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgotCi1PQkpDX0NMQVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7
Ci1PQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFVJV2luZG93OwotT0JK
Q19DTEFTUyBVSVZpZXc7Ci1PQkpDX0NMQVNTIENBTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYkFWUGxh
eWVyQ29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJMYXllclZpZXc7Ci1PQkpDX0NM
QVNTIFdlYkFWUGxheWVyTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYkFWUGxheWVyVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZTsKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyOwotICAgIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQgZmluYWwKLSAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudAotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IHsKLQotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOwotICAg
IHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKLSAgICBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7
IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKTsgfQotCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmlu
YWw7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFVJVmlldyYsIGNvbnN0IEludFJlY3QmIGluaXRpYWxS
ZWN0LCBVSVZpZXcgKiwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbigpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlz
aWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCk7Ci0KLSAgICBlbnVtIGNsYXNzIEV4aXRG
dWxsU2NyZWVuUmVhc29uIHsKLSAgICAgICAgRG9uZUJ1dHRvblRhcHBlZCwKLSAgICAgICAgRnVs
bFNjcmVlbkJ1dHRvblRhcHBlZCwKLSAgICAgICAgUGluY2hHZXN0dXJlSGFuZGxlZCwKLSAgICAg
ICAgUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkLAotICAgICAgICBQaWN0dXJlSW5QaWN0
dXJlU3RhcnRlZAotICAgIH07Ci0KLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwo
KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9Ci0gICAgYm9vbCBzaG91
bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oRXhpdEZ1bGxTY3JlZW5SZWFzb24pOwotICAgIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlOyB9Ci0gICAgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2so
KSBjb25zdCB7IHJldHVybiBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsgfQotICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBp
Y3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6
OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOwotICAgIGJvb2wgd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdDsKLSAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21l
QWN0aXZlKCk7Ci0KLSAgICB2b2lkIHdpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2
b2lkIGRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgZmFpbGVkVG9TdGFydFBp
Y3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIHdpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpOwot
ICAgIHZvaWQgZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIHByZXBhcmVGb3JQ
aWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7
Ci0KLSAgICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlKTsKLSAgICB2b2lkIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpOwotICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsg
fQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKLSAgICB2b2lkIGJlZ2luU2Vzc2lvbigp
OwotICAgIHZvaWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBlbnRlckZ1bGxz
Y3JlZW5TdGFuZGFyZCgpOwotICAgIHZvaWQgd2F0Y2hkb2dUaW1lckZpcmVkKCk7Ci0gICAgV2Vi
QVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3Q7Ci0KLSAgICBSZWY8
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlOwotICAgIFJldGFpblB0cjxXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IG1f
cGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3
Q29udHJvbGxlcj4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlcjsKLSAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsKLSAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBu
dWxscHRyIH07Ci0KLSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIHdoZW4gZnVsbHNjcmVlbiBp
cyBwcmVzZW50ZWQgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCi0gICAgUmV0YWluUHRyPFVJV2luZG93
PiBtX3dpbmRvdzsKLSAgICBSZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gbV92aWV3Q29udHJv
bGxlcjsKLSAgICBSZXRhaW5QdHI8VUlWaWV3PiBtX3BhcmVudFZpZXc7Ci0gICAgUmV0YWluUHRy
PFVJV2luZG93PiBtX3BhcmVudFdpbmRvdzsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJMYXll
clZpZXc+IG1fcGxheWVyTGF5ZXJWaWV3OwotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVOb25lIH07Ci0gICAgV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiBtX3ByZXBh
cmVUb0lubGluZUNhbGxiYWNrOwotICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBtX3dhdGNoZG9nVGltZXI7Ci0gICAgYm9vbCBtX2FsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjayB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2V4aXRSZXF1ZXN0ZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9leGl0Q29tcGxldGVkIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fZW50ZXJSZXF1ZXN0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV93aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2Ny
ZWVuV2hlblN0b3BwaW5nUGlQIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkUmV0dXJuVG9G
dWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9y
ZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgeyBmYWxzZSB9OwotCi0g
ICAgdm9pZCBkb0VudGVyRnVsbHNjcmVlbigpOwotfTsKLQotfQotCi0jZW5kaWYKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzVj
ZTNiNzNiMGIyZTI0ZDhjN2ExZDU1NmFmNDAwYTRlM2MxOTZiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDEw
NDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCi0KLSNpZiBIQVZFKEFWS0lU
KQotCi0jaW1wb3J0ICJBVktpdFNQSS5oIgotI2ltcG9ydCAiR2VvbWV0cnlVdGlsaXRpZXMuaCIK
LSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
IgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVy
LmgiCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0j
aW1wb3J0IDxVSUtpdC9VSUtpdC5oPgotI2ltcG9ydCA8b2JqYy9tZXNzYWdlLmg+Ci0jaW1wb3J0
IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLy8gU29mdC1saW5raW5nIGhlYWRlcnMgbXVzdCBiZSBp
bmNsdWRlZCBsYXN0IHNpbmNlIHRoZXkgI2RlZmluZSBmdW5jdGlvbnMsIGNvbnN0YW50cywgZXRj
LgotI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKLQotU09GVF9MSU5LX0ZSQU1FV09SSyhB
VkZvdW5kYXRpb24pCi1TT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVy
KQotU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJl
c2l6ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5
ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfQ09OU1RB
TlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCwgTlNT
dHJpbmcgKikKLQotU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKLVNPRlRfTElO
S19DTEFTU19PUFRJT05BTChBVktpdCwgQVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlcikKLVNP
RlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcikKLVNP
RlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgX19BVlBsYXllckxheWVyVmlldykKLQotU09G
VF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlBcHBsaWNh
dGlvbikKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlTY3JlZW4pCi1TT0ZUX0xJTktfQ0xBU1Mo
VUlLaXQsIFVJV2luZG93KQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVZpZXcpCi1TT0ZUX0xJ
TktfQ0xBU1MoVUlLaXQsIFVJVmlld0NvbnRyb2xsZXIpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQs
IFVJQ29sb3IpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlLaXQsIFVJVGV4dEVmZmVjdHNCZW5lYXRo
U3RhdHVzQmFyV2luZG93TGV2ZWwsIFVJV2luZG93TGV2ZWwpCi0KLXN0YXRpYyBVSUNvbG9yICpj
bGVhclVJQ29sb3IoKQotewotICAgIHJldHVybiAoVUlDb2xvciAqKVtnZXRVSUNvbG9yQ2xhc3Mo
KSBjbGVhckNvbG9yXTsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFy
KiBib29sU3RyaW5nKGJvb2wgdmFsKQotewotICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFs
c2UiOwotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBTZWNvbmRzIGRlZmF1bHRXYXRjaGRvZ1Rp
bWVySW50ZXJ2YWwgeyAxX3MgfTsKLQotQGNsYXNzIFdlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb247
Ci0KLUBpbnRlcmZhY2UgV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIDogTlNPYmpl
Y3QgPEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZV9XZWJLaXRPbmx5PiB7Ci0gICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbkludGVyZmFj
ZTsKLX0KLUBwcm9wZXJ0eSAoYXNzaWduKSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dCogZnVsbHNjcmVlbkludGVyZmFjZTsKLS0gKEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFW
UGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciBzaG91bGRFeGl0RnVs
bFNjcmVlbldpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJl
YXNvbilyZWFzb247Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJBVlBsYXllclZpZXdDb250
cm9sbGVyRGVsZWdhdGUKLS0gKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxs
c2NyZWVuSW50ZXJmYWNlCi17Ci0gICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNlLmdldCgp
OwotfQotCi0tICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCi17Ci0gICAgX2Z1bGxzY3JlZW5J
bnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOwotfQotCi0tICh2b2lkKXBsYXllclZpZXdD
b250cm9sbGVyV2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxl
ciAqKXBsYXllclZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdD
b250cm9sbGVyKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPndpbGxTdGFydFBpY3R1
cmVJblBpY3R1cmUoKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0YXJ0
UGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250
cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBz
ZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQot
Ci0tICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyRmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1
cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciB3aXRoRXJy
b3I6KE5TRXJyb3IgKillcnJvcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJv
bGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRl
cmZhY2UtPmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxh
eWVyVmlld0NvbnRyb2xsZXJXaWxsU3RvcFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0Nv
bnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5
ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT53aWxsU3Rv
cFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRp
ZFN0b3BQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmll
d0NvbnRyb2xsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwot
ICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsK
LX0KLQotc3RhdGljIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNj
cmVlblJlYXNvbiBjb252ZXJ0VG9FeGl0RnVsbFNjcmVlblJlYXNvbihBVlBsYXllclZpZXdDb250
cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29uKQotewotICAgIHN3aXRjaCAocmVhc29u
KSB7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25E
b25lQnV0dG9uVGFwcGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkOwotICAgIGNh
c2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uRnVsbFNjcmVlbkJ1
dHRvblRhcHBlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RnVsbFNjcmVlbkJ1dHRvblRhcHBlZDsKLSAgICBj
YXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpY3R1cmVJblBp
Y3R1cmVTdGFydGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDsKLSAg
ICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpbmNoR2Vz
dHVyZUhhbmRsZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpbmNoR2VzdHVyZUhhbmRsZWQ7Ci0gICAgY2Fz
ZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25SZW1vdGVDb250cm9s
U3RvcEV2ZW50UmVjZWl2ZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRS
ZWNlaXZlZDsKLSAgICB9Ci19Ci0KLS0gKEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxh
eWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciBzaG91bGRFeGl0RnVsbFNj
cmVlbldpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNv
bilyZWFzb24KLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAg
IHJldHVybiBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0
aFJlYXNvbihjb252ZXJ0VG9FeGl0RnVsbFNjcmVlblJlYXNvbihyZWFzb24pKTsKLX0KLQotLSAo
dm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXll
clZpZXdDb250cm9sbGVyIHJlc3RvcmVVc2VySW50ZXJmYWNlRm9yUGljdHVyZUluUGljdHVyZVN0
b3BXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgcmVzdG9yZWQpKWNvbXBsZXRp
b25IYW5kbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAg
ICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3Rv
cFdpdGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9uSGFuZGxlcik7Ci19Ci1AZW5kCi0KLUBp
bnRlcmZhY2UgV2ViQVZQbGF5ZXJMYXllciA6IENBTGF5ZXIKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIE5TU3RyaW5nICp2aWRlb0dyYXZpdHk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
Z2V0dGVyPWlzUmVhZHlGb3JEaXNwbGF5KSBCT09MIHJlYWR5Rm9yRGlzcGxheTsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBm
dWxsc2NyZWVuSW50ZXJmYWNlOwotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgQVZQbGF5
ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbikgQ0FMYXllciAqdmlkZW9TdWJsYXllcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
LCBudWxsYWJsZSkgTlNEaWN0aW9uYXJ5ICpwaXhlbEJ1ZmZlckF0dHJpYnV0ZXM7Ci1AcHJvcGVy
dHkgQ0dTaXplIHZpZGVvRGltZW5zaW9uczsKLUBwcm9wZXJ0eSBDR1JlY3QgbW9kZWxWaWRlb0xh
eWVyRnJhbWU7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJBVlBsYXllckxheWVyIHsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50
ZXJmYWNlOwotICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IF9hdlBsYXllckNv
bnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+IF92aWRlb1N1YmxheWVyOwotICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX3ZpZGVvR3Jhdml0eTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXQKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmIChzZWxmKSB7Ci0gICAgICAg
IFtzZWxmIHNldE1hc2tzVG9Cb3VuZHM6WUVTXTsKLSAgICAgICAgX3ZpZGVvR3Jhdml0eSA9IGdl
dEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91
c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2
ZUJvdW5kcykgb2JqZWN0Om5pbF07Ci0gICAgW19waXhlbEJ1ZmZlckF0dHJpYnV0ZXMgcmVsZWFz
ZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIHJldHVybiBfZnVsbHNjcmVl
bkludGVyZmFjZS5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQotewot
ICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKLX0KLQotLSAo
QVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcgotewotICAgIHJldHVybiAoQVZQ
bGF5ZXJDb250cm9sbGVyICopX2F2UGxheWVyQ29udHJvbGxlci5nZXQoKTsKLX0KLQotLSAodm9p
ZClzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9s
bGVyCi17Ci0gICAgQVNTRVJUKCFwbGF5ZXJDb250cm9sbGVyIHx8IFtwbGF5ZXJDb250cm9sbGVy
IGlzS2luZE9mQ2xhc3M6W1dlYkFWUGxheWVyQ29udHJvbGxlciBjbGFzc11dKTsKLSAgICBfYXZQ
bGF5ZXJDb250cm9sbGVyID0gKFdlYkFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xs
ZXI7Ci19Ci0KLS0gKHZvaWQpc2V0VmlkZW9TdWJsYXllcjooQ0FMYXllciAqKXZpZGVvU3VibGF5
ZXIKLXsKLSAgICBfdmlkZW9TdWJsYXllciA9IHZpZGVvU3VibGF5ZXI7Ci19Ci0KLS0gKENBTGF5
ZXIqKXZpZGVvU3VibGF5ZXIKLXsKLSAgICByZXR1cm4gX3ZpZGVvU3VibGF5ZXIuZ2V0KCk7Ci19
Ci0KLS0gKHZvaWQpbGF5b3V0U3VibGF5ZXJzCi17Ci0gICAgaWYgKFtfdmlkZW9TdWJsYXllciBz
dXBlcmxheWVyXSAhPSBzZWxmKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIVtfYXZQbGF5
ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW192aWRlb1N1
YmxheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoc2VsZi5ib3VuZHMp
LCBDR1JlY3RHZXRNaWRZKHNlbGYuYm91bmRzKSldOwotCi0gICAgaWYgKHNlbGYudmlkZW9EaW1l
bnNpb25zLmhlaWdodCA8PSAwIHx8IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIDw9IDApCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBzb3VyY2VWaWRlb0ZyYW1lOwotICAgIEZs
b2F0UmVjdCB0YXJnZXRWaWRlb0ZyYW1lOwotICAgIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBz
ZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCAvIHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodDsK
LSAgICAKLSAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSBpc0VxdWFsVG9T
dHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7Ci0gICAgICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBz
ZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lOwotICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gc2Vs
Zi5ib3VuZHM7Ci0gICAgfSBlbHNlIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFz
cGVjdCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsKLSAgICAgICAgc291
cmNlVmlkZW9GcmFtZSA9IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRl
b0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAgdGFyZ2V0
VmlkZW9GcmFtZSA9IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0Fz
cGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7Ci0gICAgfSBlbHNlIGlmIChbZ2V0QVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZp
dHldKSB7Ci0gICAgICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0
UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYubW9kZWxWaWRlb0xheWVyRnJh
bWUpOwotICAgICAgICBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lID0gQ0dSZWN0TWFrZSgwLCAw
LCBzb3VyY2VWaWRlb0ZyYW1lLndpZHRoKCksIHNvdXJjZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOwot
ICAgICAgICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOwotICAgICAgICBf
ZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKHNlbGYubW9k
ZWxWaWRlb0xheWVyRnJhbWUpOwotICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gc21hbGxlc3RS
ZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5k
cyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgVUlW
aWV3ICp2aWV3ID0gKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV07Ci0gICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUodGFy
Z2V0VmlkZW9GcmFtZS53aWR0aCgpIC8gc291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCB0YXJnZXRW
aWRlb0ZyYW1lLmhlaWdodCgpIC8gc291cmNlVmlkZW9GcmFtZS5oZWlnaHQoKSk7Ci0gICAgW3Zp
ZXcgc2V0VHJhbnNmb3JtOnRyYW5zZm9ybV07Ci0gICAgCi0gICAgTlNUaW1lSW50ZXJ2YWwgYW5p
bWF0aW9uRHVyYXRpb24gPSBbQ0FUcmFuc2FjdGlvbiBhbmltYXRpb25EdXJhdGlvbl07Ci0gICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXiB7Ci0gICAgICAgIFtO
U09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07Ci0KLSAgICAgICAgW3Nl
bGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSB3aXRoT2JqZWN0Om5p
bCBhZnRlckRlbGF5OmFuaW1hdGlvbkR1cmF0aW9uICsgMC4xXTsKLSAgICB9KTsKLX0KLQotLSAo
dm9pZClyZXNvbHZlQm91bmRzCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9y
bVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRz
KSBvYmplY3Q6bmlsXTsKLSAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChbX3ZpZGVvU3VibGF5ZXIgc3VwZXJsYXll
cl0gIT0gc2VsZikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChDR1JlY3RFcXVhbFRv
UmVjdChzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lLCBbc2VsZiBib3VuZHNdKSAmJiBDR0FmZmlu
ZVRyYW5zZm9ybUlzSWRlbnRpdHkoWyhVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVd
IHRyYW5zZm9ybV0pKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24g
YmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwotICAg
IFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgCi0gICAgaWYgKCFD
R1JlY3RFcXVhbFRvUmVjdChzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lLCBbc2VsZiBib3VuZHNd
KSkgewotICAgICAgICBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lID0gW3NlbGYgYm91bmRzXTsK
LSAgICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKLSAgICAgICAg
X2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShzZWxmLm1v
ZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICB9Ci0gICAgWyhVSVZpZXcgKilbX3ZpZGVvU3VibGF5
ZXIgZGVsZWdhdGVdIHNldFRyYW5zZm9ybTpDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5XTsKLSAg
ICAKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotfQotCi0tICh2b2lkKXNldFZpZGVvR3Jh
dml0eTooTlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKLXsKLSAgICBfdmlkZW9HcmF2aXR5ID0gdmlk
ZW9HcmF2aXR5OwotICAgIAotICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVd
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0
QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpKQotICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKLSAgICBpZiAodmlk
ZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSkKLSAgICAg
ICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZp
dHlSZXNpemVBc3BlY3Q7Ci0gICAgZWxzZSBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsK
LSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIEFTU0VS
VChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7Ci0gICAgX2Z1bGxzY3JlZW5JbnRlcmZh
Y2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KGdyYXZpdHkpOwotfQotCi0tIChOU1N0
cmluZyAqKXZpZGVvR3Jhdml0eQotewotICAgIHJldHVybiBfdmlkZW9HcmF2aXR5LmdldCgpOwot
fQotCi0tIChDR1JlY3QpdmlkZW9SZWN0Ci17Ci0gICAgaWYgKHNlbGYudmlkZW9EaW1lbnNpb25z
LndpZHRoIDw9IDAgfHwgc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0IDw9IDApCi0gICAgICAg
IHJldHVybiBzZWxmLmJvdW5kczsKLSAgICAKLSAgICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0g
c2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7
Ci0KLSAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSBpc0VxdWFs
VG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKQotICAgICAgICByZXR1cm4gbGFyZ2VzdFJlY3RX
aXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsK
LSAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVh
bFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKLSAgICAgICAgcmV0dXJuIHNtYWxsZXN0UmVj
dFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMp
OwotCi0gICAgcmV0dXJuIHNlbGYuYm91bmRzOwotfQotCi0rIChOU1NldCAqKWtleVBhdGhzRm9y
VmFsdWVzQWZmZWN0aW5nVmlkZW9SZWN0Ci17Ci0gICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2Jq
ZWN0czpAInZpZGVvRGltZW5zaW9ucyIsIEAidmlkZW9HcmF2aXR5IiwgbmlsXTsKLX0KLQotQGVu
ZAotCi1AaW50ZXJmYWNlIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyA6IFVJ
VmlldwotQGVuZAotCi1zdGF0aWMgQ2xhc3MgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKLXsKLSAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5
ZXIgY2xhc3NdOwotfQotCi1zdGF0aWMgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3ICphbGxvY1dlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld0luc3RhbmNlKCkK
LXsKLSAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7Ci0gICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKLSAg
ICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdldFVJVmlld0NsYXNzKCks
ICJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciLCAwKTsKLSAgICAgICAgb2Jq
Y19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7Ci0gICAgICAgIENsYXNzIG1ldGFDbGFzcyA9
IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXci
KTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1ldGFDbGFzcywgQHNlbGVjdG9yKGxheWVyQ2xh
c3MpLCAoSU1QKVdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld19sYXllckNsYXNz
LCAiQEA6Iik7Ci0gICAgfSk7Ci0gICAgCi0gICAgcmV0dXJuIChXZWJBVlBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXcgKilbdGhlQ2xhc3MgYWxsb2NdOwotfQotCi1AaW50ZXJmYWNlIFdl
YkFWUGxheWVyTGF5ZXJWaWV3IDogX19BVlBsYXllckxheWVyVmlldwotQHByb3BlcnR5IChyZXRh
aW4pIFVJVmlldyogdmlkZW9WaWV3OwotQGVuZAotCi1zdGF0aWMgQ2xhc3MgV2ViQVZQbGF5ZXJM
YXllclZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQotewotICAgIHJldHVybiBbV2ViQVZQbGF5ZXJM
YXllciBjbGFzc107Ci19Ci0KLXN0YXRpYyBBVlBsYXllckNvbnRyb2xsZXIgKldlYkFWUGxheWVy
TGF5ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBfX0FWUGxh
eWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllciA9IGFTZWxmOwotICAgIFdlYkFWUGxheWVyTGF5ZXIg
KndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllciBwbGF5
ZXJMYXllcl07Ci0gICAgcmV0dXJuIFt3ZWJBVlBsYXllckxheWVyIHBsYXllckNvbnRyb2xsZXJd
OwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zZXRQbGF5ZXJDb250cm9s
bGVyKGlkIGFTZWxmLCBTRUwsIEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcikK
LXsKLSAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAg
ICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIg
KilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBbd2ViQVZQbGF5ZXJMYXllciBz
ZXRQbGF5ZXJDb250cm9sbGVyOiBwbGF5ZXJDb250cm9sbGVyXTsKLX0KLQotc3RhdGljIFVJVmll
dyAqV2ViQVZQbGF5ZXJMYXllclZpZXdfdmlkZW9WaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAg
X19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsKLSAgICBXZWJBVlBsYXll
ckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5
ZXIgcGxheWVyTGF5ZXJdOwotICAgIENBTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbd2ViQVZQbGF5ZXJM
YXllciB2aWRlb1N1YmxheWVyXTsKLSAgICBpZiAoIXZpZGVvTGF5ZXIgfHwgIXZpZGVvTGF5ZXIu
ZGVsZWdhdGUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKFtbdmlkZW9MYXllciBk
ZWxlZ2F0ZV0gaXNLaW5kT2ZDbGFzczpnZXRVSVZpZXdDbGFzcygpXSk7Ci0gICAgcmV0dXJuIChV
SVZpZXcgKilbdmlkZW9MYXllciBkZWxlZ2F0ZV07Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGxh
eWVyTGF5ZXJWaWV3X3NldFZpZGVvVmlldyhpZCBhU2VsZiwgU0VMLCBVSVZpZXcgKnZpZGVvVmll
dykKLXsKLSAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsK
LSAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5
ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBbd2ViQVZQbGF5ZXJMYXll
ciBzZXRWaWRlb1N1YmxheWVyOlt2aWRlb1ZpZXcgbGF5ZXJdXTsKLX0KLQotc3RhdGljIHZvaWQg
V2ViQVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXllckxheWVyVmll
dyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVy
VmlldyAqKVtwbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld107
Ci0KLSAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVy
ICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAq
cGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKLSAg
ICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3QoKV07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvU3VibGF5ZXI6cGxheWVy
TGF5ZXIudmlkZW9TdWJsYXllcl07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGltZW5z
aW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOwotICAgIFtwaXBQbGF5ZXJMYXllciBz
ZXRWaWRlb0dyYXZpdHk6cGxheWVyTGF5ZXIudmlkZW9HcmF2aXR5XTsKLSAgICBbcGlwUGxheWVy
TGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6cGxheWVyTGF5ZXIubW9kZWxWaWRlb0xheWVy
RnJhbWVdOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRQbGF5ZXJDb250cm9sbGVyOnBsYXllckxh
eWVyLnBsYXllckNvbnRyb2xsZXJdOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRGdWxsc2NyZWVu
SW50ZXJmYWNlOnBsYXllckxheWVyLmZ1bGxzY3JlZW5JbnRlcmZhY2VdOwotICAgIFtwaXBWaWV3
IGFkZFN1YnZpZXc6cGxheWVyTGF5ZXJWaWV3LnZpZGVvVmlld107Ci19Ci0KLXN0YXRpYyB2b2lk
IFdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXllckxheWVyVmll
dyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgaWYgKFVJVmlldyAqdmlkZW9WaWV3ID0g
cGxheWVyTGF5ZXJWaWV3LnZpZGVvVmlldykKLSAgICAgICAgW3BsYXllckxheWVyVmlldyBhZGRT
dWJ2aWV3OnZpZGVvVmlld107Ci0gICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVtw
bGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld107Ci0gICAgV2Vi
QVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJM
YXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxh
eWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAgW3BsYXllckxh
eWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBpcFBsYXllckxheWVyLm1vZGVsVmlkZW9MYXll
ckZyYW1lXTsKLX0KLQotc3RhdGljIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqV2ViQVZQbGF5ZXJMYXllclZpZXdfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhp
ZCBhU2VsZiwgU0VMKQotewotICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZp
ZXcgPSBhU2VsZjsKLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBp
cFZpZXcgPSBbcGxheWVyTGF5ZXJWaWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXciXTsKLSAgICBpZiAoIXBpcFZpZXcpIHsKLSAgICAgICAgcGlwVmlldyA9
IFthbGxvY1dlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld0luc3RhbmNlKCkgaW5p
dFdpdGhGcmFtZTpDR1JlY3RaZXJvXTsKLSAgICAgICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1
ZTpwaXBWaWV3IGZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Ci0g
ICAgfQotICAgIHJldHVybiBwaXBWaWV3OwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxh
eWVyVmlld19kZWFsbG9jKGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZp
ZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIFJldGFpblB0cjxXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXc+IHBpcFZpZXcgPSBhZG9wdE5TKFtwbGF5ZXJMYXllclZp
ZXcgdmFsdWVGb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdKTsKLSAg
ICBbcGxheWVyTGF5ZXJWaWV3IHNldFZhbHVlOm5pbCBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldyJdOwotICAgIG9iamNfc3VwZXIgc3VwZXJDbGFzcyB7IHBsYXllckxh
eWVyVmlldywgZ2V0X19BVlBsYXllckxheWVyVmlld0NsYXNzKCkgfTsKLSAgICBhdXRvIHN1cGVy
X2RlYWxsb2MgPSByZWludGVycHJldF9jYXN0PHZvaWQoKikob2JqY19zdXBlciosIFNFTCk+KG9i
amNfbXNnU2VuZFN1cGVyKTsKLSAgICBzdXBlcl9kZWFsbG9jKCZzdXBlckNsYXNzLCBAc2VsZWN0
b3IoZGVhbGxvYykpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBNZXRob2RzCi0KLXN0YXRpYyBXZWJB
VlBsYXllckxheWVyVmlldyAqYWxsb2NXZWJBVlBsYXllckxheWVyVmlld0luc3RhbmNlKCkKLXsK
LSAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29u
Y2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKLSAgICAg
ICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdldF9fQVZQbGF5ZXJMYXllclZp
ZXdDbGFzcygpLCAiV2ViQVZQbGF5ZXJMYXllclZpZXciLCAwKTsKLSAgICAgICAgY2xhc3NfYWRk
TWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYyksIChJTVApV2ViQVZQbGF5ZXJMYXll
clZpZXdfZGVhbGxvYywgInZAOiIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3Ms
IEBzZWxlY3RvcihzZXRQbGF5ZXJDb250cm9sbGVyOiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZp
ZXdfc2V0UGxheWVyQ29udHJvbGxlciwgInZAOkAiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9k
KHRoZUNsYXNzLCBAc2VsZWN0b3IocGxheWVyQ29udHJvbGxlciksIChJTVApV2ViQVZQbGF5ZXJM
YXllclZpZXdfcGxheWVyQ29udHJvbGxlciwgIkBAOiIpOwotICAgICAgICBjbGFzc19hZGRNZXRo
b2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRWaWRlb1ZpZXc6KSwgKElNUClXZWJBVlBsYXllckxh
eWVyVmlld19zZXRWaWRlb1ZpZXcsICJ2QDpAIik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0
aGVDbGFzcywgQHNlbGVjdG9yKHZpZGVvVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdf
dmlkZW9WaWV3LCAiQEA6Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNl
bGVjdG9yKHN0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldywgInZAOiIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2Qo
dGhlQ2xhc3MsIEBzZWxlY3RvcihzdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVv
VG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAidkA6Iik7Ci0gICAgICAgIGNsYXNz
X2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXcsICJAQDoiKTsKLSAgICAgICAgCi0gICAgICAgIGNsYXNzX2FkZEl2YXIodGhlQ2xh
c3MsICJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIsIHNpemVvZihXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKiksIGxvZzIoc2l6ZW9mKFdlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyAqKSksICJAIik7Ci0gICAgICAgIAotICAgICAgICBvYmpj
X3JlZ2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsKLSAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0g
b2JqY19nZXRNZXRhQ2xhc3MoIldlYkFWUGxheWVyTGF5ZXJWaWV3Iik7Ci0gICAgICAgIGNsYXNz
X2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClXZWJBVlBs
YXllckxheWVyVmlld19sYXllckNsYXNzLCAiQEA6Iik7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIChX
ZWJBVlBsYXllckxheWVyVmlldyAqKVt0aGVDbGFzcyBhbGxvY107Ci19Ci0KLVJlZjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKQotewotICAgIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdChwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKLSAgICBbaW50ZXJmYWNlLT5tX3BsYXll
clZpZXdDb250cm9sbGVyRGVsZWdhdGUgc2V0RnVsbHNjcmVlbkludGVyZmFjZTppbnRlcmZhY2Uu
cHRyKCldOwotICAgIHJldHVybiBpbnRlcmZhY2U7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotICAgIDog
bV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotICAg
ICwgbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXZWJBVlBsYXllclZp
ZXdDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdKSkKLSAgICAsIG1fd2F0Y2hkb2dUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6d2F0Y2hkb2dUaW1lckZpcmVkKQotewotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCkKLXsKLSAgICBXZWJB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSB0aGlzLT5wbGF5ZXJDb250cm9s
bGVyKCk7Ci0gICAgaWYgKHBsYXllckNvbnRyb2xsZXIgJiYgcGxheWVyQ29udHJvbGxlci5leHRl
cm5hbFBsYXliYWNrQWN0aXZlKQotICAgICAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChmYWxz
ZSwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lLCAiIik7Ci0gICAgaWYg
KG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwt
PnJlbW92ZUNsaWVudCgqdGhpcyk7Ci19Ci0KLVdlYkFWUGxheWVyQ29udHJvbGxlciAqV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWVyQ29udHJvbGxlcigp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCi17Ci0gICAg
aWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0KLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0g
bW9kZWw7Ci0KLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKLQotICAgIGhhc1ZpZGVvQ2hhbmdl
ZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aGFzVmlk
ZW8oKSA6IGZhbHNlKTsKLSAgICB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6IEZs
b2F0U2l6ZSgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQotewotICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
ID0gb2JzZXJ2ZXI7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQotewotICAgIFtwbGF5ZXJDb250cm9sbGVy
KCkgc2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsKLSAgICBbcGxheWVyQ29udHJvbGxlcigp
IHNldEhhc1ZpZGVvOmhhc1ZpZGVvXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVv
RGltZW5zaW9ucykKLXsKLSAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJB
VlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLQotICAgIFtw
bGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKLSAgICBbcGxh
eWVyQ29udHJvbGxlcigpIHNldENvbnRlbnREaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107Ci0g
ICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldE5lZWRzTGF5b3V0XTsKLQotICAgIFdlYkFWUGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXcgKilbbV9wbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlld107Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIgPSAo
V2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIg
c2V0VmlkZW9EaW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVvRGltZW5zaW9uc107Ci0gICAgW3Bp
cFZpZXcgc2V0TmVlZHNMYXlvdXRdOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5n
JikKLXsKLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOmVuYWJsZWRdOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJlY29t
ZUFjdGl2ZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoJXApIiwgdGhpcyk7Ci0gICAg
aWYgKG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgJiYg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5pc1Zpc2li
bGUoKSkgewotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGlj
dHVyZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBhcmUgYm90aCBp
biBQaVAgYW5kIGluIEZ1bGxzY3JlZW4gKGkuZS4sIHZpYSBhdXRvLVBpUCksIGFuZCB3ZSBkaWQg
bm90IHN0b3AgZnVsbHNjcmVlbiB1cG9uIHJldHVybmluZywgaXQgbXVzdCBiZQotICAgIC8vIGJl
Y2F1c2UgdGhlIG9yaWdpbmF0aW5nIHZpZXcgaXMgbm90IHZpc2libGUsIHNvIGhpZGUgdGhlIGZ1
bGxzY3JlZW4gd2luZG93LgotICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxl
dGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAg
ICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgW1ttX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotICAgICAgICB9XTsKLSAgICB9
Ci19Ci0KLUBpbnRlcmZhY2UgVUlXaW5kb3cgKCkKLS0gKEJPT0wpX2lzSG9zdGVkSW5Bbm90aGVy
UHJvY2VzczsKLUBlbmQKLQotQGludGVyZmFjZSBVSVZpZXdDb250cm9sbGVyICgpCi1AcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduLCBzZXR0ZXI9X3NldElnbm9yZUFwcFN1cHBvcnRlZE9yaWVu
dGF0aW9uczopIEJPT0wgX2lnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczsKLUBlbmQKLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKFVJ
VmlldyYgdmlkZW9WaWV3LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlW
aWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCi17Ci0gICAgQVNT
RVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9u
ZSk7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgbV9hbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlUGxheWJhY2sgPSBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7Ci0KLSAgICBb
Q0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlv
bnM6WUVTXTsKLSAgICBib29sIGlzSW5QaWN0dXJlSW5QaWN0dXJlTW9kZSA9IGhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7
Ci0gICAgbV9tb2RlID0gbW9kZTsKLSAgICBtX3BhcmVudFZpZXcgPSBwYXJlbnRWaWV3OwotICAg
IG1fcGFyZW50V2luZG93ID0gcGFyZW50Vmlldy53aW5kb3c7Ci0KLSAgICBpZiAoIVtbcGFyZW50
VmlldyB3aW5kb3ddIF9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3NdKSB7Ci0gICAgICAgIGlmICgh
bV93aW5kb3cpCi0gICAgICAgICAgICBtX3dpbmRvdyA9IGFkb3B0TlMoW2FsbG9jVUlXaW5kb3dJ
bnN0YW5jZSgpIGluaXRXaXRoRnJhbWU6W1tnZXRVSVNjcmVlbkNsYXNzKCkgbWFpblNjcmVlbl0g
Ym91bmRzXV0pOwotICAgICAgICBbbV93aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlD
b2xvcigpXTsKLSAgICAgICAgaWYgKCFtX3ZpZXdDb250cm9sbGVyKQotICAgICAgICAgICAgbV92
aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jVUlWaWV3Q29udHJvbGxlckluc3RhbmNlKCkg
aW5pdF0pOwotICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gc2V0RnJhbWU6W21fd2lu
ZG93IGJvdW5kc11dOwotICAgICAgICBbbV92aWV3Q29udHJvbGxlciBfc2V0SWdub3JlQXBwU3Vw
cG9ydGVkT3JpZW50YXRpb25zOllFU107Ci0gICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0Nv
bnRyb2xsZXI6bV92aWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgICAgIFttX3dpbmRvdyBzZXRX
aW5kb3dMZXZlbDpnZXRVSVRleHRFZmZlY3RzQmVuZWF0aFN0YXR1c0JhcldpbmRvd0xldmVsKCkg
KyAxXTsKLSAgICAgICAgW21fd2luZG93IG1ha2VLZXlBbmRWaXNpYmxlXTsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1fcGxheWVyTGF5ZXJWaWV3KQotICAgICAgICBtX3BsYXllckxheWVyVmlldyA9IGFk
b3B0TlMoW2FsbG9jV2ViQVZQbGF5ZXJMYXllclZpZXdJbnN0YW5jZSgpIGluaXRdKTsKLSAgICBb
bV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOltwbGF5ZXJDb250cm9sbGVyKCkgaXNFeHRlcm5h
bFBsYXliYWNrQWN0aXZlXV07Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRD
b2xvcjpjbGVhclVJQ29sb3IoKV07Ci0KLSAgICBpZiAoIWlzSW5QaWN0dXJlSW5QaWN0dXJlTW9k
ZSkgewotICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0VmlkZW9WaWV3OiZ2aWRlb1ZpZXdd
OwotICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgYWRkU3VidmlldzomdmlkZW9WaWV3XTsKLSAg
ICB9Ci0KLSAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxh
eWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLQotICAgIFtwbGF5ZXJMYXll
ciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIGluaXRpYWxSZWN0Lndp
ZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgpKV07Ci0gICAgW3BsYXllckxheWVyIHNldFZpZGVv
RGltZW5zaW9uczpbcGxheWVyQ29udHJvbGxlcigpIGNvbnRlbnREaW1lbnNpb25zXV07Ci0gICAg
cGxheWVyTGF5ZXIuZnVsbHNjcmVlbkludGVyZmFjZSA9IHRoaXM7Ci0KLSAgICBpZiAoIW1fcGxh
eWVyVmlld0NvbnRyb2xsZXIpCi0gICAgICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIgPSBhZG9w
dE5TKFthbGxvY0FWUGxheWVyVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRoUGxheWVy
TGF5ZXJWaWV3Om1fcGxheWVyTGF5ZXJWaWV3LmdldCgpXSk7Ci0KLSAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwotICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHNldFBsYXllckNvbnRyb2xsZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBs
YXllckNvbnRyb2xsZXIoKV07Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdh
dGU6bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsKLSAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciBzZXRBbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s6bV9hbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlUGxheWJhY2tdOwotCi0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRQ
aWN0dXJlSW5QaWN0dXJlUG9zc2libGU6bV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2td
OwotCi0gICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpIHsKLSAgICAgICAgW21fdmlld0NvbnRyb2xs
ZXIgYWRkQ2hpbGRWaWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpXTsK
LSAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIGFkZFN1YnZpZXc6W21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld11dOwotICAgIH0gZWxzZQotICAgICAgICBbcGFyZW50VmlldyBhZGRT
dWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKLQotICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5pdGlh
bFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107Ci0K
LSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNs
ZWFyVUlDb2xvcigpXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QXV0
b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVCb3R0b21NYXJnaW4gfCBV
SVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVJpZ2h0TWFyZ2luKV07Ci0KLSAgICBbW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgdmlld10gc2V0TmVlZHNMYXlvdXRdOwotICAgIFtbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7Ci0gICAgICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4o
JXApIiwgdGhpcyk7Ci0KLSAgICBtX2V4aXRDb21wbGV0ZWQgPSBmYWxzZTsKLSAgICBtX2V4aXRS
ZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICBtX2VudGVyUmVxdWVzdGVkID0gdHJ1ZTsKLQotICAgIGlm
IChtb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGlj
dHVyZUluUGljdHVyZSkKLSAgICAgICAgZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgZWxz
ZSBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVN0YW5kYXJkKQotICAgICAgICBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOwotICAgIGVsc2UK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0dXJl
SW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIAotICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBpc1BpY3R1cmVJblBpY3R1cmVQb3NzaWJsZV0pCi0gICAgICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHN0YXJ0UGljdHVyZUluUGljdHVyZV07Ci0gICAgZWxzZQotICAgICAgICBmYWls
ZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpCi17Ci0gICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuU3RhbmRhcmQoJXApIiwgdGhpcyk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgaWYgKFttX3BsYXllclZp
ZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZUFjdGl2ZV0pIHsKLSAgICAgICAgLy8gTk9U
RTogVGhlIGZ1bGxzY3JlZW4gbW9kZSB3aWxsIGJlIHJlc3RvcmVkIGluIHByZXBhcmVGb3JQaWN0
dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcigpLgotICAgICAgICBtX3Nob3Vs
ZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IHRydWU7Ci0gICAgICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbkFu
aW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbdGhpcywgcHJvdGVjdGVkVGhpc10gKEJPT0wg
c3VjY2VlZGVkLCBOU0Vycm9yKikgewotICAgICAgICBVTlVTRURfUEFSQU0oc3VjY2VlZGVkKTsK
LSAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXApIC0gc3VjY2VlZGVkKCVzKSIs
IHRoaXMsIGJvb2xTdHJpbmcoc3VjY2VlZGVkKSk7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwotCi0gICAgICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB9XTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgZmluYWxSZWN0KQotewotICAgIG1fd2F0Y2hkb2dUaW1lci5zdG9wKCk7Ci0KLSAg
ICBtX2V4aXRSZXF1ZXN0ZWQgPSB0cnVlOwotICAgIGlmIChtX2V4aXRDb21wbGV0ZWQpIHsKLSAg
ICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0gICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKLSAgICAKLSAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVy
dFJlY3Q6ZmluYWxSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBl
cnZpZXddOwotCi0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5
ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0gICAgaWYgKFtwbGF5
ZXJMYXllciB2aWRlb0dyYXZpdHldICE9IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3QoKSkKLSAgICAgICAgW3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpnZXRBVkxheWVyVmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0KCldOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBsYXlvdXRJZk5lZWRlZF07Ci0KLSAgICBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKSB7Ci0gICAgICAgIG1f
c2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7Ci0gICAgICAg
IFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSB8IEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgewotICAgICAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5p
bWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBO
U0Vycm9yKikgewotICAgICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAgICAgICAgIFttX3dpbmRvdyBzZXRI
aWRkZW46Tk9dOwotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1
cmVJblBpY3R1cmVdOwotICAgICAgICB9XTsKLSAgICB9IGVsc2UgaWYgKGlzTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKLSAgICAgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1h
dGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5T
RXJyb3IqKSB7Ci0gICAgICAgICAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwotCi0gICAgICAg
ICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBz
ZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgICAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNl
dEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAgICAgICBbW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsK
LSAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0KLSAgICAgICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlz
XSgpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0g
ICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVs
bHNjcmVlbigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH1dOwotICAgIH07Ci19Ci0KLUBp
bnRlcmZhY2UgVUlBcHBsaWNhdGlvbiAoKQotLSAodm9pZClfc2V0U3RhdHVzQmFyT3JpZW50YXRp
b246KFVJSW50ZXJmYWNlT3JpZW50YXRpb24pbzsKLUBlbmQKLQotQGludGVyZmFjZSBVSVdpbmRv
dyAoKQotLSAoVUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZhY2VPcmllbnRhdGlvbjsKLUBl
bmQKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxz
Y3JlZW4oKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotICAgIGlmIChtX3dpbmRv
dykgewotICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIFttX3dpbmRv
dyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bmlsXTsKLSAgICAgICAgaWYgKG1fcGFyZW50V2luZG93
KQotICAgICAgICAgICAgW1tnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBzaGFyZWRBcHBsaWNhdGlv
bl0gX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOlttX3BhcmVudFdpbmRvdyBpbnRlcmZhY2VPcmll
bnRhdGlvbl1dOwotICAgIH0KLSAgICAKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRE
ZWxlZ2F0ZTpuaWxdOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFBsYXllckNvbnRy
b2xsZXI6bmlsXTsKLSAgICAKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkKLSAgICAgICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgIGlmIChoYXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKLSAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21w
bGV0aW9uSGFuZGxlcjpbXSAoQk9PTCwgTlNFcnJvciAqKSB7IH1dOwotICAgIAotICAgIFtbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICBpZiAo
bV92aWV3Q29udHJvbGxlcikKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcmVtb3Zl
RnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsKLSAgICAKLSAgICBbbV9wbGF5ZXJMYXllclZpZXcg
cmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIHJlbW92
ZUZyb21TdXBlcnZpZXddOwotCi0gICAgbV9wbGF5ZXJMYXllclZpZXcgPSBuaWw7Ci0gICAgbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciA9IG5pbDsKLSAgICBtX3dpbmRvdyA9IG5pbDsKLSAgICBtX3Bh
cmVudFZpZXcgPSBuaWw7Ci0gICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7Ci0gICAgCi0gICAgaWYg
KG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLQotICAgIG1fZW50ZXJSZXF1ZXN0ZWQg
PSBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aW52
YWxpZGF0ZSgpCi17Ci0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKLSAgICBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKLSAgICAKLSAgICBjbGVhbnVwRnVsbHNjcmVl
bigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0
SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKLXsKLSAgICBpZiAoIW1fZW50ZXJSZXF1ZXN0ZWQpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAgICBb
bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddIHNldEhpZGRlbjpZRVNdOwotCi0gICAgaWYgKHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkg
JiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiAhbV9leGl0UmVxdWVzdGVkKSB7Ci0gICAgICAg
IHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7Ci0gICAgICAgIG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2li
bGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5l
KCVwKSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSk7Ci0gICAgaWYg
KG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spIHsKLSAgICAgICAgCi0gICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpp
bmxpbmVSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXdd
OwotCi0gICAgICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gY2FsbGJhY2sgPSBXVEZNb3Zl
KG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spOwotICAgICAgICBjYWxsYmFjayh2aXNpYmxlKTsK
LSAgICB9Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Om1heUF1
dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gW3BsYXllckNvbnRyb2xsZXIoKSBpc1BsYXlpbmddICYmIG1fbW9kZSA9PSBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCAmJiBzdXBwb3J0c1BpY3R1
cmVJblBpY3R1cmUoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChib29sKT4m
JiBjYWxsYmFjaykKLXsKLSAgICBtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayk7Ci0gICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICBt
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBp
Y3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7
Ci0gICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQ
aWN0dXJlSW5QaWN0dXJlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1
cmUoJXApIiwgdGhpcyk7Ci0gICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVy
aW5nRm9yZWdyb3VuZCA9IFttX3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVX
YXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF07Ci0gICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0KLSAgICBpZiAobV9tb2RlICYg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHsKLSAg
ICAgICAgaWYgKCFbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3Rh
cnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdKSB7Ci0gICAgICAgICAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBj
b21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7
Ci0gICAgICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAg
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLSAgICAg
ICAgICAgIH1dOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW21fd2luZG93IHNl
dEhpZGRlbjpZRVNdOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0
SGlkZGVuOllFU107Ci0gICAgfQotCi0gICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KQotICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVu
KCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRv
U3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgl
cCkiLCB0aGlzKTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNr
Q29udHJvbHM6WUVTXTsKLQotICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9l
eGl0Q29tcGxldGVkID0gdHJ1ZTsKLQotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVl
bigpOwotCi0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOwotICAgIG1fc2hv
dWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxzZTsKLQot
ICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Ondp
bGxTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICBpZiAoaGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0
b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApCi0gICAgICAgIHJldHVybjsK
LQotICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBzZXRIaWRkZW46Tk9dOwotCi0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBp
Y3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIGlmICho
YXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
KSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkgewotICAg
ICAgICAvLyBBU1NVTVBUSU9OOiB3ZSBhcmUgZXhpdGluZyBwaXAgYmVjYXVzZSB3ZSBhcmUgZW50
ZXJpbmcgZnVsbHNjcmVlbgotICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0gICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKLQotICAgIFttX3Bs
YXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAgIFtb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNv
bG9yKCldOwotCi0gICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIAotICAgIGlmIChtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4
aXRGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2
b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpKQotewotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0
dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciglcCkiLCB0aGlzKTsKLSAgICBp
ZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgfHwgbV9zaG91bGRS
ZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCkgewotICAgICAgICBtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOwotICAgICAgICBt
X3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gZmFsc2U7
Ci0gICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wID0g
dHJ1ZTsKLQotICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW1ttX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107Ci0KLSAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25I
YW5kbGVyOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yKikgewotICAgICAgICAgICAgbV9yZXN0b3Jp
bmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgPSBmYWxzZTsKLSAgICAgICAgICAg
IHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRh
cmQpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3VjY2Vzcyk7Ci0gICAgICAgICAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwotICAgICAgICB9XTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBSZXRhaW5QdHI8aWQ+IHN0
cm9uZ0NvbXBsZXRpb25IYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0p
OwotICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShbcHJvdGVjdGVkVGhpcywgc3Ryb25n
Q29tcGxldGlvbkhhbmRsZXJdKGJvb2wgcmVzdG9yZWQpICB7Ci0gICAgICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJl
SW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciBsYW1iZGEoJXApIC0gcmVzdG9yZWQo
JXMpIiwgcHJvdGVjdGVkVGhpcy5nZXQoKSwgYm9vbFN0cmluZyhyZXN0b3JlZCkpOwotICAgICAg
ICB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpID0gc3Ryb25nQ29tcGxl
dGlvbkhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3RvcmVkKTsK
LSAgICB9KTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2hv
dWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCi17Ci0gICAgaWYgKCFtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZWFzb24gPT0g
RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVkKSB7Ci0gICAgICAg
IGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdo
ZW5FbnRlcmluZ0JhY2tncm91bmRdKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gaGFzTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7Ci0gICAg
ICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh3ZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCgpICYmIChyZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRv
bmVCdXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVD
b250cm9sU3RvcEV2ZW50UmVjZWl2ZWQpKQotICAgICAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpLT5wYXVzZSgpOwotICAgIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RG
dWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVO
b25lLCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQpOwot
Ci0gICAgaWYgKCFtX3dhdGNoZG9nVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV93YXRjaGRv
Z1RpbWVyLnN0YXJ0T25lU2hvdChkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsKTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCkKLXsKLSAgICBM
T0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRv
Z1RpbWVyRmlyZWQoJXApIC0gbm8gZXhpdCBmdWxsc2NyZWVuIHJlc3BvbnNlIGluICVnczsgZm9y
Y2luZyBmdWxsc2NyZWVuIGhpZGRlbi4iLCB0aGlzLCBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVy
dmFsLnZhbHVlKCkpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFttX3dpbmRvdyBz
ZXRIaWRkZW46WUVTXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlk
ZGVuOllFU107Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17
Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUg
PSBtX21vZGUgfCBtb2RlOwotICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9tb2RlID0gbmV3TW9kZTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKG1fbW9kZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3
TW9kZSA9IG1fbW9kZSAmIH5tb2RlOwotICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9tb2RlID0gbmV3TW9kZTsKLSAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKG1fbW9kZSk7Ci19Ci0KLSNlbmRpZiAvLyBIQVZFKEFWS0lUKQotCi1ib29sIFdl
YkNvcmU6OnN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TKSAm
JiBIQVZFKEFWS0lUKQotICAgIHJldHVybiBbZ2V0QVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxl
ckNsYXNzKCkgaXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydGVkXTsKLSNlbHNlCi0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWI4MTJkYTZkNmEyYWNkMGJiNjVjZmFkNDk2MTA5OGVhYzQ2YmUy
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQorCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5j
bHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNz
aW9uTW9kZWwuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworT0JKQ19DTEFT
UyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgSW50UmVjdDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsOworCitjbGFzcyBXRUJDT1JF
X0VYUE9SVCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgZmluYWwKKyAgICA6IHB1YmxpYyBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudAorICAgICwgcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOworICAgIHZpcnR1YWwgflBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYygpOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0K
KworICAgIC8vIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVzZXRNZWRpYVN0YXRlKCkgZmluYWwgeyB9CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJs
ZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91
YmxlIC8qY3VycmVudFRpbWUqLywgZG91YmxlIC8qYW5jaG9yVGltZSovKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyppc1BsYXlpbmcqLywgZmxvYXQg
LypwbGF5YmFja1JhdGUqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWVrYWJs
ZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSAvKmxhc3RNb2RpZmllZFRp
bWUqLywgZG91YmxlIC8qbGl2ZVVwZGF0ZUludGVydmFsKi8pIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyovLCB1aW50NjRfdCAvKnNlbGVjdGVk
SW5kZXgqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAv
Km9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4Ki8pIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3QpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxpemVk
RGV2aWNlTmFtZSAqLykgZmluYWw7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRh
dGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOwor
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyICopOworICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
ICpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBiZWdpblNjcnViYmluZygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kU2NydWJi
aW5nKCk7CisKK3ByaXZhdGU6CisgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFBsYXli
YWNrU2Vzc2lvbk1vZGVsJik7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tT
ZXNzaW9uTW9kZWwgeyBudWxscHRyIH07CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptX3BsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyICB7IG51bGxwdHIgfTsKKworICAgIHZvaWQgdXBkYXRlUGxheWJhY2tDb250
cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwg
ZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpOworI2VuZGlmCisKK307CisKK30K
KworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTllZjIyMzA2OWE5Y2VlOWYxMTI1
MTNiYmZlZjBiMTJjNjdiMjRlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KQEAgLTAsMCArMSwyNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkKKworI2ltcG9ydCAiQVZLaXRTUEkuaCIKKyNpbXBvcnQg
IkludFJlY3QuaCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisjaW1wb3J0ICJN
ZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgi
CisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorCisjaW1wb3J0ICJDb3Jl
TWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQor
U09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjPiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZShQ
bGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCit7CisgICAgYXV0byBpbnRlcmZhY2UgPSBhZG9w
dFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhtb2RlbCkpOworICAgIG1vZGVs
LmFkZENsaWVudChpbnRlcmZhY2UpOworICAgIHJldHVybiBpbnRlcmZhY2U7Cit9CisKK1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFBsYXli
YWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKKyAgICA6IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1v
ZGVsKQoreworfQorCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMoKQoreworICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit7
CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpOworCisgICAgY29udHJvbHNNYW5hZ2VyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9u
OworCisgICAgLy8gRklYTUU6IFdlIHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxh
eWJhY2sgaXMgcmVhZHksIGJ1dCB0aGF0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLgorICAgIGNv
bnRyb2xzTWFuYWdlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7CisgICAgY29udHJvbHNNYW5hZ2Vy
Lmhhc0VuYWJsZWRWaWRlbyA9IFlFUzsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGR1cmF0aW9u
KTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVu
dFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7Cisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdl
cigpOworICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGN1cnJlbnRUaW1l
LCBhbmNob3JUaW1lLCBjb250cm9sc01hbmFnZXIucmF0ZSwgY29udHJvbHNNYW5hZ2VyLnBsYXlp
bmcpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudFRpbWUpOworICAgIFVOVVNFRF9Q
QVJBTShhbmNob3JUaW1lKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkK
K3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNN
YW5hZ2VyKCk7CisgICAgW2NvbnRyb2xzTWFuYWdlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXli
YWNrUmF0ZSA6IDAuXTsKKyAgICBbY29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6aXNQbGF5aW5n
XTsKKyAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXliYWNrU2Vz
c2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6IDAsIFtb
TlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgcGxheWJhY2tSYXRlLCBp
c1BsYXlpbmcpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaXNQbGF5aW5nKTsKKyAgICBVTlVT
RURfUEFSQU0ocGxheWJhY2tSYXRlKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6YmVnaW5TY3J1YmJpbmcoKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRp
bWluZyhtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3Vy
cmVudFRpbWUoKSA6IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1l
XSwgMCwgZmFsc2UpOworI2VuZGlmCisgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+YmVnaW5T
Y3J1YmJpbmcoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuZFNj
cnViYmluZygpCit7CisgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7
Cit9CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCitzdGF0aWMg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0aW1lUmFuZ2VzVG9BcnJheShjb25zdCBUaW1lUmFu
Z2VzJiB0aW1lUmFuZ2VzKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmFuZ2VB
cnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgeworICAgICAg
ICBjb25zdCBQbGF0Zm9ybVRpbWVSYW5nZXMmIHJhbmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCk7
CisgICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01UaW1lUmFuZ2VNYWtlKHRvQ01UaW1lKHJh
bmdlcy5zdGFydChpKSksIHRvQ01UaW1lKHJhbmdlcy5lbmQoaSkpKTsKKyAgICAgICAgW3Jhbmdl
QXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07Cisg
ICAgfQorCisgICAgcmV0dXJuIHJhbmdlQXJyYXk7Cit9CisjZW5kaWYKKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFu
Z2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUsIGRvdWJsZSkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0
U2Vla2FibGVUaW1lUmFuZ2VzOnRpbWVSYW5nZXNUb0FycmF5KHRpbWVSYW5nZXMpLmdldCgpXTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRpbWVSYW5nZXMpOworI2VuZGlmCit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01B
TkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRl
Z2VyPihzZWxlY3RlZEluZGV4KV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsK
KyAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRl
Z2VyPihzZWxlY3RlZEluZGV4KV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsK
KyAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRp
YVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5kZXhdOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAg
ICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eDpzZWxlY3RlZEluZGV4XTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgp
OworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3sKKyNpZiBFTkFCTEUoV0VC
X1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2Vy
KCkgc2V0Q2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZTohZW5hYmxlZF07CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5yZW1v
dmVDbGllbnQoKnRoaXMpOworICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRyOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5h
Z2VyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAg
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorCitXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAq
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpCit7
CisgICAgcmV0dXJuIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXI7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlcikKK3sKKyAgICBtX3BsYXliYWNrQ29udHJvbHNN
YW5hZ2VyID0gbWFuYWdlcjsKKworICAgIGlmICghbWFuYWdlciB8fCAhbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGlt
ZVN0YW1wID0gIVttYW5hZ2VyIHJhdGVdID8gTkFOIDogW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJ
bmZvXSBzeXN0ZW1VcHRpbWVdOworICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1p
bmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOm1fcGxheWJhY2tTZXNzaW9uTW9k
ZWwtPmN1cnJlbnRUaW1lKCkgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRlOjBd
OworICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmR1cmF0aW9u
KCk7CisgICAgbWFuYWdlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBtYW5hZ2Vy
Lmhhc0VuYWJsZWRBdWRpbyA9IGR1cmF0aW9uID4gMDsKKyAgICBtYW5hZ2VyLmhhc0VuYWJsZWRW
aWRlbyA9IGR1cmF0aW9uID4gMDsKKyAgICBtYW5hZ2VyLnJhdGUgPSBtX3BsYXliYWNrU2Vzc2lv
bk1vZGVsLT5pc1BsYXlpbmcoKSA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBsYXliYWNrUmF0
ZSgpIDogMC47CisgICAgbWFuYWdlci5zZWVrYWJsZVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2VzVG9B
cnJheShtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZWVrYWJsZVJhbmdlcygpKS5nZXQoKTsKKyAg
ICBtYW5hZ2VyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOworICAgIG1hbmFnZXIucGxheWluZyA9
IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpOworICAgIFttYW5hZ2VyIHNldEF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50
ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSld
OworICAgIFttYW5hZ2VyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6bV9wbGF5YmFj
a1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3Rl
ZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSldOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzo6dXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1
cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBp
c1BsYXlpbmcpCit7CisgICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworICAgIGlmICghbWFuYWdlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwgKm1vZGVsID0gcGxheWJhY2tTZXNzaW9u
TW9kZWwoKTsKKyAgICBpZiAoIW1vZGVsKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUg
ZWZmZWN0aXZlQW5jaG9yVGltZSA9IHBsYXliYWNrUmF0ZSA/IGFuY2hvclRpbWUgOiBOQU47Cisg
ICAgZG91YmxlIGVmZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKKyAgICBpZiAo
IWlzUGxheWluZworICAgICAgICB8fCBtb2RlbC0+aXNTY3J1YmJpbmcoKQorICAgICAgICB8fCAo
bWFuYWdlci5yYXRlID4gMCAmJiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGltZSgpID49IGN1cnJl
bnRUaW1lKQorICAgICAgICB8fCAobWFuYWdlci5yYXRlIDwgMCAmJiBtb2RlbC0+cGxheWJhY2tT
dGFydGVkVGltZSgpIDw9IGN1cnJlbnRUaW1lKSkKKyAgICAgICAgZWZmZWN0aXZlUGxheWJhY2tS
YXRlID0gMDsKKworICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygp
IHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lIGFuY2hvclRpbWVTdGFtcDpl
ZmZlY3RpdmVBbmNob3JUaW1lIHJhdGU6ZWZmZWN0aXZlUGxheWJhY2tSYXRlXTsKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKworfQorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM3NGI4NDhmYWY5YjI5MGVlZjg2YTcyOTAyYjYz
MGRkZGJlYzE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisKKyNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2lu
Y2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hY09iakM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJl
Y3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7
CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKKworY2xhc3MgV0VCQ09SRV9F
WFBPUlQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCisgICAgOiBwdWJsaWMgVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQKKyAgICAsIHByaXZhdGUgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQKKyAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4g
eworCitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+
IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyhwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKKyAgICB9CisgICAgdmly
dHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCk7CisgICAgVmlkZW9GdWxsc2NyZWVu
TW9kZWwqIHZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbDsgfQorICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25N
b2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbChWaWRlb0Z1bGxzY3JlZW5Nb2RlbCopOworICAgIFZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKiB2aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlciopOworCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFj
a1JhdGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoYm9vbCAgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJy
aWRlOworCisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9z
dGVkVmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5k
b3csIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxv
d3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW50
ZXJGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleGl0RnVsbHNjcmVlbihj
b25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
aW52YWxpZGF0ZSgpOworICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpIHsg
fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wg
dmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRv
dyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKKwor
ICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgJiBt
b2RlOyB9CisgICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9CisgICAgdm9p
ZCBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Cisg
ICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKTsKKworICAgIGJvb2wgaXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNv
bnN0OworCisgICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29t
ZUFjdGl2ZSgpIHsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjT2JqQyAqdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpOworCitwcml2YXRl
OgorICAgIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMmKTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBtX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ciogbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CisgICAgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKKyAgICBSZXRhaW5QdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQz4gbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDOworfTsKKworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODE0MGUzOWNiYWRhMTRlZWMwOWJkOTIwNDFiN2ViNDg5ZjI0ZjZiYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMubW0KQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJJbnRS
ZWN0LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRp
b24uaCIKKyNpbXBvcnQgIlBJUFNQSS5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNp
bXBvcnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRp
b24vQVZUaW1lLmg+CisKKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCisKK1NPRlRfTElO
S19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZL
aXQsIEFWVmFsdWVUaW1pbmcpCisKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05B
TChQSVApCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUElQLCBQSVBWaWV3Q29udHJvbGxlcikK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BjbGFzcyBXZWJWaWRlb1ZpZXdDb250YWlu
ZXI7CisKK0Bwcm90b2NvbCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+
CisKKy0gKHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRl
b1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXI7CistICh2b2lkKXN1cGVydmlld0Rp
ZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlk
ZW9WaWV3Q29udGFpbmVyOworCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9WaWV3Q29udGFp
bmVyIDogTlNWaWV3IHsKKyAgICBpZCA8V2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IF92
aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTsKK30KKworQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbikgaWQgPFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB2aWRlb1ZpZXdDb250YWlu
ZXJEZWxlZ2F0ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9WaWV3Q29udGFp
bmVyCisKK0BzeW50aGVzaXplIHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPV92aWRlb1ZpZXdD
b250YWluZXJEZWxlZ2F0ZTsKKworLSAodm9pZClyZXNpemVXaXRoT2xkU3VwZXJ2aWV3U2l6ZToo
TlNTaXplKW9sZEJvdW5kc1NpemUKK3sKKyAgICBbc3VwZXIgcmVzaXplV2l0aE9sZFN1cGVydmll
d1NpemU6b2xkQm91bmRzU2l6ZV07CisKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRl
IGJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjpzZWxmXTsKK30KKworLSAodm9p
ZCl2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3Cit7CisgICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9TdXBl
cnZpZXddOworCisgICAgW192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBzdXBlcnZpZXdEaWRD
aGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6c2VsZl07Cit9CisKK0BlbmQKKworZW51bSBjbGFz
cyBQSVBTdGF0ZSB7CisgICAgTm90SW5QSVAsCisgICAgSW5QSVAsCisgICAgRXhpdGluZ1BJUAor
fTsKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIDogTlNP
YmplY3QgPFBJUFZpZXdDb250cm9sbGVyRGVsZWdhdGUsIFdlYlZpZGVvVmlld0NvbnRhaW5lckRl
bGVnYXRlPiB7CisgICAgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKiBfdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOworICAgIE5TU2l6ZSBfdmlkZW9EaW1lbnNpb25zOwor
ICAgIFJldGFpblB0cjxQSVBWaWV3Q29udHJvbGxlcj4gX3BpcFZpZXdDb250cm9sbGVyOworICAg
IFJldGFpblB0cjxOU1ZpZXdDb250cm9sbGVyPiBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxl
cjsKKyAgICBSZXRhaW5QdHI8V2ViVmlkZW9WaWV3Q29udGFpbmVyPiBfdmlkZW9WaWV3Q29udGFp
bmVyOworICAgIFBJUFN0YXRlIF9waXBTdGF0ZTsKKyAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IF9y
ZXR1cm5pbmdXaW5kb3c7CisgICAgTlNSZWN0IF9yZXR1cm5pbmdSZWN0OworICAgIEJPT0wgX3Bs
YXlpbmc7CisgICAgQk9PTCBfZGlkUmVxdWVzdEV4aXRpbmdQSVA7CisgICAgQk9PTCBfZXhpdGlu
Z1RvU3RhbmRhcmRGdWxsc2NyZWVuOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYyopdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOworLSAodm9pZClpbnZhbGlkYXRlRnVs
bHNjcmVlblN0YXRlOworLSAodm9pZClpbnZhbGlkYXRlOworCisvLyBUcmFja2luZyB2aWRlbyBw
bGF5YmFjayBzdGF0ZQorQHByb3BlcnR5IChub25hdG9taWMpIE5TU2l6ZSB2aWRlb0RpbWVuc2lv
bnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5n
OworLSAodm9pZCl1cGRhdGVJc1BsYXlpbmc6KEJPT0wpaXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0
ZTooZmxvYXQpcGxheWJhY2tSYXRlOworCisvLyBIYW5kbGluZyBQSVAgdHJhbnNpdGlvbnMKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBkaWRSZXF1ZXN0RXhpdGluZ1BJUDsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3Jl
ZW4pIEJPT0wgZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOworCistICh2b2lkKXNldFVwUElQ
Rm9yVmlkZW9WaWV3OihOU1ZpZXcgKil2aWRlb1ZpZXcgd2l0aEZyYW1lOihOU1JlY3QpZnJhbWUg
aW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93OworLSAodm9pZCllbnRlclBJUDsKKy0gKHZvaWQp
ZXhpdFBJUDsKKy0gKHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJlY3QgaW5X
aW5kb3c6KE5TV2luZG93ICopd2luZG93OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDCisKK0BzeW50aGVzaXplIHBsYXlpbmc9X3Bs
YXlpbmc7CitAc3ludGhlc2l6ZSB2aWRlb0RpbWVuc2lvbnM9X3ZpZGVvRGltZW5zaW9uczsKK0Bz
eW50aGVzaXplIGRpZFJlcXVlc3RFeGl0aW5nUElQPV9kaWRSZXF1ZXN0RXhpdGluZ1BJUDsKK0Bz
eW50aGVzaXplIGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbj1fZXhpdGluZ1RvU3RhbmRhcmRG
dWxsc2NyZWVuOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyopdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0g
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOworICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpO
b3RJblBJUDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWludmFsaWRhdGVGdWxs
c2NyZWVuU3RhdGUKK3sKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07
CisgICAgX3BpcFZpZXdDb250cm9sbGVyID0gbmlsOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVy
IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldFZpZGVv
Vmlld0NvbnRhaW5lckRlbGVnYXRlOm5pbF07CisgICAgX3ZpZGVvVmlld0NvbnRhaW5lciA9IG5p
bDsKKyAgICBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciA9IG5pbDsKKyAgICBfcGlwU3Rh
dGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7CisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gTk87
CisgICAgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbiA9IE5POworICAgIF9yZXR1cm5pbmdX
aW5kb3cgPSBuaWw7CisgICAgX3JldHVybmluZ1JlY3QgPSBOU1plcm9SZWN0OworfQorCistICh2
b2lkKWludmFsaWRhdGUKK3sKKyAgICBbc2VsZiBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsK
KyAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gbnVsbHB0cjsKKyAgICBfdmlkZW9E
aW1lbnNpb25zID0gTlNaZXJvU2l6ZTsKK30KKworLSAodm9pZCl1cGRhdGVJc1BsYXlpbmc6KEJP
T0wpaXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTooZmxvYXQpcGxheWJhY2tSYXRlCit7CisgICAg
X3BsYXlpbmcgPSBpc1BsYXlpbmcgJiYgcGxheWJhY2tSYXRlOworCisgICAgW19waXBWaWV3Q29u
dHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKK30KKworLSAodm9pZClzZXRWaWRlb0RpbWVu
c2lvbnM6KE5TU2l6ZSl2aWRlb0RpbWVuc2lvbnMKK3sKKyAgICBfdmlkZW9EaW1lbnNpb25zID0g
dmlkZW9EaW1lbnNpb25zOworCisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRBc3BlY3RSYXRp
bzpfdmlkZW9EaW1lbnNpb25zXTsKK30KKworLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzoo
TlNWaWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG93OihOU1dp
bmRvdyAqKXdpbmRvdworeworICAgIEFTU0VSVCghX3BpcFZpZXdDb250cm9sbGVyKTsKKyAgICBB
U1NFUlQoIV92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyKTsKKyAgICBBU1NFUlQoIV92aWRl
b1ZpZXdDb250YWluZXIpOworCisgICAgX3BpcFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxs
b2NQSVBWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdF0pOworICAgIFtfcGlwVmlld0NvbnRy
b2xsZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRVc2Vy
Q2FuUmVzaXplOllFU107CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5
aW5nXTsKKyAgICBbc2VsZiBzZXRWaWRlb0RpbWVuc2lvbnM6TlNFcXVhbFNpemVzKF92aWRlb0Rp
bWVuc2lvbnMsIE5TWmVyb1NpemUpID8gZnJhbWUuc2l6ZSA6IF92aWRlb0RpbWVuc2lvbnNdOwor
ICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJH
cmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxs
KTsKKworICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBhZG9wdE5TKFtbV2ViVmlkZW9WaWV3Q29u
dGFpbmVyIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXSk7CisgICAgW192aWRlb1ZpZXdDb250
YWluZXIgc2V0VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU6c2VsZl07CisgICAgW192aWRlb1Zp
ZXdDb250YWluZXIgYWRkU3Vidmlldzp2aWRlb1ZpZXddOworICAgIHZpZGVvVmlldy5mcmFtZSA9
IFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc107CisgICAgdmlkZW9WaWV3LmF1dG9yZXNpemlu
Z01hc2sgPSBOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOworCisgICAg
X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbTlNWaWV3Q29udHJvbGxl
ciBhbGxvY10gaW5pdF0pOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciBzZXRW
aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCldOworICAgIFt3aW5kb3cuY29udGVudFZpZXcg
YWRkU3VidmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dB
Ym92ZSByZWxhdGl2ZVRvOm5pbF07Cit9CisKKy0gKHZvaWQpZW50ZXJQSVAKK3sKKyAgICBpZiAo
X3BpcFN0YXRlID09IFBJUFN0YXRlOjpJblBJUCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW192
aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHZpZXddLmxheWVyLmJhY2tncm91bmRDb2xvciA9
IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQmxhY2spOworICAgIFtfcGlwVmlld0Nv
bnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVyQXNQaWN0dXJlSW5QaWN0dXJlOl92aWRlb1Zp
ZXdDb250YWluZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6
SW5QSVA7Cit9CisKKy0gKHZvaWQpZXhpdFBJUAoreworICAgIGlmIChfcGlwU3RhdGUgIT0gUElQ
U3RhdGU6OkluUElQIHx8ICFfcGlwVmlld0NvbnRyb2xsZXIgfHwgIV92aWRlb1ZpZXdDb250YWlu
ZXJDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBfZGlkUmVxdWVzdEV4aXRpbmdQ
SVAgPSBZRVM7CisgICAgW192aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHZpZXddLmxheWVy
LmJhY2tncm91bmRDb2xvciA9IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQ2xlYXIp
OworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250cm9sbGVyOl92aWRlb1Zp
ZXdDb250YWluZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6
RXhpdGluZ1BJUDsKK30KKworLSAodm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3Qp
cmVjdCBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBfcmV0dXJuaW5nV2luZG93
ID0gd2luZG93OworICAgIF9yZXR1cm5pbmdSZWN0ID0gcmVjdDsKKyAgICAKKyAgICBbX3BpcFZp
ZXdDb250cm9sbGVyIHNldFJlcGxhY2VtZW50UmVjdDpyZWN0XTsKKyAgICBbX3BpcFZpZXdDb250
cm9sbGVyIHNldFJlcGxhY2VtZW50V2luZG93OndpbmRvd107CisKKyAgICBbc2VsZiBleGl0UElQ
XTsKK30KKworLy8gV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUKKworLSAodm9pZClib3Vu
ZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAq
KXZpZGVvVmlld0NvbnRhaW5lcgoreworICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5lciB8fCAh
X3BpcFZpZXdDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfVU5VU0VE
KHZpZGVvVmlld0NvbnRhaW5lciwgdmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250
YWluZXIpOworCisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKKyAgICAgICAg
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0
VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOworfQorCistICh2
b2lkKXN1cGVydmlld0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3
Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyCit7CisgICAgaWYgKCFfdmlkZW9WaWV3Q29u
dGFpbmVyIHx8ICFfcGlwVmlld0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVCh2aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7CisKKyAgICBp
ZiAoIVt2aWRlb1ZpZXdDb250YWluZXIgaXNEZXNjZW5kYW50T2Y6W19waXBWaWV3Q29udHJvbGxl
ciB2aWV3XV0pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE9uY2UgdGhlIHZpZXcgaXMgbW92
ZWQgaW50byB0aGUgcGlwIHZpZXcsIG1ha2Ugc3VyZSBpdCByZXNpemVzIHdpdGggdGhlIHBpcCB2
aWV3LgorICAgIHZpZGVvVmlld0NvbnRhaW5lci5mcmFtZSA9IFt2aWRlb1ZpZXdDb250YWluZXIg
c3VwZXJ2aWV3XS5ib3VuZHM7CisgICAgdmlkZW9WaWV3Q29udGFpbmVyLmF1dG9yZXNpemluZ01h
c2sgPSBOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOworfQorCisvLyBQ
SVBWaWV3Q29udHJvbGxlckRlbGVnYXRlCisKKy0gKEJPT0wpcGlwU2hvdWxkQ2xvc2U6KFBJUFZp
ZXdDb250cm9sbGVyICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlw
Vmlld0NvbnRyb2xsZXIpOworCisgICAgaWYgKCFfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
IHx8ICFfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcigpKQorICAgICAgICByZXR1cm4gWUVTOworCisgICAgX2RpZFJlcXVlc3RFeGl0aW5n
UElQID0gWUVTOworICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKCktPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworCisg
ICAgcmV0dXJuIE5POworfQorCistICh2b2lkKXBpcERpZENsb3NlOihQSVBWaWV3Q29udHJvbGxl
ciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9s
bGVyKTsKKworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgJiYgX3ZpZGVvVmll
d0NvbnRhaW5lciAmJiBfcmV0dXJuaW5nV2luZG93ICYmICFOU0VxdWFsUmVjdHMoX3JldHVybmlu
Z1JlY3QsIE5TWmVyb1JlY3QpKSB7CisgICAgICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgcnVuQW5p
bWF0aW9uR3JvdXA6XihOU0FuaW1hdGlvbkNvbnRleHQgKmNvbnRleHQpIHsKKyAgICAgICAgICAg
IGNvbnRleHQuYWxsb3dzSW1wbGljaXRBbmltYXRpb24gPSBOTzsKKyAgICAgICAgICAgIFtfdmlk
ZW9WaWV3Q29udGFpbmVyIHNldEZyYW1lOl9yZXR1cm5pbmdSZWN0XTsKKyAgICAgICAgICAgIF92
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZp
ZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKKyAgICAgICAgICAg
IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNl
dFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3QpOworCisgICAgICAgICAgICBbW19yZXR1cm5pbmdXaW5kb3cgY29udGVudFZpZXdd
IGFkZFN1YnZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93
QWJvdmUgcmVsYXRpdmVUbzpuaWxdOworICAgICAgICB9IGNvbXBsZXRpb25IYW5kbGVyOm5pbF07
CisgICAgfQorCisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpIHsKKyAgICAg
ICAgaWYgKCFzZWxmLmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSB7CisgICAgICAgICAg
ICBpZiAoVmlkZW9GdWxsc2NyZWVuTW9kZWwqIHZpZGVvRnVsbHNjcmVlbk1vZGVsID0gX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkgeworICAgICAg
ICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgICAgICAg
ICAgICAgdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+Y2xlYXJN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBp
Y3R1cmUpOworCisgICAgICAgIGlmIChWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyID0gX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgICAgIGZ1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpcGlw
QWN0aW9uUGxheTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CisKKyAgICBpZiAoX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5w
bGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7Cit9CisKKy0gKHZvaWQpcGlwQWN0aW9uUGF1
c2U6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBp
cCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOworCisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9u
TW9kZWwoKSkKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKK30KKworLSAodm9pZClwaXBBY3Rpb25TdG9wOihQSVBW
aWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3Bp
cFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmICghX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5
YmFja1Nlc3Npb25Nb2RlbCA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNr
U2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsLT5wYXVzZSgpOwor
CisgICAgLy8gRklYTUUgMjUwOTYxNzA6IFNob3VsZCBhbmltYXRlIG9ubHkgaWYgdGhlIHBhZ2Ug
d2l0aCB0aGUgdmlkZW8gaXMgdW5vYnNjdXJlZC4gRm9yIG5vdywgYWx3YXlzIGNsb3NlIHdpdGhv
dXQgYW5pbWF0aW9uLgorICAgIFtzZWxmIGV4aXRQSVBdOworfQorCitAZW5kCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UpCisgICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UpCit7CisgICAgQVNTRVJUKG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKTsKKyAgICBhdXRvIG1vZGVsID0gbV9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgbW9kZWwtPmFkZENs
aWVudCgqdGhpcyk7CisgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSB1cGRhdGVJ
c1BsYXlpbmc6bW9kZWwtPmlzUGxheWluZygpIG5ld1BsYXliYWNrUmF0ZTptb2RlbC0+cGxheWJh
Y2tSYXRlKCldOworfQorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6On5WaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMoKQoreworICAgIGlmIChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAg
aWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjpzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9k
ZWwpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCA9IG1vZGVsOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyID0gb2JzZXJ2ZXI7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKKyAgICBpZiAobV9tb2RlID09IG5l
d01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9kZSA9IG5ld01vZGU7CisgICAgaWYg
KG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwt
PmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7CisgICAgaWYgKG1fbW9kZSA9PSBu
ZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUgPSBuZXdNb2RlOworICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFj
a1JhdGUpCit7CisgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSB1cGRhdGVJc1Bs
YXlpbmc6aXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTpwbGF5YmFja1JhdGVdOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKK3sK
KyAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7
Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpCit7CisgICAgaWYg
KCFtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMpCisgICAgICAgIG1fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQyA9IGFkb3B0TlMoW1tXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWNPYmpDIGFsbG9jXSBpbml0V2l0aFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzp0
aGlzXSk7CisKKyAgICByZXR1cm4gbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDLmdl
dCgpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2Ny
ZWVuKE5TVmlldyYgbGF5ZXJIb3N0ZWRWaWV3LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwg
TlNXaW5kb3cgKnBhcmVudFdpbmRvdywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQorewor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1
bGxzY3JlZW4oJXApLCBpbml0aWFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6
JXAsIG1vZGU6JWQiLCB0aGlzLCBpbml0aWFsUmVjdC54KCksIGluaXRpYWxSZWN0LnkoKSwgaW5p
dGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdywgbW9k
ZSk7CisKKyAgICBVTlVTRURfUEFSQU0oYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsK
KyAgICBBU1NFUlQobW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKworICAgIG1fbW9kZSA9IG1vZGU7CisKKyAgICBbdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHNldFVwUElQRm9yVmlkZW9WaWV3OiZsYXllckhv
c3RlZFZpZXcgd2l0aEZyYW1lOihOU1JlY3QpaW5pdGlhbFJlY3QgaW5XaW5kb3c6cGFyZW50V2lu
ZG93XTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNl
dHVwRnVsbHNjcmVlbigpOworICAgIH0pOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworCisg
ICAgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVQaWN0dXJlSW5QaWN0dXJlKSB7CisgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgZW50ZXJQSVBdOworCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQorICAgICAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpZRVNdOworI2VuZGlmCisK
KyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgIH0KK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKGNvbnN0
IEludFJlY3QmIGZpbmFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW4o
JXApLCBmaW5hbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwIiwgdGhpcywg
ZmluYWxSZWN0LngoKSwgZmluYWxSZWN0LnkoKSwgZmluYWxSZWN0LndpZHRoKCksIGZpbmFsUmVj
dC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09O
VFJPTFNfTUFOQUdFUikKKyAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXlCYWNr
Q29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpOT107CisjZW5kaWYK
KworICAgIGlmIChbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGRpZFJlcXVlc3RF
eGl0aW5nUElQXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGZpbmFsUmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07
CisgICAgZWxzZQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4
aXRQSVBBbmltYXRpbmdUb1JlY3Q6ZmluYWxSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhv
dXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSglcCksIG1vZGU6JWQi
LCB0aGlzLCBtb2RlKTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKKyAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpOT107CisjZW5kaWYKKworICAgIGlmIChb
bV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGRpZFJlcXVlc3RFeGl0aW5nUElQXSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVl
biA9IG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQ7CisgICAgLy8gT24gTWFjLCBzdGFuZGFyZCBmdWxsc2NyZWVuIGlzIGhhbmRsZWQgYnkg
dGhlIEZ1bGxzY3JlZW4gQVBJIGFuZCBub3QgYnkgVmlkZW9GdWxsc2NyZWVuTWFuYWdlci4KKyAg
ICAvLyBKdXN0IHVwZGF0ZSBtX21vZGUgZGlyZWN0bHkgdG8gSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgaW4gdGhhdCBjYXNlIHRvIGtlZXAKKyAgICAv
LyBtX21vZGUgaW4gc3luYyB3aXRoIHRoZSBmdWxsc2NyZWVuIG1vZGUgaW4gSFRNTE1lZGlhRWxl
bWVudC4KKyAgICBpZiAoaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4pCisgICAgICAgIG1f
bW9kZSA9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
OworCisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBzZXRFeGl0aW5nVG9T
dGFuZGFyZEZ1bGxzY3JlZW46aXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW5dOworICAgIFtt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbigpCit7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2Ny
ZWVuKCVwKSIsIHRoaXMpOworCisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyBleGl0UElQXTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGludmFs
aWRhdGVGdWxsc2NyZWVuU3RhdGVdOworCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxz
Y3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRh
dGUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjppbnZhbGlkYXRlKCVwKSIsIHRoaXMpOworCisgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9
IG5pbDsKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKKworICAgIGNsZWFu
dXBGdWxsc2NyZWVuKCk7CisKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpD
IGludmFsaWRhdGVdOworICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyA9IG5p
bDsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBjb25zdCBjaGFyKiBib29sU3RyaW5n
KGJvb2wgdmFsKQoreworICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOworfQorI2Vu
ZGlmCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0LCBOU1dpbmRv
dyAqcGFyZW50V2luZG93KQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApLCB2aXNpYmxlOiVzLCBp
bmxpbmVSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGJvb2xT
dHJpbmcodmlzaWJsZSksIGlubGluZVJlY3QueCgpLCBpbmxpbmVSZWN0LnkoKSwgaW5saW5lUmVj
dC53aWR0aCgpLCBpbmxpbmVSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOworCisgICAgaWYg
KCF2aXNpYmxlKSB7CisgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMg
ZXhpdFBJUF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQocGFyZW50V2lu
ZG93KTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmlt
YXRpbmdUb1JlY3Q6KE5TUmVjdClpbmxpbmVSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoJXApLCBlbmFi
bGVkOiVzIiwgdGhpcywgYm9vbFN0cmluZyhlbmFibGVkKSk7CisKKyAgICBpZiAoZW5hYmxlZCAm
JiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGlj
dHVyZUluUGljdHVyZSkKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW4oSW50UmVjdCgpLCBuaWwpOwor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKGJv
b2wgaGFzVmlkZW8pCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZCglcCk6JXMiLCB0aGlzLCBib29sU3RyaW5nKGhhc1Zp
ZGVvKSk7CisKKyAgICBpZiAoIWhhc1ZpZGVvKQorICAgICAgICBleGl0RnVsbHNjcmVlbldpdGhv
dXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlTm9uZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0Rp
bWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAg
IExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0RpbWVu
c2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6JS4wZiwgaGVpZ2h0OiUuMGYiLCB0aGlzLCB2aWRlb0Rp
bWVuc2lvbnMud2lkdGgoKSwgdmlkZW9EaW1lbnNpb25zLmhlaWdodCgpKTsKKworICAgIC8vIFdp
ZHRoIGFuZCBoZWlnaHQgY2FuIGJlIHplcm8gd2hlbiB3ZSBhcmUgdHJhbnNpdGlvbmluZyBmcm9t
IG9uZSB2aWRlbyB0byBhbm90aGVyLiBJZ25vcmUgemVybyB2YWx1ZXMuCisgICAgaWYgKCF2aWRl
b0RpbWVuc2lvbnMuaXNaZXJvKCkpCisgICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107Cit9CisKK2Jvb2wg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxs
c2NyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSAmJiBbbV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGlzUGxheWluZ107Cit9CisKK2Jvb2wgc3Vw
cG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICByZXR1cm4gUElQTGlicmFyeSgpICYmIGdl
dFBJUFZpZXdDb250cm9sbGVyQ2xhc3MoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
LmgKaW5kZXggNzA1ZDYzYjQ4YTk5YWVlMWU4OTM5NjU2MjQwMTMyMjQzZTQ3MmM0ZC4uNzY3ZjAx
Mjg3MzAwMDFhYjRkNzlmZTYwM2MxMjI3NzRhZjcxM2UyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgKQEAg
LTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworY2xhc3MgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOwogc3RydWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9uOwogfQog
CkBAIC01OCwxMCArNTgsMTAgQEAgV0VCQ09SRV9FWFBPUlQKICAgICBmbG9hdCBfcmF0ZTsKICAg
ICBCT09MIF9jYW5Ub2dnbGVQbGF5YmFjazsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIH0KIAotQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6
OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyogd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOworQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYyogcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwogQHByb3BlcnR5IChyZWFkd3Jp
dGUpIE5TVGltZUludGVydmFsIGNvbnRlbnREdXJhdGlvbjsKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4sIHJlYWR3cml0ZSkgQVZWYWx1ZVRpbWluZyAqdGltaW5nOwogQHByb3BlcnR5IChu
b25hdG9taWMpIE5TVGltZUludGVydmFsIHNlZWtUb1RpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KaW5k
ZXggN2I0NGEwNzRkZjI5ODA2MmY4MDUzZTllYmM3ZDMxNDUxZTgyZTVlNS4uYWJiZGI1Mjc3MjA3
MjRhZmU1NDczMTE3NDA4YjQzN2EwOTQ5MmFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQpAQCAtMjks
OCArMjksOCBAQAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAKICNpbXBv
cnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW1w
b3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmgiCiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCkBAIC01OSw4ICs1OSw4IEBAIEBzeW50aGVzaXplIGNhblRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmU7CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIGlmIChfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihudWxscHRyKTsKKyAgICBpZiAo
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CiAgICAgW3N1
cGVyIGRlYWxsb2NdOwogfQogCkBAIC05Myw3ICs5Myw3IEBAIC0gKHZvaWQpc2Vla1RvVGltZToo
TlNUaW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6KE5TVGltZUludGVydmFsKXRvbGVy
YW5jCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRvbGVyYW5jZUJlZm9yZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRvbGVyYW5jZUFmdGVyKTsKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWVrVG9UaW1lKHRpbWUpOworICAgIF9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlZWtUb1Rp
bWUodGltZSk7CiB9CiAKIC0gKHZvaWQpY2FuY2VsVGh1bWJuYWlsQW5kQXVkaW9BbXBsaXR1ZGVT
YW1wbGVHZW5lcmF0aW9uCkBAIC0xMjUsMTIgKzEyNSwxMiBAQCAtIChCT09MKWNhbkJlZ2luVG91
Y2hCYXJTY3J1YmJpbmcKIAogLSAodm9pZCliZWdpblRvdWNoQmFyU2NydWJiaW5nCiB7Ci0gICAg
X3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+YmVnaW5TY3J1YmJpbmcoKTsKKyAgICBf
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5iZWdpblNjcnViYmluZygpOwogfQogCiAtICh2
b2lkKWVuZFRvdWNoQmFyU2NydWJiaW5nCiB7Ci0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+ZW5kU2NydWJiaW5nKCk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+ZW5kU2NydWJiaW5nKCk7CiB9CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEIDwgMTAxMzAwCkBAIC0xOTIsNyArMTkyLDcgQEAgLSAodm9pZClzZXRDdXJyZW50QXVkaW9U
b3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOihBVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHQK
ICAgICBpZiAoYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbiAmJiBfYXVkaW9Ub3VjaEJhck1lZGlh
U2VsZWN0aW9uT3B0aW9ucykKICAgICAgICAgaW5kZXggPSBbX2F1ZGlvVG91Y2hCYXJNZWRpYVNl
bGVjdGlvbk9wdGlvbnMgaW5kZXhPZk9iamVjdDphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uXTsK
IAotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/IGlu
ZGV4IDogVUlOVDY0X01BWCk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCAhPSBOU05v
dEZvdW5kID8gaW5kZXggOiBVSU5UNjRfTUFYKTsKIH0KIAogLSAoTlNBcnJheTxBVlRvdWNoQmFy
TWVkaWFTZWxlY3Rpb25PcHRpb24gKj4gKilsZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9w
dGlvbnMKQEAgLTIyMiw3ICsyMjIsNyBAQCAtICh2b2lkKXNldEN1cnJlbnRMZWdpYmxlVG91Y2hC
YXJNZWRpYVNlbGVjdGlvbk9wdGlvbjooQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uTwogICAgIGlm
IChsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb24gJiYgX2xlZ2libGVUb3VjaEJhck1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucykKICAgICAgICAgaW5kZXggPSBbX2xlZ2libGVUb3VjaEJhck1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyBpbmRleE9mT2JqZWN0OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbl07
CiAKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/
IGluZGV4IDogVUlOVDY0X01BWCk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4ICE9
IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOwogfQogCiAjaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDAKQEAgLTI5Miw0NyArMjkyLDQ3IEBAIC0gKHZv
aWQpc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6KE5TVUludGVnZXIpc2VsZWN0ZWRJbmRl
eAogICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAiY3VycmVudExlZ2libGVUb3VjaEJh
ck1lZGlhU2VsZWN0aW9uT3B0aW9uIl07CiB9CiAKLS0gKFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYyopd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjCistIChQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMqKXBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYwogewotICAgIHJldHVy
biBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmdldCgpOworICAgIHJldHVybiBfcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmdldCgpOwogfQogCi0tICh2b2lkKXNldFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzooV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKil3
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKKy0gKHZvaWQpc2V0UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOihQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYwogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
ID09IHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICBpZiAoX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYyA9PSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQotICAg
ICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xz
TWFuYWdlcihudWxscHRyKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykK
KyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9s
c01hbmFnZXIobnVsbHB0cik7CiAKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
ID0gd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworICAgIF9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMgPSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiAKLSAgICBpZiAoX3dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoc2VsZik7CisgICAgaWYg
KF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKHNlbGYpOwogfQogCiAtICh2
b2lkKXRvZ2dsZVBsYXliYWNrCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMgJiYgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgaWYgKF9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGxheVN0YXRlKCk7CiB9CiAKIC0g
KHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nCiB7Ci0gICAgaWYgKCFfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjIHx8ICFfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgIGlmICghX3BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYyB8fCAhX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9u
TW9kZWwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQk9PTCBpc0N1cnJlbnRseVBsYXlpbmcg
PSBzZWxmLnBsYXlpbmc7CiAgICAgaWYgKCFpc0N1cnJlbnRseVBsYXlpbmcgJiYgcGxheWluZykK
LSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwoKS0+cGxheSgpOworICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7CiAgICAgZWxzZSBpZiAoaXNDdXJyZW50
bHlQbGF5aW5nICYmICFwbGF5aW5nKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOworICAgICAgICBfcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgp
OwogfQogCiAtIChCT09MKWlzUGxheWluZwogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjICYmIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIHJldHVybiBfd2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5pc1BsYXlpbmcoKTsKKyAgICBp
ZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICByZXR1cm4gX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+aXNQbGF5aW5nKCk7
CiAKICAgICByZXR1cm4gTk87CiB9CkBAIC0zNDAsOCArMzQwLDggQEAgLSAoQk9PTClpc1BsYXlp
bmcKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMAogLSAodm9p
ZCl0b2dnbGVQaWN0dXJlSW5QaWN0dXJlCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMgJiYgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOwor
ICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MTI0YzFlMWJmZTAxNWJkMjljMGVmMDdhNzBlMzcxYzE5
YjUxZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5o
CisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkKLQotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLU9CSkNfQ0xBU1Mg
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXI7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IEludFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKLQotY2xhc3MgV0VCQ09S
RV9FWFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIGZpbmFsCi0gICAgOiBwdWJs
aWMgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYz4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjPiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKLSAg
ICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKTsKLSAgICBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVy
biBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIGZpbmFs
IHsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKmN1cnJlbnRUaW1lKi8sIGRv
dWJsZSAvKmFuY2hvclRpbWUqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRl
Q2hhbmdlZChib29sIC8qaXNQbGF5aW5nKi8sIGZsb2F0IC8qcGxheWJhY2tSYXRlKi8pIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRp
bWVSYW5nZXMmLCBkb3VibGUgLypsYXN0TW9kaWZpZWRUaW1lKi8sIGRvdWJsZSAvKmxpdmVVcGRh
dGVJbnRlcnZhbCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiAvKm9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4Ki8pIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8q
c2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wg
LyogZW5hYmxlZCAqLywgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIGZpbmFs
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLSNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbGF5QmFj
a0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqcGxheUJhY2tDb250cm9sc01h
bmFnZXIoKTsKLSNlbmRpZgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJpbmco
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpOwotCi1wcml2YXRlOgot
ICAgIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCYpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
IHsgbnVsbHB0ciB9OwotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
LSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdl
ciAgeyBudWxscHRyIH07Ci0KLSAgICB2b2lkIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
VGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5
YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKTsKLSNlbmRpZgotCi19OwotCi19Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjQ0YTYx
YzUwZTAxNjJjM2MxMGU3MTc1ZDgxYzZmMmEyNDg0Y2VhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW1wb3J0ICJBVktpdFNQSS5oIgotI2lt
cG9ydCAiSW50UmVjdC5oIgotI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBv
cnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2lt
cG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsLmgiCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+Ci0KLSNpbXBv
cnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwo
QVZLaXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCi0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6Y3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKLXsKLSAgICBhdXRv
IGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
KG1vZGVsKSk7Ci0gICAgbW9kZWwuYWRkQ2xpZW50KGludGVyZmFjZSk7Ci0gICAgcmV0dXJuIGlu
dGVyZmFjZTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQotICAg
IDogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCi17Ci19Ci0KLVdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYzo6fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYygpCi17Ci0g
ICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSNpZiBFTkFCTEUoV0VCX1BM
QVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIq
IGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0KLSAgICBjb250
cm9sc01hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247Ci0KLSAgICAvLyBGSVhNRTog
V2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeSwgYnV0
IHRoYXQgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUuCi0gICAgY29udHJvbHNNYW5hZ2VyLmhhc0Vu
YWJsZWRBdWRpbyA9IFlFUzsKLSAgICBjb250cm9sc01hbmFnZXIuaGFzRW5hYmxlZFZpZGVvID0g
WUVTOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZHVyYXRpb24pOwotI2VuZGlmCi19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQoZG91
YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKLXsKLSNpZiBFTkFCTEUoV0VCX1BM
QVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIq
IGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgdXBkYXRl
UGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoY3VycmVudFRpbWUsIGFuY2hvclRpbWUsIGNv
bnRyb2xzTWFuYWdlci5yYXRlLCBjb250cm9sc01hbmFnZXIucGxheWluZyk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShjdXJyZW50VGltZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGFuY2hvclRpbWUp
OwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRl
Q2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSAg
ICBbY29udHJvbHNNYW5hZ2VyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDogMC5d
OwotICAgIFtjb250cm9sc01hbmFnZXIgc2V0UGxheWluZzppc1BsYXlpbmddOwotICAgIHVwZGF0
ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPyBt
X3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIDogMCwgW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdLCBwbGF5YmFja1JhdGUsIGlzUGxheWluZyk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShpc1BsYXlpbmcpOwotICAgIFVOVVNFRF9QQVJBTShwbGF5
YmFja1JhdGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpiZWdpblNjcnViYmluZygpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQotICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgp
IDogMCwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdLCAwLCBmYWxz
ZSk7Ci0jZW5kaWYKLSAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5iZWdpblNjcnViYmlu
ZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJi
aW5nKCkKLXsKLSAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5lbmRTY3J1YmJpbmcoKTsK
LX0KLQotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLXN0YXRpYyBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHRpbWVSYW5nZXNUb0FycmF5KGNvbnN0IFRpbWVSYW5n
ZXMmIHRpbWVSYW5nZXMpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiByYW5nZUFy
cmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAg
IGNvbnN0IFBsYXRmb3JtVGltZVJhbmdlcyYgcmFuZ2VzID0gdGltZVJhbmdlcy5yYW5nZXMoKTsK
LSAgICAgICAgQ01UaW1lUmFuZ2UgcmFuZ2UgPSBDTVRpbWVSYW5nZU1ha2UodG9DTVRpbWUocmFu
Z2VzLnN0YXJ0KGkpKSwgdG9DTVRpbWUocmFuZ2VzLmVuZChpKSkpOwotICAgICAgICBbcmFuZ2VB
cnJheSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmFuZ2VBcnJheTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVS
YW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSwgZG91YmxlKQotewotI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBz
ZXRTZWVrYWJsZVRpbWVSYW5nZXM6dGltZVJhbmdlc1RvQXJyYXkodGltZVJhbmdlcykuZ2V0KCld
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGltZVJhbmdlcyk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRBdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uczpvcHRpb25zIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5T
VUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG9wdGlv
bnMpOwotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKLSNlbmRpZgotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uczpvcHRpb25zIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0
PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG9w
dGlvbnMpOwotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKLSNlbmRpZgotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXg6c2VsZWN0ZWRJbmRleF07Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5kZXhdOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
c2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcm
KQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxh
eUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRDYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlOiFlbmFi
bGVkXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKLXsKLSAgICBp
ZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0gICAgbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotI2Vu
ZGlmCi19Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0KLVdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSAgICByZXR1cm4gbV9wbGF5YmFja0NvbnRy
b2xzTWFuYWdlcjsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNl
dFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptYW5h
Z2VyKQotewotICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgPSBtYW5hZ2VyOwotCi0gICAg
aWYgKCFtYW5hZ2VyIHx8ICFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW21hbmFnZXIgcmF0ZV0g
PyBOQU4gOiBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07Ci0gICAg
bWFuYWdlci50aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFsdWVUaW1pbmdXaXRo
QW5jaG9yVmFsdWU6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSBhbmNob3JU
aW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0gICAgZG91YmxlIGR1cmF0aW9uID0g
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+ZHVyYXRpb24oKTsKLSAgICBtYW5hZ2VyLmNvbnRlbnRE
dXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIG1hbmFnZXIuaGFzRW5hYmxlZEF1ZGlvID0gZHVyYXRp
b24gPiAwOwotICAgIG1hbmFnZXIuaGFzRW5hYmxlZFZpZGVvID0gZHVyYXRpb24gPiAwOwotICAg
IG1hbmFnZXIucmF0ZSA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpID8gbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbC0+cGxheWJhY2tSYXRlKCkgOiAwLjsKLSAgICBtYW5hZ2VyLnNl
ZWthYmxlVGltZVJhbmdlcyA9IHRpbWVSYW5nZXNUb0FycmF5KG1fcGxheWJhY2tTZXNzaW9uTW9k
ZWwtPnNlZWthYmxlUmFuZ2VzKCkpLmdldCgpOwotICAgIG1hbmFnZXIuY2FuVG9nZ2xlUGxheWJh
Y2sgPSBZRVM7Ci0gICAgbWFuYWdlci5wbGF5aW5nID0gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+
aXNQbGF5aW5nKCk7Ci0gICAgW21hbmFnZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSB3aXRo
U2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsLT5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpKV07Ci0gICAgW21hbmFnZXIgc2V0TGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5sZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50
ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgp
KV07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp1cGRhdGVQbGF5
YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxheWluZykKLXsKLSAgICBXZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2Vy
KCk7Ci0gICAgaWYgKCFtYW5hZ2VyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCAqbW9kZWwgPSB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOwotICAgIGlm
ICghbW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSBlZmZlY3RpdmVBbmNob3JU
aW1lID0gcGxheWJhY2tSYXRlID8gYW5jaG9yVGltZSA6IE5BTjsKLSAgICBkb3VibGUgZWZmZWN0
aXZlUGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwotICAgIGlmICghaXNQbGF5aW5nCi0gICAg
ICAgIHx8IG1vZGVsLT5pc1NjcnViYmluZygpCi0gICAgICAgIHx8IChtYW5hZ2VyLnJhdGUgPiAw
ICYmIG1vZGVsLT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCkgPj0gY3VycmVudFRpbWUpCi0gICAgICAg
IHx8IChtYW5hZ2VyLnJhdGUgPCAwICYmIG1vZGVsLT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCkgPD0g
Y3VycmVudFRpbWUpKQotICAgICAgICBlZmZlY3RpdmVQbGF5YmFja1JhdGUgPSAwOwotCi0gICAg
bWFuYWdlci50aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFsdWVUaW1pbmdXaXRo
QW5jaG9yVmFsdWU6Y3VycmVudFRpbWUgYW5jaG9yVGltZVN0YW1wOmVmZmVjdGl2ZUFuY2hvclRp
bWUgcmF0ZTplZmZlY3RpdmVQbGF5YmFja1JhdGVdOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1MWIyY2UzYTJlOWU0NTU5YTEy
MTM2MDRkMTI2MGJmZTkzMGI0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0KLSNpbmNs
dWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgot
I2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLU9CSkNfQ0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IEludFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKLQotY2xh
c3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCi0gICAgOiBw
dWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHByaXZhdGUgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYz4gewotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhwbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjKCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIHdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQot
ICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCopOwotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKiB3ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciopOwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXpl
ZERldmljZU5hbWUpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3Qg
RmxvYXRTaXplJikgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldHVwRnVsbHNj
cmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3Qs
IE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpw
YXJlbnRXaW5kb3cpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW5XaXRo
b3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbigpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIHZvaWQgcmVxdWVzdEhpZGVB
bmRFeGl0RnVsbHNjcmVlbigpIHsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJlcGFyZWRU
b1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwg
TlNXaW5kb3cgKnBhcmVudFdpbmRvdyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnN1cmVD
b250cm9sc01hbmFnZXIoKTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgYm9vbCBoYXNN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25z
dCB7IHJldHVybiBtX21vZGUgJiBtb2RlOyB9Ci0gICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZSA9PSBtb2RlOyB9Ci0gICAgdm9pZCBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLQotICAgIGJvb2wgaXNQbGF5aW5nVmlkZW9JbkVu
aGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0OwotCi0gICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hv
d1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9p
ZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpIHsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyAqdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQygpOwotCi1wcml2YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YyhXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmKTsKLSAgICBSZWY8V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjPiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKLSAgICBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsK
LSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgeyBudWxscHRyIH07Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU5vbmUgfTsKLSAgICBSZXRhaW5QdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjT2JqQz4gbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDOwotfTsKLQotfQotCi0j
ZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDkyZTY0MmM4ZWMwY2JmOTQ3NWU4NDk2ZGY3Yzg3MDJjMjQ4NjU1M2IuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDU3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQotCi0jaW1wb3J0ICJBVktpdFNQSS5oIgotI2ltcG9ydCAiSW50UmVjdC5o
IgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgi
Ci0jaW1wb3J0ICJQSVBTUEkuaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2ltcG9ydCA8QVZGb3Vu
ZGF0aW9uL0FWVGltZS5oPgotCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZU
X0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFM
KEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BU
SU9OQUwoUElQKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFBJUCwgUElQVmlld0NvbnRyb2xs
ZXIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AY2xhc3MgV2ViVmlkZW9WaWV3Q29u
dGFpbmVyOwotCi1AcHJvdG9jb2wgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgPE5TT2Jq
ZWN0PgotCi0tICh2b2lkKWJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2Vi
VmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyOwotLSAodm9pZClzdXBlcnZp
ZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAq
KXZpZGVvVmlld0NvbnRhaW5lcjsKLQotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlZpZGVvVmlld0Nv
bnRhaW5lciA6IE5TVmlldyB7Ci0gICAgaWQgPFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRl
PiBfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGlkIDxXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gdmlkZW9WaWV3Q29u
dGFpbmVyRGVsZWdhdGU7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvVmlld0Nv
bnRhaW5lcgotCi1Ac3ludGhlc2l6ZSB2aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT1fdmlkZW9W
aWV3Q29udGFpbmVyRGVsZWdhdGU7Ci0KLS0gKHZvaWQpcmVzaXplV2l0aE9sZFN1cGVydmlld1Np
emU6KE5TU2l6ZSlvbGRCb3VuZHNTaXplCi17Ci0gICAgW3N1cGVyIHJlc2l6ZVdpdGhPbGRTdXBl
cnZpZXdTaXplOm9sZEJvdW5kc1NpemVdOwotCi0gICAgW192aWRlb1ZpZXdDb250YWluZXJEZWxl
Z2F0ZSBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6c2VsZl07Ci19Ci0KLS0g
KHZvaWQpdmlld0RpZE1vdmVUb1N1cGVydmlldwotewotICAgIFtzdXBlciB2aWV3RGlkTW92ZVRv
U3VwZXJ2aWV3XTsKLQotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgc3VwZXJ2aWV3
RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNlbGZdOwotfQotCi1AZW5kCi0KLWVudW0g
Y2xhc3MgUElQU3RhdGUgewotICAgIE5vdEluUElQLAotICAgIEluUElQLAotICAgIEV4aXRpbmdQ
SVAKLX07Ci0KLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyA6
IE5TT2JqZWN0IDxQSVBWaWV3Q29udHJvbGxlckRlbGVnYXRlLCBXZWJWaWRlb1ZpZXdDb250YWlu
ZXJEZWxlZ2F0ZT4gewotICAgIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YyogX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKLSAgICBOU1NpemUgX3ZpZGVvRGlt
ZW5zaW9uczsKLSAgICBSZXRhaW5QdHI8UElQVmlld0NvbnRyb2xsZXI+IF9waXBWaWV3Q29udHJv
bGxlcjsKLSAgICBSZXRhaW5QdHI8TlNWaWV3Q29udHJvbGxlcj4gX3ZpZGVvVmlld0NvbnRhaW5l
ckNvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFdlYlZpZGVvVmlld0NvbnRhaW5lcj4gX3ZpZGVv
Vmlld0NvbnRhaW5lcjsKLSAgICBQSVBTdGF0ZSBfcGlwU3RhdGU7Ci0gICAgUmV0YWluUHRyPE5T
V2luZG93PiBfcmV0dXJuaW5nV2luZG93OwotICAgIE5TUmVjdCBfcmV0dXJuaW5nUmVjdDsKLSAg
ICBCT09MIF9wbGF5aW5nOwotICAgIEJPT0wgX2RpZFJlcXVlc3RFeGl0aW5nUElQOwotICAgIEJP
T0wgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKLS0g
KHZvaWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZTsKLS0gKHZvaWQpaW52YWxpZGF0ZTsKLQot
Ly8gVHJhY2tpbmcgdmlkZW8gcGxheWJhY2sgc3RhdGUKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBO
U1NpemUgdmlkZW9EaW1lbnNpb25zOwotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1Bs
YXlpbmcpIEJPT0wgcGxheWluZzsKLS0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxh
eWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZTsKLQotLy8gSGFuZGxpbmcg
UElQIHRyYW5zaXRpb25zCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgZGlk
UmVxdWVzdEV4aXRpbmdQSVA7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzRXhpdGlu
Z1RvU3RhbmRhcmRGdWxsc2NyZWVuKSBCT09MIGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsK
LQotLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNWaWV3ICopdmlkZW9WaWV3IHdpdGhG
cmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKLS0gKHZvaWQp
ZW50ZXJQSVA7Ci0tICh2b2lkKWV4aXRQSVA7Ci0tICh2b2lkKWV4aXRQSVBBbmltYXRpbmdUb1Jl
Y3Q6KE5TUmVjdClyZWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQwotCi1Ac3lu
dGhlc2l6ZSBwbGF5aW5nPV9wbGF5aW5nOwotQHN5bnRoZXNpemUgdmlkZW9EaW1lbnNpb25zPV92
aWRlb0RpbWVuc2lvbnM7Ci1Ac3ludGhlc2l6ZSBkaWRSZXF1ZXN0RXhpdGluZ1BJUD1fZGlkUmVx
dWVzdEV4aXRpbmdQSVA7Ci1Ac3ludGhlc2l6ZSBleGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW49
X2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMqKXdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYwotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IHdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlCi17Ci0gICAgW19w
aXBWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIF9waXBWaWV3Q29udHJvbGxl
ciA9IG5pbDsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
LSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTpu
aWxdOwotICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBuaWw7Ci0gICAgX3ZpZGVvVmlld0NvbnRh
aW5lckNvbnRyb2xsZXIgPSBuaWw7Ci0gICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Ok5vdEluUElQ
OwotICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IE5POwotICAgIF9leGl0aW5nVG9TdGFuZGFy
ZEZ1bGxzY3JlZW4gPSBOTzsKLSAgICBfcmV0dXJuaW5nV2luZG93ID0gbmlsOwotICAgIF9yZXR1
cm5pbmdSZWN0ID0gTlNaZXJvUmVjdDsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlCi17Ci0gICAg
W3NlbGYgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07Ci0gICAgX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYyA9IG51bGxwdHI7Ci0gICAgX3ZpZGVvRGltZW5zaW9ucyA9IE5TWmVyb1Np
emU7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxheWluZyBuZXdQbGF5
YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZQotewotICAgIF9wbGF5aW5nID0gaXNQbGF5aW5n
ICYmIHBsYXliYWNrUmF0ZTsKLQotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpf
cGxheWluZ107Ci19Ci0KLS0gKHZvaWQpc2V0VmlkZW9EaW1lbnNpb25zOihOU1NpemUpdmlkZW9E
aW1lbnNpb25zCi17Ci0gICAgX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uczsKLQot
ICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0QXNwZWN0UmF0aW86X3ZpZGVvRGltZW5zaW9uc107
Ci19Ci0KLS0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3
aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKLXsKLSAg
ICBBU1NFUlQoIV9waXBWaWV3Q29udHJvbGxlcik7Ci0gICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29u
dGFpbmVyQ29udHJvbGxlcik7Ci0gICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyKTsKLQot
ICAgIF9waXBWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jUElQVmlld0NvbnRyb2xsZXJJ
bnN0YW5jZSgpIGluaXRdKTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOnNl
bGZdOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0VXNlckNhblJlc2l6ZTpZRVNdOwotICAg
IFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107Ci0gICAgW3NlbGYgc2V0
VmlkZW9EaW1lbnNpb25zOk5TRXF1YWxTaXplcyhfdmlkZW9EaW1lbnNpb25zLCBOU1plcm9TaXpl
KSA/IGZyYW1lLnNpemUgOiBfdmlkZW9EaW1lbnNpb25zXTsKLSAgICBpZiAoX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0
eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCk7
Ci0KLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gYWRvcHROUyhbW1dlYlZpZGVvVmlld0NvbnRh
aW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOwotICAgIFtfdmlkZW9WaWV3Q29udGFp
bmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOnNlbGZdOwotICAgIFtfdmlkZW9WaWV3
Q29udGFpbmVyIGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKLSAgICB2aWRlb1ZpZXcuZnJhbWUgPSBb
X3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdOwotICAgIHZpZGVvVmlldy5hdXRvcmVzaXppbmdN
YXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZTsKLQotICAgIF92
aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyID0gYWRvcHROUyhbW05TVmlld0NvbnRyb2xsZXIg
YWxsb2NdIGluaXRdKTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgc2V0Vmll
dzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpXTsKLSAgICBbd2luZG93LmNvbnRlbnRWaWV3IGFk
ZFN1YnZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93QWJv
dmUgcmVsYXRpdmVUbzpuaWxdOwotfQotCi0tICh2b2lkKWVudGVyUElQCi17Ci0gICAgaWYgKF9w
aXBTdGF0ZSA9PSBQSVBTdGF0ZTo6SW5QSVApCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfdmlk
ZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBD
R0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKTsKLSAgICBbX3BpcFZpZXdDb250
cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlckFzUGljdHVyZUluUGljdHVyZTpfdmlkZW9WaWV3
Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07Ci0gICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Oklu
UElQOwotfQotCi0tICh2b2lkKWV4aXRQSVAKLXsKLSAgICBpZiAoX3BpcFN0YXRlICE9IFBJUFN0
YXRlOjpJblBJUCB8fCAhX3BpcFZpZXdDb250cm9sbGVyIHx8ICFfdmlkZW9WaWV3Q29udGFpbmVy
Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQ
ID0gWUVTOwotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5i
YWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckNsZWFyKTsK
LSAgICBbX3BpcFZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlcjpfdmlkZW9WaWV3
Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07Ci0gICAgX3BpcFN0YXRlID0gUElQU3RhdGU6OkV4
aXRpbmdQSVA7Ci19Ci0KLS0gKHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJl
Y3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgX3JldHVybmluZ1dpbmRvdyA9
IHdpbmRvdzsKLSAgICBfcmV0dXJuaW5nUmVjdCA9IHJlY3Q7Ci0gICAgCi0gICAgW19waXBWaWV3
Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFJlY3Q6cmVjdF07Ci0gICAgW19waXBWaWV3Q29udHJv
bGxlciBzZXRSZXBsYWNlbWVudFdpbmRvdzp3aW5kb3ddOwotCi0gICAgW3NlbGYgZXhpdFBJUF07
Ci19Ci0KLS8vIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlCi0KLS0gKHZvaWQpYm91bmRz
RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2
aWRlb1ZpZXdDb250YWluZXIKLXsKLSAgICBpZiAoIV92aWRlb1ZpZXdDb250YWluZXIgfHwgIV9w
aXBWaWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUX1VOVVNFRCh2
aWRlb1ZpZXdDb250YWluZXIsIHZpZGVvVmlld0NvbnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFp
bmVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCi0g
ICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNd
KTsKLX0KLQotLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6
KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcgotewotICAgIGlmICgh
X3ZpZGVvVmlld0NvbnRhaW5lciB8fCAhX3BpcFZpZXdDb250cm9sbGVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQodmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250YWlu
ZXIpOwotCi0gICAgaWYgKCFbdmlkZW9WaWV3Q29udGFpbmVyIGlzRGVzY2VuZGFudE9mOltfcGlw
Vmlld0NvbnRyb2xsZXIgdmlld11dKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPbmNlIHRo
ZSB2aWV3IGlzIG1vdmVkIGludG8gdGhlIHBpcCB2aWV3LCBtYWtlIHN1cmUgaXQgcmVzaXplcyB3
aXRoIHRoZSBwaXAgdmlldy4KLSAgICB2aWRlb1ZpZXdDb250YWluZXIuZnJhbWUgPSBbdmlkZW9W
aWV3Q29udGFpbmVyIHN1cGVydmlld10uYm91bmRzOwotICAgIHZpZGVvVmlld0NvbnRhaW5lci5h
dXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJs
ZTsKLX0KLQotLy8gUElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQotCi0tIChCT09MKXBpcFNob3Vs
ZENsb3NlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VSVF9VTlVTRUQocGlw
LCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAgIGlmICghX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYyB8fCAhX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLQot
ICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKLSAgICBfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpLT5mdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKLQotICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClw
aXBEaWRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VE
KHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpICYmIF92aWRlb1ZpZXdDb250YWluZXIgJiYgX3JldHVy
bmluZ1dpbmRvdyAmJiAhTlNFcXVhbFJlY3RzKF9yZXR1cm5pbmdSZWN0LCBOU1plcm9SZWN0KSkg
ewotICAgICAgICBbTlNBbmltYXRpb25Db250ZXh0IHJ1bkFuaW1hdGlvbkdyb3VwOl4oTlNBbmlt
YXRpb25Db250ZXh0ICpjb250ZXh0KSB7Ci0gICAgICAgICAgICBjb250ZXh0LmFsbG93c0ltcGxp
Y2l0QW5pbWF0aW9uID0gTk87Ci0gICAgICAgICAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRG
cmFtZTpfcmV0dXJuaW5nUmVjdF07Ci0gICAgICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUo
W192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7Ci0gICAgICAgICAgICBfd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xh
eWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0KTsKLQotICAgICAgICAgICAgW1tfcmV0dXJuaW5nV2luZG93IGNvbnRlbnRWaWV3XSBhZGRT
dWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3Zl
IHJlbGF0aXZlVG86bmlsXTsKLSAgICAgICAgfSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOwotICAg
IH0KLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKSB7Ci0gICAgICAg
IGlmICghc2VsZi5pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikgewotICAgICAgICAgICAg
aWYgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpIHsK
LSAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5N
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAg
ICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0xheWVyR3Jhdml0eShX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVQaWN0dXJlSW5QaWN0dXJlKTsKLQotICAgICAgICBpZiAoV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIqIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IF93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCi0gICAg
ICAgICAgICBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci0g
ICAgfQotfQotCi0tICh2b2lkKXBpcEFjdGlvblBsYXk6KFBJUFZpZXdDb250cm9sbGVyICopcGlw
Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwot
Ci0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAg
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KS0+cGxheSgpOwotfQotCi0tICh2b2lkKXBpcEFjdGlvblBhdXNlOihQSVBWaWV3Q29udHJvbGxl
ciAqKXBpcAotewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9s
bGVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0g
ICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPnBhdXNlKCk7Ci19Ci0KLS0gKHZvaWQpcGlwQWN0aW9uU3RvcDooUElQVmlld0Nv
bnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3
Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxh
eWJhY2tTZXNzaW9uTW9kZWwgPSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbC0+cGF1
c2UoKTsKLQotICAgIC8vIEZJWE1FIDI1MDk2MTcwOiBTaG91bGQgYW5pbWF0ZSBvbmx5IGlmIHRo
ZSBwYWdlIHdpdGggdGhlIHZpZGVvIGlzIHVub2JzY3VyZWQuIEZvciBub3csIGFsd2F5cyBjbG9z
ZSB3aXRob3V0IGFuaW1hdGlvbi4KLSAgICBbc2VsZiBleGl0UElQXTsKLX0KLQotQGVuZAotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotICAgIDogbV9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotewotICAgIEFTU0VSVChtX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSk7Ci0gICAgYXV0byBt
b2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpOwotICAgIG1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwotICAgIFt2aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOm1vZGVsLT5pc1BsYXlpbmcoKSBuZXdQbGF5
YmFja1JhdGU6bW9kZWwtPnBsYXliYWNrUmF0ZSgpXTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCkKLXsKLSAgICBp
ZiAobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkp
Ci0gICAgICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCgpLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQotewotICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2Rl
bDsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKLXsKLSAgICBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdN
b2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21vZGUgPSBuZXdNb2RlOwotICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5m
dWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOwotICAgIGlmIChtX21vZGUgPT0g
bmV3TW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tb2RlID0gbmV3TW9kZTsKLSAgICBp
ZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxh
eWJhY2tSYXRlKQotewotICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRl
SXNQbGF5aW5nOmlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6cGxheWJhY2tSYXRlXTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdl
cigpCi17Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPmVuc3VyZUNvbnRyb2xzTWFu
YWdlcigpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDICpXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKQot
ewotICAgIGlmICghbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKQotICAgICAgICBt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBhZG9wdE5TKFtbV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBhbGxvY10gaW5pdFdpdGhXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6dGhpc10pOwotCi0gICAgcmV0dXJuIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlT2JqQy5nZXQoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywgY29uc3QgSW50UmVj
dCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1
cmVQbGF5YmFjaykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5pdGlhbFJlY3Q6eyVkLCAlZCwgJWQs
ICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhpcywgaW5pdGlhbFJlY3QueCgpLCBp
bml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgp
LCBwYXJlbnRXaW5kb3csIG1vZGUpOwotCi0gICAgVU5VU0VEX1BBUkFNKGFsbG93c1BpY3R1cmVJ
blBpY3R1cmVQbGF5YmFjayk7Ci0gICAgQVNTRVJUKG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0KLSAgICBtX21vZGUg
PSBtb2RlOwotCi0gICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSBzZXRVcFBJUEZv
clZpZGVvVmlldzombGF5ZXJIb3N0ZWRWaWV3IHdpdGhGcmFtZTooTlNSZWN0KWluaXRpYWxSZWN0
IGluV2luZG93OnBhcmVudFdpbmRvd107Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7Ci0gICAgICAg
IGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbigpCi17Ci0g
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVy
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgewotICAgICAg
ICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGVudGVyUElQXTsKLQotI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICAgICAgW21fcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBp
Y3R1cmVBY3RpdmU6WUVTXTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRF
bnRlckZ1bGxzY3JlZW4oKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2lu
ZG93ICpwYXJlbnRXaW5kb3cpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKCVwKSwgZmluYWxSZWN0OnslZCwgJWQs
ICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGZpbmFsUmVjdC54KCksIGZpbmFsUmVj
dC55KCksIGZpbmFsUmVjdC53aWR0aCgpLCBmaW5hbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRv
dyk7Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW21f
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBp
Y3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOwotI2VuZGlmCi0KLSAgICBpZiAoW21fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChmaW5hbFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBbbV93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotICAgIGVsc2UKLSAgICAgICAgW21f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OmZp
bmFsUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNj
cmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoJXApLCBtb2RlOiVkIiwgdGhpcywgbW9kZSk7Ci0K
LSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW21fcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJ
blBpY3R1cmVBY3RpdmU6Tk9dOwotI2VuZGlmCi0KLSAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGJvb2wgaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBtb2RlID09IEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkOwotICAgIC8vIE9u
IE1hYywgc3RhbmRhcmQgZnVsbHNjcmVlbiBpcyBoYW5kbGVkIGJ5IHRoZSBGdWxsc2NyZWVuIEFQ
SSBhbmQgbm90IGJ5IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuCi0gICAgLy8gSnVzdCB1cGRh
dGUgbV9tb2RlIGRpcmVjdGx5IHRvIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVN0YW5kYXJkIGluIHRoYXQgY2FzZSB0byBrZWVwCi0gICAgLy8gbV9tb2RlIGluIHN5
bmMgd2l0aCB0aGUgZnVsbHNjcmVlbiBtb2RlIGluIEhUTUxNZWRpYUVsZW1lbnQuCi0gICAgaWYg
KGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKQotICAgICAgICBtX21vZGUgPSBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsKLQotICAgIFttX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgc2V0RXhpdGluZ1RvU3RhbmRhcmRGdWxsc2Ny
ZWVuOmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuXTsKLSAgICBbbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQotewotICAgIExPRyhGdWxsc2NyZWVu
LCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbiglcCki
LCB0aGlzKTsKLQotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJ
UF07Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlRnVs
bHNjcmVlblN0YXRlXTsKLQotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAg
ICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkK
LXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
aW52YWxpZGF0ZSglcCkiLCB0aGlzKTsKLQotICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBu
aWw7Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7Ci0KLSAgICBjbGVhbnVw
RnVsbHNjcmVlbigpOwotCi0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBp
bnZhbGlkYXRlXTsKLSAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBuaWw7
Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhi
b29sIHZhbCkKLXsKLSAgICByZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKLX0KLSNlbmRp
ZgotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVy
blRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwgTlNXaW5k
b3cgKnBhcmVudFdpbmRvdykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSwgdmlzaWJsZTol
cywgaW5saW5lUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBi
b29sU3RyaW5nKHZpc2libGUpLCBpbmxpbmVSZWN0LngoKSwgaW5saW5lUmVjdC55KCksIGlubGlu
ZVJlY3Qud2lkdGgoKSwgaW5saW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKLQotICAg
IGlmICghdmlzaWJsZSkgewotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VP
YmpDIGV4aXRQSVBdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKHBhcmVu
dFdpbmRvdyk7Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQ
QW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpaW5saW5lUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3dd
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFu
Z2VkKCVwKSwgZW5hYmxlZDolcyIsIHRoaXMsIGJvb2xTdHJpbmcoZW5hYmxlZCkpOwotCi0gICAg
aWYgKGVuYWJsZWQgJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgIGV4aXRGdWxsc2NyZWVuKEludFJl
Y3QoKSwgbmlsKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhh
c1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoJXApOiVzIiwgdGhp
cywgYm9vbFN0cmluZyhoYXNWaWRlbykpOwotCi0gICAgaWYgKCFoYXNWaWRlbykKLSAgICAgICAg
ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZp
ZGVvRGltZW5zaW9ucykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCglcCksIHdpZHRoOiUuMGYsIGhl
aWdodDolLjBmIiwgdGhpcywgdmlkZW9EaW1lbnNpb25zLndpZHRoKCksIHZpZGVvRGltZW5zaW9u
cy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSB6ZXJvIHdoZW4g
d2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgdmlkZW8gdG8gYW5vdGhlci4gSWdub3JlIHpl
cm8gdmFsdWVzLgotICAgIGlmICghdmlkZW9EaW1lbnNpb25zLmlzWmVybygpKQotICAgICAgICBb
bV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNldFZpZGVvRGltZW5zaW9uczp2aWRl
b0RpbWVuc2lvbnNdOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlUGljdHVyZUluUGljdHVyZSkgJiYgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyBpc1BsYXlpbmddOwotfQotCi1ib29sIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCi17Ci0g
ICAgcmV0dXJuIFBJUExpYnJhcnkoKSAmJiBnZXRQSVBWaWV3Q29udHJvbGxlckNsYXNzKCk7Ci19
Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMTliNDJmOWRi
YWI2ZDVmMWYzMjk2Njg3ZDkwNzhmYWI5ZTYwN2Y1My4uYzUwYjQ2MTE2MTg5ZjYxZmUyNmI3YjY2
NWJiZGUwMWM4Y2I5NTM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTUyLDgg
KzE1Miw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYlBhc3RlYm9hcmRQcm94eSBc
CiAgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yIFwKICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eSBcCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciBcCi0gICAgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5IFwKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIFwKKyAgICBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgXAogICAgIFdlYlByb2Nlc3MgXAogICAgIFdlYlBy
b2Nlc3NDb25uZWN0aW9uIFwKICAgICBXZWJQcm9jZXNzUG9vbCBcCkBAIC0xNjYsOCArMTY2LDgg
QEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViU29ja2V0U3RyZWFtIFwKICAgICBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXIgXAogICAgIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
IFwKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIFwKLSAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkgXAorICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgXAorICAgIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eSBcCiAjCiAKIFNDUklQVFMgPSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCA3ZGE0ZDYwYzRkNjQ5
YjEzZDFmMzY0MzUyZGMyMGRiMzAzOTA0ODVkLi43ZDQzMmQzYjUyOGM2ZTc1NDU4ZTI0Zjk1ZjZi
MjQxNTg5YmI0NWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KQEAgLTEyNiwxMiArMTI2LDEyIEBACiAjaW1wb3J0ICJSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCIKICNp
bXBvcnQgIldLUERGVmlldy5oIgogI2ltcG9ydCAiV0tQYXNzd29yZFZpZXcuaCIKICNpbXBvcnQg
IldLU2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0
cnkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9y
dCAiX1dLRHJhZ2dhYmxlRWxlbWVudEluZm9JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmll
d1ByaW50Rm9ybWF0dGVyLmgiCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1ODBmOTU3N2YwNDQzMGNjYzY0Y2YzM2NlZTdl
N2E4OWI5NTNmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaApAQCAtMCwwICsxLDIzMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2VsZWN0aW9uT3B0aW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1v
ZGVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQordHlw
ZWRlZiBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTsKKyNlbHNlCit0eXBlZGVmIFdlYkNvcmU6OlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYyBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQgZmluYWw6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dD4sIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbCAgeworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBjcmVhdGUoUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQo
bWFuYWdlciwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dCgpIHsgfQorCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIg
PSBudWxscHRyOyB9CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgIHZvaWQgYWRk
Q2xpZW50KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgZmluYWw7CisgICAg
dm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKWZp
bmFsOworCisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKTsKKyAgICB2b2lkIGN1cnJl
bnRUaW1lQ2hhbmdlZChkb3VibGUpOworICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3Vi
bGUpOworICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlKTsKKyAgICB2
b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpOworICAg
IHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7CisgICAgdm9pZCBj
YW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlv
bk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFT
ZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7
CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sLCBQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQg
bXV0ZWRDaGFuZ2VkKGJvb2wpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ7CisKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQo
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQp
CisgICAgICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAgICAgICAsIG1fY29udGV4dElkKGNv
bnRleHRJZCkKKyAgICB7CisgICAgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAg
ICB2b2lkIHBsYXkoKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlKCkgZmluYWw7CisgICAgdm9pZCB0
b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKCkgZmluYWw7
CisgICAgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5hbDsKKyAgICB2b2lkIHNlZWtUb1RpbWUoZG91
YmxlKSBmaW5hbDsKKyAgICB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBmaW5hbDsKKyAgICB2
b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgZmluYWw7CisgICAgdm9pZCBiZWdpblNjYW5uaW5n
QmFja3dhcmQoKSBmaW5hbDsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKCkgZmluYWw7CisgICAgdm9p
ZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIHNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCB0b2dnbGVQaWN0
dXJlSW5QaWN0dXJlKCkgZmluYWw7CisgICAgdm9pZCB0b2dnbGVNdXRlZCgpIGZpbmFsOworICAg
IHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7CisKKyAgICBkb3VibGUgcGxheWJhY2tTdGFydGVk
VGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGxheWJhY2tTdGFydGVkVGltZTsgfQorICAg
IGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAg
ICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2N1cnJlbnRUaW1l
OyB9CisgICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYnVm
ZmVyZWRUaW1lOyB9CisgICAgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2lzUGxheWluZzsgfQorICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2lzU2NydWJiaW5nOyB9CisgICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9wbGF5YmFja1JhdGU7IH0KKyAgICBSZWY8V2ViQ29yZTo6VGltZVJhbmdlcz4g
c2Vla2FibGVSYW5nZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlZWthYmxlUmFuZ2VzLmNv
cHlSZWYoKTsgfQorICAgIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRU
aW1lOyB9CisgICAgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGl2ZVVwZGF0ZUludGVydmFsOyB9CisgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2NhblBsYXlGYXN0UmV2ZXJzZTsgfQorICAgIFZlY3RvcjxXZWJD
b3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOyB9CisgICAg
dWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OyB9CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOyB9CisgICAgdWludDY0X3Qg
bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJs
ZU1lZGlhU2VsZWN0ZWRJbmRleDsgfQorICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkOyB9CisgICAg
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZTsgfQorICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2
aWNlTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXpl
ZERldmljZU5hbWU7IH0KKyAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsgfQor
ICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbXV0ZWQ7IH0KKworICAg
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90IG1f
Y29udGV4dElkOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQqPiBtX2NsaWVudHM7CisgICAgZG91YmxlIG1fcGxheWJhY2tTdGFydGVkVGltZSB7IDAgfTsK
KyAgICBib29sIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlIHsgZmFsc2UgfTsKKyAg
ICBkb3VibGUgbV9kdXJhdGlvbiB7IDAgfTsKKyAgICBkb3VibGUgbV9jdXJyZW50VGltZSB7IDAg
fTsKKyAgICBkb3VibGUgbV9idWZmZXJlZFRpbWUgeyAwIH07CisgICAgYm9vbCBtX2lzUGxheWlu
ZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzU2NydWJiaW5nIHsgZmFsc2UgfTsKKyAgICBmbG9h
dCBtX3BsYXliYWNrUmF0ZSB7IDAgfTsKKyAgICBSZWY8V2ViQ29yZTo6VGltZVJhbmdlcz4gbV9z
ZWVrYWJsZVJhbmdlcyB7IFdlYkNvcmU6OlRpbWVSYW5nZXM6OmNyZWF0ZSgpIH07CisgICAgZG91
YmxlIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSB7IDAgfTsKKyAgICBkb3Vi
bGUgbV9saXZlVXBkYXRlSW50ZXJ2YWwgeyAwIH07CisgICAgYm9vbCBtX2NhblBsYXlGYXN0UmV2
ZXJzZSB7IGZhbHNlIH07CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOworICAgIHVpbnQ2NF90IG1fYXVkaW9NZWRp
YVNlbGVjdGVkSW5kZXggeyAwIH07CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9u
T3B0aW9uPiBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAgdWludDY0X3QgbV9s
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9OworICAgIGJvb2wgbV9leHRlcm5hbFBsYXli
YWNrRW5hYmxlZCB7IGZhbHNlIH07CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgeyBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUgfTsKKyAgICBTdHJpbmcgbV9leHRlcm5hbFBs
YXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07Cit9Owor
CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYpOworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBQbGF0Zm9ybVBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSogY29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCk7CisgICAg
dm9pZCByZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKKworICAgIGV4cGxpY2l0IFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworCisgICAgdHlwZWRlZiBz
dGQ6OnR1cGxlPFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBSZWZQdHI8UGxh
dGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxlOworICAg
IE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYg
ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBQbGF0Zm9ybVBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBy
ZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAvLyBNZXNz
YWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKyAgICB2b2lkIHNldFVwUGxheWJhY2tD
b250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGNsZWFy
UGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpOworICAgIHZvaWQg
YnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRp
bWUpOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxh
c3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOwor
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZv
aWQgZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNl
TmFtZSk7CisgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sKTsKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbik7CisgICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1l
KTsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlp
bmcsIGRvdWJsZSByYXRlKTsKKyAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNw
b25zZSh1aW50NjRfdCwgU3RyaW5nKSBjb25zdDsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOworCisgICAgLy8gTWVzc2FnZXMgdG8gUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcgorICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAg
ICB2b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZv
aWQgYmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Nh
bm5pbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Cisg
ICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCB0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0TXV0ZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sKTsKKworICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOwor
ICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsK
KyAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKKyAgICBIYXNo
Q291bnRlZFNldDx1aW50NjRfdD4gbV9jbGllbnRDb3VudHM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWM4Zjc5ZDFiMjQ1NWE3ODBmODIyN2EzZWZh
NDkxNjlmZDA1ZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEs
NDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQorbWVzc2FnZXMgLT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IHsKKyAg
ICBSZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQorICAgIEN1cnJlbnRUaW1lQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RU
aW1lKQorICAgIEJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
YnVmZmVyZWRUaW1lKQorICAgIFNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJs
ZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQorICAgIENhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQorICAg
IEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZl
Y3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkKKyAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBBdWRpb01lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAg
ICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQorICAgIEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlw
ZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCisgICAgV2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKKyAgICBE
dXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCisgICAg
UGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxh
eWJhY2tTdGFydGVkVGltZSkKKyAgICBSYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKKyAgICBNdXRlZENoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIG11dGVkKTsKKyAgICBTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0
aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
KCkKKworICAgIEhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250
ZXh0SWQsIFN0cmluZyBpZCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQyYzM5OWU4ZGI4NmE5MTUwNWEyYWRkNjY0NGRkODkwMzYyMjdlNzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkubW0KQEAgLTAsMCArMSw1NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisK
KyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCisKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdl
cy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNp
bXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1w
b3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQKKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmFkZENsaWVu
dChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9j
bGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5j
b250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXkoKQoreworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGxheShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5wYXVzZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGxheVN0YXRlKG1fY29udGV4dElk
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2NydWJiaW5n
KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmJlZ2luU2NydWJi
aW5nKG1fY29udGV4dElkKTsKKworICAgIG1faXNTY3J1YmJpbmcgPSB0cnVlOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKK3sKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmVuZFNjcnViYmluZyhtX2NvbnRleHRJZCk7
CisKKyAgICBtX2lzU2NydWJiaW5nID0gZmFsc2U7CisgICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1l
TmVlZHNVcGRhdGUgPSBpc1BsYXlpbmcoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikK
KyAgICAgICAgbV9tYW5hZ2VyLT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWsobV9jb250
ZXh0SWQsIHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVn
aW5TY2FubmluZ0ZvcndhcmQoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFu
YWdlci0+YmVnaW5TY2FubmluZ0ZvcndhcmQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCht
X2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRT
Y2FubmluZygpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5lbmRT
Y2FubmluZyhtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQoreworICAgIGlm
IChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbiht
X2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUobV9jb250ZXh0SWQp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlTXV0ZWQobV9j
b250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0TXV0
ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PnNldE11dGVkKG1fY29udGV4dElkLCBtdXRlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tT
dGFydGVkVGltZSkKK3sKKyAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWUgPSBwbGF5YmFja1N0YXJ0
ZWRUaW1lOworICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlID0gZmFsc2U7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91
YmxlIGR1cmF0aW9uKQoreworICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQo
ZHVyYXRpb24pOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVu
dFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSkKK3sKKyAgICBtX2N1cnJlbnRUaW1lID0g
Y3VycmVudFRpbWU7CisgICAgYXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBzeXN0ZW1VcHRpbWVdOworICAgIGlmIChtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVk
c1VwZGF0ZSkKKyAgICAgICAgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY3VycmVudFRpbWUp
OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+
Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1
ZmZlcmVkVGltZSkKK3sKKyAgICBtX2J1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZTsKKyAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5idWZmZXJlZFRp
bWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQor
eworICAgIG1faXNQbGF5aW5nID0gaXNQbGF5aW5nOworICAgIG1fcGxheWJhY2tSYXRlID0gcGxh
eWJhY2tSYXRlOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBj
bGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3Jl
OjpUaW1lUmFuZ2VzJiBzZWVrYWJsZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRv
dWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgbV9zZWVrYWJsZVJhbmdlcyA9IHNlZWth
YmxlUmFuZ2VzOworICAgIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IGxh
c3RNb2RpZmllZFRpbWU7CisgICAgbV9saXZlVXBkYXRlSW50ZXJ2YWwgPSBsaXZlVXBkYXRlSW50
ZXJ2YWw7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVu
dC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1l
LCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkK
K3sKKyAgICBtX2NhblBsYXlGYXN0UmV2ZXJzZSA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKKyAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5jYW5QbGF5RmFz
dFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnMsIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KQoreworICAgIG1fYXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMgPSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKKyAgICBtX2F1
ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7CisgICAgZm9y
IChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBhdWRpb01l
ZGlhU2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBs
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQoreworICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAgbV9sZWdpYmxlTWVk
aWFTZWxlY3RlZEluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsKKworICAgIGZvciAo
YXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMsIGxlZ2li
bGVNZWRpYVNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQoreworICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4Owor
CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+YXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0
ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXg7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xp
ZW50cykKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
c2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXpl
ZE5hbWUpCit7CisgICAgbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAg
bV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSA9IHR5cGU7CisgICAgbV9leHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZE5hbWU7CisKKyAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWROYW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChi
b29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQoreworICAgIG1fd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQgPSB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsKKyAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJv
b2wgbXV0ZWQpCit7CisgICAgbV9tdXRlZCA9IG11dGVkOworICAgIGZvciAoYXV0byogY2xpZW50
IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChtdXRlZCk7Cit9CisK
KyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQorCitSZWZQdHI8UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNy
ZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGFnZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2Up
CisgICAgOiBtX3BhZ2UoJnBhZ2UpCit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOworfQorCitQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKQoreworICAg
IGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgaW52YWxpZGF0ZSgpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7CisgICAgbV9w
YWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CisgICAgbV9wYWdlID0gbnVsbHB0cjsKKworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nv
bnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZT4gaW50ZXJmYWNlOworICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9
IHR1cGxlOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAg
IG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Cit9CisK
K1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCkKK3sKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbCA9
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwor
ICAgIFJlZjxQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxh
dGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6OmNyZWF0ZShtb2RlbCk7CisKKyAgICByZXR1
cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwor
fQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChj
b250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxB
bmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKK30KKworUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1
cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQor
CitQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVy
biAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNv
bnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIGlmICghbV9jbGllbnRDb3VudHMucmVt
b3ZlKGNvbnRleHRJZCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVuc3VyZUludGVyZmFjZShj
b250ZXh0SWQpLmludmFsaWRhdGUoKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJ
ZCk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIKKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldFVwUGxheWJhY2tDb250
cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQoreworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPT0gY29udGV4dElkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAg
ICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwor
CisgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7CisgICAgZW5zdXJl
SW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKS5lbnN1cmVDb250cm9sc01hbmFn
ZXIoKTsKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KTsKKworICAgIG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQorewor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQor
ICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKTsKKyAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7Cisg
ICAgbV9wYWdlLT52aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpOworI2VuZGlmCit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVk
aWFTdGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVu
dFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3Vi
bGUgaG9zdFRpbWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jdXJyZW50VGltZUNo
YW5nZWQoY3VycmVudFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJl
ZFRpbWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5idWZmZXJlZFRpbWVDaGFuZ2Vk
KGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpz
ZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3Rk
OjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwg
ZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBSZWY8VGltZVJhbmdlcz4gdGltZVJh
bmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2Ug
OiByYW5nZXMpIHsKKyAgICAgICAgQVNTRVJUKGlzZmluaXRlKHJhbmdlLmZpcnN0KSk7CisgICAg
ICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5zZWNvbmQpKTsKKyAgICAgICAgQVNTRVJUKHJhbmdl
LnNlY29uZCA+PSByYW5nZS5maXJzdCk7CisgICAgICAgIHRpbWVSYW5nZXMtPmFkZChyYW5nZS5m
aXJzdCwgcmFuZ2Uuc2Vjb25kKTsKKyAgICB9CisKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZl
VXBkYXRlSW50ZXJ2YWwpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUp
Cit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2Vk
KHZhbHVlKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
c2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojps
ZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJs
ZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBl
LCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7Cisg
ICAgQVNTRVJUKHR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5
IHx8IHR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBl
ID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSk7CisKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxv
Y2FsaXplZERldmljZU5hbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIG11dGVkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubXV0ZWRDaGFuZ2VkKG11
dGVkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQoreworICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkucGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tTdGFy
dGVkVGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyYXRlQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKK3sK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcmF0ZSk7
Cit9CisKKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xs
ZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZGVudGlmaWVy
KSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoY29udGV4dElkID09IG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICBtX3BhZ2UtPmhhbmRsZUNvbnRyb2xsZWRF
bGVtZW50SURSZXNwb25zZShpZGVudGlmaWVyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNv
bnRleHRJZCk7CisgICAgVU5VU0VEX1BBUkFNKGlkZW50aWZpZXIpOworI2VuZGlmCit9CisKKwor
I3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheShj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBhdXNlKGNvbnRleHRJZCksIG1f
cGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZShjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2NydWJiaW5nKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjcnViYmluZyhj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkK
K3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNl
ZWtUb1RpbWUoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSB0aW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6RmFzdFNlZWsoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9y
d2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nQmFj
a3dhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY2Fu
bmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4
dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRl
eCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9n
Z2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJlSW5QaWN0
dXJlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQoreworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlTXV0
ZWQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQp
Cit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpT
ZXRNdXRlZChjb250ZXh0SWQsIG11dGVkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgp
Cit7CisgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkhhbmRsZUNvbnRyb2xsZWRF
bGVtZW50SURSZXF1ZXN0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Cit9CisKK1BsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpCit7CisgICAgaWYg
KCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UobV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQpOworICAgIHJldHVybiAmaW50ZXJmYWNlOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzE3NzI1NmU0YWVlODFlZDQ2Y2NhZDZmZGUyNjA5YjNlYmM0OTZmNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
KyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCit0eXBlZGVmIFdlYkNv
cmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlOworI2Vsc2UKK3R5cGVkZWYgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjIFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7CitjbGFz
cyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dCBmaW5hbAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0PgorICAgICwgcHVibGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVs
CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gY3Jl
YXRlKFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0KG1hbmFnZXIsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpKTsKKyAgICB9
CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCk7CisKKyAgICB2b2lk
IGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KKworICAgIFBsYXRmb3JtVmll
dyAqbGF5ZXJIb3N0VmlldygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJIb3N0Vmlldy5nZXQoKTsg
fQorICAgIHZvaWQgc2V0TGF5ZXJIb3N0VmlldyhSZXRhaW5QdHI8UGxhdGZvcm1WaWV3PiYmIGxh
eWVySG9zdFZpZXcpIHsgbV9sYXllckhvc3RWaWV3ID0gV1RGTW92ZShsYXllckhvc3RWaWV3KTsg
fQorCitwcml2YXRlOgorICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkmLCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmLCB1aW50NjRf
dCk7CisKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50KFdl
YkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBy
ZW1vdmVDbGllbnQoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBm
YWxzZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6Rmxv
YXRSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jh
dml0eSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKKyAg
ICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzVmlkZW8oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9CisgICAgV2ViQ29yZTo6RmxvYXRT
aXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1l
bnNpb25zOyB9CisKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIHZv
aWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRFbnRlckZ1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7CisKKyAgICBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0PiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOworICAgIHVpbnQ2NF90IG1fY29udGV4dElk
OworICAgIFJldGFpblB0cjxQbGF0Zm9ybVZpZXcgKj4gbV9sYXllckhvc3RWaWV3OworICAgIEhh
c2hTZXQ8V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Cisg
ICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdmlkZW9EaW1lbnNpb25zOworICAgIGJvb2wgbV9oYXNW
aWRlbyB7IGZhbHNlIH07Cit9OworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkg
OiBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+LCBwcml2YXRl
IElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYsIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eSYpOworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2b2lkIHJlcXVlc3RIaWRl
QW5kRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBib29sIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdDsKKyAgICBib29sIG1heUF1
dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7CisgICAgdm9pZCBh
cHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOworICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Q7
CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkK
KyAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKKyNl
bmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ7CisKKyAgICBleHBsaWNpdCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFn
ZVByb3h5JiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7CisgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKwor
ICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
PiwgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZh
Y2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZv
cm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwor
CisgICAgLy8gTWVzc2FnZXMgZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisgICAgdm9pZCBz
ZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5n
U2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICB2b2lkIHNldEhhc1Zp
ZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lv
bnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICB2
b2lkIGVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZXhpdEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCk7
CisgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNp
YmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpOworI2lmIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW5X
aXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyNlbmRpZgorCisgICAgLy8g
TWVzc2FnZXMgdG8gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIHZvaWQgcmVxdWVzdEZ1bGxz
Y3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2Up
OworICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlk
RW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRDbGVhbnVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZy
YW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0KTsKKyAgICB2b2lkIHNl
dFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSk7CisgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKKyAgICBS
ZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRl
eHRNYXA7CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Cisg
ICAgSGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50czsKK307CisgICAgCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmYzNiNTA0N2VmNDdhYmEx
OTU3MWU3NjQzYTA3MmVjZTgyMjBhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4K
QEAgLTAsMCArMSwzNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCittZXNzYWdlcyAtPiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkgeworICAgIFNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBoYXNWaWRlbykKKyAgICBTZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKQorICAgIFNldHVwRnVsbHNjcmVl
bldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgV2ViQ29y
ZTo6SW50UmVjdCBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2Ny
ZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKQorICAgIEVudGVyRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKKyAgICBDbGVhbnVwRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpCisgICAgUHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCisj
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisgICAg
RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVv
RnVsbHNjcmVlbk1vZGUpCisjZW5kaWYKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVjY2I5YjI5MjE5NjgyNjg2NGYwMDkxMDA4ZjkzMDg5ODg4YTE4YTIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubW0KQEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgor
CisjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJBUElVSUNsaWVudC5o
IgorI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMu
aCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9y
dCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL01hY2hTZW5k
UmlnaHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5ZXJFbnVtcy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4K
KyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorCisjaWYgUExBVEZPUk0oSU9TKQor
I2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiVUlL
aXRTUEkuaCIKKyNlbmRpZgorCitAaW50ZXJmYWNlIFdLTGF5ZXJIb3N0VmlldyA6IFBsYXRmb3Jt
VmlldworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgdWludDMyX3QgY29udGV4dElEOwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tMYXllckhvc3RWaWV3CisKKyNpZiBQTEFURk9STShJ
T1MpCisrIChDbGFzcylsYXllckNsYXNzIHsKKyAgICByZXR1cm4gW0NBTGF5ZXJIb3N0IGNsYXNz
XTsKK30KKyNlbHNlCistIChDQUxheWVyICopbWFrZUJhY2tpbmdMYXllcgoreworICAgIHJldHVy
biBbW1tDQUxheWVySG9zdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworfQorI2VuZGlmCisK
Ky0gKHVpbnQzMl90KWNvbnRleHRJRCB7CisgICAgcmV0dXJuIFtbc2VsZiBsYXllckhvc3RdIGNv
bnRleHRJZF07Cit9CisKKy0gKHZvaWQpc2V0Q29udGV4dElEOih1aW50MzJfdCljb250ZXh0SUQg
eworICAgIFtbc2VsZiBsYXllckhvc3RdIHNldENvbnRleHRJZDpjb250ZXh0SURdOworfQorCist
IChDQUxheWVySG9zdCAqKWxheWVySG9zdCB7CisgICAgcmV0dXJuIChDQUxheWVySG9zdCAqKVtz
ZWxmIGxheWVyXTsKK30KKworQGVuZAorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKKyNpZiBQTEFURk9STShJT1MpICYmICFIQVZFKEFWS0lUKQorCitS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmKQoreworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7Cit9CisK
K2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5
U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbigpCit7CisKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3sKKworfQorI2Vsc2UKKworI3ByYWdtYSBt
YXJrIC0gVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0CisKK1ZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSYgbWFuYWdlciwgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nl
c3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQorICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2Vy
KQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbChwbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAg
ICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKworVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCkKK3sKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQp
KTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBj
bGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAg
bV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RGdWxsc2NyZWVuTW9kZSht
X2NvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOworfQorCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVj
dCBmcmFtZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFZp
ZGVvTGF5ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJhbWUpOworfQorCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckdyYXZpdHkobV9jb250ZXh0SWQsIGdy
YXZpdHkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fY29udGV4dElkLCBtb2RlKTsKK30KKworYm9vbCBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbWFuYWdlciA/IG1fbWFuYWdlci0+aXNWaXNpYmxlKCkgOiBmYWxzZTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRTZXR1cEZ1bGxzY3JlZW4obV9j
b250ZXh0SWQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50
ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PmRpZEVudGVyRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVl
bigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVw
RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQoreworICAgIGlmIChtX21hbmFn
ZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29u
dGV4dElkKTsKK30KKworI3ByYWdtYSBtYXJrIC0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
CisKK1JlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSwgcGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5KSk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCisgICAgOiBtX3Bh
Z2UoJnBhZ2UpCisgICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShwbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkpCit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOworfQorCitWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQoreworICAgIGlm
ICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7CisgICAgbV9wYWdl
LT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgbV9wYWdlID0gbnVsbHB0cjsKKworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRl
eHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZT4gaW50ZXJmYWNlOworICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1
cGxlOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgICAgICBbbW9kZWwt
PmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgbW9kZWwtPnNl
dExheWVySG9zdFZpZXcobnVsbHB0cik7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFy
KCk7CisgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGZv
ciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpCisgICAgICAgIHN0ZDo6Z2V0
PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworfQorCitib29sIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBs
ZSktPmhhc01vZGUobW9kZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5
QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAoreworICAgIGZv
ciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0
ZDo6Z2V0PDE+KHR1cGxlKS0+bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1
cmUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1BsYXlpbmdWaWRlb0luRW5o
YW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250
ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmlzUGxh
eWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3sK
KyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQorICAgICAgICBz
dGQ6OmdldDwxPih0dXBsZSktPmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7Cit9CisKK1Zp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LT5lbnN1cmVNb2RlbChjb250ZXh0SWQpOworICAgIFJlZjxWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpOworICAgIGF1
dG8mIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5LT5lbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICBSZWY8UGxhdGZvcm1WaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlOjpjcmVhdGUocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKKyAgICBtX3BsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworCisg
ICAgaW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkpOworICAg
IGludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgp
KTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUo
aW50ZXJmYWNlKSk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRl
cmZhY2VUdXBsZSYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Nv
bnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElk
KQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKSk7Cit9CisKK1BsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFkZENsaWVu
dEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCwgMSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNv
bnRleHRJZCkpOworCisgICAgaW50IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNv
bnRleHRJZCk7CisgICAgQVNTRVJUKGNsaWVudENvdW50ID4gMCk7CisgICAgY2xpZW50Q291bnQt
LTsKKworICAgIGlmIChjbGllbnRDb3VudCA8PSAwKSB7CisgICAgICAgIG1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LT5yZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisgICAg
ICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpOworICAgICAgICBtX2NvbnRleHRN
YXAucmVtb3ZlKGNvbnRleHRJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Ns
aWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7Cit9CisKKyNwcmFnbWEgbWFy
ayBNZXNzYWdlcyBmcm9tIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlh
bFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dz
UGljdHVyZUluUGljdHVyZSkKK3sKKyAgICBBU1NFUlQodmlkZW9MYXllcklEKTsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxhdGZv
cm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKworICAgIHN0ZDo6dGllKG1v
ZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAg
ICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisKKyAgICBSZXRhaW5QdHI8V0tMYXll
ckhvc3RWaWV3PiB2aWV3ID0gc3RhdGljX2Nhc3Q8V0tMYXllckhvc3RWaWV3Kj4obW9kZWwtPmxh
eWVySG9zdFZpZXcoKSk7CisgICAgaWYgKCF2aWV3KSB7CisgICAgICAgIHZpZXcgPSBhZG9wdE5T
KFtbV0tMYXllckhvc3RWaWV3IGFsbG9jXSBpbml0XSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
ICAgICBbdmlldyBzZXRXYW50c0xheWVyOllFU107CisjZW5kaWYKKyAgICAgICAgbW9kZWwtPnNl
dExheWVySG9zdFZpZXcodmlldyk7CisgICAgfQorICAgIFt2aWV3IHNldENvbnRleHRJRDp2aWRl
b0xheWVySURdOworICAgIGlmIChob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IgIT0gMSkgeworICAg
ICAgICAvLyBJbnZlcnQgdGhlIHNjYWxlIHRyYW5zZm9ybSBhZGRlZCBpbiB0aGUgV2ViUHJvY2Vz
cyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KKyAgICAgICAgZmxvYXQgaW52ZXJz
ZVNjYWxlID0gMSAvIGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAgW1t2aWV3IGxh
eWVyXSBzZXRTdWJsYXllclRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VT
Y2FsZSwgaW52ZXJzZVNjYWxlLCAxKV07CisgICAgfQorCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IFVJVmlldyAqcGFyZW50VmlldyA9IGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHk+KCptX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLnJlbW90ZUxheWVyVHJlZUhvc3QoKS5yb290
TGF5ZXIoKTsKKyAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9z
dFZpZXcoKSwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFs
bG93c1BpY3R1cmVJblBpY3R1cmUpOworI2Vsc2UKKyAgICBJbnRSZWN0IGluaXRpYWxXaW5kb3dS
ZWN0OworICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhpbml0aWFsUmVjdCwgaW5pdGlhbFdp
bmRvd1JlY3QpOworICAgIGludGVyZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCptb2RlbC0+bGF5ZXJI
b3N0VmlldygpLCBpbml0aWFsV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpLCB2
aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKKyNlbmRpZgorICAg
IG1fcGFnZS0+dWlDbGllbnQoKS5oYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZSht
X3BhZ2UsIHZpZGVvRnVsbHNjcmVlbk1vZGUgJiBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8p
Cit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuaGFzVmlkZW9DaGFuZ2VkKGhhc1Zp
ZGVvKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGlt
ZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNp
b25zKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnZpZGVvRGltZW5zaW9uc0No
YW5nZWQodmlkZW9EaW1lbnNpb25zKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byYg
aW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgaW50ZXJmYWNlLmVu
dGVyRnVsbHNjcmVlbigpOworCisgICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBn
aXZlbiBmdWxsIHNjcmVlbiBtb2RlIGF0IGEgdGltZToKKyAgICBmb3IgKGF1dG8mIGNvbnRleHRQ
YWlyIDogbV9jb250ZXh0TWFwKSB7CisgICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29u
dGV4dFBhaXIua2V5OworICAgICAgICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBz
dGQ6OmdldDwxPihjb250ZXh0UGFpci52YWx1ZSk7CisgICAgICAgIGlmIChvdGhlckludGVyZmFj
ZS0+aGFzTW9kZShpbnRlcmZhY2UubW9kZSgpKSkKKyAgICAgICAgICAgIG90aGVySW50ZXJmYWNl
LT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgfQorfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsKKyNl
bHNlCisgICAgSW50UmVjdCBmaW5hbFdpbmRvd1JlY3Q7CisgICAgbV9wYWdlLT5yb290Vmlld1Rv
V2luZG93KGZpbmFsUmVjdCwgZmluYWxXaW5kb3dSZWN0KTsKKyAgICBlbnN1cmVJbnRlcmZhY2Uo
Y29udGV4dElkKS5leGl0RnVsbHNjcmVlbihmaW5hbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZv
cm1XaW5kb3coKSk7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQs
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJn
ZXRNb2RlKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVu
V2l0aG91dEFuaW1hdGlvblRvTW9kZSh0YXJnZXRNb2RlKTsKK30KKyNlbmRpZgorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmNsZWFudXBGdWxsc2Ny
ZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRv
UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6
OkludFJlY3QgaW5saW5lUmVjdCkKK3sKKyAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSgpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpLnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxpbmVSZWN0KTsKKyNl
bHNlCisgICAgSW50UmVjdCBpbmxpbmVXaW5kb3dSZWN0OworICAgIG1fcGFnZS0+cm9vdFZpZXdU
b1dpbmRvdyhpbmxpbmVSZWN0LCBpbmxpbmVXaW5kb3dSZWN0KTsKKyAgICBlbnN1cmVJbnRlcmZh
Y2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lV2lu
ZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyNlbmRpZgorfQorCisjcHJhZ21h
IG1hcmsgTWVzc2FnZXMgdG8gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRl
eHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0RnVsbHNjcmVlbk1vZGUoY29udGV4
dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpEaWRFbnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKK3sKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2Rl
bDsKKyAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFj
ZTsKKworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKKyAgICBbbW9k
ZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBtb2RlbC0+c2V0
TGF5ZXJIb3N0VmlldyhudWxscHRyKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworCisgICAgaW50ZXJmYWNlLT5zZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgIHJlbW92ZUNsaWVudEZvckNvbnRl
eHQoY29udGV4dElkKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNl
dFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBm
cmFtZSkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
ICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gW1VJV2luZG93IF9zeW5jaHJvbml6ZURy
YXdpbmdBY3Jvc3NQcm9jZXNzZXNdOworI2Vsc2UKKyAgICAgICAgTWFjaFNlbmRSaWdodCBmZW5j
ZVNlbmRSaWdodDsKKyAgICAgICAgaWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0g
bV9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICAgICAgZmVuY2VTZW5kUmlnaHQgPSBkcmF3
aW5nQXJlYS0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBv
cnQgPSBmZW5jZVNlbmRSaWdodC5sZWFrU2VuZFJpZ2h0KCk7CisjZW5kaWYKKworICAgICAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5
ZXJGcmFtZUZlbmNlZChjb250ZXh0SWQsIGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0
LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICB9Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jhdml0
eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQsICh1bnNp
Z25lZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkKK3sKKyAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVE
aWRDaGFuZ2UobV9wYWdlLCBtb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSks
IG1fcGFnZS0+cGFnZUlEKCkpOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6aXNWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5pc1ZpZXdWaXNpYmxl
KCkgJiYgbV9wYWdlLT5pc0luV2luZG93KCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElk
KQoreworICAgIGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNWaWV3VmlzaWJsZSksIG1fcGFnZS0+
cGFnZUlEKCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2YzMzYmU2NWE5OGMyMTljMGRiOTFkMDMyODQyOTVlY2U1ZjU0NzNk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRp
YVNlbGVjdGlvbk9wdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIFBMQVRG
T1JNKElPUykKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykKLXR5cGVkZWYgV2ViQ29yZTo6
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2U7Ci0jZWxzZQotdHlwZWRlZiBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0IGZpbmFsOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ+LCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwgIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gY3Jl
YXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29u
dGV4dElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwotICAgIH0KLSAgICB2aXJ0
dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQoKSB7IH0KLQotICAgIHZvaWQgaW52
YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwKLSAgICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENsaWVudCYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6Oldl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JilmaW5hbDsKLQotICAgIHZvaWQgZHVyYXRpb25D
aGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlKTsKLSAg
ICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKTsKLSAgICB2b2lkIHBsYXliYWNrU3Rh
cnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBs
aXZlVXBkYXRlSW50ZXJ2YWwpOwotICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChi
b29sKTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBp
bmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25z
dCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRf
dCBpbmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoYm9vbCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKTsKLQot
cHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgICAgICA6IG1f
bWFuYWdlcigmbWFuYWdlcikKLSAgICAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCi0gICAg
ewotICAgIH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0gICAgdm9pZCBwbGF5
KCkgZmluYWw7Ci0gICAgdm9pZCBwYXVzZSgpIGZpbmFsOwotICAgIHZvaWQgdG9nZ2xlUGxheVN0
YXRlKCkgZmluYWw7Ci0gICAgdm9pZCBiZWdpblNjcnViYmluZygpIGZpbmFsOwotICAgIHZvaWQg
ZW5kU2NydWJiaW5nKCkgZmluYWw7Ci0gICAgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSkgZmluYWw7
Ci0gICAgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7Ci0gICAgdm9pZCBiZWdpblNj
YW5uaW5nRm9yd2FyZCgpIGZpbmFsOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkg
ZmluYWw7Ci0gICAgdm9pZCBlbmRTY2FubmluZygpIGZpbmFsOwotICAgIHZvaWQgc2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCkgZmluYWw7Ci0gICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVk
aWFPcHRpb24odWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVy
ZSgpIGZpbmFsOwotICAgIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKLSAgICB2b2lkIHNldE11
dGVkKGJvb2wpIGZpbmFsOwotCi0gICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrU3RhcnRlZFRpbWU7IH0KLSAgICBkb3VibGUgZHVy
YXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgZG91YmxlIGN1
cnJlbnRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jdXJyZW50VGltZTsgfQotICAgIGRv
dWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1ZmZlcmVkVGltZTsg
fQotICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1BsYXlpbmc7
IH0KLSAgICBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1NjcnVi
YmluZzsgfQotICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
cGxheWJhY2tSYXRlOyB9Ci0gICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IHNlZWthYmxlUmFu
Z2VzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVrYWJsZVJhbmdlcy5jb3B5UmVmKCk7IH0K
LSAgICBkb3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZTsgfQotICAg
IGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2xpdmVVcGRhdGVJ
bnRlcnZhbDsgfQotICAgIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9jYW5QbGF5RmFzdFJldmVyc2U7IH0KLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFT
ZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQotICAgIHVpbnQ2NF90IGF1
ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlh
U2VsZWN0ZWRJbmRleDsgfQotICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlv
bj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQotICAgIHVpbnQ2NF90IGxlZ2libGVNZWRp
YVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRpYVNlbGVj
dGVkSW5kZXg7IH0KLSAgICBib29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZDsgfQotICAgIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGU7IH0KLSAgICBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VO
YW1lOyB9Ci0gICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7IH0KLSAgICBib29s
IGlzTXV0ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGVkOyB9Ci0KLSAgICBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2NvbnRl
eHRJZDsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
Kj4gbV9jbGllbnRzOwotICAgIGRvdWJsZSBtX3BsYXliYWNrU3RhcnRlZFRpbWUgeyAwIH07Ci0g
ICAgYm9vbCBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSB7IGZhbHNlIH07Ci0gICAg
ZG91YmxlIG1fZHVyYXRpb24geyAwIH07Ci0gICAgZG91YmxlIG1fY3VycmVudFRpbWUgeyAwIH07
Ci0gICAgZG91YmxlIG1fYnVmZmVyZWRUaW1lIHsgMCB9OwotICAgIGJvb2wgbV9pc1BsYXlpbmcg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1NjcnViYmluZyB7IGZhbHNlIH07Ci0gICAgZmxvYXQg
bV9wbGF5YmFja1JhdGUgeyAwIH07Ci0gICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IG1fc2Vl
a2FibGVSYW5nZXMgeyBXZWJDb3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKSB9OwotICAgIGRvdWJs
ZSBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgeyAwIH07Ci0gICAgZG91Ymxl
IG1fbGl2ZVVwZGF0ZUludGVydmFsIHsgMCB9OwotICAgIGJvb2wgbV9jYW5QbGF5RmFzdFJldmVy
c2UgeyBmYWxzZSB9OwotICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4g
bV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKLSAgICB1aW50NjRfdCBtX2F1ZGlvTWVkaWFT
ZWxlY3RlZEluZGV4IHsgMCB9OwotICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOwotICAgIHVpbnQ2NF90IG1fbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKLSAgICBib29sIG1fZXh0ZXJuYWxQbGF5YmFj
a0VuYWJsZWQgeyBmYWxzZSB9OwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lIH07Ci0gICAgU3RyaW5nIG1fZXh0ZXJu
YWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWU7Ci0gICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9Owot
fTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmKTsKLSAgICB2aXJ0dWFsIH5XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwot
Ci0gICAgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdl
ckludGVyZmFjZSgpOwotICAgIHZvaWQgcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKTsKLQot
cHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OwotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7Ci0KLSAg
ICBleHBsaWNpdCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5Jik7
Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBmaW5hbDsKLQotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNy
ZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRl
cmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsK
LSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIGVu
c3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9y
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29u
dGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyCi0gICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
V2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBjbGVhclBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyKCk7Ci0gICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKLSAgICB2b2lk
IHNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rvcjxz
dGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1l
LCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKLSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKTsKLSAgICB2b2lkIGF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxX
ZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxh
eWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwg
dWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOwotICAgIHZv
aWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCk7Ci0gICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgZHVyYXRpb24pOwotICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSk7Ci0gICAgdm9pZCBy
YXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0
ZSk7Ci0gICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3Qs
IFN0cmluZykgY29uc3Q7Ci0gICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sIG11dGVkKTsKLQotICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIKLSAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHBhdXNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3Qg
Y29udGV4dElkKTsKLSAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNl
ZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9pZCBmYXN0
U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKLSAgICB2b2lkIGJlZ2luU2Nh
bm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5n
QmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2
NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlh
T3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgdG9n
Z2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xl
TXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNldE11dGVkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCk7Ci0KLSAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKLSAgICBIYXNoTWFw
PHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0
X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaENvdW50ZWRTZXQ8
dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MzZhODMyNzNlYjhl
MTQ0YTZhMTAzNTA1NTc4OWMyM2UwOTEyN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDUg
KzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkg
ewotICAgIFJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgQ3VycmVudFRp
bWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
aG9zdFRpbWUpCi0gICAgQnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBidWZmZXJlZFRpbWUpCi0gICAgU2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywg
ZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi0gICAg
Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUp
Ci0gICAgQXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQotICAgIExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotICAgIEF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQotICAgIExlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi0gICAgRXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRp
ZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJn
ZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKLSAgICBXaXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQot
ICAgIER1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikK
LSAgICBQbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQotICAgIFJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKQotICAgIE11dGVkQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOwotICAgIFNldFVwUGxheWJhY2tDb250cm9sc01hbmFn
ZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQotICAgIENsZWFyUGxheWJhY2tDb250cm9sc01h
bmFnZXIoKQotCi0gICAgSGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90
IGNvbnRleHRJZCwgU3RyaW5nIGlkKQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOWQzM2Y5ZmMwODkzYTgyMDk3
YTVlZWM4Zjg2ZjVhYTg2NTNjZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTY1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIldlYlBhZ2VQ
cm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0j
aW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9y
dCAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jcHJh
Z21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQKLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGll
bnQpKTsKLSAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXkoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAg
ICAgIG1fbWFuYWdlci0+cGxheShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpwYXVzZSgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT5wYXVzZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQotewotICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGxheVN0YXRlKG1fY29udGV4dElkKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkK
LXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmJlZ2luU2NydWJiaW5n
KG1fY29udGV4dElkKTsKLQotICAgIG1faXNTY3J1YmJpbmcgPSB0cnVlOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmVuZFNjcnViYmluZyhtX2NvbnRleHRJZCk7
Ci0KLSAgICBtX2lzU2NydWJiaW5nID0gZmFsc2U7Ci0gICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1l
TmVlZHNVcGRhdGUgPSBpc1BsYXlpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdl
cikKLSAgICAgICAgbV9tYW5hZ2VyLT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0
aW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWso
bV9jb250ZXh0SWQsIHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAg
ICAgIG1fbWFuYWdlci0+YmVnaW5TY2FubmluZ0ZvcndhcmQobV9jb250ZXh0SWQpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJk
KCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5p
bmdCYWNrd2FyZChtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjplbmRTY2FubmluZygpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAg
bV9tYW5hZ2VyLT5lbmRTY2FubmluZyhtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9w
dGlvbklkKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2VsZWN0
QXVkaW9NZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2
NF90IG9wdGlvbklkKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJl
KCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBpY3R1
cmVJblBpY3R1cmUobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+dG9nZ2xlTXV0ZWQobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNldE11dGVkKG1fY29udGV4dElkLCBtdXRl
ZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5YmFja1N0
YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBtX3Bs
YXliYWNrU3RhcnRlZFRpbWUgPSBwbGF5YmFja1N0YXJ0ZWRUaW1lOwotICAgIG1fcGxheWJhY2tT
dGFydGVkVGltZU5lZWRzVXBkYXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQotewotICAg
IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKLSAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJs
ZSBjdXJyZW50VGltZSkKLXsKLSAgICBtX2N1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7Ci0gICAg
YXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRp
bWVdOwotICAgIGlmIChtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSkKLSAgICAgICAg
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY3VycmVudFRpbWUpOwotCi0gICAgZm9yIChhdXRv
KiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2Vk
KGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsK
LSAgICBtX2J1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZl
cmVkVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRl
Q2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIG1faXNQ
bGF5aW5nID0gaXNQbGF5aW5nOwotICAgIG1fcGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwot
ICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnJhdGVD
aGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFu
Z2VzJiBzZWVrYWJsZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZl
VXBkYXRlSW50ZXJ2YWwpCi17Ci0gICAgbV9zZWVrYWJsZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2Vz
OwotICAgIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IGxhc3RNb2RpZmll
ZFRpbWU7Ci0gICAgbV9saXZlVXBkYXRlSW50ZXJ2YWwgPSBsaXZlVXBkYXRlSW50ZXJ2YWw7Ci0g
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+c2Vla2Fi
bGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBk
YXRlSW50ZXJ2YWwpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKLXsKLSAg
ICBtX2NhblBsYXlGYXN0UmV2ZXJzZSA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKLSAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVy
c2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMs
IHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KQotewotICAgIG1fYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnMgPSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKLSAgICBtX2F1ZGlv
TWVkaWFTZWxlY3RlZEluZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7Ci0gICAgZm9yIChh
dXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBhdWRpb01lZGlh
U2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBs
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQotewotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAgbV9sZWdpYmxlTWVk
aWFTZWxlY3RlZEluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsKLQotICAgIGZvciAo
YXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMsIGxlZ2li
bGVNZWRpYVNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQotewotICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4
OwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+
YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1fbGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXg7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIGxvY2FsaXplZE5hbWUpCi17Ci0gICAgbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCA9IGVu
YWJsZWQ7Ci0gICAgbV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSA9IHR5cGU7Ci0gICAgbV9l
eHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZE5hbWU7Ci0KLSAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5leHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWROYW1lKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkQ2hhbmdlZChib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQotewotICAg
IG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgPSB3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZDsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xp
ZW50LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9tdXRlZCA9IG11dGVkOwotICAg
IGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPm11dGVkQ2hh
bmdlZChtdXRlZCk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eQotCi1SZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGFn
ZSkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UoJnBhZ2Up
Ci17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9w
YWdlLT5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6On5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKQotewotICAgIGlmICghbV9wYWdl
KQotICAgICAgICByZXR1cm47Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgbV9wYWdlLT5wcm9j
ZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0g
ICAgbV9wYWdlID0gbnVsbHB0cjsKLQotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRN
YXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZT4gaW50ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9
IHR1cGxlOwotCi0gICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAg
IG1fY29udGV4dE1hcC5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci19Ci0K
LVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
PiBtb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBj
b250ZXh0SWQpOwotICAgIFJlZjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4g
aW50ZXJmYWNlID0gUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6OmNyZWF0ZSht
b2RlbCk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZN
b3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1v
ZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7
Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi1QbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZSYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkK
LXsKLSAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIGlmICghbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmludmFs
aWRhdGUoKTsKLSAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19Ci0KLSNwcmFn
bWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFn
ZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBp
ZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPT0gY29udGV4dElkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgIHJlbW92
ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotCi0gICAgbV9j
b250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7Ci0gICAgZW5zdXJlSW50ZXJmYWNl
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKS5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLSAg
ICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLQotICAg
IG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKGNvbnRleHRJZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQotewotI2lmIFBM
QVRGT1JNKE1BQykKLSAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkKTsKLSAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7Ci0gICAgbV9w
YWdlLT52aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFT
dGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVu
dFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3Vi
bGUgaG9zdFRpbWUpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jdXJyZW50VGltZUNo
YW5nZWQoY3VycmVudFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZm
ZXJlZFRpbWUpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5idWZmZXJlZFRpbWVDaGFu
Z2VkKGJ1ZmZlcmVkVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0
b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVk
VGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBSZWY8VGltZVJhbmdlcz4g
dGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwotICAgIGZvciAoY29uc3QgYXV0byYg
cmFuZ2UgOiByYW5nZXMpIHsKLSAgICAgICAgQVNTRVJUKGlzZmluaXRlKHJhbmdlLmZpcnN0KSk7
Ci0gICAgICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5zZWNvbmQpKTsKLSAgICAgICAgQVNTRVJU
KHJhbmdlLnNlY29uZCA+PSByYW5nZS5maXJzdCk7Ci0gICAgICAgIHRpbWVSYW5nZXMtPmFkZChy
YW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsKLSAgICB9Ci0KLSAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1l
LCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgdmFsdWUpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5jYW5QbGF5RmFzdFJldmVy
c2VDaGFuZ2VkKHZhbHVlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJ
bmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVk
SW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJu
YWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFi
bGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsK
LSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUg
dHlwZSA9IHN0YXRpY19jYXN0PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7Ci0gICAgQVNTRVJUKHR5cGUgPT0gV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpUYXJnZXRUeXBlTm9uZSk7Ci0KLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxl
ZCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQot
ewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubXV0ZWRDaGFuZ2VkKG11dGVkKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQotewotICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkucGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGlt
ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyYXRlQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKLXsKLSAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcmF0ZSk7Ci19
Ci0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xs
ZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZGVudGlmaWVy
KSBjb25zdAotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoY29udGV4dElkID09IG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICBtX3BhZ2UtPmhhbmRsZUNvbnRyb2xsZWRF
bGVtZW50SURSZXNwb25zZShpZGVudGlmaWVyKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNv
bnRleHRJZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlkZW50aWZpZXIpOwotI2VuZGlmCi19Ci0KLQot
I3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElk
KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6UGxheShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBhdXNl
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRv
Z2dsZVBsYXlTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OkJlZ2luU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1Rp
bWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElk
LCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQot
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
RmFzdFNlZWsoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nQmFj
a3dhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpF
bmRTY2FubmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oY29u
dGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4
dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0
SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpUb2dnbGVQaWN0dXJlSW5QaWN0dXJlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQo
dWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlTXV0ZWQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRNdXRl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZXRNdXRlZChjb250ZXh0SWQsIG11
dGVkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpyZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpCi17Ci0gICAgaWYgKG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLVBs
YXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpCi17Ci0gICAgaWYgKCFtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
JiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQp
OwotICAgIHJldHVybiAmaW50ZXJmYWNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMDQwY2EwNTExNDUzY2E3MDkwNGE1YTRkY2RlZmU5ZDll
ZjUyMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9T
KQotdHlwZWRlZiBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBQbGF0
Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLSNlbHNlCi10eXBlZGVmIFdlYkNvcmU6
OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFn
ZVByb3h5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwotY2xhc3MgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWwK
LSAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4K
LSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgICwgcHVi
bGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyICB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dChtYW5hZ2VyLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpOwotCi0g
ICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9Ci0KLSAgICBQbGF0
Zm9ybVZpZXcgKmxheWVySG9zdFZpZXcoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdFZpZXcu
Z2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVySG9zdFZpZXcoUmV0YWluUHRyPFBsYXRmb3JtVmll
dz4mJiBsYXllckhvc3RWaWV3KSB7IG1fbGF5ZXJIb3N0VmlldyA9IFdURk1vdmUobGF5ZXJIb3N0
Vmlldyk7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQo
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0JiwgdWludDY0X3QpOwotCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAg
ICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1v
ZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBi
b29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vmlk
ZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOwotICAgIHZvaWQgZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNWaWRl
bzsgfQotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3ZpZGVvRGltZW5zaW9uczsgfQotCi0gICAgLy8gV2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKLSAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3Jl
ZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92
ZXJyaWRlOwotCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7
Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbDsKLSAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLSAgICBSZXRhaW5QdHI8UGxhdGZv
cm1WaWV3ICo+IG1fbGF5ZXJIb3N0VmlldzsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6
ZSBtX3ZpZGVvRGltZW5zaW9uczsKLSAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OwotfTsK
LQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkmKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHko
KTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4
aXRGdWxsc2NyZWVuKCk7Ci0gICAgYm9vbCBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3Q7Ci0gICAgYm9vbCBtYXlBdXRvbWF0
aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0OwotICAgIHZvaWQgYXBwbGlj
YXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwotCi0j
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAg
Ym9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OwotCi0gICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBh
Z2VQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOwotICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7
Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1v
ZGVsSW50ZXJmYWNlVHVwbGU7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFu
ZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUm
IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKTsKLQotICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcgotICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFs
UmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7
Ci0gICAgdm9pZCBzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotICAgIHZv
aWQgc2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJik7Ci0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SW50UmVjdCBmaW5hbFJlY3QpOwotICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKTsKLSAgICB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KTsKLSNp
ZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSAgICB2
b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7
Ci0jZW5kaWYKLQotICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIK
LSAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5p
c2hlZFdpdGhNZWRpYSA9IGZhbHNlKTsKLSAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAg
ICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZs
b2F0UmVjdCk7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOwotICAg
IHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgV2Vi
UGFnZVByb3h5KiBtX3BhZ2U7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwg
TW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OwotICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9j
bGllbnRDb3VudHM7Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4MTVkNjcyMzhlOWQzYWZmY2Yw
MWY0ZjRkYmQ0MDUyNDA4NDRjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBA
Ci0jIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
Ci0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
Ci0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiAoUExBVEZPUk0o
SU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eSB7Ci0gICAgU2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVv
KQotICAgIFNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZs
b2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMpCi0gICAgU2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IGlu
aXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29s
IGFsbG93c1BpY3R1cmVJblBpY3R1cmUpCi0gICAgRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKLSAgICBFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6
OkludFJlY3QgZmluYWxSZWN0KQotICAgIENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLSAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBi
b29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCkKLSNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSAgICBFeGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9k
ZSkKLSNlbmRpZgotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMjlhZDlhMTQxZDQxNmIxYjliZWQyZTMzN2FlNmFh
ZTFkYWUxYzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
IgotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBUElVSUNsaWVu
dC5oIgotI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5
LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQg
IldlYlByb2Nlc3NQcm94eS5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1l
c3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdl
cy5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL01hY2hTZW5kUmlnaHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5ZXJFbnVtcy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9RdWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Rp
bWVSYW5nZXMuaD4KLSNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotCi0jaWYgUExB
VEZPUk0oSU9TKQotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgot
I2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdLTGF5ZXJIb3N0Vmll
dyA6IFBsYXRmb3JtVmlldwotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgdWludDMyX3Qg
Y29udGV4dElEOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tMYXllckhvc3RWaWV3Ci0KLSNp
ZiBQTEFURk9STShJT1MpCi0rIChDbGFzcylsYXllckNsYXNzIHsKLSAgICByZXR1cm4gW0NBTGF5
ZXJIb3N0IGNsYXNzXTsKLX0KLSNlbHNlCi0tIChDQUxheWVyICopbWFrZUJhY2tpbmdMYXllcgot
ewotICAgIHJldHVybiBbW1tDQUxheWVySG9zdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwot
fQotI2VuZGlmCi0KLS0gKHVpbnQzMl90KWNvbnRleHRJRCB7Ci0gICAgcmV0dXJuIFtbc2VsZiBs
YXllckhvc3RdIGNvbnRleHRJZF07Ci19Ci0KLS0gKHZvaWQpc2V0Q29udGV4dElEOih1aW50MzJf
dCljb250ZXh0SUQgewotICAgIFtbc2VsZiBsYXllckhvc3RdIHNldENvbnRleHRJZDpjb250ZXh0
SURdOwotfQotCi0tIChDQUxheWVySG9zdCAqKWxheWVySG9zdCB7Ci0gICAgcmV0dXJuIChDQUxh
eWVySG9zdCAqKVtzZWxmIGxheWVyXTsKLX0KLQotQGVuZAotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBQTEFURk9STShJT1MpICYmICFIQVZF
KEFWS0lUKQotCi1SZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmKQotewotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aW52YWxpZGF0ZSgpCi17Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0KLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0
aXZlKCkKLXsKLQotfQotI2Vsc2UKLQotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFu
YWdlciwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2Rl
bCwgdWludDY0X3QgY29udGV4dElkKQotICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgICwg
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbChwbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAsIG1fY29u
dGV4dElkKGNvbnRleHRJZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGll
bnQpKTsKLSAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRp
YSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RGdWxs
c2NyZWVuTW9kZShtX2NvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdl
YkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBt
X21hbmFnZXItPnNldFZpZGVvTGF5ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJhbWUpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHko
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQot
ewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckdy
YXZpdHkobV9jb250ZXh0SWQsIGdyYXZpdHkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fY29udGV4dElk
LCBtb2RlKTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlz
aWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWFuYWdlciA/IG1fbWFuYWdlci0+aXNWaXNp
YmxlKCkgOiBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OmRpZFNldHVwRnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5kaWRTZXR1cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKLXsKLSAgICBp
ZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNjcmVlbihtX2Nv
bnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRF
eGl0RnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2Vy
LT5kaWRFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1f
bWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRl
eHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29udGV4dElkKTsKLX0KLQot
I3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ci0KLVJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSwgcGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5KSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCi0g
ICAgOiBtX3BhZ2UoJnBhZ2UpCi0gICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShw
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkoKQotewotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaW52YWxp
ZGF0ZSgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxp
ZGF0ZSgpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsKLQotICAgIGZv
ciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxQ
bGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOwotICAgICAgICBz
dGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotCi0gICAgICAgIGludGVyZmFjZS0+
aW52YWxpZGF0ZSgpOwotICAgICAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKLSAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7Ci0g
ICAgfQotCi0gICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRDb3VudHMuY2xl
YXIoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RI
aWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRl
eHRNYXAudmFsdWVzKCkpCi0gICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVB
bmRFeGl0RnVsbHNjcmVlbigpOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKSB7Ci0gICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmhhc01vZGUobW9kZSkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dW
aWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBt
X2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+
bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLWJvb2wgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVu
KCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygp
KSB7Ci0gICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmlzUGxheWluZ1ZpZGVvSW5Fbmhh
bmNlZEZ1bGxzY3JlZW4oKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKLXsKLSAgICBmb3IgKGF1
dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQotICAgICAgICBzdGQ6OmdldDwxPih0
dXBsZSktPmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkK
LXsKLSAgICBhdXRvJiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5LT5lbnN1cmVNb2RlbChjb250ZXh0SWQpOwotICAgIFJlZjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpOwotICAgIGF1
dG8mIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5LT5lbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBSZWY8UGxhdGZvcm1XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRmb3JtV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlOjpjcmVhdGUocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKLSAgICBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQp
OwotCi0gICAgaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0
KCkpOwotICAgIGludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIo
Jm1vZGVsLmdldCgpKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2Rl
bCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0
byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VU
dXBsZSgpKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwot
ICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJl
TW9kZWwodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLVBsYXRmb3JtV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3Vy
ZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwx
PihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNvbnRl
eHRJZCwgMSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotCi0gICAgaW50
IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7Ci0gICAgQVNTRVJU
KGNsaWVudENvdW50ID4gMCk7Ci0gICAgY2xpZW50Q291bnQtLTsKLQotICAgIGlmIChjbGllbnRD
b3VudCA8PSAwKSB7Ci0gICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5yZW1v
dmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci0gICAgICAgIG1fY2xpZW50Q291bnRzLnJl
bW92ZShjb250ZXh0SWQpOwotICAgICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4
dElkLCBjbGllbnRDb3VudCk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZp
ZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhv
c3RpbmdEZXZpY2VTY2FsZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVy
ZSkKLXsKLSAgICBBU1NFUlQodmlkZW9MYXllcklEKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLQotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBhZGRDbGll
bnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci0KLSAgICBSZXRhaW5QdHI8V0tMYXllckhvc3RWaWV3
PiB2aWV3ID0gc3RhdGljX2Nhc3Q8V0tMYXllckhvc3RWaWV3Kj4obW9kZWwtPmxheWVySG9zdFZp
ZXcoKSk7Ci0gICAgaWYgKCF2aWV3KSB7Ci0gICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tMYXll
ckhvc3RWaWV3IGFsbG9jXSBpbml0XSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBbdmll
dyBzZXRXYW50c0xheWVyOllFU107Ci0jZW5kaWYKLSAgICAgICAgbW9kZWwtPnNldExheWVySG9z
dFZpZXcodmlldyk7Ci0gICAgfQotICAgIFt2aWV3IHNldENvbnRleHRJRDp2aWRlb0xheWVySURd
OwotICAgIGlmIChob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IgIT0gMSkgewotICAgICAgICAvLyBJ
bnZlcnQgdGhlIHNjYWxlIHRyYW5zZm9ybSBhZGRlZCBpbiB0aGUgV2ViUHJvY2VzcyB0byBmaXgg
PHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KLSAgICAgICAgZmxvYXQgaW52ZXJzZVNjYWxlID0g
MSAvIGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvcjsKLSAgICAgICAgW1t2aWV3IGxheWVyXSBzZXRT
dWJsYXllclRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VTY2FsZSwgaW52
ZXJzZVNjYWxlLCAxKV07Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFVJVmlldyAq
cGFyZW50VmlldyA9IGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCpt
X3BhZ2UtPmRyYXdpbmdBcmVhKCkpLnJlbW90ZUxheWVyVHJlZUhvc3QoKS5yb290TGF5ZXIoKTsK
LSAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwg
aW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93c1BpY3R1
cmVJblBpY3R1cmUpOwotI2Vsc2UKLSAgICBJbnRSZWN0IGluaXRpYWxXaW5kb3dSZWN0OwotICAg
IG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhpbml0aWFsUmVjdCwgaW5pdGlhbFdpbmRvd1JlY3Qp
OwotICAgIGludGVyZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCptb2RlbC0+bGF5ZXJIb3N0Vmlldygp
LCBpbml0aWFsV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpLCB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKLSNlbmRpZgotICAgIG1fcGFnZS0+
dWlDbGllbnQoKS5oYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIHZp
ZGVvRnVsbHNjcmVlbk1vZGUgJiBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCi17Ci0g
ICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuaGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5z
aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25z
KQotewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnZpZGVvRGltZW5zaW9uc0NoYW5n
ZWQodmlkZW9EaW1lbnNpb25zKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byYg
aW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgaW50ZXJmYWNlLmVu
dGVyRnVsbHNjcmVlbigpOwotCi0gICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBn
aXZlbiBmdWxsIHNjcmVlbiBtb2RlIGF0IGEgdGltZToKLSAgICBmb3IgKGF1dG8mIGNvbnRleHRQ
YWlyIDogbV9jb250ZXh0TWFwKSB7Ci0gICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29u
dGV4dFBhaXIua2V5OwotICAgICAgICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBz
dGQ6OmdldDwxPihjb250ZXh0UGFpci52YWx1ZSk7Ci0gICAgICAgIGlmIChvdGhlckludGVyZmFj
ZS0+aGFzTW9kZShpbnRlcmZhY2UubW9kZSgpKSkKLSAgICAgICAgICAgIG90aGVySW50ZXJmYWNl
LT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKLXsKLSNpZiBQTEFURk9STShJT1MpCi0g
ICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsK
LSNlbHNlCi0gICAgSW50UmVjdCBmaW5hbFdpbmRvd1JlY3Q7Ci0gICAgbV9wYWdlLT5yb290Vmll
d1RvV2luZG93KGZpbmFsUmVjdCwgZmluYWxXaW5kb3dSZWN0KTsKLSAgICBlbnN1cmVJbnRlcmZh
Y2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbihmaW5hbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxh
dGZvcm1XaW5kb3coKSk7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSB0YXJnZXRNb2RlKQotewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxs
c2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh0YXJnZXRNb2RlKTsKLX0KLSNlbmRpZgotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKQotewotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmNsZWFu
dXBGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2li
bGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCkKLXsKLSAgICBtX3BhZ2UtPmZ1bGxzY3Jl
ZW5NYXlSZXR1cm5Ub0lubGluZSgpOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGVuc3VyZUlu
dGVyZmFjZShjb250ZXh0SWQpLnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxp
bmVSZWN0KTsKLSNlbHNlCi0gICAgSW50UmVjdCBpbmxpbmVXaW5kb3dSZWN0OwotICAgIG1fcGFn
ZS0+cm9vdFZpZXdUb1dpbmRvdyhpbmxpbmVSZWN0LCBpbmxpbmVXaW5kb3dSZWN0KTsKLSAgICBl
bnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJs
ZSwgaW5saW5lV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpKTsKLSNlbmRpZgot
fQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5N
b2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoY29udGV4dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVl
bihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
LXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OkRpZEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1f
cGFnZS0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRF
bnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdl
LT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICBSZWZQ
dHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLQotICAg
IHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKLSAgICBbbW9kZWwtPmxheWVy
SG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0
VmlldyhudWxscHRyKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQoY29u
dGV4dElkKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZp
ZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFt
ZSkKLXsKLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAg
IG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gW1VJV2luZG93IF9zeW5jaHJvbml6ZURyYXdp
bmdBY3Jvc3NQcm9jZXNzZXNdOwotI2Vsc2UKLSAgICAgICAgTWFjaFNlbmRSaWdodCBmZW5jZVNl
bmRSaWdodDsKLSAgICAgICAgaWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV9w
YWdlLT5kcmF3aW5nQXJlYSgpKQotICAgICAgICAgICAgZmVuY2VTZW5kUmlnaHQgPSBkcmF3aW5n
QXJlYS0+Y3JlYXRlRmVuY2UoKTsKLSAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBvcnQg
PSBmZW5jZVNlbmRSaWdodC5sZWFrU2VuZFJpZ2h0KCk7Ci0jZW5kaWYKLQotICAgICAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5
ZXJGcmFtZUZlbmNlZChjb250ZXh0SWQsIGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0
LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jh
dml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0
SWQsICh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSkKLXsKLSAgICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1
cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCBtb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKGNv
bnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi1ib29sIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
YWdlLT5pc1ZpZXdWaXNpYmxlKCkgJiYgbV9wYWdlLT5pc0luV2luZG93KCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUodWludDY0X3QgY29udGV4dElkKQotewotICAgIGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFn
ZS0+aXNWaWV3VmlzaWJsZSgpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwg
aXNWaWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi0jZW5kaWYKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4IDdmMWU5ODU5ODZlNTM1OGM0NTQ4
Y2E1OTkzZWFhNjNlYzFiYTljMDMuLjlhZWRlNzBhZTE3MTM3ZmFhMTIzY2I1MGU4ZTYzODQ5YTVl
MjJkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
CkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJQYWdl
Q2xpZW50SW1wbC5oIgogI2ltcG9ydCAiUGFzdGVib2FyZFR5cGVzLmgiCisjaW1wb3J0ICJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkuaCIKICNpbXBvcnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5LmgiCiAjaW1wb3J0
ICJSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgiCkBAIC02Miw3ICs2Myw2IEBACiAjaW1w
b3J0ICJXZWJFdmVudEZhY3RvcnkuaCIKICNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCiAj
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQgIldlYlByb2Nl
c3NQcm94eS5oIgogI2ltcG9ydCAiX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJbnRlcm5hbC5oIgpA
QCAtMTE3MCw4ICsxMTcwLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJh
cigpCiAgICAgICAgIFttX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldENhblRvZ2dsZVBpY3R1
cmVJblBpY3R1cmU6WUVTXTsKICAgICB9CiAKLSAgICBpZiAoUGxhdGZvcm1XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UqIGludGVyZmFjZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdl
cigpLT5jb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKSkKLSAgICAgICAgW21fcGxheWJhY2tDb250
cm9sc01hbmFnZXIgc2V0V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07
CisgICAgaWYgKFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBpbnRlcmZhY2UgPSBt
X3BhZ2UtPnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKS0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNl
KCkpCisgICAgICAgIFttX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzppbnRlcmZhY2VdOwogCiAgICAgW21fbWVkaWFUb3VjaEJhclByb3ZpZGVy
IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIu
Z2V0KCldOwogICAgIFttX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250
cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA5ZmIzZjJmOGIyMDdkZWM5YzUx
ZWQ3NmM1NzRhZDg0NjcyYjhiMTI0Li5jM2ZlZTFlZDdlNjEyMzJlN2JhMGQ1NmUxNzZmYzYzZmZm
MTU5NDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE1
Miw5ICsxNTIsOSBAQAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIlJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVTY3JvbGxp
bmdQZXJmb3JtYW5jZURhdGEuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1J1bkxvb3BPYnNlcnZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dElu
ZGljYXRvcldpbmRvdy5oPgpAQCAtMTgwLDcgKzE4MCw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKKyNpbmNs
dWRlICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKQEAgLTM5NCw4ICszOTQsOCBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQ
cm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIHVp
bgogICAgIG1fZnVsbFNjcmVlbk1hbmFnZXIgPSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Ojpj
cmVhdGUoKnRoaXMsIG1fcGFnZUNsaWVudC5mdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkp
OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlciA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0
aGlzKTsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7Cisg
ICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpjcmVhdGUoKnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTYzNiw4ICs2MzYsOCBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3MoKQogICAgIG1fZnVsbFNj
cmVlbk1hbmFnZXIgPSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsIG1f
cGFnZUNsaWVudC5mdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkpOwogI2VuZGlmCiAjaWYg
UExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsKLSAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNy
ZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CisgICAgbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMp
OworICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKICNlbmRpZgog
CiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTQzMTMsMTIgKzQzMTMsMTIgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldEZ1bGxzY3JlZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RnVsbHNj
cmVlbkNsaWVudD4mJgogI2VuZGlmCiAgICAgCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShB
VktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6cGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQ
cm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCiB7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5nZXQoKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
KiBXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQorVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5KiBXZWJQYWdlUHJveHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewog
ICAgIHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuZ2V0KCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDgxMjIwMjNkMTFiYzFiYjY0MzBkMDYwOWUw
ZThhYTFmZjUxMGQxMzcuLmQ3MjY5MGQyMDhmMGUxMzI3ZDNiZmQyZWNiZjJhMGVmZDc0YzYyNzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0yMDEsOSArMjAxLDkg
QEAgY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYkNvbnRleHRNZW51UHJv
eHk7CiBjbGFzcyBXZWJFZGl0Q29tbWFuZFByb3h5OwogY2xhc3MgV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKK2NsYXNzIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYk5hdmlnYXRpb25TdGF0ZTsKLWNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKK2NsYXNzIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJVUkxTY2hl
bWVIYW5kbGVyOwogY2xhc3MgV2ViTW91c2VFdmVudDsKQEAgLTM0Myw4ICszNDMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZ1
bGxzY3JlZW5DbGllbnQ+JiYpOwogI2VuZGlmCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShB
VktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25N
YW5hZ2VyKCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyKCk7CisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTE2
ODAsOCArMTY4MCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIChQTEFURk9STShJT1MpICYm
IEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5PiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggYzQzYzc2NWU0ZDdhYjNjZGJkZGVhOWZjY2Fi
MmRjNWIwNzU5ODdmYS4uMzMxMmRjYWNmZWMwNTBjYjgwOWQ3OGQ5ZTFlNGEzNTA5NmMzMjdlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBA
IC00MSwxMSArNDEsMTEgQEAKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgi
CiAjaW1wb3J0ICJVSUtpdFNQSS5oIgogI2ltcG9ydCAiVXNlckRhdGEuaCIKKyNpbXBvcnQgIlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiVmlld1VwZGF0ZURpc3BhdGNo
ZXJNZXNzYWdlcy5oIgogI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJu
YWwuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1By
b3h5LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBv
cnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1NzhjOTMzNjhlNmJjNDE1
ZDhjODIxZWI5YTIzYzk5MGRiYzRlMGM5Li4zOTZjYTVlMDcyNjUwYWY3OWEwN2QzN2IzN2IxMjlj
MTNkOWJhMTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTg3MSw4ICs4NzEsOCBAQAogCQkzN0ZDMTk0NzE4NTBGQkYyMDA4Q0ZBNDcg
LyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0NjE4NTBGQkYyMDA4Q0ZBNDcg
LyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGQzE5NEExODUxMEQ2QTAwOENG
QTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMxOTQ4MTg1MTBENkEwMDhDRkE0NyAv
KiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gKi87IH07CiAJCTM3RkMxOTRCMTg1
MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMxOTQ5MTg1MTBENkEw
MDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCAqLzsgfTsKLQkJM0Y0
MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkzRjQxOEVGQjE4ODdCRDk3MDAyNzk1RkQgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY3MTg4N0JEOTcw
MDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovOyB9OworCQkzRjQxOEVGOTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVu
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCTNGNDE4RUZCMTg4N0JEOTcw
MDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjcx
ODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgKi87IH07CiAJCTNGODdCOUJEMTU4OTQwMTIwMDkwRkY2MiAvKiBXZWJDb2xvckNo
b29zZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0Y4N0I5QkExNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgKi87IH07CiAJ
CTNGODdCOUJFMTU4OTQwMTkwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODdCOUJCMTU4OTNGNjMwMDkw
RkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAqLzsgfTsKIAkJM0Y4N0I5QzAxNTg5NDBEODAwOTBG
RjYyIC8qIFdlYkNvbG9yUGlja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRjg3QjlCRjE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQaWNrZXIu
aCAqLzsgfTsKQEAgLTExMDUsOSArMTEwNSw5IEBACiAJCTUyNzJENEM5MUU3MzVGMDkwMEVCNDI5
MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MjcyRDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9u
U3BhY2VOUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUyNzJENENBMUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkQ0QzgxRTcz
NUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMubW0gKi87IH07CiAJCTUyOEMzN0Mx
MTk1Q0JCMUEwMEQ4QjlDQyAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUYyODEwMTk1OEY0NzgwMDhD
QUM3MiAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07Ci0JCTUyRDVBMUIxMUM1NzQ5NjIwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9OwotCQk1MkQ1QTFCNzFD
NTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5RjIwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9OworCQk1MkQ1QTFCMDFD
NTc0OTVBMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07CisJCTUyRDVBMUIx
MUM1NzQ5NjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRF
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9OworCQk1MkQ1
QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5RjIw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9OwogCQk1MzAyNTgzQjFE
Q0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi87IH07CiAJCTUzMDI1ODNDMURDQkJE
MjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovOyB9OwogCQk1MzAyNTgzRDFEQ0JCRDIyMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzMDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0Nh
cHR1cmVFdmVudC5jcHAgKi87IH07CkBAIC0xOTIwLDE0ICsxOTIwLDE0IEBACiAJCUNENzhFMTE3
MURCN0RDMEEwMDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDc4RTExNjFEQjdEQzBBMDAxNEEyREUg
LyogQVBJRnVsbHNjcmVlbkNsaWVudC5oICovOyB9OwogCQlDRDc4RTExOTFEQjdFNUFEMDAxNEEy
REUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDc4RTExODFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNj
cmVlbkRlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0RBMDQxRjQxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJ
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwNDFG
MzFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0JvYXJkU2VydmljZXNTUEkuaCAqLzsgfTsKLQkJQ0RB
MjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExODFDQkRC
RjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLzsgfTsKLQkJQ0RB
MjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE5MUNCREJG
NDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi87IH07Ci0JCUNEQTI5
QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTFFMUNC
RUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLzsgfTsK
LQkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bW0gKi87IH07Ci0JCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJQ0RBMjlBMjkxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9Owot
CQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQlDREEyOUEyQjFDQkVC
NjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNC
RUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
ICovOyB9OworCQlDREEyOUExQTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovOyB9
OworCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTkx
Q0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLzsgfTsKKwkJQ0RB
MjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMUUxQ0JF
QjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovOyB9OworCQlD
REEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMUYx
Q0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsK
KwkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi87IH07CisJCUNEQTI5QTJBMUNCRUI2N0EwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjYxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07CisJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCUNEQzM4MkZFMTcyMTE3OTkwMDhBMkZD
MyAvKiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1M
aWJyYXJ5Lm1tICovOyB9OwogCQlDREMzODMwNzE3MjExN0REMDA4QTJGQzMgLyogQ29va2llU3Rv
cmFnZVNoaW1MaWJyYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxp
YnJhcnkuY3BwICovOyB9OwogCQlDREMzODMwQzE3MjEyMjgyMDA4QTJGQzMgLyogQ29va2llU3Rv
cmFnZVNoaW1MaWJyYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREMzODMwQjE3MjEyMUNFMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJy
YXJ5LmggKi87IH07CkBAIC0zMDg5LDEwICszMDg5LDEwIEBACiAJCTM3RkMxOTQ2MTg1MEZCRjIw
MDhDRkE0NyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkMxOTQ4MTg1MTBENkEw
MDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkMxOTQ5MTg1MTBENkEwMDhD
RkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNjE4ODdCRDk3
MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNzE4ODdCRDk3MDAyNzk1
RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5QkExNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNv
bG9yQ2hvb3Nlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJD
b2xvckNob29zZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjg3QjlCQjE1
ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzRjg3QjlCRjE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQaWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTMzNjcsMTIgKzMzNjcsMTIgQEAKIAkJNTI3MkIyODkxNDA2OTg1
RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0YXRpc3RpY3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
NzJENEM3MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUHJvdGVjdGlvblNwYWNlTlMuaDsgcGF0aCA9IG1h
Yy9XS1Byb3RlY3Rpb25TcGFjZU5TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
NzJENEM4MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQcm90ZWN0aW9uU3BhY2VOUy5tbTsg
cGF0aCA9IG1hYy9XS1Byb3RlY3Rpb25TcGFjZU5TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1
QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUEx
QUMxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjIx
QzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUFCMUM1NzQ5NEUw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMg
LyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVB
MUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRB
MyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJl
UmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29y
a0NhcHR1cmVSZXNvdXJjZS5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzAy
NTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmg7IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI1
NCwxNiArNDI1NCwxNiBAQAogCQlDRDc4RTExNjFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNj
cmVlbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElGdWxsc2Ny
ZWVuQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENzhFMTE4MURCN0U1
QUQwMDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNEQTA0MUYzMUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNl
c1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrQm9hcmRTZXJ2aWNl
c1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExODFDQkRCRjQxMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMUUx
Q0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNTFD
QkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNjFDQkVCNjdB
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5
QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMUYxQ0JF
QjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNTFDQkVCNjdBMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI3MUNC
RUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODJGNzE3MjEx
NTA2MDA4QTJGQzMgLyogQ0ZOZXR3b3JrLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ0ZO
ZXR3b3JrLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NGTmV0
d29yay5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUNEQzM4MkY5
MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0RDMzgzMDYxNzIxMTc5OTAwOEEyRkMzIC8qIFdlYlByb2Nlc3NTaGlt
LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmR5bGliIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViUHJv
Y2Vzc1NoaW0uZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC01
MjAxLDE3ICs1MjAxLDE3IEBACiAJCQkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdH
ZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbiAqLywKIAkJCQkxQUMwMjczRTE5NjYyMkQ2MDBD
MTJCNzUgLyogV2ViUGFnZVByb3h5Q29jb2EubW0gKi8sCiAJCQkJN0M0Njk0Q0IxQTRCNTEwQTAw
QUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tICovLAotCQkJCUNEQTI5QTFFMUNC
RUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKLQkJ
CQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCisJCQkJQ0RBMjlBMUUxQ0JFQjVGQjAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovLAorCQkJCUNEQTI5QTIy
MUNCRUI2MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMu
aW4gKi8sCisJCQkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tbSAqLywKIAkJCQk3Q0U0RDIxNTFBNDkxNDg0MDBDN0YxNTIgLyogV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbSAqLywKIAkJCQkxQTA0RjYxNzFBNEEzQTdBMDBBMjFCNkUgLyogV2Vi
UHJvY2Vzc1Byb3h5Q29jb2EubW0gKi8sCiAJCQkJN0FBRDE3NUUxRUE2QUYzNzAwM0IwODk0IC8q
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tICovLAogCQkJCTUxRDEyNDMx
MUU2REU1MjEwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyQ29jb2EuaCAqLywKIAkJCQk1
MUQxMjQzMjFFNkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlckNvY29hLm1tICov
LAotCQkJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkuaCAqLywKLQkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCTUyRDVBMUFDMUM1NzQ5
NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8sCisJCQkJ
NTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
ICovLAorCQkJCTUyRDVBMUFCMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLywKIAkJCQkyREZDN0RCOTFCQ0NDMTk1
MDBDMTU0OEMgLyogV2ViVmlld0ltcGwuaCAqLywKIAkJCQkyREZDN0RCQTFCQ0NDMTk1MDBDMTU0
OEMgLyogV2ViVmlld0ltcGwubW0gKi8sCiAJCQkJMUFEMDFCQ0IxOTA1RDU0OTAwQzlDNDVGIC8q
IFdLUmVsb2FkRnJhbWVFcnJvclJlY292ZXJ5QXR0ZW1wdGVyLmggKi8sCkBAIC02Mzg1LDE0ICs2
Mzg1LDE0IEBACiAJCQkJQ0Q0OTFCMDUxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyLmNwcCAqLywKIAkJCQlDRDQ5MUIwNjFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLywKIAkJCQlDRDQ5MUIwQTFFNzMyRDEyMDAwMDkwNjYgLyog
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMTkxQ0JE
QkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLywKLQkJCQlDREEy
OUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdl
cy5pbiAqLywKLQkJCQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tbSAqLywKKwkJCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlci5oICovLAorCQkJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAorCQkJCUNEQTI5QTE4MUNCREJG
NDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovLAogCQkJCUVDQTY4MEQ3
MUU2OTBERjgwMDczMUQyMCAvKiBXZWJQcm9jZXNzQ29jb2EuaCAqLywKIAkJCQk3QzZFNzBGOTE4
QjJENEEwMDBGMjRFMkUgLyogV2ViUHJvY2Vzc0NvY29hLm1tICovLAotCQkJCTUyRDVBMUIyMUM1
NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8sCi0JCQkJNTJE
NUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4gKi8sCi0JCQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubW0gKi8sCisJCQkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIuaCAqLywKKwkJCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MkQ1QTFCNDFDNTc0
OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLywKIAkJCSk7CiAJCQlw
YXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzg2OCwxMCArNzg2
OCwxMCBAQAogCQkJCTFBQjFGNzkzMUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRp
bmF0b3JNZXNzYWdlcy5oICovLAogCQkJCTFBQjFGNzk0MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUFCMUY3
OTUxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMu
aCAqLywKLQkJCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovLAotCQkJCUNEQTI5
QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5QTI0MUNC
RUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNw
cCAqLywKKwkJCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlck1lc3NhZ2VzLmggKi8sCisJCQkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJQ0RBMjlB
MjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
LmggKi8sCiAJCQkJMUEwNDNGNjcxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkxQTA0M0Y2ODEyNTE0RDhCMDBGRkJGQjUg
LyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovLAogCQkJCUJDMzA2NkJDMTI1QTQ0
MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTc4OTMs
MTAgKzc4OTMsMTAgQEAKIAkJCQkxQUFGMDhCNjE5MjY5RTZEMDBCNjM5MEMgLyogV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyTWVzc2FnZXMuaCAqLywKIAkJCQk3QzM2MUQ3NjE5MjgwM0JEMDAzNkE1
OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICov
LAogCQkJCTdDMzYxRDc3MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eU1lc3NhZ2VzLmggKi8sCi0JCQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTNGNDE4
RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMu
aCAqLywKLQkJCQkzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkzRjQxOEVGODE4ODdCRDk3
MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywK
KwkJCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICovLAorCQkJCTNGNDE4RUY3MTg4N0JEOTcw
MDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovLAorCQkJCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHlNZXNzYWdlcy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSAiRGVyaXZlZCBTb3VyY2Vz
IjsKIAkJCXBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyOwpAQCAtODczMiwxMCArODczMiwx
MCBAQAogCQkJCTFBQjFGNzk5MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg1MEZFNzFFRDdDMzlGMDBG
Qjc3QTcgLyogV2ViUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTNFNzM2MTExQ0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4g
SGVhZGVycyAqLywKLQkJCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMjAxQ0JF
QjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUQ1OTI5RjE2NkUwNjAwMDBF
NkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzU3NDRGMDEy
NjM4RkIzMDA2RjBGMTIgLyogV2ViUG9wdXBJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTUw
ODBCRjFGMEVEQUFBMDBFNjE3QzUgLyogV0tXaW5kb3dGZWF0dXJlc1ByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtODc4OSw3ICs4Nzg5LDcgQEAKIAkJCQk3QzM2MUQ3OTE5MjgwM0JEMDAzNkE1
OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTU3MzlCQkQxQjQyMDQyRDAwRDI1OEMxIC8qIFdlYlVzZXJNZWRpYUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODNFRTU3NUMxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlk
YXRpb25NZXNzYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFCMDFDNTc0OTVB
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREZDN0RCQjFCQ0NDMTk1MDBDMTU0OEMgLyog
V2ViVmlld0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5Q0Q1NUFBMTI4RTI5NEYwMDEzM0M4
NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjkyMzJERjQxOEIyOUQ2ODAwRDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmpl
Y3RNYWMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNDAsMTAgKzEwMzQwLDEwIEBACiAJCQkJMUEz
RTczNjIxMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMDMzN0RERDEyN0E1MjFDMDA4RkY0RjQgLyogV2ViUGxhdGZvcm1Ub3Vj
aFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0NEEyMTg4NEU0RjAwMEVEODZEQiAv
KiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnRJT1MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlB
MUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4gU291
cmNlcyAqLywKLQkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUEy
MTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlDREEyOUExQTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBp
biBTb3VyY2VzICovLAorCQkJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5
QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gaW4g
U291cmNlcyAqLywKKwkJCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
RDU5MjlFMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUEwOEZFRTQxRDU5M0UyQTAwOEJBOENCIC8qIFdlYlBsdWdpbkluZm9Qcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU3NDRFRjEyNjM4RkIzMDA2RjBGMTIgLyogV2Vi
UG9wdXBJdGVtLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA0MTYsMTAgKzEwNDE2LDEwIEBACiAJ
CQkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1NzM5QkJFMUI0MjA0
NjYwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODNFRTU3NUIxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJM0Y0MThFRjkxODg3QkQ5
NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTNGNDE4RUZCMTg4
N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkzRjQxOEVGOTE4
ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0Y0MThFRkIxODg3
QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREZDN0RCQzFCQ0NDMTk1MDBDMTU0OEMgLyogV2Vi
Vmlld0ltcGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0REMTEyN0EyOTgwMDA4RkY0RjQg
LyogV2ViV2hlZWxFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjgxNjBEMDE4NzY0NTU3
MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAppbmRleCA0ZDIyYWZmMTI4OWY3MDJlOGU1ODRhNjcyM2I1YzZhZTll
ZGQ5YjhmLi5mZWUwZDI4Njc3ZDAwMGE1YTc5NzBkYWQ0OWE1MTkwZjRkMjhhZGEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcApAQCAtNzgsOCArNzgsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgorI2luY2x1
ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDMyZDg2NmZiOGE3
MWFkZWFhMzEzOTI1MTg1MjM4NGY3OGYxZTg3MmIuLjcyNzc4OGU4YTgyYmJjODQ4ZTc4NWIzZGZh
NGQ4M2MxNjEwYjhmZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAj
aW5jbHVkZSAiUERGUGx1Z2luLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5o
IgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIldLU3RyaW5nQ0YuaCIKLSNpbmNsdWRl
ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgogI2Vu
ZGlmCiAKQEAgLTM0NzEsMTcgKzM0NzEsMTcgQEAgUmVtb3RlV2ViSW5zcGVjdG9yVUkqIFdlYlBh
Z2U6OnJlbW90ZUluc3BlY3RvclVJKCkKIH0KIAogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUo
QVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgV2ViUGFnZTo6cGxheWJhY2tTZXNzaW9u
TWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBXZWJQYWdlOjpwbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLSAgICAg
ICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsKICAgICByZXR1cm4gKm1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgV2ViUGFnZTo6
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBXZWJQYWdl
Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVu
TWFuYWdlcikKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkpOwor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKSk7CiAgICAgcmV0dXJuICpt
X3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA3NzI0NWQ1MDc5ODBmNzYzMWNiYzEwYjE5NWIz
YWEzZWM0YmI1MjE2Li5iZWM0NDIzMGU3YTEwZmUyNWYwNGExYjdlNWM5ZTNjYjY5ZDEzODdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xODYsMTEg
KzE4NiwxMSBAQCBjbGFzcyBXZWJOb3RpZmljYXRpb25DbGllbnQ7CiBjbGFzcyBXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lcjsKIGNsYXNzIFdlYlBhZ2VHcm91cFByb3h5OwogY2xhc3MgV2ViUGFn
ZU92ZXJsYXk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworY2xhc3MgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjsKIGNsYXNzIFdlYlBvcHVwTWVudTsKIGNsYXNzIFdlYlVuZG9TdGVw
OwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOwotY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBXZWJXaGVl
bEV2ZW50OwogZW51bSBGaW5kT3B0aW9ucyA6IHVpbnQxNl90Owogc3RydWN0IEFzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uOwpAQCAtMjY2LDggKzI2Niw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzSW5z
cGVjdG9yUGFnZSgpIHsgcmV0dXJuICEhbV9pbnNwZWN0b3JVSSB8fCAhIW1fcmVtb3RlSW5zcGVj
dG9yVUk7IH0KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ciYgdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIm
IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiB2
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAjZW5kaWYKICNpZiBQTEFURk9STShJT1MpCiAgICAg
dm9pZCBzZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2soYm9vbCk7CkBAIC0xNDAw
LDggKzE0MDAsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxSZW1vdGVXZWJJbnNwZWN0b3JVST4g
bV9yZW1vdGVJbnNwZWN0b3JVSTsKIAogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQp
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQot
ICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3BsYXliYWNrU2Vzc2lvbk1h
bmFnZXI7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IG1fdmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBt
X3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiAjZW5kaWYKICNpZiBQTEFURk9STShJT1MpCiAgICAg
Ym9vbCBtX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yMzZhMjgxN2I5MDJkZGEyOTZiYTM2YmIxY2U4YWNlNjI3OTAx
M2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRFbnVtcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZv
cm1DQUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Uu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBdHRhY2htZW50OworY2xhc3MgQ29ubmVjdGlvbjsK
K2NsYXNzIERlY29kZXI7CitjbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIE5vZGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJQYWdlOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKworY2xhc3MgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dCBmaW5hbAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwg
dWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCgpOworCisg
ICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ7CisKKyAg
ICAvLyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgp
IGZpbmFsOworCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICB2b2lkIGR1
cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOworICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2Vk
KGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIGZpbmFsOworICAgIHZvaWQg
YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIGZpbmFsOworICAgIHZvaWQgcGxheWJhY2tTdGFy
dGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpIGZpbmFsOworICAgIHZv
aWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkgZmluYWw7
CisgICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdl
cyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKSBm
aW5hbDsKKyAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkgZmlu
YWw7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkgZmluYWw7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKKyAgICB2b2lkIGF1ZGlvTWVkaWFT
ZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgbGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIGV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXpl
ZERldmljZU5hbWUpIGZpbmFsOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRDaGFuZ2VkKGJvb2wpIGZpbmFsOworICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIGZpbmFs
OworCisgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIqIG1fbWFuYWdlcjsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKK307CisKK2NsYXNzIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYpOworICAgIHZp
cnR1YWwgflBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKworICAgIHZvaWQgZGlkUmVjZWl2ZU1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisKKyAgICB2b2lk
IHNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYp
OworICAgIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOworICAgIHVpbnQ2NF90
IGNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7CisK
K3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29u
dGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKKworICAgIGV4
cGxpY2l0IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOworCisgICAgdHlwZWRlZiBz
dGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dD4sIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZh
Y2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJDb3JlOjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElk
KTsKKyAgICBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsK
KworICAgIC8vIEludGVyZmFjZSB0byBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Cisg
ICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGR1
cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSk7CisgICAgdm9pZCBjdXJy
ZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRv
dWJsZSBhbmNob3JUaW1lKTsKKyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRl
ZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRp
bWUpOworICAgIHZvaWQgcmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKKyAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7CisgICAgdm9pZCBj
YW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSk7
CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFdlYkNv
cmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KTsKKyAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB2
b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wpOworICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCk7CisKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQor
ICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcGF1c2UodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2
b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2Vla1RvVGlt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGZhc3RTZWVrKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0Zv
cndhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Nhbm5pbmcodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4
dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24o
dWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBoYW5kbGVDb250
cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgdG9n
Z2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgdG9nZ2xl
TXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldE11dGVkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBtdXRlZCk7CisKKyAgICBXZWJQYWdlKiBtX3BhZ2U7CisgICAgSGFzaE1h
cDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiwgdWludDY0X3Q+IG1fbWVkaWFFbGVtZW50czsK
KyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7
CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07CisgICAgSGFz
aENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1l
c3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNThkYzk4NDdjZWRjOTIyOWI3YTNkZTIzMjE3YzQ3ZmVj
Y2YzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2Ev
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQzIEBACisjIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorbWVzc2Fn
ZXMgLT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlciB7CisgICAgUGxheSh1aW50NjRfdCBjb250ZXh0
SWQpCisgICAgUGF1c2UodWludDY0X3QgY29udGV4dElkKQorICAgIFRvZ2dsZVBsYXlTdGF0ZSh1
aW50NjRfdCBjb250ZXh0SWQpCisgICAgQmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElk
KQorICAgIEVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2Vla1RvVGltZSh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEZhc3RTZWVrKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIHRpbWUpCisgICAgQmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3Qg
Y29udGV4dElkKQorICAgIEJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
CisgICAgRW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQorICAgIFNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKKyAgICBTZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKKyAg
ICBIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgVG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgVG9nZ2xl
TXV0ZWQodWludDY0X3QgY29udGV4dElkKQorICAgIFNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBtdXRlZCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTQx
ZTM4ZjU0NDUzZGIxNTJiMzFkMmFiZTFmNGNiYjA2MDM4YmFiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0K
QEAgLTAsMCArMSw0NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorCisjaWYgUExBVEZPUk0oSU9TKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisj
aW1wb3J0ICJBdHRhY2htZW50LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVz
c2FnZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgi
CisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIK
KyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NldHRp
bmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
VXNlckdlc3R1cmVJbmRpY2F0b3IuaD4KKyNpbXBvcnQgPG1hY2gvbWFjaF9wb3J0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHVp
bnQ2NF90IG5leHRDb250ZXh0SWQoKQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb250ZXh0SWQg
PSAwOworICAgIHJldHVybiArK2NvbnRleHRJZDsKK30KKworI3ByYWdtYSBtYXJrIC0gUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAorCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdlcigmbWFuYWdl
cikKKyAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKworUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoKQorewor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0
ZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5yZXNldE1lZGlh
U3RhdGUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit7CisgICAgaWYgKG1fbWFu
YWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kdXJhdGlvbkNoYW5nZWQobV9jb250ZXh0SWQsIGR1
cmF0aW9uKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjdXJy
ZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmN1cnJlbnRUaW1lQ2hhbmdl
ZChtX2NvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1
ZmZlcmVkVGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmJ1
ZmZlcmVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlp
bmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPnJhdGVDaGFuZ2VkKG1fY29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0
ZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCit7CisgICAgaWYg
KG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5wbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdl
ZChtX2NvbnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNv
cmU6OlRpbWVSYW5nZXMmIHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBs
aXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQobV9jb250ZXh0SWQsIHJhbmdlcywgbGFzdE1vZGlm
aWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgdmFsdWUpCit7
CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5jYW5QbGF5RmFzdFJldmVy
c2VDaGFuZ2VkKG1fY29udGV4dElkLCB2YWx1ZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5hdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVk
SW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgaWYgKG1f
bWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisg
ICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRl
eHRJZCwgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5sZWdp
YmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFt
ZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKG1fY29udGV4dElkLCBlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VO
YW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkQ2hhbmdlZChtX2NvbnRleHRJZCwgZGlzYWJsZWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQoreworICAgIGlm
IChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+bXV0ZWRDaGFuZ2VkKG1fY29udGV4dElk
LCBtdXRlZCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKwor
UmVmPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0
ZShXZWJQYWdlJiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIocGFnZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UoJnBhZ2UpCit7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlE
KCksICp0aGlzKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6flBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIoKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVz
KCkpIHsKKyAgICAgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBt
b2RlbDsKKyAgICAgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGlu
dGVyZmFjZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKKyAg
ICAgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKyAgICAgICAgbW9kZWwtPnNl
dE1lZGlhRWxlbWVudChudWxscHRyKTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUo
KTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX21lZGlhRWxlbWVu
dHMuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOworCisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVs
ID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7CisgICAgbW9k
ZWwtPmFkZENsaWVudCgqaW50ZXJmYWNlKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUo
V1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxl
KCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAg
cmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYkNvcmU6OlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50JiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVN
b2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1
cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dCYgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwg
aW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBS
ZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbWVkaWFFbGVtZW50ID0gbW9kZWwtPm1lZGlhRWxlbWVu
dCgpOworICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAgbW9kZWwtPnJl
bW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKyAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAg
ICBtX21lZGlhRWxlbWVudHMucmVtb3ZlKG1lZGlhRWxlbWVudC5nZXQoKSk7CisgICAgbV9jb250
ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fY2xp
ZW50Q291bnRzLmFkZChjb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIEFT
U0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKKyAgICBpZiAobV9jbGll
bnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCisgICAgICAgIHJlbW92ZUNvbnRleHQoY29udGV4
dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRVcFBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKK3sK
KyNpZiBQTEFURk9STShNQUMpCisgICAgYXV0byBmb3VuZEl0ZXJhdG9yID0gbV9tZWRpYUVsZW1l
bnRzLmZpbmQoJm1lZGlhRWxlbWVudCk7CisgICAgaWYgKGZvdW5kSXRlcmF0b3IgIT0gbV9tZWRp
YUVsZW1lbnRzLmVuZCgpKSB7CisgICAgICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IGZvdW5kSXRl
cmF0b3ItPnZhbHVlOworICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPT0g
Y29udGV4dElkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9j
b250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAgICAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRl
eHRJZCA9IGNvbnRleHRJZDsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsgcmV0dXJuIG5leHRD
b250ZXh0SWQoKTsgfSk7CisgICAgICAgIGF1dG8gY29udGV4dElkID0gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAg
ICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCk7CisgICAgICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOworICAg
ICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE1lZGlhRWxlbWVudCgmbWVkaWFFbGVtZW50
KTsKKyAgICB9CisKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6U2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworI2VuZGlmCit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpCit7Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgIGlmICghbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01h
bmFnZXJDb250ZXh0SWQpOworICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gMDsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q2xl
YXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyNlbmRpZgor
fQorCit1aW50NjRfdCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjb250ZXh0SWRGb3JNZWRpYUVs
ZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQoreworICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1lbnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBbJl0g
eyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9KTsKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0
TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOworICAgIHJldHVybiBjb250ZXh0SWQ7Cit9CisK
KyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDoKKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUodWludDY0
X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpSZXNldE1lZGlhU3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZHVyYXRpb25DaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpEdXJhdGlvbkNoYW5nZWQo
Y29udGV4dElkLCBkdXJhdGlvbiksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkN1cnJlbnRUaW1lQ2hh
bmdlZChjb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKSwgbV9wYWdlLT5wYWdlSUQo
KSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YnVmZmVyZWRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkJ1ZmZlcmVkVGlt
ZUNoYW5nZWQoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQoreworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpQbGF5
YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyYXRl
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFj
a1JhdGUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OlJhdGVDaGFuZ2VkKGNvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpz
ZWVrYWJsZVJhbmdlc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpU
aW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxp
dmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91Ymxl
Pj4gcmFuZ2VzVmVjdG9yOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2Vz
Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJhbmdlcy5yYW5n
ZXMoKS5zdGFydChpKS50b0RvdWJsZSgpOworICAgICAgICBkb3VibGUgZW5kID0gdGltZVJhbmdl
cy5yYW5nZXMoKS5lbmQoaSkudG9Eb3VibGUoKTsKKyAgICAgICAgcmFuZ2VzVmVjdG9yLmFwcGVu
ZCh7IHN0YXJ0LCBlbmQgfSk7CisgICAgfQorICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQoY29u
dGV4dElkLCBXVEZNb3ZlKHJhbmdlc1ZlY3RvciksIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRh
dGVJbnRlcnZhbCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIHZhbHVlKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNvbnRleHRJZCwgdmFsdWUp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjph
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25z
dCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBv
cHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgUGxheWJhY2tT
ZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIFN0cmlu
ZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5n
ZWQoY29udGV4dElkLCBlbmFibGVkLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odGFyZ2V0VHlwZSks
IGxvY2FsaXplZERldmljZU5hbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxl
Y3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRD
aGFuZ2VkKGNvbnRleHRJZCwgZGlzYWJsZWQpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQorewor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpN
dXRlZENoYW5nZWQoY29udGV4dElkLCBtdXRlZCkpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2Fn
ZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5wbGF5KCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
cGF1c2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkucGF1c2UoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQbGF5
U3RhdGUodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkudG9nZ2xlUGxheVN0YXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkuYmVnaW5TY3J1YmJpbmcoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjplbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuZW5kU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQor
eworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla1RvVGltZSh0aW1lKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSB0aW1lKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZmFzdFNlZWso
dGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0Zv
cndhcmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuYmVnaW5TY2FubmluZ0ZvcndhcmQoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElk
KQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2Nhbm5pbmcoKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4
dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0
b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4
dElkKQoreworICAgIGF1dG8gZWxlbWVudCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubWVkaWFF
bGVtZW50KCk7CisgICAgaWYgKGVsZW1lbnQpCisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElE
UmVzcG9uc2UoY29udGV4dElkLCBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpKSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQaWN0
dXJlSW5QaWN0dXJlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xl
TXV0ZWQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkudG9nZ2xlTXV0ZWQoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRN
dXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit7CisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5zZXRNdXRlZChtdXRlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhkM2My
NDkyNTUxMmJhMzM4ZGIwOWMyYzEyZjc1Yzc1MjkyM2NkNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKQEAg
LTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIChQTEFURk9S
TShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVk
aWFFbGVtZW50RW51bXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEF0dGFjaG1lbnQ7
CitjbGFzcyBDb25uZWN0aW9uOworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIE1lc3NhZ2VSZWNlaXZl
cjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgTm9k
ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVySG9zdGluZ0NvbnRleHQ7
CitjbGFzcyBXZWJQYWdlOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsK
K2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisgICAgOiBwdWJs
aWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PgorICAgICwgcHVi
bGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGNyZWF0ZShWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdl
ciA9IG51bGxwdHI7IH0KKworICAgIExheWVySG9zdGluZ0NvbnRleHQqIGxheWVySG9zdGluZ0Nv
bnRleHQoKSB7IHJldHVybiBtX2xheWVySG9zdGluZ0NvbnRleHQuZ2V0KCk7IH0KKyAgICB2b2lk
IHNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRl
eHQ+JiYpOworCisgICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNBbmlt
YXRpbmc7IH0KKyAgICB2b2lkIHNldElzQW5pbWF0aW5nKGJvb2wgZmxhZykgeyBtX2lzQW5pbWF0
aW5nID0gZmxhZzsgfQorCisgICAgYm9vbCB0YXJnZXRJc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJl
dHVybiBtX3RhcmdldElzRnVsbHNjcmVlbjsgfQorICAgIHZvaWQgc2V0VGFyZ2V0SXNGdWxsc2Ny
ZWVuKGJvb2wgZmxhZykgeyBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZsYWc7IH0KKworICAgIFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBmdWxsc2Ny
ZWVuTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGU7IH0KKyAgICB2b2lkIHNl
dEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKSB7IG1fZnVsbHNjcmVlbk1vZGUgPSBtb2RlOyB9CisKKyAgICBib29s
IGlzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1faXNGdWxsc2NyZWVuOyB9CisgICAgdm9p
ZCBzZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1faXNGdWxsc2NyZWVuID0gZmxhZzsgfQor
Citwcml2YXRlOgorICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgdm9pZCBo
YXNWaWRlb0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOworCisgICAgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiwgdWludDY0
X3QgY29udGV4dElkKTsKKworICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIqIG1fbWFuYWdlcjsK
KyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0
aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OworICAgIGJvb2wgbV9pc0FuaW1hdGlu
ZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3RhcmdldElzRnVsbHNjcmVlbiB7IGZhbHNlIH07Cisg
ICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1f
ZnVsbHNjcmVlbk1vZGUgeyBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVOb25lIH07CisgICAgYm9vbCBtX2lzRnVsbHNjcmVlbiB7IGZhbHNlIH07Cit9
OworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFdlYlBh
Z2UmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcigpOworICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIAorICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50CisgICAgYm9vbCBzdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpIGNvbnN0OworICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JW
aWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBleGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmKTsKKyAg
ICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpOworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ7CisKKyAgICBleHBsaWNpdCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKFdlYlBhZ2UmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7CisKKyAgICB0eXBlZGVm
IHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiwgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+PiBNb2RlbEludGVy
ZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYkNvcmU6OlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
OworCisgICAgLy8gSW50ZXJmYWNlIHRvIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQK
KyAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlk
ZW8pOworICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKyAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSk7CisgICAgdm9pZCBkaWRTZXR1
cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEV4aXRGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3Qg
Y29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVu
Y2VQb3J0KTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250
ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpOworICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSk7CisgICAgCisgICAgV2ViUGFn
ZSogbV9wYWdlOworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXI7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiwgdWlu
dDY0X3Q+IG1fdmlkZW9FbGVtZW50czsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVy
ZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQgeyAwIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50
czsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzRiNTY4
OTU1OWVlNzVkOTk0MTZlODA0YzdmY2Y2OTdiYjAyNTEyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4KQEAgLTAsMCArMSwzNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCittZXNzYWdlcyAtPiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyIHsKKyAgICBSZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3Qg
Y29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKKyAgICBE
aWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIERpZEV4aXRGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKQorICAgIERpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
KyAgICBTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQorICAgIFNldFZp
ZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkp
CisgICAgRnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVl
bk1vZGUpCisgICAgRnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ0NjRiZWE1Yzk1ZWU2NzZhOTk1NGZkODM5YTIyOWJmMmY5MGVkM2EKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tbQpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgorCisjaWYgKFBMQVRGT1JN
KElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbXBvcnQgIkF0dGFjaG1lbnQuaCIKKyNpbXBvcnQgIkxv
Z2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbXBvcnQgIlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5o
IgorI2ltcG9ydCAiV2ViUGFnZS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgorI2ltcG9ydCA8
UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRl
b0VsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyQmFj
a2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWRlby5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbXBvcnQgPG1hY2gvbWFjaF9wb3J0Lmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIEludFJl
Y3QgaW5saW5lVmlkZW9GcmFtZShIVE1MVmlkZW9FbGVtZW50JiBlbGVtZW50KQoreworICAgIGVs
ZW1lbnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRl
cmVyKQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gcmVjdCA9IHJlbmRlcmVyLT52aWRl
b0JveCgpOworICAgIHJlY3QubW92ZUJ5KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVj
dCgpLmxvY2F0aW9uKCkpOworICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkudmlldygpLT5j
b250ZW50c1RvUm9vdFZpZXcocmVjdCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQKKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBt
YW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisg
ICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCkKK3sKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMYXllckhvc3RpbmdDb250
ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiYmIGNvbnRleHQpCit7Cisg
ICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gV1RGTW92ZShjb250ZXh0KTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNW
aWRlbykKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmhhc1ZpZGVv
Q2hhbmdlZChtX2NvbnRleHRJZCwgaGFzVmlkZW8pOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXpl
JiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fY29udGV4dElkLCB2aWRlb0RpbWVuc2lvbnMp
OworfQorCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisKK1JlZjxWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyPiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoV2ViUGFn
ZSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKHBhZ2Us
IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpKTsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQorICAgIDogbV9wYWdlKCZwYWdlKQorICAgICwg
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCit7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UucGFnZUlEKCks
ICp0aGlzKTsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6flZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIoKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkp
IHsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2Rl
bDsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKKworICAg
ICAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOworICAgICAgICBtb2RlbC0+cmVt
b3ZlQ2xpZW50KCppbnRlcmZhY2UpOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgp
OworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fdmlkZW9FbGVtZW50
cy5jbGVhcigpOworICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7CisgICAgCisgICAgaWYgKG1f
cGFnZSkKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmludmFsaWRhdGUoKQoreworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBt
X3BhZ2UgPSBudWxscHRyOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVy
ZmFjZVR1cGxlIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IG1vZGVsID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRl
cmZhY2UgPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNv
bnRleHRJZCk7CisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5hZGRDbGllbnRGb3JDb250
ZXh0KGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQo
TGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsK
KyAgICBtb2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2UpOworCisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKK30KKworVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJm
YWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworV2ViQ29yZTo6
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0
PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsK
KworICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChj
b250ZXh0SWQpOworCisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9
IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxw
dHIpOworICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisgICAgaW50ZXJmYWNl
LT5pbnZhbGlkYXRlKCk7CisgICAgbV92aWRlb0VsZW1lbnRzLnJlbW92ZSh2aWRlb0VsZW1lbnQu
Z2V0KCkpOworICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0
SWQsIDEpOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUrKzsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpy
ZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBBU1NFUlQo
bV9jbGllbnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7CisKKyAgICBpbnQgY2xpZW50Q291
bnQgPSBtX2NsaWVudENvdW50cy5nZXQoY29udGV4dElkKTsKKyAgICBBU1NFUlQoY2xpZW50Q291
bnQgPiAwKTsKKyAgICBjbGllbnRDb3VudC0tOworCisgICAgaWYgKGNsaWVudENvdW50IDw9IDAp
IHsKKyAgICAgICAgbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCk7CisgICAgICAgIHJl
bW92ZUNvbnRleHQoY29udGV4dElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
Y2xpZW50Q291bnRzLnNldChjb250ZXh0SWQsIGNsaWVudENvdW50KTsKK30KKworI3ByYWdtYSBt
YXJrIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQ6CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9T
KQorICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKKyAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5h
YmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlICYmIHN1cHBvcnRzUGljdHVyZUlu
UGljdHVyZSgpOworI2VuZGlmCit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50
ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9F
bGVtZW50LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkK
K3sKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVt
ZW50KCVwKSIsIHRoaXMpOworCisgICAgdWludDY0X3QgY29udGV4dElkID0gbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLT5jb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQodmlkZW9FbGVtZW50KTsKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdmlkZW9FbGVtZW50cy5hZGQoJnZpZGVvRWxlbWVudCwgY29u
dGV4dElkKTsKKyAgICBVTlVTRURfUEFSQU0oYWRkUmVzdWx0KTsKKyAgICBBU1NFUlQoYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9PSBjb250ZXh0SWQpOworCisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICBhZGRDbGll
bnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisgICAgaWYgKCFpbnRlcmZhY2UtPmxheWVySG9zdGlu
Z0NvbnRleHQoKSkKKyAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExh
eWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7CisK
KyAgICBhdXRvIHZpZGVvUmVjdCA9IGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KTsKKyAg
ICBGbG9hdFJlY3QgdmlkZW9MYXllckZyYW1lID0gRmxvYXRSZWN0KDAsIDAsIHZpZGVvUmVjdC53
aWR0aCgpLCB2aWRlb1JlY3QuaGVpZ2h0KCkpOworCisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG9sZE1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2Rl
KCk7CisgICAgaW50ZXJmYWNlLT5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7CisgICAgaW50
ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9FbGVt
ZW50KCZ2aWRlb0VsZW1lbnQpOworICAgIGlmIChvbGRNb2RlID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpCisgICAgICAgIG1vZGVsLT5zZXRWaWRlb0xh
eWVyRnJhbWUodmlkZW9MYXllckZyYW1lKTsKKworICAgIGlmIChpbnRlcmZhY2UtPmlzQW5pbWF0
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKHRy
dWUpOworCisgICAgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlID0gdmlkZW9FbGVtZW50Lndl
YmtpdFN1cHBvcnRzUHJlc2VudGF0aW9uTW9kZShIVE1MVmlkZW9FbGVtZW50OjpWaWRlb1ByZXNl
bnRhdGlvbk1vZGU6OlBpY3R1cmVJblBpY3R1cmUpOworICAgIAorICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRo
SUQoY29udGV4dElkLCBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+Y29udGV4dElE
KCksIHZpZGVvUmVjdCwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBpbnRlcmZhY2UtPmZ1
bGxzY3JlZW5Nb2RlKCksIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVu
Rm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCkK
K3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRl
b0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoJXApIiwgdGhpcyk7CisgICAgQVNTRVJUKG1fcGFn
ZSk7CisgICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlucygmdmlkZW9FbGVtZW50KSk7
CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2aWRlb0Vs
ZW1lbnQpOworICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQp
OworCisgICAgaW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7CisKKyAgICBp
ZiAoaW50ZXJmYWNlLmlzQW5pbWF0aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludGVy
ZmFjZS5zZXRJc0FuaW1hdGluZyh0cnVlKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY29udGV4dElkLCBpbmxp
bmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91
dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2Rl
KQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZp
ZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oJXApIiwgdGhpcyk7CisKKyNpZiBQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICBBU1NF
UlQobV9wYWdlKTsKKyAgICBBU1NFUlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0Vs
ZW1lbnQpKTsKKworICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQo
JnZpZGVvRWxlbWVudCk7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsK
KworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpFeGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoY29udGV4dElkLCB0YXJnZXRN
b2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aWRlb0Vs
ZW1lbnQpOworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRNb2RlKTsKKyNlbmRpZgorfQorCisjcHJh
Z21hIG1hcmsgSW50ZXJmYWNlIHRvIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBoYXNWaWRlbykKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0SGFzVmlk
ZW8oY29udGV4dElkLCBoYXNWaWRlbyksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAobV9w
YWdlKQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6U2V0VmlkZW9EaW1lbnNpb25zKGNvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eToKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpy
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdp
dGhNZWRpYSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJlcXVlc3RGdWxsc2NyZWVu
TW9kZShtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNj
cmVlbk1vZGUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mdWxsc2NyZWVuTW9kZUNo
YW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbigl
cCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIFBs
YXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CisjaWZuZGVmIE5ERUJV
RworICAgIFt2aWRlb0xheWVyIHNldE5hbWU6QCJXZWIgdmlkZW8gZnVsbHNjcmVlbiBtYW5hZ2Vy
IGxheWVyIl07CisjZW5kaWYKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FU
cmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworCisgICAgW3ZpZGVvTGF5ZXIgc2V0
UG9zaXRpb246Q0dQb2ludE1ha2UoMCwgMCldOworICAgIFt2aWRlb0xheWVyIHNldEJhY2tncm91
bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudCldOworCisg
ICAgLy8gU2V0IGEgc2NhbGUgZmFjdG9yIGhlcmUgdG8gbWFrZSBjb252ZXJ0UmVjdDp0b0xheWVy
Om5pbCB0YWtlIHNjYWxlIGZhY3RvciBpbnRvIGFjY291bnQuIDxyZGFyOi8vcHJvYmxlbS8xODMx
NjU0Mj4uCisgICAgLy8gVGhpcyBzY2FsZSBmYWN0b3IgaXMgaW52ZXJ0ZWQgaW4gdGhlIGhvc3Rp
bmcgcHJvY2Vzcy4KKyAgICBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IgPSBtX3BhZ2UtPmRldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgW3ZpZGVvTGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3Jt
M0RNYWtlU2NhbGUoaG9zdGluZ1NjYWxlRmFjdG9yLCBob3N0aW5nU2NhbGVGYWN0b3IsIDEpXTsK
KworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAg
ICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNv
bnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9v
dExheWVyKHZpZGVvTGF5ZXIpOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgCisgICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKHZpZGVvTGF5ZXIsIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKKyAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3Rl
ZFRoaXMsIHRoaXMsIGNvbnRleHRJZF0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMt
Pm1fcGFnZSkKKyAgICAgICAgICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6RW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIHByb3RlY3Rl
ZFRoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICAKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorICAgIAordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIExP
RyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVu
KCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQpOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2Up
ID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+
c2V0SXNBbmltYXRpbmcoZmFsc2UpOworICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZh
bHNlKTsKKworICAgIGlmIChpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0g
bW9kZWwtPnZpZGVvRWxlbWVudCgpOworICAgIGlmICghdmlkZW9FbGVtZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5
IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgorICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnRdIHsKKyAg
ICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJ
ZCk7CisKKyAgICBSZWZQdHJiVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVs
OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7
CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIAorICAgIG1vZGVsLT53YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVU
aGVuKFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKKyAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRo
aXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0geworICAgICAgICAgICAgbW9kZWwtPnNl
dFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCwgW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwgaW50
ZXJmYWNlXSB7CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlXSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkt
PnNldFJvb3RMYXllcihudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFj
ZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkNsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCks
IHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorICAgIAordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRD
bGVhbnVwRnVsbHNjcmVlbiglcCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZSht
b2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisK
KyAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRlcmZhY2UtPnNl
dElzRnVsbHNjcmVlbihmYWxzZSk7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCk7CisgICAgYm9v
bCB0YXJnZXRJc0Z1bGxzY3JlZW4gPSBpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpOwor
CisgICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CisgICAgUmVmUHRyPEhU
TUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKwor
ICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChjb250
ZXh0SWQpOworCisgICAgaWYgKCF2aWRlb0VsZW1lbnQgfHwgIXRhcmdldElzRnVsbHNjcmVlbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudCwgbW9kZV0geworICAgICAgICBp
ZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZW50
ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCwgbW9kZSk7Cisg
ICAgfSk7Cit9CisgICAgCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpCit7Cisg
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRWaWRlb0xheWVyR3Jhdml0eSgoVmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKK30KKyAgICAKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvJiBtb2RlbCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJZCk7CisK
KyAgICBpZiAoIWlzUGFnZVZpc2libGUpCisgICAgICAgIG1vZGVsLnZpZGVvRWxlbWVudCgpLT5z
Y3JvbGxJbnRvVmlld0lmTm90VmlzaWJsZShmYWxzZSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVkVG9SZXR1cm5Ub0lubGlu
ZShjb250ZXh0SWQsIHRydWUsIGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLnZpZGVvRWxlbWVudCgp
KSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorICAgIAordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQoreworICAgIExP
RyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1l
RmVuY2VkKCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQpOworCisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGlmIChz
dGQ6OmlzbmFuKGJvdW5kcy54KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLnkoKSkgfHwgc3RkOjpp
c25hbihib3VuZHMud2lkdGgoKSkgfHwgc3RkOjppc25hbihib3VuZHMuaGVpZ2h0KCkpKSB7Cisg
ICAgICAgIGF1dG8gdmlkZW9SZWN0ID0gaW5saW5lVmlkZW9GcmFtZSgqbW9kZWwtPnZpZGVvRWxl
bWVudCgpKTsKKyAgICAgICAgYm91bmRzID0gRmxvYXRSZWN0KDAsIDAsIHZpZGVvUmVjdC53aWR0
aCgpLCB2aWRlb1JlY3QuaGVpZ2h0KCkpOworICAgIH0KKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlv
biBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07Cisg
ICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKQorICAgICAgICBpbnRlcmZh
Y2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0RmVuY2VQb3J0KGZlbmNlUG9ydC5wb3J0KCkp
OworICAgIG1vZGVsLT5zZXRWaWRlb0xheWVyRnJhbWUoYm91bmRzKTsKKyAgICBtYWNoX3BvcnRf
ZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBmZW5jZVBvcnQucG9ydCgpKTsKKyAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3NTNjYjE2OThiZGIxNTVmOTY2OTgxMTFmMDUxNWYyMzg4N2Y1ZGEyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi0KLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRF
bnVtcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIElQQyB7
Ci1jbGFzcyBBdHRhY2htZW50OwotY2xhc3MgQ29ubmVjdGlvbjsKLWNsYXNzIERlY29kZXI7Ci1j
bGFzcyBNZXNzYWdlUmVjZWl2ZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIE5v
ZGU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotY2xhc3MgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dCBmaW5hbAotICAgIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dD4KLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdl
ciwgdWludDY0X3QgY29udGV4dElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQp
KTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dCgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9Ci0K
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICB2b2lkIHJl
c2V0TWVkaWFTdGF0ZSgpIGZpbmFsOwotCi0gICAgLy8gV2ViUGxheWJhY2tNb2RlbENsaWVudAot
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgZmluYWw7Ci0gICAgdm9pZCBjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgZmluYWw7
Ci0gICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgZmluYWw7Ci0gICAgdm9pZCBw
bGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkgZmlu
YWw7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKSBmaW5hbDsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRl
SW50ZXJ2YWwpIGZpbmFsOwotICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29s
IHZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIGZpbmFsOwotICAgIHZvaWQg
YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgdm9p
ZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAg
IHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0
cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgZmluYWw7Ci0gICAgdm9pZCB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgZmluYWw7Ci0gICAgdm9pZCBtdXRlZENoYW5n
ZWQoYm9vbCkgZmluYWw7Ci0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciogbV9tYW5hZ2VyOwotICAgIHVpbnQ2NF90IG1fY29u
dGV4dElkOwotfTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI+IGNyZWF0ZShXZWJQYWdlJik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcigpOwotCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0VXBQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7Ci0gICAgdm9pZCBjbGVhclBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgdWludDY0X3QgY29udGV4dElkRm9yTWVkaWFFbGVt
ZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmKTsKLQotcHJvdGVjdGVkOgotICAgIGZyaWVu
ZCBjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OwotICAgIGZyaWVuZCBj
bGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwotCi0gICAgZXhwbGljaXQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJik7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVm
UHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiwgUmVmUHRy
PFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1cGxl
OwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwot
ICAgIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwot
Ci0gICAgLy8gSW50ZXJmYWNlIHRvIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQK
LSAgICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQg
ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlKTsKLSAgICB2b2lkIGN1
cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwg
ZG91YmxlIGFuY2hvclRpbWUpOwotICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpOwotICAgIHZvaWQgcGxheWJhY2tTdGFy
dGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVk
VGltZSk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpOwotICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYsIGRvdWJs
ZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKLSAgICB2b2lk
IGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVl
KTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIGVuYWJsZWQsIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOwot
ICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCk7Ci0gICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sKTsKLQotICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Ci0gICAgdm9pZCBwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBwYXVz
ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIHZvaWQgZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBz
ZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOwotICAgIHZvaWQgZmFz
dFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9pZCBiZWdpblNj
YW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVnaW5TY2Fubmlu
Z0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBlbmRTY2FubmluZyh1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRf
dCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIHNlbGVjdExlZ2libGVNZWRp
YU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIGhh
bmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCB0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2V0TXV0ZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKLQotICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAg
ICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqLCB1aW50NjRfdD4gbV9tZWRpYUVs
ZW1lbnRzOwotICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29u
dGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsK
LSAgICBIYXNoQ291bnRlZFNldDx1aW50NjRfdD4gbV9jbGllbnRDb3VudHM7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1
NjY2YTcxNTRjYzRhOTQ0ZDA0ZWNhODZjYjMwMzAwNmJkNzc4YTEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApA
QCAtMSw0MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0j
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciB7Ci0g
ICAgUGxheSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgUGF1c2UodWludDY0X3QgY29udGV4dElk
KQotICAgIFRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgQmVnaW5TY3J1
YmJpbmcodWludDY0X3QgY29udGV4dElkKQotICAgIEVuZFNjcnViYmluZyh1aW50NjRfdCBjb250
ZXh0SWQpCi0gICAgU2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQot
ICAgIEZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi0gICAgQmVnaW5T
Y2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQotICAgIEJlZ2luU2Nhbm5pbmdCYWNr
d2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4
dElkKQotICAgIFNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50
NjRfdCBpbmRleCkKLSAgICBTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4
dElkLCB1aW50NjRfdCBpbmRleCkKLSAgICBIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVz
dCh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgVG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRf
dCBjb250ZXh0SWQpCi0gICAgVG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQotICAgIFNl
dE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLX0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1YTI3ZTQ4YjJh
NDI4MjlmYjQ0MjI0YzE3NGQ5YjIzODM1NWI1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaCIKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQXR0YWNobWVu
dC5oIgotI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0ICJXZWJQYWdl
LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJX
ZWJQcm9jZXNzLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0V2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvSFRNTE1lZGlhRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2lt
cG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1VzZXJHZXN0dXJl
SW5kaWNhdG9yLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB1aW50NjRfdCBuZXh0
Q29udGV4dElkKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udGV4dElkID0gMDsKLSAgICBy
ZXR1cm4gKytjb250ZXh0SWQ7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQKLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgOiBtX21hbmFnZXIoJm1hbmFn
ZXIpCi0gICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCi17Ci19Ci0KLVdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQ6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
KCkKLXsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpyZXNl
dE1lZGlhU3RhdGUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+
cmVzZXRNZWRpYVN0YXRlKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZHVyYXRpb25DaGFuZ2VkKG1f
Y29udGV4dElkLCBkdXJhdGlvbik7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGFuY2hvclRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5j
dXJyZW50VGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpidWZmZXJlZFRp
bWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAg
ICAgICAgbV9tYW5hZ2VyLT5idWZmZXJlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBidWZmZXJl
ZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJh
dGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17Ci0gICAgaWYg
KG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yYXRlQ2hhbmdlZChtX2NvbnRleHRJZCwg
aXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFj
a1N0YXJ0ZWRUaW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRp
bWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnNlZWth
YmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiByYW5nZXMsIGRvdWJs
ZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewotICAgIGlm
IChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKG1f
Y29udGV4dElkLCByYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y2FuUGxheUZh
c3RSZXZlcnNlQ2hhbmdlZChib29sIHZhbHVlKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAg
ICAgIG1fbWFuYWdlci0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtX2NvbnRleHRJZCwgdmFs
dWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGlmIChtX21h
bmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQs
IG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXIt
PmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNlbGVjdGVkSW5k
ZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewot
ICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdl
ZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5leHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgaWYgKG1fbWFu
YWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQobV9jb250ZXh0SWQsIGRpc2FibGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPm11dGVkQ2hhbmdlZChtX2NvbnRleHRJZCwg
bXV0ZWQpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0K
LVJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBhZ2UpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQotICAgIDogbV9w
YWdlKCZwYWdlKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6On5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1
cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7Ci0gICAgICAgIG1vZGVsLT5yZW1vdmVDbGllbnQo
KmludGVyZmFjZSk7Ci0gICAgICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7Ci0K
LSAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgbV9jb250ZXh0
TWFwLmNsZWFyKCk7Ci0gICAgbV9tZWRpYUVsZW1lbnRzLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRD
b3VudHMuY2xlYXIoKTsKLQotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpj
cmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRy
PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbCA9IFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwotICAgIG1vZGVsLT5h
ZGRDbGllbnQoKmludGVyZmFjZSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1v
dmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpl
bnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBs
ZSgpKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJDb3JlOjpXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8
MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLVdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3Vy
ZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwx
PihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOwot
ICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7
Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpOwotCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxlbWVu
dCA9IG1vZGVsLT5tZWRpYUVsZW1lbnQoKTsKLSAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51
bGxwdHIpOwotICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7Ci0gICAgaW50ZXJm
YWNlLT5pbnZhbGlkYXRlKCk7Ci0gICAgbV9tZWRpYUVsZW1lbnRzLnJlbW92ZShtZWRpYUVsZW1l
bnQuZ2V0KCkpOwotICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCkKLXsKLSAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRDb3VudHMuY29udGFpbnMo
Y29udGV4dElkKSk7Ci0gICAgaWYgKG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQot
ICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGF1
dG8gZm91bmRJdGVyYXRvciA9IG1fbWVkaWFFbGVtZW50cy5maW5kKCZtZWRpYUVsZW1lbnQpOwot
ICAgIGlmIChmb3VuZEl0ZXJhdG9yICE9IG1fbWVkaWFFbGVtZW50cy5lbmQoKSkgewotICAgICAg
ICB1aW50NjRfdCBjb250ZXh0SWQgPSBmb3VuZEl0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgaWYg
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAg
ICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsK
LSAgICAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5zdXJlKCZt
ZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOwotICAgICAgICBh
dXRvIGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmICht
X2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgICAgIHJlbW92ZUNsaWVudEZvckNv
bnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgICAgICBtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsKLSAgICAgICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7Ci0gICAgfQotCi0gICAgYWRkQ2xpZW50
Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNldFVwUGxheWJhY2tD
b250cm9sc01hbmFnZXJXaXRoSUQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAg
ICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNsZWFyUGxheWJhY2tDb250cm9s
c01hbmFnZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0jZW5kaWYKLX0KLQotdWludDY0X3QgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsgcmV0dXJuIG5leHRD
b250ZXh0SWQoKTsgfSk7Ci0gICAgdWludDY0X3QgY29udGV4dElkID0gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE1lZGlhRWxlbWVudCgm
bWVkaWFFbGVtZW50KTsKLSAgICByZXR1cm4gY29udGV4dElkOwotfQotCi0jcHJhZ21hIG1hcmsg
SW50ZXJmYWNlIHRvIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmR1cmF0aW9uQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RHVyYXRpb25DaGFuZ2Vk
KGNvbnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQotewotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDdXJyZW50
VGltZUNoYW5nZWQoY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJ1ZmZlcmVk
VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQotewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpCdWZmZXJlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgYnVmZmVyZWRUaW1lKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFy
dGVkVGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6UGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY29udGV4dElkLCBwbGF5
YmFja1N0YXJ0ZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlz
UGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSYXRlQ2hhbmdlZChjb250ZXh0SWQs
IGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91Ymxl
IGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi17Ci0gICAgVmVj
dG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlc1ZlY3RvcjsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGRv
dWJsZSBzdGFydCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuc3RhcnQoaSkudG9Eb3VibGUoKTsKLSAg
ICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuZW5kKGkpLnRvRG91YmxlKCk7
Ci0gICAgICAgIHJhbmdlc1ZlY3Rvci5hcHBlbmQoeyBzdGFydCwgZW5kIH0pOwotICAgIH0KLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
U2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKGNvbnRleHRJZCwgV1RGTW92ZShyYW5nZXNWZWN0
b3IpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjYW5QbGF5RmFzdFJl
dmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKLXsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q2FuUGxh
eUZhc3RSZXZlcnNlQ2hhbmdlZChjb250ZXh0SWQsIHZhbHVlKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0
ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQo
KSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcg
bG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFu
Z2VkKGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRhcmdldFR5cGUp
LCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlvTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNv
bnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBtdXRlZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFuZ2VkKGNvbnRleHRJZCwgbXV0ZWQpKTsK
LX0KLQotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OgotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXkodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxheSgpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBhdXNlKCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBsYXlTdGF0ZSgp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2lu
U2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmVuZFNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLXsKLSAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWtUb1RpbWUodGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
dGltZSkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZhc3RTZWVrKHRpbWUpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJk
KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0
b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJl
Z2luU2Nhbm5pbmdGb3J3YXJkKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjYW5uaW5nKCk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewotICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGVsZW1lbnQgPSBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLm1lZGlhRWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50KQotICAgICAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6SGFuZGxlQ29udHJv
bGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNvbnRleHRJZCwgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUo
KSkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkudG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZU11dGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVk
KQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TXV0ZWQobXV0ZWQpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTlhMDBmMTFhZWE0NDRm
OTY4NTEzNWI5OTcwY2NhMmQ4YWU3MzI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0K
LSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlz
dGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRFbnVtcy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgQXR0YWNobWVudDsKLWNsYXNzIENvbm5lY3Rpb247
Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgTWVzc2FnZVJlY2VpdmVyOwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBOb2RlOwotfQotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKLWNsYXNzIFdlYlBhZ2U7Ci1j
bGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OwotY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7Ci0KLWNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKLSAgICA6IHB1YmxpYyBSZWZD
b3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJsaWMg
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgp
IHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi0gICAgTGF5ZXJIb3N0aW5nQ29udGV4dCogbGF5
ZXJIb3N0aW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC5nZXQoKTsg
fQotICAgIHZvaWQgc2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJI
b3N0aW5nQ29udGV4dD4mJik7Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1
cm4gbV9pc0FuaW1hdGluZzsgfQotICAgIHZvaWQgc2V0SXNBbmltYXRpbmcoYm9vbCBmbGFnKSB7
IG1faXNBbmltYXRpbmcgPSBmbGFnOyB9Ci0KLSAgICBib29sIHRhcmdldElzRnVsbHNjcmVlbigp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0SXNGdWxsc2NyZWVuOyB9Ci0gICAgdm9pZCBzZXRUYXJn
ZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1fdGFyZ2V0SXNGdWxsc2NyZWVuID0gZmxhZzsg
fQotCi0gICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIGZ1bGxzY3JlZW5Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZTsgfQot
ICAgIHZvaWQgc2V0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIHsgbV9mdWxsc2NyZWVuTW9kZSA9IG1vZGU7IH0K
LQotICAgIGJvb2wgaXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1bGxzY3JlZW47
IH0KLSAgICB2b2lkIHNldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV9pc0Z1bGxzY3JlZW4g
PSBmbGFnOyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQKLSAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7
Ci0KLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciogbV9tYW5hZ2VyOwotICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRleHQ7
Ci0gICAgYm9vbCBtX2lzQW5pbWF0aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdGFyZ2V0SXNG
dWxsc2NyZWVuIHsgZmFsc2UgfTsKLSAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9mdWxsc2NyZWVuTW9kZSB7IFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKLSAgICBib29sIG1faXNG
dWxsc2NyZWVuIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXImKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7Ci0gICAg
Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIElu
dGVyZmFjZSB0byBDaHJvbWVDbGllbnQKLSAgICBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVu
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29u
c3Q7Ci0gICAgdm9pZCBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0Vs
ZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYpOwotICAgIHZvaWQgZXhpdFZpZGVvRnVs
bHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYs
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0K
LXByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDsKLQotICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFn
ZSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKLQotICAgIHR5cGVkZWYgc3RkOjp0dXBs
ZTxSZWZQdHI8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+LCBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCk7Ci0KLSAgICAvLyBJbnRlcmZhY2UgdG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dAotICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBo
YXNWaWRlbyk7Ci0gICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9t
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQotICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3Jl
ZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKTsKLSAgICB2b2lk
IGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkRXhp
dEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZEVudGVyRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNo
bWVudCBmZW5jZVBvcnQpOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2
NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSk7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRv
SW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKTsKLSAgICAKLSAg
ICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQqLCB1aW50NjRfdD4gbV92aWRlb0VsZW1lbnRzOwotICAgIEhhc2hNYXA8dWludDY0X3Qs
IE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1f
Y2xpZW50Q291bnRzOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzU5YzI1YWFlN2IwMTVlMzAxM2Q5YTFiMTUw
N2I2MTBhMmZiY2E1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFW
RShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIHsKLSAgICBSZXF1
ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9v
bCBmaW5pc2hlZFdpdGhNZWRpYSkKLSAgICBEaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKQotICAgIERpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBE
aWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotICAgIERpZENsZWFudXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFj
aG1lbnQgZmVuY2VQb3J0KQotICAgIFNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBj
b250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpCi0gICAgRnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCi0gICAgRnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQotfQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
MGE0MGZkNzJkMWQwNWNjZGQ2MzVkOTBhYWFmZjQzYzhjMTM0MzYzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDgy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKLQotI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUo
QVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQotCi0jaW1wb3J0ICJBdHRhY2htZW50LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1w
b3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIldlYlBhZ2UuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3MuaCIK
LSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAi
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgPFF1YXJ0
ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgotI2ltcG9y
dCA8V2ViQ29yZS9FdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVt
ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJMYXllci5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlkZW8uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBJbnRSZWN0IGlu
bGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBlbGVtZW50
LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAg
YXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIHJlY3QgPSByZW5kZXJlci0+dmlkZW9Cb3go
KTsKLSAgICByZWN0Lm1vdmVCeShyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKS5s
b2NhdGlvbigpKTsKLSAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVu
dHNUb1Jvb3RWaWV3KHJlY3QpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIDogbV9tYW5hZ2VyKCZtYW5h
Z2VyKQotICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotewotfQotCi1XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0
TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4m
JiBjb250ZXh0KQotewotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdURk1vdmUoY29udGV4
dCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6aGFzVmlk
ZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAg
bV9tYW5hZ2VyLT5oYXNWaWRlb0NoYW5nZWQobV9jb250ZXh0SWQsIGhhc1ZpZGVvKTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAgIGlmIChtX21h
bmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX2NvbnRl
eHRJZCwgdmlkZW9EaW1lbnNpb25zKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcgotCi1SZWY8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlLCBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIoV2ViUGFnZSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJh
Y2tTZXNzaW9uTWFuYWdlcikKLSAgICA6IG1fcGFnZSgmcGFnZSkKLSAgICAsIG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlcihwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQotewotICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7
Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7
Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7Ci0gICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7Ci0K
LSAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKLSAgICAgICAgbW9kZWwt
PnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLQotICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRh
dGUoKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKLSAgICBtX3ZpZGVvRWxl
bWVudHMuY2xlYXIoKTsKLSAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwotICAgIAotICAgIGlm
IChtX3BhZ2UpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9wYWdlKTsKLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVh
dGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwotICAgIG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlci0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotCi0gICAgaW50
ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0
ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7Ci0gICAgbW9kZWwtPmFkZENsaWVudCgqaW50
ZXJmYWNlKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdU
Rk1vdmUoaW50ZXJmYWNlKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVs
SW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
Y29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOwotICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0dXJuIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRp
ZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7
Ci0KLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPnJlbW92ZUNsaWVudEZvckNvbnRleHQo
Y29udGV4dElkKTsKLQotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQg
PSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7Ci0gICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxs
cHRyKTsKLSAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAgIGludGVyZmFj
ZS0+aW52YWxpZGF0ZSgpOwotICAgIG1fdmlkZW9FbGVtZW50cy5yZW1vdmUodmlkZW9FbGVtZW50
LmdldCgpKTsKLSAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50cy5hZGQoY29u
dGV4dElkLCAxKTsKLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
QVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotCi0gICAgaW50IGNs
aWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7Ci0gICAgQVNTRVJUKGNs
aWVudENvdW50ID4gMCk7Ci0gICAgY2xpZW50Q291bnQtLTsKLQotICAgIGlmIChjbGllbnRDb3Vu
dCA8PSAwKSB7Ci0gICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpOwotICAg
ICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7Ci19Ci0KLSNw
cmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50OgotCi1ib29sIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAotewotI2lmIFBM
QVRGT1JNKElPUykKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgcmV0dXJuIFNldHRpbmdz
OjphdktpdEVuYWJsZWQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1vZGUgPT0gSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSAmJiBzdXBwb3J0
c1BpY3R1cmVJblBpY3R1cmUoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0Vs
ZW1lbnQmIHZpZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgQVNTRVJUKG1vZGUgIT0g
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNj
cmVlbkZvclZpZGVvRWxlbWVudCglcCkiLCB0aGlzKTsKLQotICAgIHVpbnQ2NF90IGNvbnRleHRJ
ZCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KHZp
ZGVvRWxlbWVudCk7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZpZGVvRWxlbWVudHMuYWRkKCZ2
aWRlb0VsZW1lbnQsIGNvbnRleHRJZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGFkZFJlc3VsdCk7Ci0g
ICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPT0gY29udGV4dElkKTsKLQotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAg
ICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNv
bnRleHRJZCk7Ci0gICAgYWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotICAgIGlmICgh
aW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpCi0gICAgICAgIGludGVyZmFjZS0+c2V0
TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRlcm5h
bEhvc3RpbmdQcm9jZXNzKCkpOwotCi0gICAgYXV0byB2aWRlb1JlY3QgPSBpbmxpbmVWaWRlb0Zy
YW1lKHZpZGVvRWxlbWVudCk7Ci0gICAgRmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSA9IEZsb2F0
UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKLQotICAg
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBvbGRNb2RlID0gaW50
ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOwotICAgIGludGVyZmFjZS0+c2V0VGFyZ2V0SXNGdWxs
c2NyZWVuKHRydWUpOwotICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7Ci0g
ICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudCgmdmlkZW9FbGVtZW50KTsKLSAgICBpZiAob2xkTW9k
ZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKQotICAg
ICAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKHZpZGVvTGF5ZXJGcmFtZSk7Ci0KLSAgICBp
ZiAoaW50ZXJmYWNlLT5pc0FuaW1hdGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaW50ZXJm
YWNlLT5zZXRJc0FuaW1hdGluZyh0cnVlKTsKLQotICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGlj
dHVyZSA9IHZpZGVvRWxlbWVudC53ZWJraXRTdXBwb3J0c1ByZXNlbnRhdGlvbk1vZGUoSFRNTFZp
ZGVvRWxlbWVudDo6VmlkZW9QcmVzZW50YXRpb25Nb2RlOjpQaWN0dXJlSW5QaWN0dXJlKTsKLSAg
ICAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXllckhv
c3RpbmdDb250ZXh0KCktPmNvbnRleHRJRCgpLCB2aWRlb1JlY3QsIG1fcGFnZS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSwgaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpLCBhbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1M
VmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50
KCVwKSIsIHRoaXMpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVChtX3ZpZGVvRWxl
bWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOwotCi0gICAgdWludDY0X3QgY29udGV4dElk
ID0gbV92aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKLSAgICBhdXRvJiBpbnRlcmZh
Y2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS5zZXRUYXJn
ZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotCi0gICAgaWYgKGludGVyZmFjZS5pc0FuaW1hdGluZygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnRlcmZhY2Uuc2V0SXNBbmltYXRpbmcodHJ1ZSk7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OkV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCwgaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1l
bnQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKLXsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01v
ZGVXaXRob3V0QW5pbWF0aW9uKCVwKSIsIHRoaXMpOwotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAg
QVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlucygmdmlkZW9FbGVtZW50KSk7Ci0KLSAgICB1
aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2aWRlb0VsZW1lbnQpOwot
ICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAg
aW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0KLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3Jl
ZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9kZSksIG1fcGFnZS0+
cGFnZUlEKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odmlkZW9FbGVtZW50KTsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0TW9kZSk7Ci0jZW5kaWYKLX0KLQotI3ByYWdtYSBtYXJrIEludGVy
ZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OgotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNv
bnRleHRJZCwgaGFzVmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgaWYgKG1fcGFn
ZSkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldFZpZGVvRGltZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyks
IG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmlu
aXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yZXF1ZXN0RnVs
bHNjcmVlbk1vZGUobW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2
aWRlb0Z1bGxzY3JlZW5Nb2RlKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRT
ZXR1cEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7Ci0KLSAgICBBU1NFUlQo
bV9wYWdlKTsKLSAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJd
OwotI2lmbmRlZiBOREVCVUcKLSAgICBbdmlkZW9MYXllciBzZXROYW1lOkAiV2ViIHZpZGVvIGZ1
bGxzY3JlZW4gbWFuYWdlciBsYXllciJdOwotI2VuZGlmCi0KLSAgICBbQ0FUcmFuc2FjdGlvbiBi
ZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQotICAg
IFt2aWRlb0xheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDAsIDApXTsKLSAgICBbdmlkZW9M
YXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJh
bnNwYXJlbnQpXTsKLQotICAgIC8vIFNldCBhIHNjYWxlIGZhY3RvciBoZXJlIHRvIG1ha2UgY29u
dmVydFJlY3Q6dG9MYXllcjpuaWwgdGFrZSBzY2FsZSBmYWN0b3IgaW50byBhY2NvdW50LiA8cmRh
cjovL3Byb2JsZW0vMTgzMTY1NDI+LgotICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9yIGlzIGludmVy
dGVkIGluIHRoZSBob3N0aW5nIHByb2Nlc3MuCi0gICAgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9y
ID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIFt2aWRlb0xheWVyIHNldFRyYW5z
Zm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3RvciwgaG9zdGluZ1Nj
YWxlRmFjdG9yLCAxKV07Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1
cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLT5sYXllckhv
c3RpbmdDb250ZXh0KCktPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKLQotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIAotICAg
IG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyLCBbcHJvdGVjdGVkVGhp
cywgdGhpcywgY29udGV4dElkXSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKLSAgICAg
ICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVs
bHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKLSAg
ICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0K
LSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbiglcCwgJXgpIiwgdGhpcywgY29udGV4
dElkKTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
bW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGlu
dGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZh
bHNlKTsKLSAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0KLSAgICBpZiAo
aW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1l
bnQoKTsKLSAgICBpZiAoIXZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
ZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgZHVyaW5n
IGFuIGFuaW1hdGlvbi4KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9FbGVtZW50XSB7Ci0gICAgICAgIGlmIChwcm90
ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5leGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQpOwotICAgIH0pOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQpOwotCi0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwot
ICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKLSAgICAKLSAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5l
VGhlbihbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7Ci0gICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKLSAgICAgICAgICAgIG1vZGVsLT5z
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGlu
dGVyZmFjZV0gewotICAgICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0gewotICAg
ICAgICAgICAgICAgICAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgp
LT5zZXRSb290TGF5ZXIobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZh
Y2UtPnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0
SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7Ci0K
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7
Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7Ci0g
ICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVu
TW9kZSgpOwotICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuID0gaW50ZXJmYWNlLT50YXJnZXRJ
c0Z1bGxzY3JlZW4oKTsKLQotICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwp
OwotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlk
ZW9FbGVtZW50KCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIHJlbW92ZUNsaWVu
dEZvckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIGlmICghdmlkZW9FbGVtZW50IHx8ICF0YXJn
ZXRJc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnQs
IG1vZGVdIHsKLSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKLSAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRl
b0VsZW1lbnQsIG1vZGUpOwotICAgIH0pOwotfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1
bnNpZ25lZCBncmF2aXR5KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9M
YXllckdyYXZpdHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0
eSk7Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkK
LXsKLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgbW9kZWwg
PSBlbnN1cmVNb2RlbChjb250ZXh0SWQpOwotCi0gICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQotICAg
ICAgICBtb2RlbC52aWRlb0VsZW1lbnQoKS0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFs
c2UpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVlLCBpbmxpbmVW
aWRlb0ZyYW1lKCptb2RlbC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0K
LSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1l
RmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBD
OjpBdHRhY2htZW50IGZlbmNlUG9ydCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCglcCwgJXgpIiwgdGhp
cywgY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpZiAoc3RkOjppc25hbihib3Vu
ZHMueCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy55KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLndp
ZHRoKCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLmhlaWdodCgpKSkgewotICAgICAgICBhdXRvIHZp
ZGVvUmVjdCA9IGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLT52aWRlb0VsZW1lbnQoKSk7Ci0gICAg
ICAgIGJvdW5kcyA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlkZW9SZWN0
LmhlaWdodCgpKTsKLSAgICB9Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAg
IFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwotICAgIGlmIChpbnRlcmZh
Y2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKLSAgICAgICAgaW50ZXJmYWNlLT5sYXllckhvc3Rp
bmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgpKTsKLSAgICBtb2RlbC0+
c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7Ci0gICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFj
aF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29t
bWl0XTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggMjQzMzVh
Y2E1NmZmODQ5MWI1YTEzMjE2MmE3ZDk0MWMxMWQwODUxOS4uZmVhY2M2NWVlMGNiZmZhNzA3MjAw
ODMzMjk2OGI4Y2I4ZThiYTUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQpAQCAtMzE2LDggKzMxNiw4IEBACiAKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpA
QCAtOTI2NSwxMSArOTI2NSwxMSBAQCAtICh2b2lkKV9zZXRVcFBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyRm9yTWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JgogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAg
ICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOworICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNz
aW9uTW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CiAg
ICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZXRNZWRpYUVsZW1lbnQoJm1lZGlh
RWxlbWVudCk7CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Up
Ci0gICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKTsKKyAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKCpfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9u
TW9kZWwpOwogCiAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCmluZGV4IGE3OGIwOTBlMDdiZTQzNjE5
NmE2OTVjYTEyODdlODc4ZDI2NjYxY2MuLmJkZWRmNzczZGRmZGUwNjZmYTUyZTE3NTZjYjY4MjIy
NzQ2Y2Y0Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
Vmlld0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLmgKQEAgLTU0LDggKzU0LDggQEAgY2xhc3MgUGFnZTsKIGNsYXNzIFRleHRJbmRpY2F0b3JX
aW5kb3c7CiBjbGFzcyBWYWxpZGF0aW9uQnViYmxlOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7Citj
bGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDsKICNlbmRpZgogfQogCkBAIC0zMzgsOCArMzM4LDggQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCi0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50PiBwbGF5YmFja1Nlc3Npb25Nb2RlbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6V2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBwbGF5
YmFja1Nlc3Npb25Nb2RlbDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjPiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAjZW5kaWYKICAgICAKICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3RGF0YS5tbQppbmRleCA3Nzk3MzZhMTZhZmY2MGUzZmE1YTBhYzdlYTM2NDA2ZGMz
NjRmMmU0Li5mOTMwZmE5NmM4ODViYmZmNzQwNGYwNzIzNTk2NzU5NTVmYzRiODMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KQEAgLTUxLDgg
KzUxLDggQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCi0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4K
ICNlbmRpZgogCiBCT09MIGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZyA9IE5POwo=
</data>
<flag name="review"
          id="336868"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316136</attachid>
            <date>2017-07-21 16:17:53 -0700</date>
            <delta_ts>2017-07-21 16:17:53 -0700</delta_ts>
            <desc>Patch that matches renamed files for easier viewing.</desc>
            <filename>out.patch</filename>
            <type>text/plain</type>
            <size>417950</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YTFhNWIxMzYxZi4uMmU0ZjkxNjQ1MWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNDggQEAKKzIwMTctMDctMjEgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBXZWIgcHJlZml4IGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuIGFu
ZCBXZWJQbGF5YmFja1Nlc3Npb24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDQzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGJlaGF2aW9yIGNo
YW5nZS4KKworICAgICAgICBSZW1vdmUgcmVkdW5kYW50IFdlYi0gcHJlZml4IGZyb20gY2xhc3Nl
cyBpbiBXZWJDb3JlIG5hbWVzcGFjZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY29j
b2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaC4KKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTo6flBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmguCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbDo6flBs
YXliYWNrU2Vzc2lvbk1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9Q
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Lm1tLgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNldE1lZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpy
ZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
ZWtUb1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y2FubmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Ojp0b2dnbGVNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
dXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50
TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OmV2ZW50TmFtZUFsbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJh
Y2tSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZWVrYWJsZVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVw
ZGF0ZUludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRp
b01lZGlhU2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmlzTXV0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oLgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI6On5WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcik6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmguCisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
flZpZGVvRnVsbHNjcmVlbk1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbS4KKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KToKKyAgICAgICAg
KFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUpOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNj
cmVlbkxheWVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3
YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAg
IChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkp
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZl
bnROYW1lcyk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZl
bnROYW1lQWxsKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpm
dWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OmFkZENsaWVudCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Ojppc1Zpc2libGUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OnNldEhhc1ZpZGVvKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmguCisgICAg
ICAgICogcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0Lm1tLgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1ZmZlcmVkVGltZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJh
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0
ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICgt
W1dlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBmdWxsc2NyZWVuSW50ZXJmYWNlXSk6
CisgICAgICAgICgtW1dlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2Ny
ZWVuSW50ZXJmYWNlOl0pOgorICAgICAgICAoY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24p
OgorICAgICAgICAoLVtXZWJBVlBsYXllckxheWVyIGZ1bGxzY3JlZW5JbnRlcmZhY2VdKToKKyAg
ICAgICAgKC1bV2ViQVZQbGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOl0pOgorICAg
ICAgICAoLVtXZWJBVlBsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpdKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBs
YXllckNvbnRyb2xsZXIpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAg
KFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKToK
KyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGlj
YXRpb25EaWRCZWNvbWVBY3RpdmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKToKKyAgICAgICAgKFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUpOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVy
ZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlk
U3RhcnRQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAg
ICAgKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVy
ZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBp
Y3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24p
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJG
aXJlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZSk6
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5tbToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAgICAgICAoVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4p
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBG
dWxsc2NyZWVuKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpm
dWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAg
ICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZCk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKToK
KyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnNDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Om11
dGVkQ2hhbmdlZCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YWRkQ2xpZW50KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpy
ZW1vdmVDbGllbnQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAg
ICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKToKKyAgICAgICAg
KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMpOgorICAg
ICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkpOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBhdXNlKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKToKKyAgICAgICAg
KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZCk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAg
ICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAg
ICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAg
ICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJk
KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5u
aW5nQmFja3dhcmQpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKToKKyAgICAgICAgKFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZSk6CisgICAgICAgIChWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOgorICAgICAgICAoVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXliYWNrUmF0ZSk6CisgICAgICAgIChWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXMpOgorICAgICAgICAo
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RN
b2RpZmllZFRpbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmxpdmVVcGRhdGVJbnRlcnZhbCk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgp
OgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKToKKyAgICAgICAg
KFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSk6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJu
YWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUpOgorICAgICAgICAoVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAg
ICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4pOgor
ICAgICAgICAoVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVu
KToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlciBlbnRlckZ1bGxzY3JlZW46bW9kZTpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciBkaWRGaW5pc2hGdWxsc2NyZWVuOl0pOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1
bGxzY3JlZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmR1cmF0aW9uQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFu
Z2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpyYXRlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6Om11dGVkQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZW1vdmVDbGllbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJl
cXVlc3RGdWxsc2NyZWVuTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jh
dml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omhhc1ZpZGVvKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
Ojp2aWRlb0RpbWVuc2lvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnBsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBhdXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11
dGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRNdXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZmFzdFNlZWspOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVu
ZFNjYW5uaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmR1cmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpjdXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YnVmZmVyZWRUaW1lKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXli
YWNrUmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2Vla2FibGVSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRp
bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmxpdmVVcGRhdGVJbnRlcnZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tF
bmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2Fs
aXplZERldmljZU5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxz
Y3JlZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmV4aXRGdWxsc2NyZWVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0uCisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2Ny
dWJiaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
c2Vla2FibGVSYW5nZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250
cm9sc01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGlt
aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0uCisgICAgICAgICgtW1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09i
akMgaW52YWxpZGF0ZV0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWNPYmpDIHNldFVwUElQRm9yVmlkZW9WaWV3OndpdGhGcmFtZTppbldpbmRvdzpdKToKKyAgICAg
ICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBib3VuZHNEaWRDaGFuZ2VG
b3JWaWRlb1ZpZXdDb250YWluZXI6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakMgcGlwU2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hY09iakMgcGlwRGlkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgcGlwQWN0aW9uUGxheTpdKToKKyAgICAgICAg
KC1bV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25QYXVzZTpdKToK
KyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBwaXBBY3Rpb25T
dG9wOl0pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2Ny
ZWVuTW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhck1vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdl
cik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU9iakMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbik6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVu
V2l0aG91dEFuaW1hdGlvblRvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNl
ZEZ1bGxzY3JlZW4pOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlci5tbToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgZGVhbGxvY10p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZWVrVG9UaW1lOnRvbGVy
YW5jZUJlZm9yZTp0b2xlcmFuY2VBZnRlcjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIgYmVnaW5Ub3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlciBlbmRUb3VjaEJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2Vs
ZWN0aW9uT3B0aW9uOl0pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBz
ZXRDdXJyZW50TGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246XSk6CisgICAgICAg
ICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Y10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyIHRvZ2dsZVBsYXliYWNrXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyIHNldFBsYXlpbmc6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
IGlzUGxheWluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciB0b2dn
bGVQaWN0dXJlSW5QaWN0dXJlXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyIHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hY10pOiBEZWxldGVkLgorICAgICAgICAo
LVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6XSk6IERlbGV0ZWQuCisKIDIwMTctMDctMjEgIEtvbnN0YW50aW4gVG9rYXJldiAgPGFu
bnVsZW5AeWFuZGV4LnJ1PgogCiAgICAgICAgIFtjbWFrZV1bTWFjXSBVbnJldmlld2VkLCBmaXgg
bGlua2luZyBXZWJLaXRTeXN0ZW1JbnRlcmZhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MmZjZDRkOWNlMi4uYzMwZGQwY2E2
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTE2ODMsOCArMTY4Myw4IEBACiAJCTNGODAyMDM2MUU5RTQ3QzMwMERFQzYxRCAv
KiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGODAyMDMxMUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9D
YXB0dXJlRGV2aWNlLmNwcCAqLzsgfTsKIAkJM0Y4MDIwMzcxRTlFNDdDNTAwREVDNjFEIC8qIENv
cmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlv
Q2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKIAkJM0Y4MDIwMzgxRTlFNDdDOTAwREVDNjFE
IC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODAyMDMzMUU5RTM4MUQwMERFQzYxRCAvKiBD
b3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi87IH07Ci0JCTNGQkM0QUYzMTg5ODgx
NTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYxMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKLQkJ
M0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJD
NEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzRkJD
NEFGMzE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMTE4
OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi87IH07
CisJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZC
QzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZGMUZB
NjYxRTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0YzQkI1ODIxRTcwOUVFNDAw
QzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwICovOyB9OwogCQkzRkY4MTNBNzFE
QkE4NjQwMDA5QkYwMDEgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUg
LyogUG9pbnRlckxvY2tDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZGRkY5QTgxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENT
U1ZpZXdwb3J0UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxl
LmNwcCAqLzsgfTsKQEAgLTI0NjYsMTEgKzI0NjYsMTEgQEAKIAkJNTFGQjU1MDUxMTNFM0U5MTAw
ODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50
LmNwcCAqLzsgfTsKIAkJNTFGQjY3REIxQUU2QjgyQjAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNp
b25TdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVT
aGVldC5jcHAgKi87IH07CiAJCTUxRkI2N0RDMUFFNkI4MkYwMEQwNkM1QSAvKiBDb250ZW50RXh0
ZW5zaW9uU3R5bGVTaGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFGQjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHls
ZVNoZWV0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
MTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
bW0gKi87IH07CisJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tICovOyB9OwogCQk1MjY3MjRGMzFDQjJGRUFEMDA3NTk3NEQgLyogVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNvY29hLm1tICovOyB9OwogCQk1MkIwRDRCRTFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZv
cm1WaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJCMEQ0QzAxQzU3RkQ2NjAwNzdD
RTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJCMEQ0QzAxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTJCNkM5QzIxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QkQxNUUz
RjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk1MkI2
QzlDMzE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QkUxNUUzRjRERjAw
NjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJNTJCNkM5QzUxNUUz
RjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QzAxNUUzRjRERjAwNjkwQjA1IC8q
IE5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwpAQCAtMjQ3OCw5ICsyNDc4LDkgQEAKIAkJ
NTJDQ0E5RTIxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNDQTlFMDE1
RTNGNjJDMDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJ
NTJDQ0E5RTMxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5RTExNUUz
RjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovOyB9OwogCQk1MkQ1
QTE4RjFDNTQ1OTIzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExOEQxQzU0
NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSAqLzsgfTsKLQkJ
NTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNDFDNTc0
ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE1MUM1NzQ4ODkwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyRDVBMUE5MUM1NzQ4QTkwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE2MUM1NzQ4ODkwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLzsgfTsKKwkJ
NTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNDFDNTc0ODg5
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLzsgfTsKIAkJNTJFMkNBRkMxOUZGMDIwNzAw
MUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVByb2R1Y2Vy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJG
MTA4NjUxNjJCNkRBNDAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjIxNjJCNkQ4MjAw
OUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovOyB9OwogCQk1MkYxMDg2NjE2MkI2
REE4MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjMxNjJCNkQ4MjAwOUFDODFFIC8qIE1p
eGVkQ29udGVudENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNjE3MywxNSArNjE3MywxNSBAQAogCQlDREEwN0ZCRTE4RTBBMTZBMDA0
Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQkMxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3RlbVNs
ZWVwTGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDREEwN0ZDMTE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA3
RkJGMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tICovOyB9Owog
CQlDREEwN0ZDMjE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQzAxOEUw
QTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMuaCAqLzsgfTsKLQkJQ0RBMjlB
MDkxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMDgxQ0JEOTlG
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTBCMUNCRDlBNzQwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9OwotCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTBEMUNCRDlDRkUwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTE2MUNCREE1NkMwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovOyB9OwotCQlDREEyOUExNzFD
QkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExNTFDQkRBNTZD
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMzAxQ0JGNzRENDAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkYxQ0JGNzNGQzAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OworCQlDREEy
OUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwODFDQkQ5OUY0
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMEIxQ0JEOUE3NDAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi87IH07CisJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMubW0gKi87IH07CisJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
bW0gKi87IH07CiAJCUNEQTI5QTMxMUNCRjc0REEwMDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRy
b2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEyOUEyRDFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tICovOyB9
OwotCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUNEQTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlB
MkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RBNzk4MjQx
NzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMzE3MEEyNTgzMDBENDVDNTUgLyogQXVk
aW9TZXNzaW9uLmNwcCAqLzsgfTsKIAkJQ0RBNzk4MjcxNzBBMjc5MTAwRDQ1QzU1IC8qIEF1ZGlv
U2Vzc2lvbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTc5ODI1MTcwQTI3OTAwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0gKi87IH07
CiAJCUNEQTc5ODJBMTcwQTNEMDAwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTc5ODIxMTcwQTIyREMwMEQ0
NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtOTI5Nyw4ICs5Mjk3LDggQEAKIAkJM0Y4MDIwMzIxRTlFMzgxRDAw
REVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29y
ZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1h
bmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0ZCQzRBRjEx
ODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGQkM0QUYy
MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRkJDNEFGMTE4OTg4MTU2
MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjIxODk4ODE1NjAwNDZF
RTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRD
U1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
M0ZGRkY5QTcxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QUIxNTlEOUIwNjAwMjBCQkQ1IC8qIFZp
ZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTAxOTMsMTIgKzEwMTkzLDEyIEBACiAJCTUxRkI1NTAzMTEzRTNFOTEwMDgyMTE3NiAv
KiBKU0Nsb3NlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDbG9zZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjY3RDkx
QUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjY3REExQUU2QjVFNDAwRDA2
QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2
NzI0RjIxQ0IyRkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIwRDRCRDFDNTdGRDFFMDA3
N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkIwRDRCRjFD
NTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJCMEQ0QzExQzU3RkY5MTAw
NzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjZD
OUJEMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRTE1RTNGNERGMDA2OTBCMDUg
LyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyQjZDOUJGMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjA4LDkgKzEwMjA4LDkgQEAKIAkJNTJDQ0E5
RTExNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEUxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbkxheWVyTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRl
b0Z1bGxzY3JlZW5MYXllck1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQTQxQzU3NDg4OTAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1
QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJF
MkNBRkIxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQcm9kdWNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNaXhlZENvbnRlbnRDaGVj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGMTA4NjMxNjJCNkQ4MjAw
OUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWl4ZWRDb250ZW50Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQ2NzksMTYgKzE0Njc5LDE2IEBACiAJCUNEQTA3RkJDMThFMEExNkEwMDQ2OTlGQSAv
KiBTeXN0ZW1TbGVlcExpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN5c3RlbVNsZWVwTGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RB
MDdGQkYxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeXN0ZW1TbGVlcExpc3RlbmVyTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEwN0ZDMDE4RTBBMjJCMDA0Njk5
RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTBBMUNC
RDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTBBMUNCRDlB
NzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5
QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5QTJDMUNCRjczRkMwMDkwMUND
RiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQTI5QTJEMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBVlBsYXllckNvbnRy
b2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTJFMUNCRjczRkMw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDREE3OTgyMzE3MEEyNTgzMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTc5ODI1MTcwQTI3OTAwMEQ0NUM1NSAvKiBBdWRpb1Nl
c3Npb25JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdWRp
b1Nlc3Npb25JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTA2NSwxNCAr
MTkwNjUsMTQgQEAKIAkJCQlFMUEzMTYyQzEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1
dGVkU3RyaW5nRXh0cmFzLm1tICovLAogCQkJCUNENTg5NkUwMUNEMkIxNTEwMEIzQkNDOCAvKiBX
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oICovLAogCQkJCUNENTg5NkRGMUNEMkIxNTEwMEIz
QkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSAqLywKLQkJCQlDREEyOUExNTFD
QkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8sCi0J
CQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5tbSAqLywKKwkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLmggKi8sCisJCQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLywKIAkJCQlDRDgyMDMwNjEzOTVBQjZBMDBG
OTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oICovLAogCQkJCUNEODIwMzA3
MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovLAog
CQkJCUNEODIwMzA4MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLmggKi8sCiAJCQkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8sCi0JCQkJNTJCMEQ0QzExQzU3
RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovLAotCQkJ
CTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMubW0gKi8sCisJCQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy5oICovLAorCQkJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1
NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovLAogCQkJCUNEODIwMzBGMTM5NUFDRTcwMEY5
NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gKi8sCiAJCQkJOTM4MEY0NzcwOUExMUFDQzAw
MUZEQjM0IC8qIFdpZGdldE1hYy5tbSAqLywKQEAgLTIxMDcyLDE0ICsyMTA3MiwxNCBAQAogCQkJ
CUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLywKIAkJCQlGNDgyMjMw
RjFFMzg2OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5oICovLAogCQkJ
CUY0ODIyMzBFMUUzODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLm1t
ICovLAotCQkJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oICovLAotCQkJCUNEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJCQlDREEyOUEyRTFDQkY3M0ZD
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLywKKwkJCQlDREEy
OUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0g
Ki8sCiAJCQkJMUY4NzU2QjExRTIyQkVFRjAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJh
Y2tlckNsaWVudC5oICovLAogCQkJCTFGODc1NkIwMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxp
dGVEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0gKi8sCiAJCQkJM0Y0MkIzMUIxODgxMTkxQjAwMjc4
QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oICovLAogCQkJCTNGNDJC
MzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQu
bW0gKi8sCi0JCQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0LmggKi8sCi0JCQkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovLAorCQkJCTNGQkM0QUYyMTg5ODgx
NTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAorCQkJCTNG
QkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5t
bSAqLywKIAkJCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovLAog
CQkJKTsKIAkJCXBhdGggPSBpb3M7CkBAIC0yMTEyNiwxNCArMjExMjYsMTQgQEAKIAkJCQlDREM5
NzlGMzFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJyb3JFeHRyYXMuaCAqLywKIAkJCQlD
REM5NzlGMjFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJyb3JFeHRyYXMubW0gKi8sCiAJ
CQkJNURGRUJBQjYxODU5MkI2RDAwQzc1QkVCIC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovLAot
CQkJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UuaCAqLywKLQkJCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwuaCAqLywKLQkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKLQkJCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCi0JCQkJ
NTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmggKi8sCi0JCQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmggKi8sCi0JCQkJNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCi0JCQkJNTJENUExQTYxQzU3NDg4OTAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovLAorCQkJ
CUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAq
LywKKwkJCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwu
aCAqLywKKwkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQuaCAqLywKKwkJCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJNTJCMEQ0QkYxQzU3RkQ2
NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8sCisJCQkJNTJE
NUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8sCisJCQkJ
NTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50LmggKi8sCisJCQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDAxMywxMSArMzAwMTMsMTEgQEAKIAkJCQkwNzA5
RDc5MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTFBMzE2MkQxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRl
ZFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1ODk2RTIxQ0QyQjE1MTAwQjNC
Q0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlD
REEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTE3MUNC
REE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTE3MUNCREE1
NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0FGMzQ4MTBB
NkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
Q0FGMzQ4MzBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE1NjlEMUIwRDdFMkI4MjAwN0MzOTgzIC8qIFdlYlNjcmlwdE9iamVj
dFByb3RvY29sLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDM0LDE0ICszMDAzNCwxNCBAQAogCQkJ
CTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJT
eXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEZBMzE0OTY5Mzkx
MDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUy
QjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJCMEQ0QzAxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDgyMDMwQTEz
OTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJM0Y0MkIzMUQxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJBVktpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q4MjAzMEMxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJCMEQ0QzIxQzU3RkY5MTAw
NzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTNGQkM0
QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQTcxQzU3NDg5RDAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkQ1
QTFBODFDNTc0OEEzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIwMDAwNTNDQSAvKiBXZWJWVFRF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyog
V2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MDE0MEMxNzQwMDBCQzFD
MjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMzM3MTYsOSArMzM3MTYsOSBA
QAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
TWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTMxNjJFMTM0QkMzMkQwMDdDOUE0RiAvKiBX
ZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDU4OTZF
MTFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0gaW4gU291
cmNlcyAqLywKLQkJCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUExNjFDQkRBNTZD
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMzAxQ0JGNzRENDAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFD
QUYzNDgyMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAq
LywKIAkJCQk5N0FBQkQxQTE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3QUFCRDFEMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVs
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM3MzQsOSArMzM3MzQsOSBAQAogCQkJCUNEODIwMzBC
MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJM0Y0MkIzMUUxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJBVktpdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEODIwMzBEMTM5NUFC
NkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTIxMzFFNUIxQzRG
MTU3NjAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNGQkM0QUYzMTg5ODgx
NTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMg
LyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlGMTIxNzFGNTE2QThDRUQyMDAwMDUzQ0EgLyogV2ViVlRURWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1RDIxQTgwMjEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIxMEI2OTgxMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tl
bml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAppbmRleCBhZmNkNzBiOTA4OC4uYzAyM2NhZDc3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMTE3LDcgKzExNyw3IEBACiAKICNpZiBQTEFU
Rk9STShJT1MpCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW5jbHVk
ZSAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbmNsdWRlICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKQpAQCAtMTU2LDcgKzE1Niw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSkKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmgiCiAjZW5kaWYKIAogI2RlZmluZSBSRUxFQVNFX0xPR19JRl9B
TExPV0VEKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihkb2N1bWVudCgpLnBhZ2UoKSAmJiBkb2N1
bWVudCgpLnBhZ2UoKS0+aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBI
VE1MTWVkaWFFbGVtZW50OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IDdmZDEzZmFlYjYzLi5jZjg1MTZkOGMw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC00Nyw3ICs0
Nyw3IEBACiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiAjaWYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5j
bHVkZSAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5o
CnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UuaAppbmRleCAzMDllNzk3NDRiNC4uNDEwNWVmNmRiMzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZS5oCkBAIC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGlt
ZVJhbmdlczsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlIHsKK2NsYXNzIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKCkgeyB9OworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgPSAwOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNr
U2Vzc2lvbk1vZGVsLmgKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaApyZW5hbWUgdG8g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaAppbmRl
eCAwNmQ1M2YwZjc3Ni4uYTg3NDQxNTc0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaApAQCAtMzQsMTQgKzM0LDE0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVSYW5nZXM7Ci1jbGFzcyBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50Owogc3RydWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9uOwogCi1jbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCB7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbCB7CiBwdWJsaWM6Ci0gICAg
dmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lk
IGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAw
OworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgeyB9OworICAgIHZpcnR1YWwg
dm9pZCBhZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsK
IAogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgp
ID0gMDsKQEAgLTgzLDkgKzgzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc011dGVk
KCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQg
eworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgewogcHVibGljOgotICAgIHZpcnR1
YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50KCkgeyB9OworICAgIHZpcnR1YWwgflBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50KCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlv
bkNoYW5nZWQoZG91YmxlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFRpbWVDaGFuZ2Vk
KGRvdWJsZSAvKiBjdXJyZW50VGltZSAqLywgZG91YmxlIC8qIGFuY2hvclRpbWUgKi8pIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgeyB9CkBAIC05Nyw3
ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0
aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJs
ZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICovKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmlu
ZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKcmVuYW1l
IHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50LmgKaW5kZXggZTI4NDY5NDY0OTYuLjgwN2M0ZjZjYTk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNs
dWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lv
bk1vZGVsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzksMTUgKzM5LDE1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIEF1ZGlvVHJhY2s7CiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50Owog
Y2xhc3MgVGV4dFRyYWNrOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworY2xh
c3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCwg
cHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWwsIHB1YmxpYyBFdmVudExp
c3RlbmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50PiBjcmVhdGUoKQorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7CiAg
ICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlh
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0KIApAQCAtNTUs
OCArNTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RG
OjpBdG9taWNTdHJpbmcmKTsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5l
ciYgcmhzKSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpF
dmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDbGllbnQoUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXkoKSBmaW5h
bDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhdXNlKCkgZmluYWw7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKQEAgLTk0LDcgKzk0LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsOwogCiBwcm90ZWN0ZWQ6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpOwogCiBw
cml2YXRlOgogICAgIHZvaWQgcHJvZ3Jlc3NFdmVudFRpbWVyRmlyZWQoKTsKQEAgLTEwMyw3ICsx
MDMsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFF
bGVtZW50OwogICAgIGJvb2wgbV9pc0xpc3RlbmluZyB7IGZhbHNlIH07Ci0gICAgSGFzaFNldDxX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKKyAgICBIYXNoU2V0PFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwogICAgIFZlY3RvcjxSZWZQdHI8
VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudTsKICAgICBWZWN0b3I8UmVmUHRyPEF1
ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVudTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5tbQpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5t
bQpyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQubW0KaW5kZXggMTVhZGQ0OWJhNmIuLjI2MjljODAwMjA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Q
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpAQCAtMjQsNyArMjQsNyBAQAogICov
CiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
LmgiCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCiAKQEAgLTQ3LDE2ICs0NywxNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpCitQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKQogICAgIDogRXZlbnRM
aXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKIHsKIH0KIAotV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5XZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudCgpCitQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6flBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKIHsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQq
IG1lZGlhRWxlbWVudCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
dE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiB7CiAgICAgaWYg
KG1fbWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtODUs
MTIgKzg1LDEyIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
dE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpCiAgICAgdXBkYXRlRm9yRXZlbnRO
YW1lKGV2ZW50TmFtZUFsbCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IFdlYkNvcmU6OkV2ZW50JiBldmVudCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXZWJD
b3JlOjpFdmVudCYgZXZlbnQpCiB7CiAgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LnR5cGUo
KSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0
IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgaWYgKG1fY2xpZW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3Niw3OSArMTc2LDc5IEBAIHZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBX
VEY6OkF0b21pY1N0CiAgICAgICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChpc011dGVkKCkp
OwogICAgIH0KIH0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmFk
ZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNs
aWVudCkpOwogICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7
CiAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRz
LnJlbW92ZSgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6cGxheSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpw
bGF5KCkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5wbGF5KCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnBhdXNlKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkK
IHsKICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5wYXVz
ZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dn
bGVQbGF5U3RhdGUoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9n
Z2xlUGxheVN0YXRlKCkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIG1fbWVk
aWFFbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQogewogICAgIGlmIChtX21lZGlh
RWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcoKQog
ewogICAgIGlmIChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNj
cnViYmluZygpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZmFzdFNlZWsoZG91Ymxl
IHRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhk
b3VibGUgdGltZSkKIHsKICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQordm9pZCBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQogewogICAgIGlmICht
X21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVk
aWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7
CiAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5T
Y2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQogewogICAgIGlm
IChtX21lZGlhRWxlbWVudCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjYW5uaW5nKCk7
CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgc2VsZWN0ZWRBdWRpb0luZGV4KQordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRf
dCBzZWxlY3RlZEF1ZGlvSW5kZXgpCiB7CiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgc2VsZWN0CiAg
ICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51W2ldLT5zZXRFbmFibGVkKGkgPT0gc2VsZWN0ZWRB
dWRpb0luZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2
NF90IGluZGV4KQogewogICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
QEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZQogICAgIG1fbWVkaWFF
bGVtZW50LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2spOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBp
Y3R1cmUoKQogewogICAgIGlmIChtX21lZGlhRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSA9PSBN
ZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CkBAIC0yNzksMTggKzI3OSwx
OCBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0
dXJlSW5QaWN0dXJlKCkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVudGVyRnVsbHNjcmVlbihN
ZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZU11dGVk
KCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZU11dGVkKCkK
IHsKICAgICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCiB7CiAgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQogICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0TXV0ZWQobXV0ZWQp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkKIHsKICAgICBpZiAoIW1fbWVkaWFF
bGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC0zMjIsNyArMzIyLDcgQEAgdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25z
KCkKICAgICB9CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKQogewogICAgIGF1dG8g
YXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7CiAgICAgYXV0byBsZWdpYmxl
SW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CkBAIC0zMzMsNyArMzMzLDcgQEAg
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKCkKICAgICB9CiB9CiAKLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6cGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0Citkb3VibGUgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdAog
ewogICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzQxLDcg
KzM0MSw3IEBAIGRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxh
eWJhY2tTdGFydGVkVGltZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5wbGF5
YmFja1N0YXJ0ZWRUaW1lKCk7CiB9CiAKLWNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK2Nv
bnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKIHsKICAgICAvLyBGSVhNRSgxNTc0NTIpOiBSZW1vdmUg
dGhlIHJpZ2h0LWhhbmQgY29uc3RydWN0b3Igbm90YXRpb24gb25jZSBOZXZlckRlc3Ryb3llZCBz
dXBwb3J0cyBpbml0aWFsaXplcl9saXN0cy4KICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVj
dG9yPEF0b21pY1N0cmluZz4+IG5hbWVzID0gVmVjdG9yPEF0b21pY1N0cmluZz4oewpAQCAtMzU5
LDYwICszNTksNjAgQEAgY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmEKICAgICByZXR1cm4gbmFtZXMu
Z2V0KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQorY29uc3QgQXRvbWljU3RyaW5nJiAgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCiB7CiAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZXZlbnROYW1lQWxsKCJhbGxFdmVudHMiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICByZXR1cm4gZXZlbnROYW1l
QWxsOwogfQogCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmR1
cmF0aW9uKCkgY29uc3QKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
ZHVyYXRpb24oKSBjb25zdAogewogICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+c3VwcG9ydHNTZWVraW5nKCkgPyBt
X21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7CiB9CiAKLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6Y3VycmVudFRpbWUoKSBjb25zdAorZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpjdXJyZW50VGltZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVt
ZW50ID8gbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkgOiAwOwogfQogCi1kb3VibGUgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0Citk
b3VibGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZlcmVkVGltZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1heEJ1
ZmZlcmVkVGltZSgpIDogMDsKIH0KIAotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6aXNQbGF5aW5nKCkgY29uc3QKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OmlzUGxheWluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50
ID8gIW1fbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA6IGZhbHNlOwogfQogCi1mbG9hdCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKCkgY29uc3QKK2Zsb2F0
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAog
ewogICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1Jh
dGUoKSA6IDA7CiB9CiAKLVJlZjxUaW1lUmFuZ2VzPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAorUmVmPFRpbWVSYW5nZXM+IFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlKCkgOiBU
aW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QK
K2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVUaW1lUmFu
Z2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50
ID8gbV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6
IDA7CiB9CiAKLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2
ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bGl2ZVVwZGF0ZUludGVydmFsKCkgOiAwOwogfQog
ICAgIAotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y2FuUGxheUZh
c3RSZXZlcnNlKCkgY29uc3QKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50
ID8gbV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0ZSgpIDwgMC4wIDogZmFsc2U7CiB9
CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK1ZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKIHsKICAgICBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IGF1ZGlvT3B0aW9uczsKIApAQCAtNDI4LDcgKzQyOCw3IEBAIFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmF1ZGlvTWVkaWFTZWxlCiAgICAgcmV0dXJuIGF1ZGlvT3B0aW9uczsKIH0KIAotdWludDY0X3Qg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QKK3VpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojph
dWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgKytpbmRleCkgewogICAg
ICAgICBpZiAobV9hdWRpb1RyYWNrc0Zvck1lbnVbaW5kZXhdLT5lbmFibGVkKCkpCkBAIC00Mzcs
NyArNDM3LDcgQEAgdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpOwogfQogCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCkgY29uc3QKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
KSBjb25zdAogewogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9wdGlv
bnM7CiAKQEAgLTQ1Miw3ICs0NTIsNyBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZQogICAgIHJl
dHVybiBsZWdpYmxlT3B0aW9uczsKIH0KIAotdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAordWludDY0
X3QgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVk
SW5kZXgoKSBjb25zdAogewogICAgIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXggPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CiAgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOwpA
QCAtNDg5LDEyICs0ODksMTIgQEAgdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAogICAgIHJldHVybiBz
ZWxlY3RlZEluZGV4OwogfQogCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Citib29sIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT53ZWJraXRDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAorUGxheWJhY2tTZXNz
aW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0
KCkpCiAgICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsKQEAgLTUxMiwxOSArNTEyLDE5IEBA
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhCiAgICAgfQogfQogCi1TdHJpbmcgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VO
YW1lKCkgY29uc3QKK1N0cmluZyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0
ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdAogewogICAgIGlmIChtX21l
ZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKICAgICAg
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERl
dmljZURpc3BsYXlOYW1lKCk7CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLWJvb2wg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OndpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkKCkgY29uc3QKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7CiB9CiAKLWJvb2wgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBjb25zdAorYm9vbCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNNdXRlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm11dGVkKCkgOiBmYWxzZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmgKaW5kZXggNmYzMmI0MzkzNWQuLmM1YzE1YjExOTg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgKQEAgLTMwLDkgKzMwLDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7
CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7CiBwdWJsaWM6Ci0gICAgdmly
dHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSB7IH07CisgICAgdmlydHVh
bCB+VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSB7IH07CiAgICAgdmlydHVhbCB2b2lk
IGRpZFNldHVwRnVsbHNjcmVlbigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxs
c2NyZWVuKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC5oCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKcmVuYW1lIHRvIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKaW5kZXggYTUy
NzAyZGI4NmIuLmFjODQ5ZmMyMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKQEAgLTMwLDE3ICszMCwxNyBAQAog
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1z
LmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50OworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQ7CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKK2NsYXNzIFZpZGVvRnVsbHNj
cmVlbk1vZGVsIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmKT0gMDsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5N
b2RlbCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmKT0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnVsbHNj
cmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29s
IGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckZyYW1lKEZsb2F0UmVjdCkgPSAwOwpAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgeworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
KCkgeyB9CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSA9IDA7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKc2ltaWxhcml0eSBpbmRleCA4NCUKcmVuYW1l
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAppbmRleCA5YTBmYjE3MDkxOS4uNjA3
Mzc0ODZhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaApAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnRFbnVtcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCiAj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00MywxNSArNDMsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQXVkaW9UcmFjazsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBjbGFzcyBUZXh0
VHJhY2s7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDsKK2NsYXNz
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwg
cHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50PiBjcmVhdGUoKQorICAgIHN0YXRpYyBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKSk7CiAg
ICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVv
RWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9F
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0VsZW1lbnQuZ2V0KCk7IH0KICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtdIHsgfSk7CkBAIC02
MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBX
VEY6OkF0b21pY1N0cmluZyYpOwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3Rl
bmVyJiByaHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNv
cmU6OkV2ZW50TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRl
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGll
bnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJy
aWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhN
ZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVv
TGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKQEAgLTczLDcgKzcz
LDcgQEAgcHVibGljOgogCiAKIHByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIFZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRI
YXNWaWRlbyhib29sKTsKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SFRN
TFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5
ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiAgICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFs
c2UgfTsKLSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGll
bnRzOworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7
CiAgICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKICAgICBGbG9hdFNpemUgbV92aWRlb0Rp
bWVuc2lvbnM7CiAgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW0Kc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW0KcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCmluZGV4IGIwYmY0N2MwYzRkLi4yMmVkMjEzNThjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KQEAgLTI2LDEzICsyNiwxMyBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW1wb3J0ICJXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaCIKIAogI2ltcG9ydCAiRE9NV2luZG93LmgiCiAjaW1wb3J0ICJI
aXN0b3J5LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9z
dC5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCiAjaW1wb3J0IDxRdWFy
dHpDb3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgpAQCAtNDcsMTYgKzQ3LDE2IEBACiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQorVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKICAg
ICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiB7
CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQorVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6On5WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCiB7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQog
ewogICAgIGlmIChtX3ZpZGVvRWxlbWVudCA9PSB2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZQogICAgIHVwZGF0
ZUZvckV2ZW50TmFtZShldmVudE5hbWVBbGwoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBXZWJDb3JlOjpFdmVudCYgZXZlbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgV2ViQ29yZTo6RXZlbnQmIGV2ZW50KQogewogICAgIHVwZGF0ZUZvckV2ZW50TmFtZShl
dmVudC50eXBlKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFt
ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50
TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogewogICAgIGlmIChtX2Ns
aWVudHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1l
KGNvbnN0IFdURjo6QXRvbWljU3QKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIq
IHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWVu
TGF5ZXIoUGxhdGZvcm1MYXllciogdmlkZW9MYXllciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0g
dmlkZW9MYXllcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTIzLDcgKzEy
Myw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqCiAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJlZEZvcklubGlu
ZVRoZW4oV1RGOjpGdW5jCiAgICAgbV92aWRlb0VsZW1lbnQtPndhaXRGb3JQcmVwYXJlZEZvcklu
bGluZVRoZW4oV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRX
aXRoTWVkaWEpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCiB7CiAgICAgaWYgKG1fdmlkZW9FbGVtZW50
ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpICE9IG1vZGUpCiAgICAgICAgIG1f
dmlkZW9FbGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKQEAgLTE0OCw3ICsxNDgsNyBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RnVsbHNj
cmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudAogICAgIH0KIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZy
YW1lKEZsb2F0UmVjdCByZWN0KQogewogICAgIG1fdmlkZW9GcmFtZSA9IHJlY3Q7CiAgICAgW21f
dmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOkNHUmVjdChyZWN0KV07CkBAIC0xNTYsMTQg
KzE1NiwxNCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCiAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5z
ZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eSBncmF2aXR5KQogewogICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkg
dmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAg
ICBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVz
aXplKQorICAgIGlmIChncmF2aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZp
dHlSZXNpemUpCiAgICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZp
dHlSZXNpemU7Ci0gICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQorICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gVmlk
ZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKICAgICAgICAgdmlk
ZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBl
bHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlS
ZXNpemVBc3BlY3RGaWxsKQorICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gVmlkZW9GdWxsc2NyZWVu
TW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpCiAgICAgICAgIHZpZGVvR3Jhdml0
eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOwogICAgIGVsc2UK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNzEsMzcgKzE3MSwzNyBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0
eShXZWJWaWRlb0Z1bGxzY3JlZQogICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7CiB9CiAKLWNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+
JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVz
KCkKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBu
YW1lcyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8QXRvbWljU3RyaW5nPiB7IGV2ZW50TmFt
ZXMoKS5yZXNpemVFdmVudCB9KTsKICAgICByZXR1cm4gbmFtZXM7CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFtZUFs
bCgpCitjb25zdCBBdG9taWNTdHJpbmcmIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpldmVudE5hbWVBbGwoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKICAgICByZXR1cm4gc0V2ZW50TmFtZUFs
bDsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQogewogICAgIGlmIChtX3ZpZGVvRWxl
bWVudCkKICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh2aWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjphZGRDbGllbnQoVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fY2xpZW50cy5j
b250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpyZW1vdmVDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQm
IGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAg
ICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fdmlk
ZW9FbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTIsNyArMjEyLDcgQEAgYm9v
bCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OnNldEhhc1ZpZGVvKGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRIYXNWaWRlbyhib29sIGhhc1ZpZGVvKQogewogICAgIGlm
IChoYXNWaWRlbyA9PSBtX2hhc1ZpZGVvKQogICAgICAgICByZXR1cm47CkBAIC0yMjMsNyArMjIz
LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlk
ZW8oYm9vbCBoYXNWaWRlbykKICAgICAgICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQobV9oYXNW
aWRlbyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNl
dFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRGltZW5zaW9ucyhjb25z
dCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBpZiAobV92aWRlb0RpbWVuc2lv
bnMgPT0gdmlkZW9EaW1lbnNpb25zKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCnJlbmFtZSB0byBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aAppbmRleCBhYjM3ZDRlNTYzMS4uOWZjZDdiNGJjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oCkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKICNpbmNsdWRl
ICJUaW1lci5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4K
ICNpbmNsdWRlIDxvYmpjL29iamMuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAt
NTEsMjYgKzUxLDI2IEBAIGNsYXNzIFN0cmluZzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgSW50UmVjdDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOworY2xhc3MgUGxheWJh
Y2tTZXNzaW9uTW9kZWw7CiBjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25DaGFuZ2VPYnNlcnZlcjsK
IAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQK
LSAgICA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHsKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0CisgICAgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlCisgICAgLCBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAs
IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiB7CiAKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBj
cmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQorICAgIHN0YXRpYyBSZWY8UGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25Nb2RlbCYg
bW9kZWwpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdChtb2RlbCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChtb2RlbCkpOwogICAgIH0KLSAgICB2aXJ0
dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpOwotICAgIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdCgpOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25N
b2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KIAotICAgIC8v
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgIC8vIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7
CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIC8vIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5n
ZWQoZG91YmxlKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1l
Q2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBvdmVy
cmlkZTsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBv
dmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRl
cm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1l
KSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKIApAQCAtODgsMTAgKzg4LDEwIEBAIHB1Ymxp
YzoKICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7
IHJldHVybiBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIFdF
QkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQoUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKIAogICAgIFJldGFpblB0cjxXZWJBVlBs
YXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29udHJvbGxlcjsKLSAgICBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51bGxwdHIgfTsKKyAgICBQbGF5YmFj
a1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51bGxwdHIgfTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQubW0KcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQppbmRleCAyN2QxNmRiMWVmNC4uOTViYTkwNWE3MDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KQEAgLTI1LDcgKzI1LDcgQEAKIAogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgogCiAjaWYgUExB
VEZPUk0oSU9TKQogI2lmIEhBVkUoQVZLSVQpCkBAIC0zMyw5ICszMyw5IEBACiAjaW1wb3J0ICJB
VktpdFNQSS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25P
cHRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0ICJUaW1l
UmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJBVlBsYXllckNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+
CkBAIC00OCw3ICs0OCw3IEBAIFNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1
ZVRpbWluZykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwmIG1vZGVsKQorUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKICAg
ICA6IG1fcGxheWVyQ29udHJvbGxlcihhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFs
bG9jXSBpbml0XSkpCiAgICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKIHsKQEAg
LTY4LDcgKzY4LDcgQEAgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OldlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2UKICAgICB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQobW9kZWwud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQoKSk7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKQorUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpCiB7CiAgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6bnVsbHB0cl07CiAgICAgW21fcGxheWVy
Q29udHJvbGxlciBzZXRFeHRlcm5hbFBsYXliYWNrQWN0aXZlOmZhbHNlXTsKQEAgLTc2LDEyICs3
NiwxMiBAQCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6fldlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0KCkKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCit2b2lkIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpyZXNldE1lZGlhU3RhdGUoKQogewogICAgIFttX3Bs
YXllckNvbnRyb2xsZXIgcmVzZXRNZWRpYVN0YXRlXTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUg
ZHVyYXRpb24pCiB7CiAgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVy
ID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwogCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVy
YXRpb24pCiAgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJT
dGF0dXNSZWFkeVRvUGxheTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hv
clRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjdXJyZW50VGltZUNo
YW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKICAgICBOU1Rp
bWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW21fcGxheWVyQ29udHJvbGxlciByYXRlXSA/
IE5BTiA6IGFuY2hvclRpbWU7CiAgICAgQVZWYWx1ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFs
dWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCkBA
IC0xMDYsNyArMTA2LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG8KICAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldFRpbWluZzp0aW1pbmddOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpidWZmZXJlZFRpbWVDaGFuZ2Vk
KGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7CiAgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5
ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwogICAgIGRvdWJsZSBkdXJh
dGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uOwpAQCAtMTE4LDEyICsxMTgs
MTIgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YnVmZmVyZWRUaW1l
Q2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQogICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVk
VGltZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFsaXplZEJ1ZmZlcmVkVGltZSldOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKIHsK
ICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJhY2tSYXRl
IDogMC5dOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVr
YWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxh
c3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJh
bmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBk
YXRlSW50ZXJ2YWwpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBzZWVrYWJsZVJh
bmdlcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0xNDAs
NyArMTQwLDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2Fi
bGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHQKICAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldExpdmVVcGRhdGVJbnRlcnZhbDpsaXZlVXBkYXRlSW50ZXJ2YWxdOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFu
Z2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJz
ZSkKIHsKICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldENhblNjYW5CYWNrd2FyZDpjYW5QbGF5
RmFzdFJldmVyc2VdOwogfQpAQCAtMTU2LDcgKzE1Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3RpCiAgICAgcmV0dXJuIHdlYk9wdGlvbnM7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwogICAg
IFttX3BsYXllckNvbnRyb2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0
aW9ucy5nZXQoKV07CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFYK
ICAgICAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50QXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+
KHNlbGVjdGVkSW5kZXgpXV07CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKICAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9u
cy5nZXQoKV07CkBAIC0xNzIsMTIgKzE3MiwxMiBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdAog
ICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihzZWxlY3RlZEluZGV4KV1dOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBjb25z
dCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBjb25z
dCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCiB7CiAgICAgQVZQbGF5ZXJDb250cm9sbGVy
RXh0ZXJuYWxQbGF5YmFja1R5cGUgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRy
b2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZU5vbmU7Ci0gICAgaWYgKHRhcmdldFR5cGUgPT0gV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5KQorICAgIGlmICh0YXJnZXRU
eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSkKICAgICAgICAg
ZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNr
VHlwZUFpclBsYXk7Ci0gICAgZWxzZSBpZiAodGFyZ2V0VHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6VGFyZ2V0VHlwZVRWT3V0KQorICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCkKICAgICAgICAgZXh0ZXJuYWxQbGF5
YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0Owog
CiAgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJD
b250cm9sbGVyLmdldCgpOwpAQCAtMTg2LDE3ICsxODYsMTcgQEAgdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVk
LCBXZWIKICAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFi
bGVkOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChib29sIGRpc2FibGVkKQogewogICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0QWxsb3dz
RXh0ZXJuYWxQbGF5YmFjazohZGlzYWJsZWRdOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQogewogICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0TXV0ZWQ6bXV0ZWRdOwogfQogCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQogewogICAgIGlmICghbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApzaW1pbGFy
aXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKaW5kZXggNGFjNzA0
N2FiNzIuLjEyNzcxMDNjMzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMzEsOCAr
MzEsOCBAQAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50RW51bXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmgi
CisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNpbmNsdWRlIDxvYmpjL29iamMu
aD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgpAQCAtNTcsMjcgKzU3LDI3IEBAIGNsYXNzIFN0cmluZzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEludFJlY3Q7CiBjbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOworY2xhc3Mg
VmlkZW9GdWxsc2NyZWVuTW9kZWw7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cjsKICAgICAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0IGZpbmFsCi0gICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQK
LSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBmaW5h
bAorICAgIDogcHVibGljIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMg
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gewogCiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Jik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiB3
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9CisgICAgc3RhdGljIFJlZjxW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Jik7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVv
RnVsbHNjcmVlbk1vZGVsKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOworICAg
IFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9
CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIC8vIFZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5n
ZWQoYm9vbCkgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFs
OworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXZpY2VOYW1lKSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiwgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmll
dyAqLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQKICAgICB9OwogCi0gICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsg
fQorICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWw7IH0KICAgICBib29sIHNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJl
YXNvbihFeGl0RnVsbFNjcmVlblJlYXNvbik7CiAgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBi
b29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fYWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOyB9CkBAIC0xMTcsMTggKzExNywxOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Jik7CiAgICAgdm9pZCBiZWdpblNlc3Npb24oKTsKICAgICB2b2lkIGVudGVyUGljdHVyZUluUGlj
dHVyZSgpOwogICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKICAgICB2b2lkIHdh
dGNoZG9nVGltZXJGaXJlZCgpOwogICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29u
dHJvbGxlcigpIGNvbnN0OwogCi0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogICAgIFJldGFpblB0
cjxXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IG1fcGxheWVyVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZTsKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5
ZXJWaWV3Q29udHJvbGxlcjsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbCB7IG51bGxwdHIgfTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlciogbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CisgICAgVmlk
ZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Cisg
ICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyIHsgbnVsbHB0ciB9OwogCiAgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCB3aGVuIGZ1bGxz
Y3JlZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2luZG93LgogICAgIFJldGFpblB0cjxV
SVdpbmRvdz4gbV93aW5kb3c7CkBAIC0xMzgsNyArMTM4LDcgQEAgcHJvdGVjdGVkOgogICAgIFJl
dGFpblB0cjxXZWJBVlBsYXllckxheWVyVmlldz4gbV9wbGF5ZXJMYXllclZpZXc7CiAgICAgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKICAgICBXVEY6OkZ1bmN0
aW9uPHZvaWQoYm9vbCk+IG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2s7Ci0gICAgUnVuTG9vcDo6
VGltZXI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1fd2F0Y2hkb2dUaW1lcjsK
KyAgICBSdW5Mb29wOjpUaW1lcjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV93YXRj
aGRvZ1RpbWVyOwogICAgIGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1f
ZXhpdENvbXBsZXRlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0Kc2ltaWxh
cml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggMTM1
Y2UzYjczYjAuLmY5MzIwZmRlMWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCkBAIC0y
MywyNSArMjMsMjQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotCiAjaW1wb3J0ICJjb25maWcu
aCIKIAogI2lmIFBMQVRGT1JNKElPUykKLQotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmgi
CiAKICNpZiBIQVZFKEFWS0lUKQogCiAjaW1wb3J0ICJBVktpdFNQSS5oIgogI2ltcG9ydCAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVj
a3MuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2ltcG9y
dCAiV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgotI2lt
cG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBvcnQgIldlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAj
aW1wb3J0IDxVSUtpdC9VSUtpdC5oPgogI2ltcG9ydCA8b2JqYy9tZXNzYWdlLmg+CiAjaW1wb3J0
IDxvYmpjL3J1bnRpbWUuaD4KQEAgLTkxLDE5ICs5MCwxOSBAQCBzdGF0aWMgY29uc3QgU2Vjb25k
cyBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsIHsgMV9zIH07CiBAY2xhc3MgV2ViQVZNZWRp
YVNlbGVjdGlvbk9wdGlvbjsKIAogQGludGVyZmFjZSBXZWJBVlBsYXllclZpZXdDb250cm9sbGVy
RGVsZWdhdGUgOiBOU09iamVjdCA8QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlX1dlYktp
dE9ubHk+IHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9m
dWxsc2NyZWVuSW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7CiB9Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7CitAcHJvcGVy
dHkgKGFzc2lnbikgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRl
cmZhY2U7CiAtIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9s
bGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29u
OihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVhc29uOwogQGVu
ZAogCiBAaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlCi0t
IChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQor
LSAoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKIHsK
ICAgICByZXR1cm4gX2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCk7CiB9CiAKLS0gKHZvaWQpc2V0
RnVsbHNjcmVlbkludGVyZmFjZTooV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1
bGxzY3JlZW5JbnRlcmZhY2UKKy0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKIHsKICAgICBfZnVs
bHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7CiB9CkBAIC0xMzksMTkgKzEz
OCwxOSBAQCAtICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyRGlkU3RvcFBpY3R1cmVJblBpY3R1
cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbAogICAgIHNlbGYuZnVsbHNjcmVlbkludGVy
ZmFjZS0+ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKIH0KIAotc3RhdGljIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiBjb252ZXJ0VG9FeGl0
RnVsbFNjcmVlblJlYXNvbihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFz
b24gcmVhc29uKQorc3RhdGljIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVs
bFNjcmVlblJlYXNvbiBjb252ZXJ0VG9FeGl0RnVsbFNjcmVlblJlYXNvbihBVlBsYXllclZpZXdD
b250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29uKQogewogICAgIHN3aXRjaCAocmVh
c29uKSB7CiAgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFz
b25Eb25lQnV0dG9uVGFwcGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkOworICAg
ICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVu
UmVhc29uOjpEb25lQnV0dG9uVGFwcGVkOwogICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxl
ckV4aXRGdWxsU2NyZWVuUmVhc29uRnVsbFNjcmVlbkJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0
dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNv
bjo6RnVsbFNjcmVlbkJ1dHRvblRhcHBlZDsKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RnVsbFNjcmVlbkJ1dHRvblRh
cHBlZDsKICAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNv
blBpY3R1cmVJblBpY3R1cmVTdGFydGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJlSW5QaWN0dXJl
U3RhcnRlZDsKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpF
eGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ7CiAgICAgY2FzZSBB
VlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaW5jaEdlc3R1cmVIYW5k
bGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4
aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1cmVIYW5kbGVkOworICAgICAgICByZXR1cm4g
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5j
aEdlc3R1cmVIYW5kbGVkOwogICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxs
U2NyZWVuUmVhc29uUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkOgotICAgICAgICByZXR1
cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29u
OjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ7CisgICAgICAgIHJldHVybiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRy
b2xTdG9wRXZlbnRSZWNlaXZlZDsKICAgICB9CiB9CiAKQEAgLTE3MSw3ICsxNzAsNyBAQCBAZW5k
CiBAaW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXIgOiBDQUxheWVyCiBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluKSBOU1N0cmluZyAqdmlkZW9HcmF2aXR5OwogQHByb3BlcnR5IChub25hdG9t
aWMsIGdldHRlcj1pc1JlYWR5Rm9yRGlzcGxheSkgQk9PTCByZWFkeUZvckRpc3BsYXk7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dCogZnVsbHNjcmVlbkludGVyZmFjZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9s
bGVyOwogQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgQ0FMYXllciAqdmlkZW9TdWJsYXll
cjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBudWxsYWJsZSkgTlNEaWN0aW9uYXJ5ICpw
aXhlbEJ1ZmZlckF0dHJpYnV0ZXM7CkBAIC0xODAsNyArMTc5LDcgQEAgQHByb3BlcnR5IENHUmVj
dCBtb2RlbFZpZGVvTGF5ZXJGcmFtZTsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkFWUGxh
eWVyTGF5ZXIgewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
X2Z1bGxzY3JlZW5JbnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsKICAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJD
b250cm9sbGVyPiBfYXZQbGF5ZXJDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxDQUxheWVyPiBf
dmlkZW9TdWJsYXllcjsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF92aWRlb0dyYXZpdHk7CkBA
IC0yMDMsMTIgKzIwMiwxMiBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKLS0gKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50
ZXJmYWNlCistIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVy
ZmFjZQogewogICAgIHJldHVybiBfZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKTsKIH0KIAotLSAo
dm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCopZnVsbHNjcmVlbkludGVyZmFjZQorLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNl
OihWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQogewog
ICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKIH0KQEAgLTMx
MSwxMyArMzEwLDEzIEBAIC0gKHZvaWQpc2V0VmlkZW9HcmF2aXR5OihOU1N0cmluZyAqKXZpZGVv
R3Jhdml0eQogICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5IGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0OworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkgZ3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3Q7CiAgICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVy
VmlkZW9HcmF2aXR5UmVzaXplKCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgICAgICBncmF2aXR5ID0g
V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKICAgICBp
ZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSkK
LSAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwogICAgIGVsc2UgaWYgKHZp
ZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpKQot
ICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7CisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKICAgICBlbHNl
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIApAQCAtNDkwLDM1ICs0ODksMzUg
QEAgc3RhdGljIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICphbGxvY1dlYkFWUGxheWVyTGF5ZXJWaWV3
SW5zdGFuY2UoKQogICAgIHJldHVybiAoV2ViQVZQbGF5ZXJMYXllclZpZXcgKilbdGhlQ2xhc3Mg
YWxsb2NdOwogfQogCi1SZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKK1JlZjxWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZShQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQog
ewotICAgIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0g
YWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChwbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UpKTsKKyAgICBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQo
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7CiAgICAgW2ludGVyZmFjZS0+bV9wbGF5ZXJWaWV3
Q29udHJvbGxlckRlbGVnYXRlIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJmYWNlLnB0cigp
XTsKICAgICByZXR1cm4gaW50ZXJmYWNlOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKK1ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogICAgIDog
bV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogICAg
ICwgbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXZWJBVlBsYXllclZp
ZXdDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdKSkKLSAgICAsIG1fd2F0Y2hkb2dUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6d2F0Y2hkb2dUaW1lckZpcmVkKQorICAgICwgbV93YXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1h
aW4oKSwgdGhpcywgJlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVy
RmlyZWQpCiB7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp+V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKQorVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCiB7CiAgICAgV2ViQVZQbGF5ZXJD
b250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxlcigpOwog
ICAgIGlmIChwbGF5ZXJDb250cm9sbGVyICYmIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5
YmFja0FjdGl2ZSkKLSAgICAgICAgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZmFsc2UsIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSwgIiIpOworICAgICAgICBleHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChmYWxzZSwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVO
b25lLCAiIik7CiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKLVdlYkFWUGxheWVy
Q29udHJvbGxlciAqV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRy
b2xsZXIoKSBjb25zdAorV2ViQVZQbGF5ZXJDb250cm9sbGVyICpWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6cGxheWVyQ29udHJvbGxlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5ZXJDb250cm9sbGVyKCk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVvRnVsbHNjcmVlbk1vZGVs
KiBtb2RlbCkKIHsKICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKQEAgLTUzMiwxOCArNTMx
LDE4IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjCiAgICAgdmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+dmlkZW9E
aW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKIHsKICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQog
ewogICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsK
ICAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEhhc1ZpZGVvOmhhc1ZpZGVvXTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2
aWRlb0RpbWVuc2lvbnMpCiB7CiAgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAo
V2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CiAKQEAg
LTU1NywxNCArNTU2LDE0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2CiAgICAgW3BpcFZpZXcg
c2V0TmVlZHNMYXlvdXRdOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlLCBjb25zdCBTdHJpbmcmKQogewogICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRk
ZW46ZW5hYmxlZF07CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKIHsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJl
Y29tZUFjdGl2ZSglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlz
KTsKICAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdy
b3VuZCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwt
PmlzVmlzaWJsZSgpKSB7CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0
dXJlSW5QaWN0dXJlXTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTczLDcgKzU3Miw3IEBAIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0
aXZlKCkKICAgICAvLyBJZiB3ZSBhcmUgYm90aCBpbiBQaVAgYW5kIGluIEZ1bGxzY3JlZW4gKGku
ZS4sIHZpYSBhdXRvLVBpUCksIGFuZCB3ZSBkaWQgbm90IHN0b3AgZnVsbHNjcmVlbiB1cG9uIHJl
dHVybmluZywgaXQgbXVzdCBiZQogICAgIC8vIGJlY2F1c2UgdGhlIG9yaWdpbmF0aW5nIHZpZXcg
aXMgbm90IHZpc2libGUsIHNvIGhpZGUgdGhlIGZ1bGxzY3JlZW4gd2luZG93LgogICAgIGlmIChp
c01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQg
fCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0
dXJlKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJv
dGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CiAgICAgICAgICAgICBbbV93aW5k
b3cgc2V0SGlkZGVuOllFU107CiAgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
dmlld10gc2V0SGlkZGVuOllFU107CkBAIC01ODksMTAgKzU4OCwxMCBAQCBAaW50ZXJmYWNlIFVJ
Vmlld0NvbnRyb2xsZXIgKCkKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHNldHRlcj1f
c2V0SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOikgQk9PTCBfaWdub3JlQXBwU3VwcG9y
dGVkT3JpZW50YXRpb25zOwogQGVuZAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiB2aWRlb1ZpZXcsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmVQbGF5YmFjaykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVw
RnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5p
dGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNr
KQogewogICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZU5vbmUpOwotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVs
bHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4o
JXApIiwgdGhpcyk7CiAKICAgICBtX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayA9IGFs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsKIApAQCAtNjU4LDE2ICs2NTcsMTYgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKFVJVmll
dyYgdmlkZW9WaWV3LCBjb25zdAogCiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIAotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNl
dHVwRnVsbHNjcmVlbigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhp
cyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogCiAgICAgbV9leGl0Q29tcGxldGVkID0gZmFs
c2U7CiAgICAgbV9leGl0UmVxdWVzdGVkID0gZmFsc2U7CkBAIC02ODEsOSArNjgwLDkgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSgpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoKQogewotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVy
ZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CiAg
ICAgCiAgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZVBv
c3NpYmxlXSkKICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RhcnRQaWN0dXJlSW5Q
aWN0dXJlXTsKQEAgLTY5MSwxMCArNjkwLDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSgpCiAgICAgICAgIGZhaWxlZFRvU3Rh
cnRQaWN0dXJlSW5QaWN0dXJlKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKIHsKLSAgICBMT0coRnVs
bHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3Jl
ZW5TdGFuZGFyZCglcCkiLCB0aGlzKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoJXAp
IiwgdGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOwogCiAgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGlj
dHVyZUluUGljdHVyZUFjdGl2ZV0pIHsKICAgICAgICAgLy8gTk9URTogVGhlIGZ1bGxzY3JlZW4g
bW9kZSB3aWxsIGJlIHJlc3RvcmVkIGluIHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdp
dGhDb21wbGV0aW9uSGFuZGxlcigpLgpAQCAtNzA1LDcgKzcwNCw3IEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKIAogICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21w
bGV0aW9uSGFuZGxlcjpbdGhpcywgcHJvdGVjdGVkVGhpc10gKEJPT0wgc3VjY2VlZGVkLCBOU0Vy
cm9yKikgewogICAgICAgICBVTlVTRURfUEFSQU0oc3VjY2VlZGVkKTsKLSAgICAgICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXApIC0gc3VjY2VlZGVkKCVzKSIsIHRoaXMsIGJvb2xTdHJp
bmcoc3VjY2VlZGVkKSk7CisgICAgICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkIC0gbGFtYmRhKCVwKSAtIHN1
Y2NlZWRlZCglcykiLCB0aGlzLCBib29sU3RyaW5nKHN1Y2NlZWRlZCkpOwogICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKIAogICAg
ICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCkBAIC03MTMsNyArNzEyLDcgQEAg
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3Rh
bmRhcmQoKQogICAgIH1dOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCiB7CiAgICAgbV93YXRjaGRvZ1RpbWVyLnN0b3Ao
KTsKIApAQCAtNzI0LDcgKzcyMyw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3Jl
ZW4oJXApIiwgdGhpcyk7CiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5
YmFja0NvbnRyb2xzOk5PXTsKICAgICAKICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6ZmluYWxSZWN0IHRvVmlldzpbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOwpAQCAtNzM5LDE0ICs3MzgsMTQg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmkKICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpO
T107CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJl
XTsKICAgICB9IGVsc2UgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNv
bXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsK
ICAgICAgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVTdGFuZGFyZCk7CiAgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsK
ICAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJl
XTsKICAgICAgICAgfV07CiAgICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1h
dGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5T
RXJyb3IqKSB7CiAgICAgICAgICAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwogCkBAIC03NzIs
OSArNzcxLDkgQEAgQGludGVyZmFjZSBVSVdpbmRvdyAoKQogLSAoVUlJbnRlcmZhY2VPcmllbnRh
dGlvbilpbnRlcmZhY2VPcmllbnRhdGlvbjsKIEBlbmQKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQogewotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVu
KCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogICAgIGlmIChtX3dpbmRv
dykgewogICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CiAgICAgICAgIFttX3dpbmRv
dyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bmlsXTsKQEAgLTgwOSw3ICs4MDgsNyBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCiAgICAg
bV9lbnRlclJlcXVlc3RlZCA9IGZhbHNlOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjppbnZhbGlkYXRlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmludmFsaWRhdGUoKQogewogICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7
CiAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7CkBAIC04MTcsNyArODE2LDcg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCiAg
ICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKIHsK
ICAgICBpZiAoIW1fZW50ZXJSZXF1ZXN0ZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTgyNSwyMCAr
ODI0LDIwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RI
aWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQogICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBM
T0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogCiAgICAgW21fd2luZG93IHNldEhpZGRl
bjpZRVNdOwogICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVT
XTsKIAotICAgIGlmICh3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgewotICAgICAgICB3ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5wYXVzZSgpOworICAgIGlmIChwbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgeworICAgICAgICBwbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlTm9uZSk7CiAgICAgfQogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25z
dCBJbnRSZWN0JiBpbmxpbmVSZWN0KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYg
aW5saW5lUmVjdCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApIC0gdmlzaWJsZSglcyki
LCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApIC0g
dmlzaWJsZSglcykiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpKTsKICAgICBpZiAobV9wcmVw
YXJlVG9JbmxpbmVDYWxsYmFjaykgewogICAgICAgICAKICAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmlubGluZVJl
Y3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CkBAIC04
NDgsMzMgKzg0NywzMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpw
cmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjbwogICAgIH0KIH0KIAotYm9v
bCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxseVNob3dW
aWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25z
dAogewogICAgIHJldHVybiBbcGxheWVyQ29udHJvbGxlcigpIGlzUGxheWluZ10gJiYgbV9tb2Rl
ID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkICYm
IHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlv
bjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChib29s
KT4mJiBjYWxsYmFjaykKIHsKICAgICBtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayk7CiAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQogICAgICAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFy
dFBpY3R1cmVJblBpY3R1cmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgl
cCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwogICAgIHNldE1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0
YXJ0UGljdHVyZUluUGljdHVyZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgl
cCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CiAgICAgbV9zaG91
bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dy
b3VuZF07CiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRy
b2xzOllFU107CiAKICAgICBpZiAobV9tb2RlICYgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHsKICAgICAgICAgaWYgKCFbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRd
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFu
ZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CiAgICAgICAgICAg
ICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogICAgICAgICAgICAgICAgIFtbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKQEAgLTg4OSw5ICs4ODgsOSBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJ
blBpY3R1cmUoKQogICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJG
dWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKIHsKLSAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0
YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVy
ZSglcCkiLCB0aGlzKTsKICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXli
YWNrQ29udHJvbHM6WUVTXTsKIAogICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKQEAgLTkwNiwxMiArOTA1LDEyIEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCkKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxz
Y3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBp
Y3R1cmVJblBpY3R1cmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2ls
bFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKIHsKICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOwogICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVu
QWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxzZTsKIAotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVy
ZSglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CiAgICAgaWYg
KGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRh
cmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTkyMiw5ICs5MjEsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKQogICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKIHsK
LSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpk
aWRTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSgl
cCkiLCB0aGlzKTsKICAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVy
ZUluUGljdHVyZVN0b3ApIHsKICAgICAgICAgLy8gQVNTVU1QVElPTjogd2UgYXJlIGV4aXRpbmcg
cGlwIGJlY2F1c2Ugd2UgYXJlIGVudGVyaW5nIGZ1bGxzY3JlZW4KICAgICAgICAgY2xlYXJNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1
cmUpOwpAQCAtOTQzLDkgKzk0Miw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKICAgICAgICAgbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhD
b21wbGV0aW9uSGFuZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQp
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJ
blBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQgKF5jb21wbGV0aW9uSGFuZGxl
cikoQk9PTCByZXN0b3JlZCkpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENv
bXBsZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdp
dGhDb21wbGV0aW9uSGFuZGxlciglcCkiLCB0aGlzKTsKICAgICBpZiAobV9zaG91bGRSZXR1cm5U
b0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgfHwgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5B
ZnRlckVudGVyaW5nRm9yZWdyb3VuZCkgewogICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNj
cmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVs
bHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gZmFsc2U7CkBAIC05NjQsMTYgKzk2Mywx
NiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGlj
dHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKICAgICBSZXRhaW5QdHI8aWQ+IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVy
ID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwogICAgIGZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZShbcHJvdGVjdGVkVGhpcywgc3Ryb25nQ29tcGxldGlvbkhhbmRsZXJdKGJv
b2wgcmVzdG9yZWQpICB7Ci0gICAgICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21w
bGV0aW9uSGFuZGxlciBsYW1iZGEoJXApIC0gcmVzdG9yZWQoJXMpIiwgcHJvdGVjdGVkVGhpcy5n
ZXQoKSwgYm9vbFN0cmluZyhyZXN0b3JlZCkpOworICAgICAgICBMT0coRnVsbHNjcmVlbiwgIlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0
b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIgbGFtYmRhKCVwKSAtIHJlc3RvcmVkKCVzKSIsIHByb3Rl
Y3RlZFRoaXMuZ2V0KCksIGJvb2xTdHJpbmcocmVzdG9yZWQpKTsKICAgICAgICAgdm9pZCAoXmNv
bXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSA9IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVy
LmdldCgpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN0b3JlZCk7CiAgICAgfSk7CiB9
CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxs
c2NyZWVuV2l0aFJlYXNvbihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1
bGxTY3JlZW5SZWFzb24gcmVhc29uKQorYm9vbCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCiB7CiAgICAgaWYgKCFtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4Nyw4ICs5ODYsOCBA
QCBib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVsbHNj
cmVlbldpdGhSZWFzb24oV2ViVmlkZW9GdQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBpZiAod2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiAocmVhc29uID09IEV4aXRGdWxs
U2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkIHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVl
blJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkKSkKLSAgICAgICAgd2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKKyAgICBpZiAocGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSAmJiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVk
IHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVu
dFJlY2VpdmVkKSkKKyAgICAgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKICAg
ICAKICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSwgcmVhc29uID09IEV4
aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkKTsKIApAQCAtOTk4LDE1ICs5OTcs
MTUgQEAgYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2hvdWxkRXhpdEZ1
bGxzY3JlZW5XaXRoUmVhc29uKFdlYlZpZGVvRnUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5P
X1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OndhdGNoZG9nVGltZXJGaXJlZCgpCitOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoKQogewotICAg
IExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNo
ZG9nVGltZXJGaXJlZCglcCkgLSBubyBleGl0IGZ1bGxzY3JlZW4gcmVzcG9uc2UgaW4gJWdzOyBm
b3JjaW5nIGZ1bGxzY3JlZW4gaGlkZGVuLiIsIHRoaXMsIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50
ZXJ2YWwudmFsdWUoKSk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCVwKSAtIG5vIGV4aXQgZnVsbHNjcmVlbiBy
ZXNwb25zZSBpbiAlZ3M7IGZvcmNpbmcgZnVsbHNjcmVlbiBoaWRkZW4uIiwgdGhpcywgZGVmYXVs
dFdhdGNoZG9nVGltZXJJbnRlcnZhbC52YWx1ZSgpKTsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CiAgICAgW1ttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsK
ICAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9
IG1fbW9kZSB8IG1vZGU7CiAgICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQpAQCAtMTAxNyw3ICsx
MDE2LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHMKICAgICAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOwogICAgIGlmIChtX21vZGUgPT0gbmV3TW9k
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRy
b2xsZXIuaAppbmRleCBlNWNmZjEyYmJhZi4uMWIxMGZiYTBkNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgKQEAgLTI4LDgg
KzI4LDggQEAKICNpbXBvcnQgIkFWS2l0U1BJLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKK2NsYXNzIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0OwogfQogCiBAaW50ZXJmYWNlIFdlYkFWTWVkaWFTZWxlY3Rp
b25PcHRpb24gOiBOU09iamVjdApAQCAtNDQsOCArNDQsOCBAQCBjbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDsKIH0KIAogQHByb3BlcnR5IChyZXRhaW4pIEFWUGxheWVyQ29u
dHJvbGxlciogcGxheWVyQ29udHJvbGxlclByb3h5OwotQHByb3BlcnR5IChhc3NpZ24pIFdlYkNv
cmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBkZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAoYXNzaWdu
KSBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCogcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlOworQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsKiBkZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdCogcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogCiBAcHJvcGVy
dHkgKHJlYWRvbmx5KSBCT09MIGNhblNjYW5Gb3J3YXJkOwogQHByb3BlcnR5IEJPT0wgY2FuU2Nh
bkJhY2t3YXJkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFW
UGxheWVyQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBs
YXllckNvbnRyb2xsZXIubW0KaW5kZXggNmJmYzVjYTFhYTIuLjg1MDMwNmFjMTVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIu
bW0KQEAgLTMxLDkgKzMxLDkgQEAKIAogI2ltcG9ydCAiQVZLaXRTUEkuaCIKICNpbXBvcnQgIkxv
Z2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1w
b3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2lt
cG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAj
aW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCmluZGV4IGViYzlhNjc2NjQxLi4yNjg0
ZGRkYjJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCkBAIC0zMSwxMyArMzEs
MTMgQEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRp
b24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0
ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgogI2ltcG9ydCAiUXVhcnR6Q29y
ZVNQSS5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5o
IgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQg
IldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCisjaW1wb3J0ICJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmgi
CiAjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJ
Vmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KQEAgLTkyLDI0ICs5MiwyNCBA
QCBzdGF0aWMgSW50UmVjdCBlbGVtZW50UmVjdEluV2luZG93KEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvRWxlbWVudCkKICAgICByZXR1cm4gdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhy
ZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiB9CiAKLWNsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ7CiAKIEBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAo
ZGVsZWdhdGUpCi0tKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjooV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQqKWNvbnRleHQ7CistKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjoo
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQ7CiBAZW5kCiAKLWNsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0IGZpbmFsCi0gICAgOiBwcml2YXRl
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgLCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Ci0gICAgLCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyCi0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0gICAgLCBwcml2YXRl
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHsKK2NsYXNzIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0IGZpbmFsCisgICAgOiBwcml2YXRlIFZpZGVv
RnVsbHNjcmVlbk1vZGVsCisgICAgLCBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
CisgICAgLCBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisgICAgLCBwcml2
YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisgICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHsKIAogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQpOwogICAgIH0KIAogICAgIHZvaWQgc2V0Q29udHJvbGxlcihXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyKiBjb250cm9sbGVyKSB7IG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
IH0KQEAgLTExOSwyMiArMTE5LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFsaWRhdGUoKTsK
IAogcHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCgpIHsg
fQorICAgIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkgeyB9CiAKLSAgICAvLyBX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIC8vIFZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyCiAgICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgfQogICAgIHZvaWQgZGlkRXhp
dEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlk
ZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLy8gVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQKICAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBvdmVy
cmlkZTsKICAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikg
b3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAotICAgIHZvaWQgYWRk
Q2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsK
KyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50KFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVDbGllbnQoUGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHBsYXkoKSBvdmVy
cmlkZTsKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB0b2dnbGVQbGF5U3Rh
dGUoKSBvdmVycmlkZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9n
Z2xlTXV0ZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwogCi0g
ICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAvLyBQbGF5YmFja1Nlc3Np
b25Nb2RlbENsaWVudAogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSkgb3ZlcnJpZGU7CkBAIC0xNzksMzkgKzE3OSwzOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIGF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKICAgICB2b2lk
IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVy
cmlkZTsKICAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29s
KSBvdmVycmlkZTsKICAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKIAotICAg
IC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIC8vIFZpZGVvRnVs
bHNjcmVlbk1vZGVsCisgICAgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhN
ZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9h
dFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRl
b0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBvdmVycmlk
ZTsKICAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlOwogICAgIEZs
b2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzTXV0
ZWQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEhhc2hTZXQ8V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQqPiBtX3BsYXliYWNrQ2xpZW50czsKLSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50Kj4gbV9mdWxsc2NyZWVuQ2xpZW50czsKLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1faW50ZXJmYWNlOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbV9mdWxsc2NyZWVuTW9kZWw7Ci0gICAg
UmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtX3BsYXliYWNrTW9k
ZWw7CisgICAgSGFzaFNldDxQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fcGxheWJhY2tD
bGllbnRzOworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2Z1bGxz
Y3JlZW5DbGllbnRzOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
bV9pbnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
PiBtX2Z1bGxzY3JlZW5Nb2RlbDsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ+IG1fcGxheWJhY2tNb2RlbDsKICAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4g
bV92aWRlb0VsZW1lbnQ7CiAgICAgUmV0YWluUHRyPFVJVmlldz4gbV92aWRlb0Z1bGxzY3JlZW5W
aWV3OwogICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyPiBtX2NvbnRy
b2xsZXI7CiB9OwogCi0jcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIKKyNwcmFnbWEgbWFyayBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVu
KCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4g
dmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSBbbV92aWRlb0Z1bGxzY3JlZW5WaWV3IGxheWVyXTsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhp
cywgdmlkZW9GdWxsc2NyZWVuTGF5ZXJdIHsKICAgICAgICAgW3ZpZGVvRnVsbHNjcmVlbkxheWVy
IHNldEJhY2tncm91bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3Bh
cmVudCldOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5
ZXIodmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CkBA
IC0yMjIsMTAgKzIyMiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwt
PnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAg
ICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90
ZWN0ZWRUaGlzLCB0aGlzXSB7CkBAIC0yMzUsMTUgKzIzNSwxNSBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCiAgICAgfSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBG
dWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENs
ZWFudXBGdWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBtX2lu
dGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0cik7Ci0gICAgbV9pbnRl
cmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKG51bGxwdHIpOworICAg
IG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxscHRyKTsKKyAgICBtX2lu
dGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIobnVsbHB0cik7CiAgICAg
bV9pbnRlcmZhY2UgPSBudWxscHRyOwogICAgIG1fdmlkZW9GdWxsc2NyZWVuVmlldyA9IG5pbDsK
IAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlz
LCB0aGlzXSB7CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihuaWwpOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51
bGxwdHIpOwpAQCAtMjU2LDEwICsyNTYsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQogICAgIH0pOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhp
c10gewogICAgICAgICBJbnRSZWN0IGNsaWVudFJlY3QgPSBlbGVtZW50UmVjdEluV2luZG93KG1f
dmlkZW9FbGVtZW50LmdldCgpKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNsaWVudFJlY3RdIHsKQEAgLTI2
OCwxMiArMjY4LDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCiAgICAgfSk7CiB9CiAKLSNwcmFnbWEgbWFy
ayBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorI3ByYWdtYSBtYXJrIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogewog
ICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIGR1cmF0aW9uXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5k
dXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwogICAgICAgICB9KTsKQEAgLTI4NCwxMCArMjg0LDEw
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hh
bmdlZChkb3VibGUgZHVyYXRpb24pCiAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1
cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUp
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5n
ZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKICAgICBpZiAoV2Vi
VGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKICAgICAgICAg
fSk7CkBAIC0yOTgsMTAgKzI5OCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLAogICAgICAg
ICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGlt
ZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKIHsK
ICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtwcm90ZWN0ZWRUaGlzLCBidWZmZXJlZFRpbWVdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKICAgICAgICAgfSk7CkBAIC0z
MTIsMTAgKzMxMiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbQogICAgICAgICBjbGllbnQt
PmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZs
b2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAg
aWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJv
dGVjdGVkVGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKICAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKICAgICAgICAg
fSk7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheQogICAgICAg
ICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJv
b2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNW
aWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50
KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBoYXNWaWRlb10g
ewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+aGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsK
ICAgICAgICAgfSk7CkBAIC0zNDAsMTAgKzM0MCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKICAgICAg
ICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQoaGFzVmlkZW8pOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0
IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVv
RGltZW5zaW9ucykKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0Rp
bWVuc2lvbnNdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnZpZGVvRGltZW5zaW9uc0No
YW5nZWQodmlkZW9EaW1lbnNpb25zKTsKICAgICAgICAgfSk7CkBAIC0zNTQsMTAgKzM1NCwxMCBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZQogICAgICAgICBjbGllbnQtPnZpZGVvRGltZW5zaW9u
c0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMm
IHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVS
YW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9k
aWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQogewogICAgIGlmIChXZWJUaHJl
YWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMs
IHBsYXRmb3JtVGltZVJhbmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCksIGxhc3RNb2RpZmllZFRp
bWUsIGxpdmVVcGRhdGVJbnRlcnZhbF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2Vl
a2FibGVSYW5nZXNDaGFuZ2VkKFRpbWVSYW5nZXM6OmNyZWF0ZShwbGF0Zm9ybVRpbWVSYW5nZXMp
LCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogICAgICAgICB9KTsKQEAg
LTM2OCwxMCArMzY4LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzCiAgICAgICAgIGNsaWVu
dC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHRpbWVSYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxp
dmVVcGRhdGVJbnRlcnZhbCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVy
c2UpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJl
dmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQogewogICAgIGlmIChXZWJUaHJl
YWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMs
IGNhblBsYXlGYXN0UmV2ZXJzZV0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y2FuUGxh
eUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOwogICAgICAgICB9KTsKQEAg
LTM5MSwxMCArMzkxLDEwIEBAIHN0YXRpYyBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGlz
b2xhdGVkQ29weShjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpCiAgICAgcmV0dXJuIG9w
dGlvbnNDb3B5OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewot
ICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIG9wdGlvbnMgPSBpc29sYXRl
ZENvcHkob3B0aW9ucyksIHNlbGVjdGVkSW5kZXhdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KTsKICAgICAgICAgfSk7CkBAIC00MDUsMTAgKzQwNSwxMCBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQoY29ucwogICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKFdlYlRo
cmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhp
cywgb3B0aW9ucyA9IGlzb2xhdGVkQ29weShvcHRpb25zKSwgc2VsZWN0ZWRJbmRleF0gewogICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiAgICAgICAgIH0pOwpAQCAtNDE5LDcgKzQxOSw3
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvCiAgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKIHsK
ICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0aGlzLCBlbmFibGVkLCB0eXBlLCBs
b2NhbGl6ZWREZXZpY2VOYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZS5pc29sYXRlZENvcHkoKV0g
ewpAQCAtNDMzLDEwICs0MzMsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLAogICAgICAgICBj
bGllbnQtPmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERl
dmljZU5hbWUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1
cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGRpc2Fi
bGVkXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwogICAgICAgICB9KTsKQEAgLTQ0NywxMCArNDQ3LDEw
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChiCiAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRl
ZCkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBtdXRlZF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+bXV0ZWRDaGFuZ2VkKG11dGVkKTsKICAgICAgICAgfSk7CkBAIC00NjEsMzQgKzQ2MSwzNCBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5nZWQo
Ym9vbCBtdXRlZCkKICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0ZWQpOwogfQogCi0j
cHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyNwcmFnbWEgbWFyayBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCghbV9mdWxsc2NyZWVuQ2xpZW50
cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9mdWxsc2NyZWVuQ2xpZW50cy5hZGQoJmNsaWVu
dCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92
ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fZnVsbHNjcmVlbkNsaWVudHMu
Y29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fZnVsbHNjcmVlbkNsaWVudHMucmVtb3ZlKCZjbGll
bnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1
ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlh
XSB7CiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVsbHNj
cmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobW9kZSwgZmluaXNoZWRXaXRoTWVkaWEp
OwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IGZyYW1lKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
IFJldGFpblB0cjxDQUxheWVyPiB2aWRlb0Z1bGxzY3JlZW5MYXllciA9IFttX3ZpZGVvRnVsbHNj
cmVlblZpZXcgbGF5ZXJdOwogICAgIAogICAgIFt2aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRTdWJs
YXllclRyYW5zZm9ybTpbdmlkZW9GdWxsc2NyZWVuTGF5ZXIgdHJhbnNmb3JtXV07CkBAIC01MDgs
MTA1ICs1MDgsMTA1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgZnJhbWUpCiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5KQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHko
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkpCiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIHZpZGVvR3Jhdml0eV0gewogICAgICAgICBpZiAo
bV9mdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0Vmlk
ZW9MYXllckdyYXZpdHkodmlkZW9HcmF2aXR5KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtw
cm90ZWN0ZWRUaGlzLCB0aGlzLCBtb2RlXSB7CiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2Rl
bCkKICAgICAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQo
bW9kZSk7CiAgICAgfSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwog
ICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVlbk1vZGVsLT5pc1Zpc2li
bGUoKSA6IGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpoYXNWaWRlbygpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpoYXNWaWRlbygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAg
cmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9mdWxsc2NyZWVuTW9kZWwtPmhhc1ZpZGVvKCkg
OiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
aXNNdXRlZCgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpp
c011dGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4g
bV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5pc011dGVkKCkgOiBmYWxzZTsKIH0K
IAotRmxvYXRTaXplIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0Rp
bWVuc2lvbnMoKSBjb25zdAorRmxvYXRTaXplIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0Ojp2aWRlb0RpbWVuc2lvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVlbk1vZGVsLT52aWRl
b0RpbWVuc2lvbnMoKSA6IEZsb2F0U2l6ZSgpOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbAorI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uTW9kZWwKIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNs
aWVudCkKIHsKICAgICBBU1NFUlQoIW1fcGxheWJhY2tDbGllbnRzLmNvbnRhaW5zKCZjbGllbnQp
KTsKICAgICBtX3BsYXliYWNrQ2xpZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQp
CiB7CiAgICAgQVNTRVJUKG1fcGxheWJhY2tDbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAg
ICBtX3BsYXliYWNrQ2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6cGxheSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRo
aXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJh
Y2tNb2RlbC0+cGxheSgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpwYXVzZSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAg
ICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+
cGF1c2UoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMs
IHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxh
eWJhY2tNb2RlbC0+dG9nZ2xlUGxheVN0YXRlKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKCkKIHsKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihb
cHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAg
ICAgICAgICAgbV9wbGF5YmFja01vZGVsLT50b2dnbGVNdXRlZCgpOwogICAgIH0pOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZChib29sIG11
dGVkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TXV0ZWQoYm9v
bCBtdXRlZCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBXZWJUaHJlYWRSdW4o
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpLCB0aGlzLCBtdXRlZF0gewpAQCAtNjE1
LDE1MSArNjE1LDE1MSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZXRNdXRlZChib29sIG11dGVkKQogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZygpCiB7CiAgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3By
b3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAg
ICAgICAgIG1fcGxheWJhY2tNb2RlbC0+YmVnaW5TY3J1YmJpbmcoKTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZygpCiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJh
Y2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZW5kU2NydWJiaW5nKCk7CiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
ZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlz
LCB0aGlzLCB0aW1lXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAg
ICBtX3BsYXliYWNrTW9kZWwtPnNlZWtUb1RpbWUodGltZSk7CiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1l
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWsoZG91Ymxl
IHRpbWUpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIHRpbWVdIHsKICAgICAg
ICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZmFz
dFNlZWsodGltZSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKIHsKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihb
cHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAg
ICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNj
YW5uaW5nQmFja3dhcmQoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhp
c10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFj
a01vZGVsLT5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAg
ICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmVuZFNjYW5uaW5nKCk7CiAgICAgfSk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAgIEFT
U0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFk
UnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBpbmRleF0gewogICAgICAgICBpZiAobV9wbGF5YmFj
a01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWxlY3RBdWRpb01lZGlhT3B0
aW9uKGluZGV4KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBp
bmRleF0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5
YmFja01vZGVsLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOwogICAgIH0pOwogfQog
Ci1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKCkg
Y29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb24o
KSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXli
YWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmR1cmF0aW9uKCkgOiAwOwogfQogCi1kb3VibGUg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1lKCkgY29uc3QK
K2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWUoKSBj
b25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNr
TW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwOwogfQogCi1kb3VibGUg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0
Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZSgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJh
Y2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+YnVmZmVyZWRUaW1lKCkgOiAwOwogfQogCi1ib29s
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcoKSBjb25zdAor
Ym9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNQbGF5aW5nKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVs
ID8gbV9wbGF5YmFja01vZGVsLT5pc1BsYXlpbmcoKSA6IGZhbHNlOwogfQogCi1mbG9hdCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheWJhY2tSYXRlKCkgY29uc3QKK2Zs
b2F0IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5YmFja1JhdGUoKSBjb25z
dAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9k
ZWwgPyBtX3BsYXliYWNrTW9kZWwtPnBsYXliYWNrUmF0ZSgpIDogMDsKIH0KIAotUmVmPFRpbWVS
YW5nZXM+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdl
cygpIGNvbnN0CitSZWY8VGltZVJhbmdlcz4gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
ICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5zZWVrYWJsZVJh
bmdlcygpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGlt
ZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWth
YmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwt
PnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7CiB9CiAKLWRvdWJsZSBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGl2ZVVwZGF0ZUludGVydmFsKCkg
Y29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGl2ZVVwZGF0
ZUludGVydmFsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1
cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5saXZlVXBkYXRlSW50ZXJ2YWwo
KSA6IDA7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNh
blBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmNh
blBsYXlGYXN0UmV2ZXJzZSgpIDogZmFsc2U7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCkgY29uc3QKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBpZiAobV9wbGF5YmFja01v
ZGVsKQpAQCAtNzY3LDEzICs3NjcsMTMgQEAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGUKICAgICBy
ZXR1cm4geyB9OwogfQogCi11aW50NjRfdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAordWludDY0X3QgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVs
ID8gbV9wbGF5YmFja01vZGVsLT5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIDogLTE7CiB9CiAK
LVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAorVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7CiAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKQEAgLTc4MSwzMSArNzgxLDMxIEBAIFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmxlZ2libGVNZWRpYVNlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdWludDY0X3QgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdAordWludDY0X3QgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFk
KCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmxlZ2li
bGVNZWRpYVNlbGVjdGVkSW5kZXgoKSA6IC0xOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Citib29s
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrRW5hYmxl
ZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxh
eWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSA6
IGZhbHNlOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKK1BsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlKCkgOiBUYXJnZXRUeXBlTm9uZTsKIH0KIAotU3RyaW5nIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVk
RGV2aWNlTmFtZSgpIGNvbnN0CitTdHJpbmcgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5
YmFja01vZGVsLT5leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIDogU3RyaW5n
KCk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8g
bV9wbGF5YmFja01vZGVsLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIDogdHJ1ZTsK
QEAgLTgxMywxNiArODEzLDE2IEBAIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKIAogI3ByYWdtYSBt
YXJrIE90aGVyCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFVJVmlldyAqdmll
dywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZp
ZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBVSVZpZXcgKnZpZXcsIEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgUmV0YWluUHRyPFVJVmlldz4gdmlld1JlZiA9IHZpZXc7CiAgICAgbV92aWRl
b0VsZW1lbnQgPSAmdmlkZW9FbGVtZW50OwotICAgIG1fcGxheWJhY2tNb2RlbCA9IFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICBtX3BsYXliYWNrTW9k
ZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CiAgICAgbV9w
bGF5YmFja01vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwogICAgIG1fcGxheWJhY2tNb2RlbC0+c2V0
TWVkaWFFbGVtZW50KG1fdmlkZW9FbGVtZW50LmdldCgpKTsKIAotICAgIG1fZnVsbHNjcmVlbk1v
ZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOworICAg
IG1fZnVsbHNjcmVlbk1vZGVsID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNy
ZWF0ZSgpOwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwogICAgIG1f
ZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwog
CkBAIC04MzIsMTUgKzgzMiwxNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZQogICAgIEZsb2F0
UmVjdCB2aWRlb0xheWVyRnJhbWUgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB2aWRlb0VsZW1l
bnRDbGllbnRSZWN0LnNpemUoKSk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5
ZXJGcmFtZSh2aWRlb0xheWVyRnJhbWUpOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywg
dGhpcywgdmlkZW9FbGVtZW50Q2xpZW50UmVjdCwgdmlld1JlZiwgbW9kZSwgYWxsb3dzUGljdHVy
ZUluUGljdHVyZV0gewogICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKIAotICAgICAgICBS
ZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHNlc3Npb25JbnRlcmZhY2UgPSBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCp0aGlzKTsKLSAgICAgICAg
bV9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKHNl
c3Npb25JbnRlcmZhY2UuZ2V0KCkpOwotICAgICAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7Ci0gICAgICAgIG1faW50ZXJmYWNlLT5zZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKLSAgICAgICAgbV9pbnRlcmZhY2UtPnNldFdl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOworICAgICAgICBSZWY8UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHNlc3Npb25JbnRlcmZhY2UgPSBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UgPSBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKHNlc3Npb25JbnRlcmZhY2UuZ2V0
KCkpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIodGhpcyk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0
aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKHRoaXMpOwogCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuVmlldyA9IGFkb3B0TlMoW2Fs
bG9jVUlWaWV3SW5zdGFuY2UoKSBpbml0XSk7CiAgICAgICAgIApAQCAtODQ4LDI1ICs4NDgsMjUg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2Ny
ZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGUKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VS
VChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCBpc01haW5UaHJlYWQoKSk7CiAgICAgSW50UmVjdCBj
bGllbnRSZWN0ID0gZWxlbWVudFJlY3RJbldpbmRvdyhtX3ZpZGVvRWxlbWVudC5nZXQoKSk7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY2xpZW50UmVjdF0gewogICAgICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICAgICAgbV9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVu
KGNsaWVudFJlY3QpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4o
KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIG1faW50ZXJmYWNlLT5yZXF1ZXN0
SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IF9jb250ZXh0OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gX2NvbnRleHQ7CiAgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IF92aWRl
b0VsZW1lbnQ7CiB9CiAKQEAgLTg5MSw3ICs4OTEsNyBAQCAtIChIVE1MVmlkZW9FbGVtZW50Kil2
aWRlb0VsZW1lbnQKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2aWV3IG1vZGU6
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSltb2RlCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBfY29udGV4dCA9IFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpjcmVhdGUoKTsKKyAgICBfY29udGV4dCA9IFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjcmVhdGUoKTsKICAgICBfY29udGV4dC0+c2V0Q29udHJv
bGxlcihzZWxmKTsKICAgICBfY29udGV4dC0+c2V0VXBGdWxsc2NyZWVuKCpfdmlkZW9FbGVtZW50
LmdldCgpLCB2aWV3LCBtb2RlKTsKIH0KQEAgLTkwOSw3ICs5MDksNyBAQCAtICh2b2lkKXJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4KICAgICAgICAgX2NvbnRleHQtPnJlcXVlc3RIaWRlQW5k
RXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAotLSAodm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dAorLSAodm9pZClkaWRGaW5p
c2hGdWxsc2NyZWVuOihWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dAog
ewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CiAgICAgQVNTRVJUX1VOVVNFRChj
b250ZXh0LCBjb250ZXh0ID09IF9jb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaApzaW1pbGFy
aXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaAppbmRleCBiODEyNGMxZTFi
Zi4uNWI4MTJkYTZkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgKQEAgLTI4LDggKzI4LDggQEAK
ICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKIAog
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgi
CisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM4
LDIxICszOCwyMSBAQCBPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWw7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKIAotY2xhc3MgV0VCQ09SRV9F
WFBPUlQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIGZpbmFsCi0gICAgOiBwdWJsaWMg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYz4geworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjIGZpbmFsCisgICAgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisg
ICAgLCBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBSZWZD
b3VudGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBjcmVhdGUoV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwmKTsKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMoKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9CisgICAgc3RhdGlj
IFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25N
b2RlbCYpOworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYygpOworICAg
IFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZQorICAgIC8vIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgZmluYWwgeyB9CiAKLSAgICAvLyBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLypjdXJy
ZW50VGltZSovLCBkb3VibGUgLyphbmNob3JUaW1lKi8pIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAvKmlzUGxheWluZyovLCBmbG9hdCAvKnBsYXliYWNr
UmF0ZSovKSBmaW5hbDsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJ
bmRleCovKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxl
ZCAqLywgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
LCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVk
ICovLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNv
bnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgZmluYWw7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVu
c3VyZUNvbnRyb2xzTWFuYWdlcigpOwpAQCAtNzMsOCArNzMsOCBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKTsKIAogcHJpdmF0ZToKLSAgICBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKLSAgICBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51bGxwdHIg
fTsKKyAgICBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uTW9kZWwm
KTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51
bGxwdHIgfTsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAgICAg
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgIHsg
bnVsbHB0ciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQpzaW1pbGFyaXR5IGluZGV4IDc3JQpy
ZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLm1tCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCmluZGV4IDhiNDRhNjFjNTBlLi41OWVmMjIzMDY5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
aCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgogCiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAKQEAgLTMyLDkgKzMy
LDkgQEAKICNpbXBvcnQgIkludFJlY3QuaCIKICNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9u
LmgiCiAjaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwu
aCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KIAogI2ltcG9ydCAiQ29yZU1lZGlh
U29mdExpbmsuaCIKQEAgLTQ2LDI0ICs0NiwyNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjPiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZShXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbCYgbW9kZWwpCitSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZShQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9k
ZWwpCiB7Ci0gICAgYXV0byBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYyhtb2RlbCkpOworICAgIGF1dG8gaW50ZXJmYWNlID0gYWRvcHRSZWYo
Km5ldyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMobW9kZWwpKTsKICAgICBtb2RlbC5hZGRD
bGllbnQoaW50ZXJmYWNlKTsKICAgICByZXR1cm4gaW50ZXJmYWNlOwogfQogCi1XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwp
CiAgICAgOiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKIHsKIH0KIAotV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCkK
K1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YygpCiB7CiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQog
ewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01h
bmFnZXIoKTsKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCiAjZW5kaWYKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3Vi
bGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJs
ZSBhbmNob3JUaW1lKQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKICAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxh
eUJhY2tDb250cm9sc01hbmFnZXIoKTsKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRp
bWUsIGRvdWIKICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywg
ZmxvYXQgcGxheWJhY2tSYXRlKQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKICAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2Vy
ID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKQEAgLTEwMiwxNyArMTAyLDE3IEBAIHZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjpiZWdpblNjcnViYmluZygpCiB7CiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQogICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKG1f
cGxheWJhY2tTZXNzaW9uTW9kZWwgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGlt
ZSgpIDogMCwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdLCAwLCBm
YWxzZSk7CiAjZW5kaWYKLSAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5iZWdpblNjcnVi
YmluZygpOworICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmJlZ2luU2NydWJiaW5nKCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbmRTY3J1YmJpbmcoKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuZFNjcnViYmluZygpCiB7Ci0gICAg
d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7CisgICAgcGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7CiB9CiAKICNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gdGltZVJhbmdlc1RvQXJyYXkoY29uc3QgVGltZVJhbmdlcyYgdGlt
ZVJhbmdlcykKIH0KICNlbmRpZgogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRv
dWJsZSwgZG91YmxlKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUsIGRvdWJs
ZSkKIHsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAgICAgW3Bs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnRpbWVSYW5nZXNU
b0FycmF5KHRpbWVSYW5nZXMpLmdldCgpXTsKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRp
bWVSYW5nZXMmIHRpbQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCiAgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJ
bnRlZ2VyPihzZWxlY3RlZEluZGV4KV07CkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChjb25zdCBWZWMKICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKICAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8
TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAjaWYgRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIFtwbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4XTsKQEAgLTE2
OCw3ICsxNjgsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9N
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZQogI2VuZGlmCiB9CiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkKIHsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
CiAgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9u
SW5kZXg6c2VsZWN0ZWRJbmRleF07CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdAogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
IGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJikKIHsKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01B
TkFHRVIpCiAgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0Q2FuVG9nZ2xlUGljdHVy
ZUluUGljdHVyZTohZW5hYmxlZF07CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCwgV2ViUGwKICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6aW52YWxpZGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6aW52YWxp
ZGF0ZSgpCiB7CiAgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQogICAgICAgICByZXR1
cm47CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OmludmFsaWRhdGUoKQogICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRyOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNN
YW5hZ2VyKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbnN1cmVDb250cm9s
c01hbmFnZXIoKQogewogI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
ICAgICBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwpAQCAtMjA0LDEyICsyMDQsMTIgQEAgdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigp
CiAKICNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAKLVdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyICpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnBsYXlC
YWNrQ29udHJvbHNNYW5hZ2VyKCkKK1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkKIHsKICAgICBy
ZXR1cm4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyICptYW5hZ2VyKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
ICptYW5hZ2VyKQogewogICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgPSBtYW5hZ2VyOwog
CkBAIC0yMzAsMTMgKzIzMCwxMyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cgogICAgIFttYW5h
Z2VyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Npb25Nb2Rl
bC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRp
Y19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNl
bGVjdGVkSW5kZXgoKSldOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6dXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6dXBkYXRlUGxheWJhY2tDb250cm9s
c01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91
YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpCiB7CiAgICAgV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwogICAgIGlm
ICghbWFuYWdlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwgKm1vZGVsID0gd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKKyAgICBQbGF5YmFja1Nlc3Np
b25Nb2RlbCAqbW9kZWwgPSBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpOwogICAgIGlmICghbW9kZWwp
CiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCnNpbWlsYXJpdHkgaW5kZXgg
NjclCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCmluZGV4IGE4NTFiMmNlM2EyLi4xYzc0Yjg0
OGZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9W
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaApAQCAtMjgsOSArMjgsOSBAQAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogCiAjaW5jbHVkZSAi
SFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbmNs
dWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5j
bHVkZSAiVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KQEAgLTQxLDMxICs0MSwzMSBAQCBPQkpDX0NMQVNTIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hY09iakM7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwogY2xh
c3MgRmxvYXRTaXplOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwotY2xh
c3MgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7CitjbGFzcyBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKIAot
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCi0gICAg
OiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHByaXZhdGUgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4geworY2xhc3MgV0VCQ09SRV9FWFBPUlQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjCisgICAgOiBwdWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQKKyAgICAsIHByaXZhdGUgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1
YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gewogCiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IGNyZWF0ZShX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkK
KyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gY3JlYXRlKFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KSk7CiAgICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygp
OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB3ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBt
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwqKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ciogd2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2Vi
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIqKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKTsKKyAg
ICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogdmlkZW9GdWxsc2NyZWVuTW9kZWwoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwq
IHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CisgICAg
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIHZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7IH0KKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudAorICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVy
cmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wgIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKIAotICAg
IC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLy8gVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29s
KSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
Y29uc3QgRmxvYXRTaXplJikgZmluYWw7CiAKQEAgLTkzLDEwICs5MywxMCBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyAqdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpOwogCiBwcml2YXRlOgotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmKTsKLSAg
ICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBtX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCB7IG51bGxwdHIgfTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciog
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgeyBudWxscHRyIH07CisgICAgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYpOworICAgIFJlZjxQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwor
ICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0
ciB9OworICAgIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlciB7IG51bGxwdHIgfTsKICAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSB9OwogICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWNPYmpDPiBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakM7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMubW0Kc2ltaWxhcml0eSBpbmRleCA2OCUKcmVuYW1lIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQpyZW5h
bWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5tbQppbmRleCA5MmU2NDJjOGVjMC4uODE0MGUzOWNiYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5tbQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgiCisjaW1wb3J0ICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQogCkBAIC0zMywxMSArMzMsMTEgQEAKICNpbXBvcnQgIkxv
Z2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgogI2ltcG9ydCAiUElQ
U1BJLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKICNpbXBvcnQg
IlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgi
CisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2ltcG9ydCAiV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZU
aW1lLmg+CiAKICNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCkBAIC05NCw3ICs5NCw3IEBA
IGVudW0gY2xhc3MgUElQU3RhdGUgewogfTsKIAogQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWNPYmpDIDogTlNPYmplY3QgPFBJUFZpZXdDb250cm9sbGVyRGVsZWdhdGUs
IFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB7Ci0gICAgV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjKiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwor
ICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyogX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzsKICAgICBOU1NpemUgX3ZpZGVvRGltZW5zaW9uczsKICAgICBSZXRhaW5Q
dHI8UElQVmlld0NvbnRyb2xsZXI+IF9waXBWaWV3Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8
TlNWaWV3Q29udHJvbGxlcj4gX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXI7CkBAIC0xMDcs
NyArMTA3LDcgQEAgQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpD
IDogTlNPYmplY3QgPFBJUFZpZXdDb250cm9sbGVyRGVsZWcKICAgICBCT09MIF9leGl0aW5nVG9T
dGFuZGFyZEZ1bGxzY3JlZW47CiB9CiAKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzooV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjKil3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYyopdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwogLSAodm9pZClp
bnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlOwogLSAodm9pZClpbnZhbGlkYXRlOwogCkBAIC0xMzQs
MTIgKzEzNCwxMiBAQCBAc3ludGhlc2l6ZSB2aWRlb0RpbWVuc2lvbnM9X3ZpZGVvRGltZW5zaW9u
czsKIEBzeW50aGVzaXplIGRpZFJlcXVlc3RFeGl0aW5nUElQPV9kaWRSZXF1ZXN0RXhpdGluZ1BJ
UDsKIEBzeW50aGVzaXplIGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbj1fZXhpdGluZ1RvU3Rh
bmRhcmRGdWxsc2NyZWVuOwogCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yyopd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYyopdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCiB7CiAgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBfd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwor
ICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSB2aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM7CiAgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Ok5vdEluUElQOwogCiAgICAgcmV0dXJu
IHNlbGY7CkBAIC0xNjMsNyArMTYzLDcgQEAgLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0
YXRlCiAtICh2b2lkKWludmFsaWRhdGUKIHsKICAgICBbc2VsZiBpbnZhbGlkYXRlRnVsbHNjcmVl
blN0YXRlXTsKLSAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gbnVsbHB0cjsK
KyAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjID0gbnVsbHB0cjsKICAgICBfdmlkZW9E
aW1lbnNpb25zID0gTlNaZXJvU2l6ZTsKIH0KIApAQCAtMTkyLDggKzE5Miw4IEBAIC0gKHZvaWQp
c2V0VXBQSVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVj
dClmcmFtZSBpbldpbmRvCiAgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRVc2VyQ2FuUmVzaXpl
OllFU107CiAgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKICAg
ICBbc2VsZiBzZXRWaWRlb0RpbWVuc2lvbnM6TlNFcXVhbFNpemVzKF92aWRlb0RpbWVuc2lvbnMs
IE5TWmVyb1NpemUpID8gZnJhbWUuc2l6ZSA6IF92aWRlb0RpbWVuc2lvbnNdOwotICAgIGlmIChf
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVv
TGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVB
c3BlY3RGaWxsKTsKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQorICAgICAg
ICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5z
ZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0RmlsbCk7CiAKICAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gYWRvcHROUyhbW1dl
YlZpZGVvVmlld0NvbnRhaW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOwogICAgIFtf
dmlkZW9WaWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOnNlbGZdOwpA
QCAtMjQ3LDggKzI0Nyw4IEBAIC0gKHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29u
dGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDCiAKICAgICBBU1NFUlRf
VU5VU0VEKHZpZGVvVmlld0NvbnRhaW5lciwgdmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1Zp
ZXdDb250YWluZXIpOwogCi0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMg
JiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVy
IGJvdW5kc10pOworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAg
IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNl
dFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKIH0KIAogLSAo
dm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmll
d0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcgpAQCAtMjcyLDExICsyNzIsMTEgQEAgLSAo
Qk9PTClwaXBTaG91bGRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKIHsKICAgICBBU1NF
UlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CiAKLSAgICBpZiAoIV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgfHwgIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCisgICAgaWYgKCFf
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjIHx8ICFfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLT52aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpKQogICAgICAgICByZXR1cm4gWUVT
OwogCiAgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gWUVTOwotICAgIF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCktPmZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPnZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCktPmZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZSgpOwogCiAgICAgcmV0dXJuIE5POwogfQpAQCAtMjg1LDI4ICsyODUsMjggQEAg
LSAodm9pZClwaXBEaWRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKIHsKICAgICBBU1NF
UlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CiAKLSAgICBpZiAoX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpICYmIF92aWRlb1ZpZXdDb250YWluZXIg
JiYgX3JldHVybmluZ1dpbmRvdyAmJiAhTlNFcXVhbFJlY3RzKF9yZXR1cm5pbmdSZWN0LCBOU1pl
cm9SZWN0KSkgeworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgJiYgX3ZpZGVv
Vmlld0NvbnRhaW5lciAmJiBfcmV0dXJuaW5nV2luZG93ICYmICFOU0VxdWFsUmVjdHMoX3JldHVy
bmluZ1JlY3QsIE5TWmVyb1JlY3QpKSB7CiAgICAgICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgcnVu
QW5pbWF0aW9uR3JvdXA6XihOU0FuaW1hdGlvbkNvbnRleHQgKmNvbnRleHQpIHsKICAgICAgICAg
ICAgIGNvbnRleHQuYWxsb3dzSW1wbGljaXRBbmltYXRpb24gPSBOTzsKICAgICAgICAgICAgIFtf
dmlkZW9WaWV3Q29udGFpbmVyIHNldEZyYW1lOl9yZXR1cm5pbmdSZWN0XTsKLSAgICAgICAgICAg
IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KCktPnNldFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKLSAg
ICAgICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpOworICAgICAgICAgICAgX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1l
KFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOworICAgICAgICAgICAgX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdy
YXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7CiAK
ICAgICAgICAgICAgIFtbX3JldHVybmluZ1dpbmRvdyBjb250ZW50Vmlld10gYWRkU3Vidmlldzpf
dmlkZW9WaWV3Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxhdGl2
ZVRvOm5pbF07CiAgICAgICAgIH0gY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKICAgICB9CiAKLSAg
ICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYykgeworICAgIGlmIChfdmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjKSB7CiAgICAgICAgIGlmICghc2VsZi5pc0V4aXRpbmdUb1N0
YW5kYXJkRnVsbHNjcmVlbikgewotICAgICAgICAgICAgaWYgKFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpIHsKKyAgICAgICAgICAgIGlmIChWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCogdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBfdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKSB7CiAgICAgICAgICAgICAgICAgdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICAgICAgICAgICAgICB2aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7CisgICAgICAgICAgICAgICAgdmlkZW9GdWxs
c2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+Y2xlYXJNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAg
ICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CiAKLSAgICAg
ICAgaWYgKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBmdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgPSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcigpKQorICAgICAgICBpZiAoVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIqIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IF92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCiAgICAgICAgICAgICBm
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiAgICAgfQogfQpA
QCAtMzE1LDI2ICszMTUsMjYgQEAgLSAodm9pZClwaXBBY3Rpb25QbGF5OihQSVBWaWV3Q29udHJv
bGxlciAqKXBpcAogewogICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250
cm9sbGVyKTsKIAotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkp
Ci0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCktPnBsYXkoKTsKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgp
KQorICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25N
b2RlbCgpLT5wbGF5KCk7CiB9CiAKIC0gKHZvaWQpcGlwQWN0aW9uUGF1c2U6KFBJUFZpZXdDb250
cm9sbGVyICopcGlwCiB7CiAgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0Nv
bnRyb2xsZXIpOwogCi0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYg
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpKQorICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5wYXVzZSgpOwogfQogCiAtICh2b2lkKXBpcEFjdGlvblN0b3A6KFBJUFZpZXdD
b250cm9sbGVyICopcGlwCiB7CiAgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmll
d0NvbnRyb2xsZXIpOwogCi0gICAgaWYgKCFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
KQorICAgIGlmICghX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2Rl
bCA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkpCisgICAgaWYgKFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2Rl
bCA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkp
CiAgICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsLT5wYXVzZSgpOwogCiAgICAgLy8gRklYTUUg
MjUwOTYxNzA6IFNob3VsZCBhbmltYXRlIG9ubHkgaWYgdGhlIHBhZ2Ugd2l0aCB0aGUgdmlkZW8g
aXMgdW5vYnNjdXJlZC4gRm9yIG5vdywgYWx3YXlzIGNsb3NlIHdpdGhvdXQgYW5pbWF0aW9uLgpA
QCAtMzQ1LDI0ICszNDUsMjQgQEAgQGVuZAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KQorVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Up
CiAgICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UpCiB7Ci0gICAgQVNTRVJUKG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpKTsKLSAgICBhdXRvIG1vZGVsID0gbV9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgQVNTRVJUKG1fcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKTsKKyAgICBhdXRvIG1vZGVs
ID0gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CiAg
ICAgbW9kZWwtPmFkZENsaWVudCgqdGhpcyk7CiAgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMoKSB1cGRhdGVJc1BsYXlpbmc6bW9kZWwtPmlzUGxheWluZygpIG5ld1BsYXliYWNrUmF0
ZTptb2RlbC0+cGxheWJhY2tSYXRlKCldOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKQorVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCkKIHsKLSAgICBpZiAo
bV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0g
ICAgICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpLT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIGlmIChtX3BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnJlbW92ZUNsaWVudCgqdGhpcyk7CiAg
ICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCogbW9kZWwpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0Vmlk
ZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQogewogICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5yZW1vdmVDbGllbnQoKnRoaXMpOwpAQCAtMzcxLDEyICszNzEsMTIgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZp
ZGVvRnVsbHNjcmUKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0
aGlzKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKiBvYnNlcnZlcikKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciog
b2JzZXJ2ZXIpCiB7CiAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldE1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7CiAgICAgaWYgKG1fbW9kZSA9
PSBuZXdNb2RlKQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyCiAg
ICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21v
ZGUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYXJNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOwogICAgIGlm
IChtX21vZGUgPT0gbmV3TW9kZSkKQEAgLTM5OCwyNyArMzk4LDI3IEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZChtX21vZGUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywg
ZmxvYXQgcGxheWJhY2tSYXRlKQogewogICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpD
KCkgdXBkYXRlSXNQbGF5aW5nOmlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6cGxheWJhY2tSYXRl
XTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRy
b2xzTWFuYWdlcigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29u
dHJvbHNNYW5hZ2VyKCkKIHsKICAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+ZW5zdXJl
Q29udHJvbHNNYW5hZ2VyKCk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09i
akMgKldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQygpCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDICpWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKQogewogICAg
IGlmICghbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKQotICAgICAgICBtX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBhZG9wdE5TKFtbV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjT2JqQyBhbGxvY10gaW5pdFdpdGhXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6dGhpc10pOworICAgICAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMg
PSBhZG9wdE5TKFtbV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBhbGxvY10gaW5p
dFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6dGhpc10pOwogCiAgICAgcmV0dXJuIG1f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQy5nZXQoKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9z
dGVkVmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5k
b3csIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29s
IGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvbnN0
IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJl
SW5QaWN0dXJlUGxheWJhY2spCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbiglcCksIGluaXRpYWxSZWN0OnslZCwg
JWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCwgbW9kZTolZCIsIHRoaXMsIGluaXRpYWxSZWN0
LngoKSwgaW5pdGlhbFJlY3QueSgpLCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0aWFsUmVjdC5o
ZWlnaHQoKSwgcGFyZW50V2luZG93LCBtb2RlKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5pdGlhbFJlY3Q6
eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhpcywgaW5pdGlh
bFJlY3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxS
ZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUpOwogCiAgICAgVU5VU0VEX1BBUkFNKGFs
bG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7CiAgICAgQVNTRVJUKG1vZGUgPT0gSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CkBA
IC00MjcsMTYgKzQyNywxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
c2V0dXBGdWxsc2NyZWVuKE5TVmlldyYgbGF5ZXJIb3N0ZWRWaWV3LCBjbwogCiAgICAgW3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSBzZXRVcFBJUEZvclZpZGVvVmlldzombGF5ZXJIb3N0
ZWRWaWV3IHdpdGhGcmFtZTooTlNSZWN0KWluaXRpYWxSZWN0IGluV2luZG93OnBhcmVudFdpbmRv
d107CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHBy
b3RlY3RlZFRoaXModGhpcyk7CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIt
PmRpZFNldHVwRnVsbHNjcmVlbigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhp
cyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVu
dGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAogICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgewogICAg
ICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGVudGVyUElQXTsKQEAgLTQ1
MCw5ICs0NTAsOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJG
dWxsc2NyZWVuKCkKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpw
YXJlbnRXaW5kb3cpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxz
Y3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQog
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpl
eGl0RnVsbHNjcmVlbiglcCksIGZpbmFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5k
b3c6JXAiLCB0aGlzLCBmaW5hbFJlY3QueCgpLCBmaW5hbFJlY3QueSgpLCBmaW5hbFJlY3Qud2lk
dGgoKSwgZmluYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOworICAgIExPRyhGdWxsc2Ny
ZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbiglcCksIGZp
bmFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBmaW5hbFJl
Y3QueCgpLCBmaW5hbFJlY3QueSgpLCBmaW5hbFJlY3Qud2lkdGgoKSwgZmluYWxSZWN0LmhlaWdo
dCgpLCBwYXJlbnRXaW5kb3cpOwogCiAjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQogICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9s
c01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKQEAgLTQ2Nyw5ICs0Njcs
OSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW4o
Y29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOUwogICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6ZmluYWxSZWN0IGluV2luZG93
OnBhcmVudFdpbmRvd107CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhv
dXRBbmltYXRpb25Ub01vZGUoJXApLCBtb2RlOiVkIiwgdGhpcywgbW9kZSk7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0
aG91dEFuaW1hdGlvblRvTW9kZSglcCksIG1vZGU6JWQiLCB0aGlzLCBtb2RlKTsKIAogI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBbbV9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVy
ZUFjdGl2ZTpOT107CkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBpc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVl
biA9IG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQ7Ci0gICAgLy8gT24gTWFjLCBzdGFuZGFyZCBmdWxsc2NyZWVuIGlzIGhhbmRsZWQgYnkg
dGhlIEZ1bGxzY3JlZW4gQVBJIGFuZCBub3QgYnkgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci4K
KyAgICAvLyBPbiBNYWMsIHN0YW5kYXJkIGZ1bGxzY3JlZW4gaXMgaGFuZGxlZCBieSB0aGUgRnVs
bHNjcmVlbiBBUEkgYW5kIG5vdCBieSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLgogICAgIC8vIEp1
c3QgdXBkYXRlIG1fbW9kZSBkaXJlY3RseSB0byBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVTdGFuZGFyZCBpbiB0aGF0IGNhc2UgdG8ga2VlcAogICAgIC8vIG1fbW9k
ZSBpbiBzeW5jIHdpdGggdGhlIGZ1bGxzY3JlZW4gbW9kZSBpbiBIVE1MTWVkaWFFbGVtZW50Lgog
ICAgIGlmIChpc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikKQEAgLTQ4OSw5ICs0ODksOSBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRo
b3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZQogICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMgZXhpdFBJUF07CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpjbGVhbnVwRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQogewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKyAg
ICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1
bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAKICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDIGV4aXRQSVBdOwogICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMg
aW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07CkBAIC01MDAsOSArNTAwLDkgQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCkKICAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKIHsKLSAgICBMT0coRnVs
bHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSglcCki
LCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6aW52YWxpZGF0ZSglcCkiLCB0aGlzKTsKIAogICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwg
PSBuaWw7CiAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7CkBAIC01MjAsOSAr
NTIwLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCiB9CiAjZW5k
aWYKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2lu
ZG93ICpwYXJlbnRXaW5kb3cpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJl
cGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5l
UmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVw
KSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6
JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpLCBpbmxpbmVSZWN0LngoKSwgaW5saW5lUmVj
dC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5saW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50V2lu
ZG93KTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQs
ICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUp
LCBpbmxpbmVSZWN0LngoKSwgaW5saW5lUmVjdC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5s
aW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKIAogICAgIGlmICghdmlzaWJsZSkgewog
ICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwpAQCAt
NTMzLDMyICs1MzMsMzIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnMKICAgICBbbV93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClp
bmxpbmVSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQs
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29u
c3QgU3RyaW5nJikKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBMT0coRnVsbHNjcmVl
biwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5n
ZWQoJXApLCBlbmFibGVkOiVzIiwgdGhpcywgYm9vbFN0cmluZyhlbmFibGVkKSk7CisgICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKCVwKSwgZW5hYmxlZDolcyIsIHRoaXMsIGJvb2xTdHJpbmcoZW5hYmxlZCkpOwog
CiAgICAgaWYgKGVuYWJsZWQgJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCiAgICAgICAgIGV4aXRGdWxsc2NyZWVu
KEludFJlY3QoKSwgbmlsKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5n
ZWQoJXApOiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbykpOworICAgIExPRyhGdWxsc2Ny
ZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoJXApOiVz
IiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbykpOwogCiAgICAgaWYgKCFoYXNWaWRlbykKICAg
ICAgICAgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNp
emUmIHZpZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQog
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6JS4wZiwgaGVpZ2h0OiUuMGYiLCB0aGlz
LCB2aWRlb0RpbWVuc2lvbnMud2lkdGgoKSwgdmlkZW9EaW1lbnNpb25zLmhlaWdodCgpKTsKKyAg
ICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1l
bnNpb25zQ2hhbmdlZCglcCksIHdpZHRoOiUuMGYsIGhlaWdodDolLjBmIiwgdGhpcywgdmlkZW9E
aW1lbnNpb25zLndpZHRoKCksIHZpZGVvRGltZW5zaW9ucy5oZWlnaHQoKSk7CiAKICAgICAvLyBX
aWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSB6ZXJvIHdoZW4gd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJv
bSBvbmUgdmlkZW8gdG8gYW5vdGhlci4gSWdub3JlIHplcm8gdmFsdWVzLgogICAgIGlmICghdmlk
ZW9EaW1lbnNpb25zLmlzWmVybygpKQogICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDIHNldFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwogfQogCi1ib29s
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2Vk
RnVsbHNjcmVlbigpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aXNQ
bGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhh
c01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSkgJiYgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBp
c1BsYXlpbmddOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaAppbmRleCA3MDVkNjNiNDhhOS4uNzY3ZjAxMjg3
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW1wb3J0IDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIHN0cnVjdCBN
ZWRpYVNlbGVjdGlvbk9wdGlvbjsKIH0KIApAQCAtNTgsMTAgKzU4LDEwIEBAIFdFQkNPUkVfRVhQ
T1JUCiAgICAgZmxvYXQgX3JhdGU7CiAgICAgQk9PTCBfY2FuVG9nZ2xlUGxheWJhY2s7CiAKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM+IF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiB9CiAKLUBw
cm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMq
IHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJD
b3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqIHBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzsKIEBwcm9wZXJ0eSAocmVhZHdyaXRlKSBOU1RpbWVJbnRlcnZhbCBjb250ZW50RHVyYXRp
b247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFkd3JpdGUpIEFWVmFsdWVUaW1p
bmcgKnRpbWluZzsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1RpbWVJbnRlcnZhbCBzZWVrVG9U
aW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4IDdiNDRhMDc0ZGYyLi5hYmJkYjUyNzcyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlci5tbQpAQCAtMjksOCArMjksOCBAQAogI2lmIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCiAKICNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1w
b3J0ICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKLSNpbXBvcnQgIldlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
aCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDx3dGYvU29mdExp
bmtpbmcuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01OSw4ICs1OSw4
IEBAIEBzeW50aGVzaXplIGNhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmU7CiAKIC0gKHZvaWQpZGVh
bGxvYwogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQotICAgICAg
ICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFu
YWdlcihudWxscHRyKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAg
ICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01h
bmFnZXIobnVsbHB0cik7CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCkBAIC05Myw3ICs5Myw3
IEBAIC0gKHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZv
cmU6KE5TVGltZUludGVydmFsKXRvbGVyYW5jCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRvbGVyYW5j
ZUJlZm9yZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRvbGVyYW5jZUFmdGVyKTsKLSAgICBfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWVr
VG9UaW1lKHRpbWUpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPnNlZWtUb1RpbWUodGltZSk7CiB9CiAKIC0gKHZvaWQpY2FuY2VsVGh1
bWJuYWlsQW5kQXVkaW9BbXBsaXR1ZGVTYW1wbGVHZW5lcmF0aW9uCkBAIC0xMjUsMTIgKzEyNSwx
MiBAQCAtIChCT09MKWNhbkJlZ2luVG91Y2hCYXJTY3J1YmJpbmcKIAogLSAodm9pZCliZWdpblRv
dWNoQmFyU2NydWJiaW5nCiB7Ci0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
YmVnaW5TY3J1YmJpbmcoKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5iZWdp
blNjcnViYmluZygpOwogfQogCiAtICh2b2lkKWVuZFRvdWNoQmFyU2NydWJiaW5nCiB7Ci0gICAg
X3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+ZW5kU2NydWJiaW5nKCk7CisgICAgX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+ZW5kU2NydWJiaW5nKCk7CiB9CiAKICNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMzAwCkBAIC0xOTIsNyArMTkyLDcgQEAg
LSAodm9pZClzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOihBVlRv
dWNoQmFyTWVkaWFTZWxlY3Rpb25PcHQKICAgICBpZiAoYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
biAmJiBfYXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucykKICAgICAgICAgaW5kZXgg
PSBbX2F1ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMgaW5kZXhPZk9iamVjdDphdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uXTsKIAotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24o
aW5kZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4IDogVUlOVDY0X01BWCk7CisgICAgX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5UNjRfTUFYKTsKIH0K
IAogLSAoTlNBcnJheTxBVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24gKj4gKilsZWdpYmxl
VG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMKQEAgLTIyMiw3ICsyMjIsNyBAQCAtICh2b2lk
KXNldEN1cnJlbnRMZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbjooQVZUb3VjaEJh
ck1lZGlhU2VsZWN0aW9uTwogICAgIGlmIChsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb24gJiYg
X2xlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucykKICAgICAgICAgaW5kZXggPSBb
X2xlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucyBpbmRleE9mT2JqZWN0OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbl07CiAKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRp
b24oaW5kZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4IDogVUlOVDY0X01BWCk7CisgICAgX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgp
OwogfQogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDAKQEAg
LTI5Miw0NyArMjkyLDQ3IEBAIC0gKHZvaWQpc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6
KE5TVUludGVnZXIpc2VsZWN0ZWRJbmRleAogICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5
OkAiY3VycmVudExlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uIl07CiB9CiAKLS0g
KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjCistIChQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYwogewotICAgIHJldHVybiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LmdldCgpOworICAgIHJldHVybiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmdldCgpOwog
fQogCi0tICh2b2lkKXNldFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzooV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjKil3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKKy0g
KHZvaWQpc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOihQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMqKXBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYwogewotICAgIGlmIChfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjID09IHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YykKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9PSBwbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihudWxscHRyKTsKKyAgICBpZiAoX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CiAKLSAgICBfd2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjID0gd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPSBwbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM7CiAKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAg
ICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9s
c01hbmFnZXIoc2VsZik7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisg
ICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNN
YW5hZ2VyKHNlbGYpOwogfQogCiAtICh2b2lkKXRvZ2dsZVBsYXliYWNrCiB7Ci0gICAgaWYgKF93
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGxh
eVN0YXRlKCk7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAg
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9n
Z2xlUGxheVN0YXRlKCk7CiB9CiAKIC0gKHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nCiB7
Ci0gICAgaWYgKCFfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIHx8ICFfd2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgIGlm
ICghX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyB8fCAhX3BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Qk9PTCBpc0N1cnJlbnRseVBsYXlpbmcgPSBzZWxmLnBsYXlpbmc7CiAgICAgaWYgKCFpc0N1cnJl
bnRseVBsYXlpbmcgJiYgcGxheWluZykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOworICAgICAgICBfcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7
CiAgICAgZWxzZSBpZiAoaXNDdXJyZW50bHlQbGF5aW5nICYmICFwbGF5aW5nKQotICAgICAgICBf
d2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgp
LT5wYXVzZSgpOworICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwogfQogCiAtIChCT09MKWlzUGxheWluZwogewotICAg
IGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF93ZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIHJldHVy
biBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpLT5pc1BsYXlpbmcoKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAm
JiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQor
ICAgICAgICByZXR1cm4gX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNz
aW9uTW9kZWwoKS0+aXNQbGF5aW5nKCk7CiAKICAgICByZXR1cm4gTk87CiB9CkBAIC0zNDAsOCAr
MzQwLDggQEAgLSAoQk9PTClpc1BsYXlpbmcKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTMwMAogLSAodm9pZCl0b2dnbGVQaWN0dXJlSW5QaWN0dXJlCiB7Ci0gICAg
aWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9n
Z2xlUGljdHVyZUluUGljdHVyZSgpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjICYmIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDdkMmE2ZjI1YmZiLi5lMGNjNDJlZDM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNjEgQEAK
KzIwMTctMDctMjEgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSBXZWIgcHJlZml4IGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuIGFuZCBXZWJQbGF5YmFj
a1Nlc3Npb24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDQzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlbW92ZSByZWR1bmRhbnQgV2ViLSBwcmVmaXggZnJvbSBjbGFzc2VzIGluIFdl
YktpdCBuYW1lc3BhY2UuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5o
LgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YWRkQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyZW1vdmVDbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBhdXNlKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2lu
U2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnNlZWtUb1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY2FubmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRp
YU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVNdXRlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0TXV0ZWQpOgorICAgICAgICAo
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpk
dXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZh
c3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjptdXRlZENoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Ojp+UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldFVwUGxh
eWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRp
bWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpidWZmZXJlZFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQbGF5YmFj
a1Byb3BlcnRpZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om11dGVkQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZHVyYXRpb25DaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5
YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGF1c2UpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY3J1
YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVu
ZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKToKKyAgICAgICAg
KFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50
SUQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNvbnRy
b2xzTWFuYWdlckludGVyZmFjZSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmguCisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tLgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZSk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVj
b21lQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmFkZENsaWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZXF1ZXN0
RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoV2ViS2l0
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6aXNWaXNpYmxlKToK
KyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OmRpZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6flZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVu
aGFuY2VkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphZGRD
bGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQpOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lv
bnMpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVy
RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSk6CisgICAgICAg
IChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4p
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVk
VG9SZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2Vi
S2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRp
ZENsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzVmlzaWJs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVw
ZGF0ZU1lZGlhVG91Y2hCYXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjptX3dlYWtQdHJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXli
YWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbi4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW06IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpuZXh0Q29udGV4dElkKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
Y3VycmVudFRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGlt
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6flBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktp
dDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWwpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRVcFBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1lZGlhRWxlbWVudCk6CisgICAgICAg
IChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmR1cmF0aW9uQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmN1cnJlbnRUaW1lQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJ1ZmZlcmVkVGlt
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5
YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheSk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViS2l0OjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2li
bGVNZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZU11dGVkKToKKyAgICAgICAgKFdl
YktpdDo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0ZWQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaC4KKyAg
ICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2Nv
Y29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbS4KKyAgICAgICAg
KFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KToKKyAgICAgICAg
KFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGF5ZXJIb3N0aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ6Omhhc1ZpZGVvQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAgKFdl
YktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6flZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRl
cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVN
b2RlbEFuZEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmVuc3VyZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZW5zdXJlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZv
clZpZGVvRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omhhc1Zp
ZGVvQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbik6
CisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBGdWxs
c2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0Vmlk
ZW9MYXllckdyYXZpdHlFbnVtKToKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW06IFJlbW92ZWQu
CisKIDIwMTctMDctMjEgIEtvbnN0YW50aW4gVG9rYXJldiAgPGFubnVsZW5AeWFuZGV4LnJ1Pgog
CiAgICAgICAgIFtjbWFrZV1bTWFjXSBVbnJldmlld2VkLCBmaXggbGlua2luZyBXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFr
ZSBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAxOWI0MmY5ZGJhYi4u
YzUwYjQ2MTE2MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE1Miw4ICsxNTIs
OCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBXZWJQYXN0ZWJvYXJkUHJveHkgXAogICAg
IFdlYlBheW1lbnRDb29yZGluYXRvciBcCiAgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkg
XAotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgXAotICAgIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSBcCisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlciBcCisgICAgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5IFwKICAgICBXZWJQcm9jZXNzIFwKICAgICBXZWJQcm9jZXNz
Q29ubmVjdGlvbiBcCiAgICAgV2ViUHJvY2Vzc1Bvb2wgXApAQCAtMTY2LDggKzE2Niw4IEBAIE1F
U1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYlNvY2tldFN0cmVhbSBcCiAgICAgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyIFwKICAgICBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSBcCi0g
ICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBcCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5IFwKKyAgICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIFwKKyAgICBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkgXAogIwogCiBTQ1JJUFRTID0gXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggN2RhNGQ2MGM0ZDYuLjdkNDMy
ZDNiNTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0KQEAgLTEyNiwxMiArMTI2LDEyIEBACiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5LmgiCiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCIKICNpbXBvcnQg
IldLUERGVmlldy5oIgogI2ltcG9ydCAiV0tQYXNzd29yZFZpZXcuaCIKICNpbXBvcnQgIldLU2Ny
b2xsVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIK
LSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiX1dL
RHJhZ2dhYmxlRWxlbWVudEluZm9JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmlld1ByaW50
Rm9ybWF0dGVyLmgiCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaAppbmRleCA2YzMzYmU2NWE5OC4uMTU4MGY5NTc3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nl
c3Npb25Nb2RlbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENv
dW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CkBAIC00MCwzNSArNDAsMzUgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNp
ZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQuaD4KICNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oPgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCi10eXBlZGVmIFdlYkNvcmU6OldlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlOwordHlwZWRlZiBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCBQ
bGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKICNlbHNlCi10eXBlZGVmIFdlYkNvcmU6
OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZTsKK3R5cGVkZWYgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
IFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CiAKLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCBmaW5hbDogcHVibGljIFJlZkNvdW50ZWQ8
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgcHVibGljIFdlYkNvcmU6OldlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsICB7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQgZmlu
YWw6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIHB1Ymxp
YyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbCAgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgc3RhdGlj
IFJlZjxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dChtYW5h
Z2VyLCBjb250ZXh0SWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwogICAgIH0KLSAgICB2aXJ0
dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQoKSB7IH0KKyAgICB2aXJ0dWFsIH5Q
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQoKSB7IH0KIAogICAgIHZvaWQgaW52YWxpZGF0ZSgp
IHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwKLSAgICB2b2lkIGFkZENsaWVudChXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudCYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OldlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50JilmaW5hbDsKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbAor
ICAgIHZvaWQgYWRkQ2xpZW50KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikg
ZmluYWw7CisgICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQmKWZpbmFsOwogCiAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKTsKICAg
ICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUpOwpAQCAtODEsMjAgKzgxLDIwIEBAIHB1
YmxpYzoKICAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IGluZGV4KTsKICAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0
X3Qgc2VsZWN0ZWRJbmRleCk7CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZChib29sLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5n
ZWQoYm9vbCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
LCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
Q2hhbmdlZChib29sKTsKICAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKTsKIAogcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OworICAgIGZy
aWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7CiAKLSAgICBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBtYW5h
Z2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
KFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElk
KQogICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKICAgICAgICAgLCBtX2NvbnRleHRJZChj
b250ZXh0SWQpCiAgICAgewogICAgIH0KIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
CisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWwKICAgICB2b2lkIHBsYXkoKSBmaW5hbDsKICAg
ICB2b2lkIHBhdXNlKCkgZmluYWw7CiAgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsK
QEAgLTEyNywxNCArMTI3LDE0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOyB9CiAgICAgdWludDY0
X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsgfQogICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJs
ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkOyB9Ci0g
ICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZTsgfQorICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU7IH0KICAgICBTdHJpbmcg
ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOyB9CiAgICAgYm9vbCB3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fd2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7IH0KICAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX211dGVkOyB9CiAKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkqIG1fbWFuYWdlcjsKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIG1fbWFuYWdl
cjsKICAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CiAgICAgZG91YmxlIG1f
cGxheWJhY2tTdGFydGVkVGltZSB7IDAgfTsKICAgICBib29sIG1fcGxheWJhY2tTdGFydGVkVGlt
ZU5lZWRzVXBkYXRlIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9kdXJhdGlvbiB7IDAgfTsKQEAg
LTE1MiwzOCArMTUyLDM4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7CiAgICAgdWludDY0
X3QgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9OwogICAgIGJvb2wgbV9leHRlcm5h
bFBsYXliYWNrRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUg
eyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUgfTsKKyAgICBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgbV9leHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSB7IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSB9Owog
ICAgIFN0cmluZyBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOwogICAgIGJv
b2wgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X211dGVkIHsgZmFsc2UgfTsKIH07CiAKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4s
IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkm
KTsKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKTsKKyAgICBz
dGF0aWMgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQ
cm94eSYpOworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSgpOwogCiAg
ICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAgICBQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSogY29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCk7CisgICAgUGxhdGZvcm1QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpOwogICAgIHZvaWQg
cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CisgICAgZnJpZW5kIGNsYXNzIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OwogCi0gICAgZXhwbGljaXQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KFdl
YlBhZ2VQcm94eSYpOworICAgIGV4cGxpY2l0IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShX
ZWJQYWdlUHJveHkmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwogCi0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0
cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBSZWZQdHI8UGxhdGZvcm1XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxlOworICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBs
YXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKICAg
ICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCk7CiAgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgUGxhdGZvcm1XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgZW5zdXJl
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBhZGRDbGllbnRGb3JDb250
ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAKLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIKICAgICB2b2lkIHNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3Qg
Y29udGV4dElkKTsKICAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKICAg
ICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwpAQCAtMjAzLDcgKzIw
Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9u
c2UodWludDY0X3QsIFN0cmluZykgY29uc3Q7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKIAotICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIKKyAgICAvLyBNZXNzYWdlcyB0byBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyCiAgICAgdm9pZCBwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBwYXVzZSh1
aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNv
bnRleHRJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4Kc2lt
aWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCnJlbmFtZSB0byBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4KaW5kZXggZjYzNmE4MzI3M2UuLjNhYzhmNzlkMWIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMSw3ICsyMSw3IEBACiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkgeworbWVzc2FnZXMgLT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
IHsKICAgICBSZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQogICAgIEN1cnJlbnRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGhvc3RUaW1lKQogICAgIEJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgYnVmZmVyZWRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCnNpbWlsYXJpdHkg
aW5kZXggNDglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQpyZW5hbWUgdG8gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCmluZGV4IGRmOWQzM2Y5
ZmMwLi40MmMzOTllOGRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQpAQCAtMjQsMTMg
KzI0LDEzIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oIgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8
V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKQEAgLTM4LDM5ICszOCwzOSBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLSNwcmFnbWEgbWFyayAtIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dAorI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojph
ZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7CiAgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudCYgY2xpZW50KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJlbW92ZUNs
aWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCht
X2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVu
dCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KCkKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KCkKIHsKICAgICBpZiAobV9tYW5h
Z2VyKQogICAgICAgICBtX21hbmFnZXItPnBsYXkobV9jb250ZXh0SWQpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGF1c2UoKQordm9pZCBQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnBhdXNlKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBt
X21hbmFnZXItPnBhdXNlKG1fY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAg
ICAgICBtX21hbmFnZXItPnRvZ2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQogewogICAgIGlmICht
X21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+YmVnaW5TY3J1YmJpbmcobV9jb250ZXh0SWQp
OwpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
YmVnaW5TY3J1YmJpbmcoKQogICAgIG1faXNTY3J1YmJpbmcgPSB0cnVlOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY3J1YmJpbmcoKQogewogICAgIGlmIChtX21hbmFn
ZXIpCiAgICAgICAgIG1fbWFuYWdlci0+ZW5kU2NydWJiaW5nKG1fY29udGV4dElkKTsKQEAgLTg3
LDgwICs4Nyw4MCBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2Ny
dWJiaW5nKCkKICAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGlzUGxheWlu
ZygpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vla1RvVGlt
ZShkb3VibGUgdGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrVG9U
aW1lKGRvdWJsZSB0aW1lKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdl
ci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKIHsKICAgICBpZiAobV9t
YW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1fY29udGV4dElkLCB0aW1lKTsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdG
b3J3YXJkKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5n
Rm9yd2FyZCgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5iZWdp
blNjYW5uaW5nRm9yd2FyZChtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7CiAgICAgaWYgKG1f
bWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nQmFja3dhcmQobV9jb250
ZXh0SWQpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2Nh
bm5pbmcoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjYW5uaW5nKCkK
IHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmVuZFNjYW5uaW5nKG1f
Y29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNl
bGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25J
ZCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBv
cHRpb25JZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAg
ICAgICAgbV9tYW5hZ2VyLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9w
dGlvbklkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUoKQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRv
Z2dsZVBpY3R1cmVJblBpY3R1cmUoKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1f
bWFuYWdlci0+dG9nZ2xlUGljdHVyZUluUGljdHVyZShtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVNdXRlZCgpCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQogewogICAgIGlmIChtX21hbmFn
ZXIpCiAgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlTXV0ZWQobV9jb250ZXh0SWQpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZXRNdXRlZChib29sIG11dGVkKQog
ewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+c2V0TXV0ZWQobV9jb250
ZXh0SWQsIG11dGVkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFu
Z2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQogewogICAgIG1fcGxheWJhY2tTdGFydGVk
VGltZSA9IHBsYXliYWNrU3RhcnRlZFRpbWU7CiAgICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVl
ZHNVcGRhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKIHsKICAgICBt
X2R1cmF0aW9uID0gZHVyYXRpb247CiAgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMp
CiAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUg
Y3VycmVudFRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRp
bWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSkKIHsKICAgICBtX2N1cnJlbnRUaW1lID0gY3Vy
cmVudFRpbWU7CiAgICAgYXV0byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJ
bmZvXSBzeXN0ZW1VcHRpbWVdOwpAQCAtMTcxLDE0ICsxNzEsMTQgQEAgdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRp
bWUpCiAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNo
b3JUaW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZl
cmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7
CiAgICAgbV9idWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWU7CiAgICAgZm9yIChhdXRvKiBjbGll
bnQgOiBtX2NsaWVudHMpCiAgICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZm
ZXJlZFRpbWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0
ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQg
cGxheWJhY2tSYXRlKQogewogICAgIG1faXNQbGF5aW5nID0gaXNQbGF5aW5nOwogICAgIG1fcGxh
eWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxv
YXQgcGxheWJhY2tSCiAgICAgICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5
YmFja1JhdGUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vl
a2FibGVSYW5nZXNDaGFuZ2VkKFdlYkNvcmU6OlRpbWVSYW5nZXMmIHNlZWthYmxlUmFuZ2VzLCBk
b3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29y
ZTo6VGltZVJhbmdlcyYgc2Vla2FibGVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQogewogICAgIG1fc2Vla2FibGVSYW5nZXMgPSBzZWVr
YWJsZVJhbmdlczsKICAgICBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSBs
YXN0TW9kaWZpZWRUaW1lOwpAQCAtMTk1LDE0ICsxOTUsMTQgQEAgdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFu
Z2VzJgogICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdl
cywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9v
bCBjYW5QbGF5RmFzdFJldmVyc2UpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKIHsKICAg
ICBtX2NhblBsYXlGYXN0UmV2ZXJzZSA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKICAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKICAgICAgICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVy
c2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMs
IHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucywgdWlu
dDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpCiB7CiAgICAgbV9hdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9ucyA9IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOwogICAgIG1fYXVkaW9NZWRp
YVNlbGVjdGVkSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleDsKQEAgLTIxMCw3ICsyMTAs
NyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlYwogICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucywgYXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0
X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50
NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KQogewogICAgIG1fbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7CiAgICAgbV9sZWdp
YmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsKQEAgLTIx
OSw3ICsyMTksNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVgogICAgICAgICBjbGllbnQtPmxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMsIGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsK
ICAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKIApAQCAtMjI3
LDcgKzIyNyw3IEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlCiAgICAgICAgIGNsaWVudC0+YXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQogewogICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVk
SW5kZXg7CiAKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90CiAgICAg
ICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5k
ZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWROYW1l
KQordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFu
Z2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkTmFtZSkKIHsKICAgICBtX2V4
dGVybmFsUGxheWJhY2tFbmFibGVkID0gZW5hYmxlZDsKICAgICBtX2V4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlID0gdHlwZTsKQEAgLTI0NSw0OCArMjQ1LDQ4IEBAIHZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQs
IFdlYlBsCiAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwg
dHlwZSwgbG9jYWxpemVkTmFtZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCB3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZCkKIHsKICAgICBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
ID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7CiAgICAgZm9yIChhdXRvKiBjbGllbnQg
OiBtX2NsaWVudHMpCiAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQog
ewogICAgIG1fbXV0ZWQgPSBtdXRlZDsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0ZWQpOwogfQogCi0jcHJhZ21hIG1h
cmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKKyNwcmFnbWEgbWFyayAtIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eQogCi1SZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5PiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJv
eHkmIHBhZ2UpCitSZWZQdHI8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGFnZSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KHBhZ2Up
KTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQorUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQog
ICAgIDogbV9wYWdlKCZwYWdlKQogewotICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKKyAgICBtX3BhZ2UtPnBy
b2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCAqdGhpcyk7
CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6fldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSgpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6On5QbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkoKQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47
CiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aW52YWxpZGF0ZSgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52
YWxpZGF0ZSgpCiB7Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgbV9wYWdlID0gbnVs
bHB0cjsKIAogICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsK
LSAgICAgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0g
ICAgICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJm
YWNlOworICAgICAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbDsK
KyAgICAgICAgUmVmUHRyPFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPiBpbnRlcmZh
Y2U7CiAgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CiAKICAgICAg
ICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CkBAIC0yOTYsMTUgKzI5NiwxNSBAQCB2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiAgICAgbV9jbGllbnRD
b3VudHMuY2xlYXIoKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2Rl
bEludGVyZmFjZVR1cGxlIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewotICAgIFJlZjxX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7Ci0gICAgUmVmPFBsYXRmb3Jt
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZTo6Y3JlYXRlKG1vZGVsKTsKKyAgICBSZWY8UGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0PiBtb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3Jl
YXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIFJlZjxQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6OmNy
ZWF0ZShtb2RlbCk7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwp
LCBXVEZNb3ZlKGludGVyZmFjZSkpOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsK
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbElu
dGVyZmFjZVR1cGxlKCkpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTMxMiwy
MiArMzEyLDIyIEBAIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZh
Y2VUdXBsZSYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByCiAgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250
ZXh0SWQpCitQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQogewogICAgIHJldHVybiAq
c3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLVBs
YXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitQbGF0Zm9ybVBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSYgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1
cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIHJldHVybiAqc3RkOjpnZXQ8
MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JD
b250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBtX2NsaWVudENvdW50cy5hZGQoY29u
dGV4dElkKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlbW92
ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElk
KQogewogICAgIGlmICghbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTMzNiw5ICszMzYsOSBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCiAgICAg
bV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwogfQogCi0jcHJhZ21hIG1hcmsgTWVzc2Fn
ZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMg
ZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNv
bnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkK
QEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50NjRfdAogI2VuZGlmCiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKCkKIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKCFtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCkKQEAgLTM2OSwyMiArMzY5LDIyIEBAIHZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkK
ICNlbmRpZgogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVzZXRN
ZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQogewogICAgIGVuc3Vy
ZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFTdGF0ZSgpOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCiB7CiAgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUpOwogfQogCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5idWZm
ZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBk
b3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKIHsKICAg
ICBSZWY8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogICAg
IGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKQEAgLTM5Nyw2NiArMzk3LDY2IEBA
IHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3Rv
ckNoYW5nZWQodWludDY0X3QgY29udGV4CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVr
YWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0
ZUludGVydmFsKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQogewogICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh2YWx1ZSk7CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQogewogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5sZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewog
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdl
ZChzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxl
Z2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0
aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFy
Z2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9j
YWxpemVkRGV2aWNlTmFtZSkKIHsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7Ci0gICAgQVNT
RVJUKHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5IHx8
IHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBl
ID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSk7CisgICAgUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUgPSBzdGF0aWNf
Y2FzdDxQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU+KHRh
cmdldFR5cGUpOworICAgIEFTU0VSVCh0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJn
ZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBl
VFZPdXQgfHwgdHlwZSA9PSBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUpOwog
CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFi
bGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKIHsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCk7CiB9CiAKLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptdXRlZENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
Om11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCiB7CiAgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5tdXRlZENoYW5nZWQobXV0ZWQpOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGR1cmF0aW9uKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKIHsK
ICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5YmFja1N0YXJ0ZWRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1l
KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBsYXliYWNrU3RhcnRlZFRpbWVD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCiB7
CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChw
bGF5YmFja1N0YXJ0ZWRUaW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRv
dWJsZSByYXRlKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJhdGVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKQogewogICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCByYXRlKTsKIH0K
IAogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aGFuZGxlQ29udHJvbGxl
ZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgU3RyaW5nIGlkZW50aWZpZXIp
IGNvbnN0Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aGFuZGxlQ29udHJvbGxl
ZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgU3RyaW5nIGlkZW50aWZpZXIp
IGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChjb250ZXh0SWQgPT0gbV9jb250
cm9sc01hbmFnZXJDb250ZXh0SWQpCkBAIC00NjgsOTAgKzQ2OCw5MCBAQCB2b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNl
KHVpbnQ2NF90CiB9CiAKIAotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyCiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5KHVpbnQ2NF90
IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5KHVpbnQ2
NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OlBsYXkoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQbGF5KGNvbnRl
eHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBhdXNlKGNvbnRleHRJ
ZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6UGF1c2UoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUo
dWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRv
Z2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUoY29udGV4
dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdp
blNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY3J1YmJp
bmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjcnViYmluZyhjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjcnVi
YmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjcnViYmluZyhjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIHRpbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
U2Vla1RvVGltZShjb250ZXh0SWQsIHRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFz
dFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKIHsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkZhc3RTZWVrKGNvbnRleHRJ
ZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RmFzdFNlZWsoY29udGV4dElkLCB0aW1lKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpi
ZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElk
KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNj
YW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50
NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5T
Y2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdCYWNrd2FyZChjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRT
Y2FubmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjYW5uaW5nKGNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKIHsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRp
b24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4
dElkLCB1aW50NjRfdCBpbmRleCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihjb250ZXh0SWQs
IGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4dElk
LCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVy
ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJlSW5QaWN0dXJlKGNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6VG9nZ2xlUGljdHVyZUluUGljdHVyZShjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRv
Z2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Ojp0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVNdXRlZChjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNl
dE11dGVkKGNvbnRleHRJZCwgbXV0ZWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNldE11dGVkKGNvbnRleHRJ
ZCwgbXV0ZWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCkKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpCiB7CiAg
ICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkhhbmRsZUNvbnRyb2xsZWRFbGVt
ZW50SURSZXF1ZXN0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UqIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y29udHJvbHNNYW5h
Z2VySW50ZXJmYWNlKCkKK1BsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpCiB7CiAgICAg
aWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkuaAppbmRleCBlZTA0MGNhMDUxMS4uYzE3NzI1NmU0YWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5oCkBAIC0zMCw0MiArMzAsNDIgQEAKICNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBQTEFU
Rk9STShJT1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
aD4KICNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oPgog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCi10eXBlZGVmIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0IFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
OwordHlwZWRlZiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBQbGF0Zm9y
bVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKICNlbHNlCi10eXBlZGVmIFdlYkNvcmU6OldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZTsKK3R5cGVkZWYgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjIFBsYXRm
b3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7Ci1jbGFzcyBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7CitjbGFzcyBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk7CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dCBmaW5hbAotICAgIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0PgotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIg
IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCBmaW5hbAorICAgIDogcHVibGlj
IFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PgorICAgICwgcHVibGljIFdl
YkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6VmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gY3JlYXRlKFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSYgbWFuYWdlciwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFj
a1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQorICAgIHN0YXRpYyBSZWY8VmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0PiBjcmVhdGUoVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
JiBtYW5hZ2VyLCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIHBsYXliYWNrU2Vzc2lvbk1v
ZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQobWFuYWdlciwgcGxheWJhY2tTZXNz
aW9uTW9kZWwsIGNvbnRleHRJZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQobWFuYWdlciwgcGxheWJhY2tTZXNzaW9uTW9kZWwsIGNv
bnRleHRJZCkpOwogICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQoKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKTsKIAog
ICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQogCkBAIC03Mywx
MSArNzMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJIb3N0VmlldyhSZXRhaW5QdHI8
UGxhdGZvcm1WaWV3PiYmIGxheWVySG9zdFZpZXcpIHsgbV9sYXllckhvc3RWaWV3ID0gV1RGTW92
ZShsYXllckhvc3RWaWV3KTsgfQogCiBwcml2YXRlOgotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmLCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQmLCB1aW50NjRfdCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYsIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dCYsIHVpbnQ2NF90KTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0g
ICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQm
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVs
CisgICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9v
bCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFZpZGVv
TGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKQEAgLTg2LDI2ICs4NiwyNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2hhc1ZpZGVvOyB9CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9CiAKLSAgICAvLyBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIC8vIFZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyCiAgICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2
b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRXhpdEZ1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKIAot
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOwotICAgIFJlZjxX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7Cisg
ICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgUmVmPFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsKICAgICB1aW50
NjRfdCBtX2NvbnRleHRJZDsKICAgICBSZXRhaW5QdHI8UGxhdGZvcm1WaWV3ICo+IG1fbGF5ZXJI
b3N0VmlldzsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xp
ZW50Kj4gbV9jbGllbnRzOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQqPiBtX2NsaWVudHM7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdmlkZW9EaW1l
bnNpb25zOwogICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07CiB9OwogCi1jbGFzcyBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2Ns
YXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7
Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisgICAgc3Rh
dGljIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJv
eHkmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCkBAIC0x
MjAsMjAgKzEyMCwyMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7CiAKLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Jik7CisgICAgZXhwbGljaXQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBh
Z2VQcm94eSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOwogICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAK
LSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1vZGVs
SW50ZXJmYWNlVHVwbGU7CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ+LCBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U+PiBNb2RlbEludGVyZmFjZVR1cGxlOwogICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRl
TW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKICAgICBNb2RlbEludGVyZmFj
ZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAg
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgZW5zdXJl
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXRmb3JtVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KTsKICAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKICAg
ICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKIAotICAg
IC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIC8vIE1lc3Nh
Z2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgogICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVu
V2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wg
YWxsb3dzUGljdHVyZUluUGljdHVyZSk7CiAgICAgdm9pZCBzZXRIYXNWaWRlbyh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wpOwogICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNv
bnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CkBAIC0xNDUsMTkgKzE0NSwxOSBA
QCBwcml2YXRlOgogICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKICNlbmRpZgogCi0gICAgLy8gTWVzc2FnZXMgdG8gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcgorICAgIC8vIE1lc3NhZ2VzIHRvIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIKICAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBm
aW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKTsKICAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKTsKICAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpOwogICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
ICAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6
OkZsb2F0UmVjdCk7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOwor
ICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KTsKICAgICB2b2lkIGZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKTsKIAogICAgIFdlYlBhZ2VQcm94eSogbV9w
YWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwogICAgIEhhc2hNYXA8dWludDY0X3QsIE1v
ZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKICAgICB1aW50NjRfdCBtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCB7IDAgfTsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1fY2xp
ZW50Q291bnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCnNp
bWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpyZW5hbWUgdG8g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluCmluZGV4IGYyODE1ZDY3MjM4Li5lZmMzYjUwNDdlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjEsNyArMjEsNyBAQAogIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAt
PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgeworbWVzc2FnZXMgLT4gVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5IHsKICAgICBTZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgaGFzVmlkZW8pCiAgICAgU2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucykKICAgICBTZXR1cEZ1bGxzY3Jl
ZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIFdlYkNv
cmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNj
cmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5tbQpzaW1pbGFyaXR5IGluZGV4IDU3JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KcmVuYW1lIHRv
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbQppbmRleCA2MTI5YWQ5YTE0MS4uZWNjYjliMjkyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkubW0KQEAgLTI0LDE3ICsyNCwxNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKIAogI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShB
VktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKIAogI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKICNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHku
aCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0
ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQ
cm94eS5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCi0j
aW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2ltcG9y
dCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01hY2hTZW5k
UmlnaHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5ZXJFbnVtcy5oPgpAQCAtODQsMTQ5
ICs4NCwxNDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBQTEFURk9STShJT1MpICYmICFI
QVZFKEFWS0lUKQogCi1SZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmKQorUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewogfQogCi1ib29sIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUo
KSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2Fs
bHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKIHsKIAogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKIHsK
IAogfQogI2Vsc2UKIAotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0CisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQKIAotV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQo
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiBtYW5hZ2VyLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQmIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQp
CitWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKICAg
ICA6IG1fbWFuYWdlcigmbWFuYWdlcikKICAgICAsIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwocGxh
eWJhY2tTZXNzaW9uTW9kZWwpCiAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCiB7CiB9CiAK
LVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dCgpCitWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQoKQogewogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YWRkQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNs
aWVudCkpOwogICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZW1v
dmVDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NF
UlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX2NsaWVudHMucmVtb3ZlKCZj
bGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKIHsKICAgICBp
ZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RGdWxsc2NyZWVuTW9kZSht
X2NvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0
UmVjdCBmcmFtZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xh
eWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQogewogICAgIGlmIChtX21hbmFnZXIp
CiAgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckZyYW1lKG1fY29udGV4dElkLCBmcmFt
ZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xh
eWVyR3Jhdml0eShXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5
IGdyYXZpdHkpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXll
ckdyYXZpdHkoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2
aXR5KQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9M
YXllckdyYXZpdHkobV9jb250ZXh0SWQsIGdyYXZpdHkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBpZiAo
bV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2Nv
bnRleHRJZCwgbW9kZSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
Ojppc1Zpc2libGUoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6Omlz
VmlzaWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWFuYWdlciA/IG1fbWFuYWdlci0+aXNW
aXNpYmxlKCkgOiBmYWxzZTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBt
X21hbmFnZXItPmRpZFNldHVwRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4oKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCiB7CiAgICAg
aWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4obV9j
b250ZXh0SWQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlk
RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4
aXRGdWxsc2NyZWVuKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXIt
PmRpZEV4aXRGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCiB7CiAgICAgaWYgKG1f
bWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRl
eHRJZCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAg
ICAgICAgbV9tYW5hZ2VyLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUobV9jb250ZXh0SWQp
OwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKyNw
cmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQogCi1SZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQorUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eShwYWdlLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShwYWdlLCBwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdl
LCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6VmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBw
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCiAgICAgOiBtX3BhZ2UoJnBhZ2UpCiAgICAgLCBt
X3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkp
CiB7Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9w
YWdlLT5wYWdlSUQoKSwgKnRoaXMpOworICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIAotV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCkKK1Zp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6flZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgp
CiB7CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBpbnZhbGlkYXRlKCk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBt
X3BhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAgICBtX3BhZ2UgPSBudWxscHRyOwogCiAgICAgZm9yIChh
dXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFBsYXRm
b3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisgICAgICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxh
dGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKICAgICAgICAgc3RkOjp0
aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKIAogICAgICAgICBpbnRlcmZhY2UtPmludmFs
aWRhdGUoKTsKQEAgLTIzOCwxMyArMjM4LDEzIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjppbnZhbGlkYXRlKCkKICAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbigpCiB7CiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4
dE1hcC52YWx1ZXMoKSkKICAgICAgICAgc3RkOjpnZXQ8MT4odHVwbGUpLT5yZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0CiB7CiAg
ICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewogICAgICAgICBp
ZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUpKQpAQCAtMjUzLDcgKzI1Myw3IEBA
IGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1Bp
Y3R1cmVJblBpY3R1cmUoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKIHsKICAg
ICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
IChzdGQ6OmdldDwxPih0dXBsZSktPm1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5Q
aWN0dXJlKCkpCkBAIC0yNjMsNyArMjYzLDcgQEAgYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkKIH0K
IAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQot
Ym9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVvSW5Fbmhh
bmNlZEZ1bGxzY3JlZW4oKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdAogewogICAgIGZvciAo
YXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHN0ZDo6
Z2V0PDE+KHR1cGxlKS0+aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpKQpAQCAt
Mjc0LDI3ICsyNzQsMjcgQEAgYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omlz
UGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdAogfQogI2VuZGlmCiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFj
dGl2ZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YXBwbGljYXRpb25EaWRC
ZWNvbWVBY3RpdmUoKQogewogICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFs
dWVzKCkpCiAgICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUoKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVy
ZmFjZVR1cGxlIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpNb2RlbEludGVyZmFjZVR1cGxlIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRl
TW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIGF1dG8mIHBsYXli
YWNrU2Vzc2lvbk1vZGVsID0gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmVuc3VyZU1v
ZGVsKGNvbnRleHRJZCk7Ci0gICAgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4g
bW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgcGxh
eWJhY2tTZXNzaW9uTW9kZWwsIGNvbnRleHRJZCk7CisgICAgUmVmPFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dD4gbW9kZWwgPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSgq
dGhpcywgcGxheWJhY2tTZXNzaW9uTW9kZWwsIGNvbnRleHRJZCk7CiAgICAgYXV0byYgcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlID0gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmVuc3Vy
ZUludGVyZmFjZShjb250ZXh0SWQpOwotICAgIFJlZjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U6OmNyZWF0ZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOworICAgIFJlZjxQbGF0Zm9ybVZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2U6OmNyZWF0ZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOwogICAgIG1fcGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5hZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7
CiAKLSAgICBpbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCZtb2RlbC5nZXQo
KSk7Ci0gICAgaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigm
bW9kZWwuZ2V0KCkpOworICAgIGludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1v
ZGVsLmdldCgpKTsKKyAgICBpbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKCZtb2RlbC5nZXQoKSk7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUo
bW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBN
b2RlbEludGVyZmFjZVR1cGxlKCkpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAg
LTMwMiwyNCArMzAyLDI0IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJ
bnRlcmZhY2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByCiAgICAgcmV0dXJuIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpCitWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQogewogICAgIHJl
dHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9
CiAKLVBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCitQbGF0
Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIHJldHVybiAqc3Rk
OjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphZGRDbGll
bnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQsIDEpOwogICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCiAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQo
dWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJl
bW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQogewogICAgIEFTU0VSVCht
X2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKIApAQCAtMzM3LDEzICszMzcsMTMg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNv
bnRleHQodWludDY0X3QgY29udGV4dElkKQogICAgIG1fY2xpZW50Q291bnRzLnNldChjb250ZXh0
SWQsIGNsaWVudENvdW50KTsKIH0KIAotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcgorI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0
dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXll
cklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0Rl
dmljZVNjYWxlRmFjdG9yLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciwgSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUs
IGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKIHsKICAgICBBU1NFUlQodmlkZW9MYXllcklE
KTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAg
ICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQ
dHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKIAogICAgIHN0
ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4
dElkKTsKICAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CkBAIC0zNzQsMTcgKzM3
NCwxNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0dXBGdWxsc2Ny
ZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdQogICAgIG1fcGFnZS0+dWlDbGllbnQoKS5o
YXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIHZpZGVvRnVsbHNjcmVl
bk1vZGUgJiBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRIYXNW
aWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhh
c1ZpZGVvKQogewogICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdl
ZChoYXNWaWRlbyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZp
ZGVvRGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRl
b0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGlt
ZW5zaW9ucykKIHsKICAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lv
bnNDaGFuZ2VkKHZpZGVvRGltZW5zaW9ucyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCiB7CiAgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJ
ZCk7CiAgICAgaW50ZXJmYWNlLmVudGVyRnVsbHNjcmVlbigpOwpAQCAtNDAxLDcgKzQwMSw3IEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50
UmVjdCBmaW5hbFJlY3QpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkK
IHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuZXhp
dEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsKQEAgLTQxMywxOCArNDEzLDE4IEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6CiB9CiAKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0
RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9k
ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbldpdGhv
dXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKIHsKICAgICBlbnN1
cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01v
ZGUodGFyZ2V0TW9kZSk7CiB9CiAjZW5kaWYKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCiB7CiAgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuY2xlYW51cEZ1bGxzY3Jl
ZW4oKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVk
VG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29y
ZTo6SW50UmVjdCBpbmxpbmVSZWN0KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJs
ZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KQogewogICAgIG1fcGFnZS0+ZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKCk7CiAKQEAgLTQzNyw0NyArNDM3LDQ3IEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0
X3QgY29udGV4dElkCiAjZW5kaWYKIH0KIAotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhN
ZWRpYSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RnVsbHNjcmVl
bk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKIHsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlJlcXVl
c3RGdWxsc2NyZWVuTW9kZShjb250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpSZXF1ZXN0RnVsbHNjcmVlbk1vZGUoY29udGV4dElkLCBtb2RlLCBmaW5pc2hl
ZFdpdGhNZWRpYSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6RGlkU2V0dXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6RGlkU2V0dXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEV4aXRGdWxsc2NyZWVu
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4oY29udGV4dElkKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNjcmVlbigpOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpk
aWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVu
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOwogICAgIG1fcGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgIFJlZlB0cjxQbGF0
Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgIFJlZlB0cjxQbGF0Zm9ybVZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOwogCiAgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogCiAgICAg
W0NBVHJhbnNhY3Rpb24gZmx1c2hdOwogICAgIFttb2RlbC0+bGF5ZXJIb3N0VmlldygpIHJlbW92
ZUZyb21TdXBlcnZpZXddOwogICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOwot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlk
Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVs
bHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIAogICAgIGludGVyZmFjZS0+
c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsK
ICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6RmxvYXRSZWN0IGZyYW1lKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogI2lmIFBMQVRG
T1JNKElPUykKQEAgLTQ4OSwzMCArNDg5LDMwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDCiAg
ICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gZmVuY2VTZW5kUmlnaHQubGVha1Nl
bmRSaWdodCgpOwogI2VuZGlmCiAKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoY29udGV4dElk
LCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NF
TkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKGNvbnRleHRJ
ZCwgZnJhbWUsIElQQzo6QXR0YWNobWVudChmZW5jZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9T
RU5EKSksIG1fcGFnZS0+cGFnZUlEKCkpOwogICAgIH0KIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSBncmF2aXR5KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKGNvbnRleHRJZCwgKHVu
c2lnbmVkKWdyYXZpdHkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShj
b250ZXh0SWQsICh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpm
dWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIHsKICAgICBtX3BhZ2Ut
PnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCBt
b2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1
cmUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNWaXNpYmxlKCkg
Y29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUoKSBjb25z
dAogewogICAgIHJldHVybiBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKSAmJiBtX3BhZ2UtPmlzSW5X
aW5kb3coKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90
IGNvbnRleHRJZCkKIHsKICAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zp
c2libGUoKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlzVmlld1Zpc2li
bGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQs
IGlzVmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4IDdmMWU5ODU5ODZl
Li45YWVkZTcwYWUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwubW0KQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBv
cnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBv
cnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIK
ICNpbXBvcnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCIKQEAgLTYyLDcgKzYzLDYg
QEAKICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJv
eHkuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAi
V2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVy
bmFsLmgiCkBAIC0xMTcwLDggKzExNzAsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVNZWRp
YVRvdWNoQmFyKCkKICAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0Q2FuVG9n
Z2xlUGljdHVyZUluUGljdHVyZTpZRVNdOwogICAgIH0KIAotICAgIGlmIChQbGF0Zm9ybVdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSogaW50ZXJmYWNlID0gbV9wYWdlLT5wbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCktPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpKQotICAgICAgICBbbV9wbGF5
YmFja0NvbnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6aW50
ZXJmYWNlXTsKKyAgICBpZiAoUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGludGVy
ZmFjZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250cm9sc01hbmFnZXJJ
bnRlcmZhY2UoKSkKKyAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CiAKICAgICBbbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5nZXQoKV07CiAgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5
YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDlmYjNmMmY4YjIw
Li5jM2ZlZTFlZDdlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CkBAIC0xNTIsOSArMTUyLDkgQEAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVl
U2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5LmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJWaWV3U25hcHNob3RTdG9yZS5oIgotI2luY2x1ZGUgIldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1RleHRJbmRpY2F0b3JXaW5kb3cuaD4KQEAgLTE4MCw3ICsxODAsNyBAQAogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmgi
CisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC0zOTQsOCArMzk0LDggQEAgV2ViUGFnZVByb3h5OjpX
ZWJQYWdlUHJveHkoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzLCB1aW4KICAgICBtX2Z1bGxTY3JlZW5NYW5hZ2VyID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eTo6Y3JlYXRlKCp0aGlzLCBtX3BhZ2VDbGllbnQuZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNs
aWVudCgpKTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNy
ZWF0ZSgqdGhpcyk7Ci0gICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIpOworICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlcik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCkBAIC02MzYsOCAr
NjM2LDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlYXR0YWNoVG9XZWJQcm9jZXNzKCkKICAgICBt
X2Z1bGxTY3JlZW5NYW5hZ2VyID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0
aGlzLCBtX3BhZ2VDbGllbnQuZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpKTsKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1h
bmFnZXIgPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcyk7Ci0g
ICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpjcmVhdGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOworICAgIG1fcGxh
eWJhY2tTZXNzaW9uTWFuYWdlciA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRl
KCp0aGlzKTsKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCkBAIC00MzEzLDEyICs0MzEzLDEyIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkZ1bGxzY3JlZW5DbGllbnQ+JiYKICNlbmRpZgogICAgIAogI2lmIChQTEFURk9STShJT1MpICYm
IEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBXZWJQYWdlUHJveHk6
OnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQorUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBX
ZWJQYWdlUHJveHk6OnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQogewogICAgIHJldHVybiBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuZ2V0KCk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSogV2ViUGFnZVByb3h5Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eSogV2ViUGFnZVByb3h5Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
KCkKIHsKICAgICByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmdldCgpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA4MTIyMDIzZDExYi4uZDcyNjkw
ZDIwOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0yMDEsOSAr
MjAxLDkgQEAgY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYkNvbnRleHRN
ZW51UHJveHk7CiBjbGFzcyBXZWJFZGl0Q29tbWFuZFByb3h5OwogY2xhc3MgV2ViRnVsbFNjcmVl
bk1hbmFnZXJQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKK2Ns
YXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYk5hdmlnYXRpb25TdGF0
ZTsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKK2NsYXNzIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJV
UkxTY2hlbWVIYW5kbGVyOwogY2xhc3MgV2ViTW91c2VFdmVudDsKQEAgLTM0Myw4ICszNDMsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkZ1bGxzY3JlZW5DbGllbnQ+JiYpOwogI2VuZGlmCiAjaWYgKFBMQVRGT1JNKElPUykgJiYg
SEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nl
c3Npb25NYW5hZ2VyKCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBw
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
KiB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykK
QEAgLTE2ODAsOCArMTY4MCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIChQTEFURk9STShJ
T1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5PiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IG1fdmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggYzQzYzc2NWU0ZDcuLjMzMTJkY2Fj
ZmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0KQEAgLTQxLDExICs0MSwxMSBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24uaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0ICJVc2VyRGF0YS5oIgorI2ltcG9y
dCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJWaWV3VXBkYXRlRGlz
cGF0Y2hlck1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9j
ZXNzUHJveHkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU3OGM5MzM2OGU2
Li4zOTZjYTVlMDcyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC04NzEsOCArODcxLDggQEAKIAkJMzdGQzE5NDcxODUwRkJGMjAwOENG
QTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5NDYxODUwRkJGMjAwOENG
QTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RkMxOTRBMTg1MTBENkEw
MDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0ODE4NTEwRDZBMDA4Q0ZB
NDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICovOyB9OwogCQkzN0ZDMTk0
QjE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0OTE4NTEw
RDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi87IH07Ci0J
CTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJM0Y0MThFRkIxODg3QkQ5NzAwMjc5NUZE
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNzE4ODdC
RDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLzsgfTsKKwkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkzRjQxOEVGQjE4ODdC
RDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4
RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQkzRjg3QjlCRDE1ODk0MDEyMDA5MEZGNjIgLyogV2ViQ29s
b3JDaG9vc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDNGODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuY3BwICovOyB9
OwogCQkzRjg3QjlCRTE1ODk0MDE5MDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlCQjE1ODkzRjYz
MDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi87IH07CiAJCTNGODdCOUMwMTU4OTQwRDgw
MDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlj
a2VyLmggKi87IH07CkBAIC0xMTA1LDkgKzExMDUsOSBAQAogCQk1MjcyRDRDOTFFNzM1RjA5MDBF
QjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkQ0QzcxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVj
dGlvblNwYWNlTlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MjcyRDRDQTFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJENEM4
MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tICovOyB9OwogCQk1MjhD
MzdDMTE5NUNCQjFBMDBEOEI5Q0MgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTlGMjgxMDE5NThGNDc4
MDA4Q0FDNzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OwotCQk1MkQ1QTFCMTFDNTc0OTYy
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMxQzU3NDk0RTAwREUz
NEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKLQkJNTJENUEx
QjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFCNDFDNTc0OUYy
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKKwkJNTJENUEx
QjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0
RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OworCQk1MkQ1
QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMxQzU3
NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKKwkJ
NTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFCNDFDNTc0
OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKIAkJNTMwMjU4
M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkUxRENCQkQxRDAw
REE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovOyB9OwogCQk1MzAyNTgzQzFE
Q0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkYxRENCQkQxRDAwREE4OUMy
IC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLzsgfTsKIAkJNTMwMjU4M0QxRENCQkQyMjAw
REE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlRXZlbnQuY3BwICovOyB9OwpAQCAtMTkyMCwxNCArMTkyMCwxNCBAQAogCQlDRDc4
RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTYxREI3REMwQTAwMTRB
MkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLzsgfTsKIAkJQ0Q3OEUxMTkxREI3RTVBRDAw
MTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTgxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1
bGxzY3JlZW5EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNl
c1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RB
MDQxRjMxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggKi87IH07Ci0J
CUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTgx
Q0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi87IH07Ci0J
CUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExOTFD
QkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovOyB9OwotCQlD
REEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
RTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi87
IH07Ci0JCUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1tICovOyB9OwotCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCUNEQTI5QTI5
MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI1MUNC
RUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLzsg
fTsKLQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJQ0RBMjlBMkIx
Q0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEy
NzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCAqLzsgfTsKKwkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAq
LzsgfTsKKwkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi87IH07CisJ
CUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTFF
MUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLzsgfTsK
KwkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi87
IH07CisJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OworCQlDREEyOUEyQTFDQkVCNjdB
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI2
MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovOyB9OworCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQlDREMzODJGRTE3MjExNzk5MDA4
QTJGQzMgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1T
aGltTGlicmFyeS5tbSAqLzsgfTsKIAkJQ0RDMzgzMDcxNzIxMTdERDAwOEEyRkMzIC8qIENvb2tp
ZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNo
aW1MaWJyYXJ5LmNwcCAqLzsgfTsKIAkJQ0RDMzgzMEMxNzIxMjI4MjAwOEEyRkMzIC8qIENvb2tp
ZVN0b3JhZ2VTaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RDMzgzMEIxNzIxMjFDRTAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGlt
TGlicmFyeS5oICovOyB9OwpAQCAtMzA4OSwxMCArMzA4OSwxMCBAQAogCQkzN0ZDMTk0NjE4NTBG
QkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVn
YXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDMTk0ODE4NTEw
RDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDMTk0OTE4NTEwRDZB
MDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjYxODg3
QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjcxODg3QkQ5NzAw
Mjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBX
ZWJDb2xvckNob29zZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29sb3JDaG9vc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5
QkIxNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJDb2xvckNob29zZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzY3LDEyICszMzY3LDEyIEBACiAJCTUyNzJCMjg5MTQw
Njk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MjcyRDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Byb3RlY3Rpb25TcGFjZU5TLmg7IHBhdGgg
PSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MjcyRDRDODFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUHJvdGVjdGlvblNwYWNlTlMu
bW07IHBhdGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUy
RDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVB
MUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBQjFDNTc0
OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQUMxQzU3NDk0RTAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdl
cy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFCNDFDNTc0OUYyMDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODJFMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5l
dHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9O
ZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oOyBw
YXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODMwMURDQkJEMUQwMERBODlDMiAvKiBO
ZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQyNTQsMTYgKzQyNTQsMTYgQEAKIAkJQ0Q3OEUxMTYxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1
bGxzY3JlZW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJRnVs
bHNjcmVlbkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDc4RTExODFE
QjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREEwNDFGMzFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0JvYXJkU2Vy
dmljZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0JvYXJkU2Vy
dmljZXNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMTgxQ0JEQkY0
MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5
QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTFGMUNCRUI1RkIw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTIyMUNCRUI2MUEwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlB
MjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjYxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFG
MUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTIyMUNCRUI2MUEw
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjUxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEy
NzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDMzgyRjcx
NzIxMTUwNjAwOEEyRkMzIC8qIENGTmV0d29yay5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9
IENGTmV0d29yay5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9D
Rk5ldHdvcmsuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlDREMz
ODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MzA2MTcyMTE3OTkwMDhBMkZDMyAvKiBXZWJQcm9jZXNz
U2hpbS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdl
YlByb2Nlc3NTaGltLmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpA
QCAtNTIwMSwxNyArNTIwMSwxNyBAQAogCQkJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBW
aWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUFDMDI3M0UxOTY2MjJE
NjAwQzEyQjc1IC8qIFdlYlBhZ2VQcm94eUNvY29hLm1tICovLAogCQkJCTdDNDY5NENCMUE0QjUx
MEEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSAqLywKLQkJCQlDREEyOUEx
RTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi8s
Ci0JCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAorCQkJCUNEQTI5QTFFMUNCRUI1
RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKKwkJCQlDREEy
OUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluICovLAorCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJN0NFNEQyMTUxQTQ5MTQ4NDAwQzdGMTUyIC8qIFdl
YlByb2Nlc3NQb29sQ29jb2EubW0gKi8sCiAJCQkJMUEwNEY2MTcxQTRBM0E3QTAwQTIxQjZFIC8q
IFdlYlByb2Nlc3NQcm94eUNvY29hLm1tICovLAogCQkJCTdBQUQxNzVFMUVBNkFGMzcwMDNCMDg5
NCAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAqLywKIAkJCQk1MUQx
MjQzMTFFNkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlckNvY29hLmggKi8sCiAJ
CQkJNTFEMTI0MzIxRTZERTUyMTAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXJDb2NvYS5t
bSAqLywKLQkJCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5LmggKi8sCi0JCQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQk1MkQ1QTFBQzFD
NTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovLAor
CQkJCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkuaCAqLywKKwkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRB
MyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJMkRGQzdEQjkxQkND
QzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggKi8sCiAJCQkJMkRGQzdEQkExQkNDQzE5NTAw
QzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tICovLAogCQkJCTFBRDAxQkNCMTkwNUQ1NDkwMEM5QzQ1
RiAvKiBXS1JlbG9hZEZyYW1lRXJyb3JSZWNvdmVyeUF0dGVtcHRlci5oICovLApAQCAtNjM4NSwx
NCArNjM4NSwxNCBAQAogCQkJCUNENDkxQjA1MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlci5jcHAgKi8sCiAJCQkJQ0Q0OTFCMDYxRTcwRDA1RjAwMDA5MDY2IC8qIFVz
ZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q0OTFCMEExRTczMkQxMjAwMDA5MDY2
IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCUNEQTI5QTE5
MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8sCi0JCQkJ
Q0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVz
c2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubW0gKi8sCisJCQkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLywKKwkJCQlDREEyOUExQzFDQkRCRjVCMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKKwkJCQlDREEyOUExODFD
QkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLywKIAkJCQlFQ0E2
ODBENzFFNjkwREY4MDA3MzFEMjAgLyogV2ViUHJvY2Vzc0NvY29hLmggKi8sCiAJCQkJN0M2RTcw
RjkxOEIyRDRBMDAwRjI0RTJFIC8qIFdlYlByb2Nlc3NDb2NvYS5tbSAqLywKLQkJCQk1MkQ1QTFC
MjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovLAotCQkJ
CTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1l
c3NhZ2VzLmluICovLAotCQkJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1tICovLAorCQkJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8sCisJCQkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNTJENUExQjQx
QzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8sCiAJCQkpOwog
CQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc4NjgsMTAg
Kzc4NjgsMTAgQEAKIAkJCQkxQUIxRjc5MzFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENv
b3JkaW5hdG9yTWVzc2FnZXMuaCAqLywKIAkJCQkxQUIxRjc5NDFEMUIzNjEzMDA3QzlCRDEgLyog
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFB
QjFGNzk1MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3Nh
Z2VzLmggKi8sCi0JCQkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCUNEQTI5QTI1MUNCRUI2N0Ew
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLywKLQkJCQlD
REEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKKwkJCQlDREEyOUEy
NDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCisJCQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCUNE
QTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNz
YWdlcy5oICovLAogCQkJCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUEwNDNGNjgxMjUxNEQ4QjAwRkZC
RkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJCQlCQzMwNjZCQzEy
NUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCkBAIC03
ODkzLDEwICs3ODkzLDEwIEBACiAJCQkJMUFBRjA4QjYxOTI2OUU2RDAwQjYzOTBDIC8qIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2VzLmggKi8sCiAJCQkJN0MzNjFENzYxOTI4MDNCRDAw
MzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCAqLywKIAkJCQk3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHlNZXNzYWdlcy5oICovLAotCQkJCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkz
RjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3Nh
Z2VzLmggKi8sCi0JCQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJM0Y0MThFRjgxODg3
QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgg
Ki8sCisJCQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAv
KiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLywKKwkJCQkzRjQxOEVGNzE4ODdC
RDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLywKKwkJCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gIkRlcml2ZWQgU291
cmNlcyI7CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0MjsKQEAgLTg3MzIsMTAgKzg3
MzIsMTAgQEAKIAkJCQkxQUIxRjc5OTFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4NTBGRTcxRUQ3QzM5
RjAwRkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUEzRTczNjExMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTI5MUNCRUI2N0Ew
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTIw
MUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFENTkyOUYxNjZFMDYw
MDAwRTZCRjAyIC8qIFdlYlBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NzQ0
RjAxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NkE1MDgwQkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKQEAgLTg3ODksNyArODc4OSw3IEBACiAJCQkJN0MzNjFENzkxOTI4MDNCRDAw
MzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRUU1NzVDMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJW
YWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUExQjAxQzU3
NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRGQzdEQkIxQkNDQzE5NTAwQzE1NDhD
IC8qIFdlYlZpZXdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUNENTVBQTEyOEUyOTRGMDAx
MzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI5MjMyREY0MThCMjlENjgwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdl
T2JqZWN0TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzQwLDEwICsxMDM0MCwxMCBAQAogCQkJ
CTFBM0U3MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEREQxMjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBsYXRmb3Jt
VG91Y2hQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDRBMjE4ODRFNEYwMDBFRDg2
REIgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNE
QTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RB
MjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5t
bSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
REEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMUQ1OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBMDhGRUU0MUQ1OTNFMkEwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZCMzAwNkYwRjEyIC8q
IFdlYlBvcHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDE2LDEwICsxMDQxNiwxMCBA
QAogCQkJCTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTczOUJCRTFC
NDIwNDY2MDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTgzRUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTNGNDE4RUY5MTg4
N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKLQkJCQkzRjQxOEVG
QjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRB
MyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0Y0MThF
RjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNGNDE4RUZC
MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGQzdEQkMxQkNDQzE5NTAwQzE1NDhDIC8q
IFdlYlZpZXdJbXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDExMjdBMjk4MDAwOEZG
NEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4MTYwRDAxODc2
NDU1NzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggNGQyMmFmZjEyODkuLmZlZTBkMjg2NzdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNzgsOCArNzgsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDMyZDg2NmZi
OGE3Li43Mjc3ODhlOGE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKQEAgLTIxOCwxMCArMjE4LDEwIEBACiAKICNpZiBQTEFURk9STShDT0NPQSkK
ICNpbmNsdWRlICJQREZQbHVnaW4uaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmdDRi5oIgotI2luY2x1
ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9MZWdhY3lXZWJBcmNoaXZlLmg+CiAj
ZW5kaWYKIApAQCAtMzQ3MSwxNyArMzQ3MSwxNyBAQCBSZW1vdGVXZWJJbnNwZWN0b3JVSSogV2Vi
UGFnZTo6cmVtb3RlSW5zcGVjdG9yVUkoKQogfQogCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFW
RShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBXZWJQYWdlOjpwbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCkKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXImIFdlYlBhZ2U6OnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoKQogewogICAgIGlmICghbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQotICAg
ICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpjcmVhdGUoKnRoaXMpOworICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUoKnRoaXMpOwogICAgIHJldHVybiAqbV9wbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBXZWJQYWdl
Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIFdlYlBh
Z2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewogICAgIGlmICghbV92aWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKSk7
CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmNyZWF0ZSgqdGhpcywgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpKTsKICAgICByZXR1cm4g
Km1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDc3MjQ1ZDUwNzk4Li5iZWM0NDIzMGU3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTg2LDEx
ICsxODYsMTEgQEAgY2xhc3MgV2ViTm90aWZpY2F0aW9uQ2xpZW50OwogY2xhc3MgV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXI7CiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94eTsKIGNsYXNzIFdlYlBh
Z2VPdmVybGF5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKK2NsYXNzIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI7CiBjbGFzcyBXZWJQb3B1cE1lbnU7CiBjbGFzcyBXZWJVbmRvU3Rl
cDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogY2xhc3MgV2ViV2hl
ZWxFdmVudDsKIGVudW0gRmluZE9wdGlvbnMgOiB1aW50MTZfdDsKIHN0cnVjdCBBc3Npc3RlZE5v
ZGVJbmZvcm1hdGlvbjsKQEAgLTI2Niw4ICsyNjYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0lu
c3BlY3RvclBhZ2UoKSB7IHJldHVybiAhIW1faW5zcGVjdG9yVUkgfHwgISFtX3JlbW90ZUluc3Bl
Y3RvclVJOyB9CiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXImIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYg
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IHZvaWQgc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrKGJvb2wpOwpAQCAtMTQw
MCw4ICsxNDAwLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UmVtb3RlV2ViSW5zcGVjdG9yVUk+
IG1fcmVtb3RlSW5zcGVjdG9yVUk7CiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lU
KSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
LSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBtX3ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4g
bV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IGJvb2wgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sgeyBmYWxzZSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLmgKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApyZW5hbWUgdG8g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApp
bmRleCA3NTNjYjE2OThiZC4uMjM2YTI4MTdiOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApAQCAtMzEs
OCArMzEsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybUNBTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01MiwyOCArNTIsMjggQEAgY2xhc3MgTm9k
ZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlOwotY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CiAKLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQgZmluYWwKLSAgICA6IHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJs
aWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgeworY2xhc3MgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dCBmaW5hbAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdl
ciwgdWludDY0X3QgY29udGV4dElkKQorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVp
bnQ2NF90IGNvbnRleHRJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQobWFuYWdlciwgY29udGV4dElkKSk7CiAgICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9
IG51bGxwdHI7IH0KIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dDsKIAotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAg
IC8vIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQogICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkg
ZmluYWw7CiAKLSAgICAvLyBXZWJQbGF5YmFja01vZGVsQ2xpZW50CisgICAgLy8gUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQKICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFs
OwogICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGFuY2hvclRpbWUpIGZpbmFsOwogICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUp
IGZpbmFsOwpAQCAtODUsMjAgKzg1LDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKICAg
ICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwog
ICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5h
bDsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29y
ZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBj
b25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOworICAgIHZvaWQgZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVk
RGV2aWNlTmFtZSkgZmluYWw7CiAgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQoYm9vbCkgZmluYWw7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgZmluYWw7
CiAKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQoUGxheWJhY2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CiAKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlciogbV9tYW5hZ2VyOwogICAgIHVpbnQ2NF90IG1fY29udGV4dElk
OwogfTsKIAotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2Vp
dmVyIHsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBjcmVhdGUo
V2ViUGFnZSYpOwotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKyAg
ICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJik7Cisg
ICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwogCiAgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKIApAQCAt
MTA3LDIxICsxMDcsMjEgQEAgcHVibGljOgogICAgIHVpbnQ2NF90IGNvbnRleHRJZEZvck1lZGlh
RWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7CiAKIHByb3RlY3RlZDoKLSAgICBm
cmllbmQgY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLSAgICBmcmll
bmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKKyAgICBmcmllbmQgY2xhc3MgUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjsKIAotICAgIGV4cGxpY2l0IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIo
V2ViUGFnZSYpOworICAgIGV4cGxpY2l0IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYp
OwogCi0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudD4sIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8
UmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiwgUmVmUHRy
PFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1cGxlOwog
ICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKTsKICAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAg
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OwogICAgIHZvaWQgcmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQg
YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3Zl
Q2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwogCi0gICAgLy8gSW50ZXJmYWNl
IHRvIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQKKyAgICAvLyBJbnRlcmZhY2Ug
dG8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAogICAgIHZvaWQgcmVzZXRNZWRpYVN0
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUpOwogICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSk7CkBA
IC0xMzQsMTEgKzEzNCwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpOwogICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwogICAgIHZvaWQgbGVnaWJsZU1lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCk7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7Cisg
ICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
ZW5hYmxlZCwgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CiAgICAgdm9pZCB3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsK
ICAgICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwogCi0gICAg
Ly8gTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKKyAgICAvLyBN
ZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQogICAgIHZvaWQgcGxheSh1
aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsK
ICAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJv
bSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ci5tZXNzYWdlcy5pbgpyZW5hbWUgdG8gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KaW5kZXggOTU2NjZhNzE1NGMuLjJlNThk
Yzk4NDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMjIsNyAr
MjIsNyBAQAogIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi1tZXNzYWdlcyAtPiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIHsKK21lc3NhZ2VzIC0+
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgewogICAgIFBsYXkodWludDY0X3QgY29udGV4dElkKQog
ICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0
X3QgY29udGV4dElkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29h
L1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
Y29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpzaW1pbGFyaXR5IGluZGV4IDQ3JQpyZW5h
bWUgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tbQpyZW5hbWUgdG8gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXli
YWNrU2Vzc2lvbk1hbmFnZXIubW0KaW5kZXggMjg1YTI3ZTQ4YjIuLjkxNDFlMzhmNTQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tbQpAQCAtMjQsMTUgKzI0LDE1IEBACiAgKi8KIAogI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW1wb3J0ICJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAKICNpbXBvcnQgIkF0
dGFjaG1lbnQuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgor
I2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAi
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgog
I2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgpAQCAt
NTMsMTI2ICs1MywxMjYgQEAgc3RhdGljIHVpbnQ2NF90IG5leHRDb250ZXh0SWQoKQogICAgIHJl
dHVybiArK2NvbnRleHRJZDsKIH0KIAotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dAorI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dAogCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFn
ZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoUGxheWJhY2tTZXNzaW9uTWFuYWdlciYg
bWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQogICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQog
ICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQogewogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0Ojp+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCgpCitQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dCgpCiB7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6cmVzZXRNZWRpYVN0YXRlKCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6cmVzZXRNZWRpYVN0YXRlKCkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21h
bmFnZXItPnJlc2V0TWVkaWFTdGF0ZShtX2NvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlv
bikKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2Vk
KGRvdWJsZSBkdXJhdGlvbikKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFn
ZXItPmR1cmF0aW9uQ2hhbmdlZChtX2NvbnRleHRJZCwgZHVyYXRpb24pOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3Vi
bGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBk
b3VibGUgYW5jaG9yVGltZSkKIHsKICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFn
ZXItPmN1cnJlbnRUaW1lQ2hhbmdlZChtX2NvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRp
bWUpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZl
cmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1l
KQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+YnVmZmVyZWRUaW1l
Q2hhbmdlZChtX2NvbnRleHRJZCwgYnVmZmVyZWRUaW1lKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxv
YXQgcGxheWJhY2tSYXRlKQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojpy
YXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewogICAgIGlm
IChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+cmF0ZUNoYW5nZWQobV9jb250ZXh0SWQs
IGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJh
Y2tTdGFydGVkVGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCiB7CiAg
ICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5wbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZChtX2NvbnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSk7CiB9CiAKLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUs
IGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2Vz
JiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVy
dmFsKQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+c2Vla2FibGVS
YW5nZXNDaGFuZ2VkKG1fY29udGV4dElkLCByYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVV
cGRhdGVJbnRlcnZhbCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29u
dGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIHZhbHVlKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wg
dmFsdWUpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT5jYW5QbGF5
RmFzdFJldmVyc2VDaGFuZ2VkKG1fY29udGV4dElkLCB2YWx1ZSk7CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGlm
IChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQogewogICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5k
ZXgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGlmIChtX21hbmFnZXIpCiAg
ICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRl
eHRJZCwgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmxlZ2li
bGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewog
ICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdl
ZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKIHsKICAgICBp
ZiAobV9tYW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KG1fY29udGV4dElkLCBlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKIH0KIAot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJv
b2wgZGlzYWJsZWQpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAgbV9tYW5hZ2VyLT53
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQobV9jb250ZXh0SWQsIGRpc2FibGVk
KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENo
YW5nZWQoYm9vbCBtdXRlZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCiB7CiAgICAgaWYgKG1fbWFuYWdlcikKICAgICAgICAg
bV9tYW5hZ2VyLT5tdXRlZENoYW5nZWQobV9jb250ZXh0SWQsIG11dGVkKTsKIH0KIAotI3ByYWdt
YSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgorI3ByYWdtYSBtYXJrIC0gUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcgogCi1SZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCitSZWY8UGxheWJhY2tT
ZXNzaW9uTWFuYWdlcj4gUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBh
Z2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cihwYWdlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uTWFuYWdl
cihwYWdlKSk7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSkKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSkKICAgICA6IG1fcGFnZSgmcGFnZSkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5w
YWdlSUQoKSwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7CiB9CiAKLVdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6On5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKK1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKIHsKICAgICBmb3IgKGF1dG8mIHR1cGxlIDog
bV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgICAgIFJlZlB0cjxQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CiAgICAgICAgIHN0ZDo6dGllKG1v
ZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CiAgICAgICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmlu
dGVyZmFjZSk7CiAgICAgICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CkBAIC0x
ODQsMTkgKzE4NCwxOSBAQCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp+V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcigpCiAgICAgbV9tZWRpYUVsZW1lbnRzLmNsZWFyKCk7CiAgICAgbV9jbGll
bnRDb3VudHMuY2xlYXIoKTsKIAotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLVdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KQorUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
CiB7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2Rl
bCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKLSAgICBS
ZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQp
OworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWwgPSBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKICAgICBtb2RlbC0+
YWRkQ2xpZW50KCppbnRlcmZhY2UpOwogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZN
b3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKIH0KIAotV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewogICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVw
bGUoKSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpAQCAtMjA0LDIwICsyMDQsMjAg
QEAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXIKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKIH0KIAotV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK1dlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50JiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAg
cmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsK
IH0KIAotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK1BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZUlu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgcmV0dXJuICpzdGQ6OmdldDwxPihl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
CiB7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2Rl
bDsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlOworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7
CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
ICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7CiAKICAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbWVkaWFFbGVtZW50
ID0gbW9kZWwtPm1lZGlhRWxlbWVudCgpOwpAQCAtMjI4LDE5ICsyMjgsMTkgQEAgdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkK
ICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKQogewogICAgIG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQpOwogfQog
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQo
dWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVD
bGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBBU1NFUlQobV9jbGll
bnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7CiAgICAgaWYgKG1fY2xpZW50Q291bnRzLnJl
bW92ZShjb250ZXh0SWQpKQogICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFu
YWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQogewogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBhdXRvIGZvdW5kSXRlcmF0b3IgPSBtX21lZGlhRWxlbWVudHMuZmluZCgmbWVkaWFFbGVtZW50
KTsKQEAgLTI2MiwxMSArMjYyLDExIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFCiAgICAgfQog
CiAgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OlNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6U2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldp
dGhJRChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogI2Vu
ZGlmCiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2xlYXJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlcigpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJh
Y2tDb250cm9sc01hbmFnZXIoKQogewogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoIW1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKQpAQCAtMjc0LDExICsyNzQsMTEgQEAgdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKIAogICAg
IHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwogICAg
IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gMDsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q2xlYXJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICNlbmRpZgogfQogCi11aW50NjRfdCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQordWludDY0X3QgUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1l
ZGlhRWxlbWVudCkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1
cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsgcmV0dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7CiAgICAg
dWludDY0X3QgY29udGV4dElkID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKQEAgLTI4Niwz
OSArMjg2LDM5IEBAIHVpbnQ2NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJ
ZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFCiAgICAgcmV0dXJuIGNvbnRleHRJ
ZDsKIH0KIAotI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OgorI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OgogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlc2V0
TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFT
dGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRl
eHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlv
bikKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpEdXJhdGlvbkNoYW5nZWQoY29udGV4
dElkLCBkdXJhdGlvbiksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpEdXJhdGlvbkNoYW5nZWQoY29udGV4
dElkLCBkdXJhdGlvbiksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBj
dXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkN1cnJlbnRUaW1lQ2hhbmdlZChj
b250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkN1
cnJlbnRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YnVm
ZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUp
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQogewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpCdWZmZXJlZFRpbWVDaGFu
Z2VkKGNvbnRleHRJZCwgYnVmZmVyZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkJ1ZmZlcmVk
VGltZUNoYW5nZWQoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQogewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpQbGF5
YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6UGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY29udGV4dElkLCBw
bGF5YmFja1N0YXJ0ZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9h
dCBwbGF5YmFja1JhdGUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJhdGVDaGFuZ2VkKGNvbnRleHRJZCwgaXNQbGF5aW5nLCBw
bGF5YmFja1JhdGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5nZWQoY29udGV4dElkLCBp
c1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBs
YXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlm
aWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKIHsKICAgICBWZWN0b3I8c3RkOjpw
YWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzVmVjdG9yOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKQEAgLTMyNiwxNDMgKzMyNiwxNDMg
QEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBjb25zdAogICAgICAgICBkb3VibGUgZW5kID0gdGltZVJhbmdl
cy5yYW5nZXMoKS5lbmQoaSkudG9Eb3VibGUoKTsKICAgICAgICAgcmFuZ2VzVmVjdG9yLmFwcGVu
ZCh7IHN0YXJ0LCBlbmQgfSk7CiAgICAgfQotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQo
Y29udGV4dElkLCBXVEZNb3ZlKHJhbmdlc1ZlY3RvciksIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVV
cGRhdGVJbnRlcnZhbCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZWVrYWJsZVJhbmdlc1ZlY3RvckNo
YW5nZWQoY29udGV4dElkLCBXVEZNb3ZlKHJhbmdlc1ZlY3RvciksIGxhc3RNb2RpZmllZFRpbWUs
IGxpdmVVcGRhdGVJbnRlcnZhbCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIHZhbHVlKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjYW5Q
bGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjb250ZXh0SWQsIHZhbHVlKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OkNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY29udGV4dElkLCB2YWx1ZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVk
SW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
dGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVk
RGV2aWNlTmFtZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9j
YWxpemVkRGV2aWNlTmFtZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2Vk
KGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRhcmdldFR5cGUpLCBs
b2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkV4dGVybmFsUGxheWJhY2tQ
cm9wZXJ0aWVzQ2hhbmdlZChjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90
Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVk
aW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0
SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVj
dGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGRpc2FibGVkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIGRpc2FibGVkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQo
Y29udGV4dElkLCBkaXNhYmxlZCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQoY29udGV4dElkLCBkaXNhYmxlZCkpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6Om11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgbXV0ZWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6Ok11dGVkQ2hhbmdlZChjb250ZXh0SWQsIG11dGVkKSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok11dGVk
Q2hhbmdlZChjb250ZXh0SWQsIG11dGVkKSk7CiB9CiAKLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBm
cm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eToKKyNwcmFnbWEgbWFyayBNZXNzYWdl
cyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eToKIAotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5wbGF5KCk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5wYXVzZSgpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2ds
ZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS50b2dnbGVQbGF5U3RhdGUoKTsKIH0KIAotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2NydWJiaW5nKCk7CiB9
CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNj
cnViYmluZygpOwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWtUb1Rp
bWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQogewog
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla1RvVGltZSh0aW1lKTsKIH0KIAotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSB0aW1lKQordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayh1aW50
NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkuZmFzdFNlZWsodGltZSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
CiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgp
OwogfQogCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNr
d2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKIH0KIAotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjYW5uaW5nKCk7CiB9CiAK
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKGluZGV4KTsKIH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpz
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRl
eCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9u
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCiB7CiAgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1
ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6aGFu
ZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQogewogICAg
IGF1dG8gZWxlbWVudCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubWVkaWFFbGVtZW50KCk7CiAg
ICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2Uo
Y29udGV4dElkLCBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpKSk7CisgICAgICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpIYW5kbGVDb250cm9s
bGVkRWxlbWVudElEUmVzcG9uc2UoY29udGV4dElkLCBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgp
KSk7CiB9CiAKLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUlu
UGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQogewogICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOwogfQogCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29u
dGV4dElkKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5n
VXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlTXV0ZWQoKTsK
IH0KIAotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRNdXRlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgbXV0ZWQpCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldE11
dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKIHsKICAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLnNldE11dGVkKG11dGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCnNpbWlsYXJpdHkg
aW5kZXggNzYlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKaW5kZXggZmE5YTAwZjExYWUuLmY4ZDNj
MjQ5MjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2Nv
YS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1l
bnRFbnVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgpAQCAtNTIsMTkgKzUyLDE5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBMYXllckhvc3RpbmdDb250ZXh0OwogY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKK2NsYXNzIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworY2xh
c3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dAotICAgIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dD4KLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCB7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Cisg
ICAgOiBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pgor
ICAgICwgcHVibGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGNy
ZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0
SWQpCisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBjcmVh
dGUoVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0
SWQpKTsKICAgICB9Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dCgpOworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKTsK
IAogICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQogCkBAIC04
NCwxMyArODQsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxh
ZykgeyBtX2lzRnVsbHNjcmVlbiA9IGZsYWc7IH0KIAogcHJpdmF0ZToKLSAgICAvLyBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
CiAgICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aWRl
b0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOwog
Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQp
OwogCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciogbV9tYW5hZ2VyOworICAgIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIqIG1fbWFuYWdlcjsKICAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdD
b250ZXh0OwogICAgIGJvb2wgbV9pc0FuaW1hdGluZyB7IGZhbHNlIH07CkBAIC05OSwxMCArOTks
MTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNGdWxsc2NyZWVuIHsgZmFsc2UgfTsKIH07CiAK
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Citj
bGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2Um
LCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcigpOworICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4g
Y3JlYXRlKFdlYlBhZ2UmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7CisgICAgdmlydHVhbCB+
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwog
ICAgIApAQCAtMTE1LDI0ICsxMTUsMjQgQEAgcHVibGljOgogICAgIHZvaWQgZXhpdFZpZGVvRnVs
bHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYs
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CiAK
IHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDsKIAotICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYsIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKKyAgICBleHBsaWNpdCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKFdlYlBhZ2UmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7CiAKLSAgICB0eXBlZGVm
IHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiwgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+PiBNb2Rl
bEludGVyZmFjZVR1cGxlOworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CiAgICAgTW9kZWxJbnRlcmZh
Y2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwogICAg
IE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIGVuc3VyZU1v
ZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCByZW1v
dmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCBhZGRDbGllbnRGb3JDb250
ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCk7CiAKLSAgICAvLyBJbnRlcmZhY2UgdG8gV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dAorICAgIC8vIEludGVyZmFjZSB0byBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0CiAgICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIGhhc1ZpZGVvKTsKICAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKIAotICAgIC8v
IE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisgICAgLy8gTWVz
c2FnZXMgZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKICAgICB2b2lkIHJlcXVlc3RG
dWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSk7CiAg
ICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lk
IGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CkBAIC0xNDQsNyArMTQ0LDcg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKTsKICAgICAKICAgICBXZWJQYWdlKiBt
X3BhZ2U7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlcjsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOwogICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCosIHVp
bnQ2NF90PiBtX3ZpZGVvRWxlbWVudHM7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRl
cmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwogICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpzaW1p
bGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpyZW5hbWUgdG8gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW4KaW5kZXggMTM1OWMyNWFhZTcuLjVjNGI1Njg5NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMjEsNyArMjEsNyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAjaWYg
KFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyIHsKK21lc3NhZ2VzIC0+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgewogICAgIFJl
cXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBi
b29sIGZpbmlzaGVkV2l0aE1lZGlhKQogICAgIERpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpCiAgICAgRGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbQpzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQpyZW5hbWUg
dG8gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
bW0KaW5kZXggOTBhNDBmZDcyZDEuLjQ0NjRiZWE1Yzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQpA
QCAtMjMsMTggKzIzLDE4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogCiAjaWYgKFBMQVRGT1JN
KElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCiAKICNpbXBvcnQgIkF0dGFjaG1lbnQuaCIKICNpbXBvcnQgIkxv
Z2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbXBvcnQgIlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5o
IgogI2ltcG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ci5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CkBAIC02NSw1
NCArNjUsNTQgQEAgc3RhdGljIEludFJlY3QgaW5saW5lVmlkZW9GcmFtZShIVE1MVmlkZW9FbGVt
ZW50JiBlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkudmlldygpLT5jb250
ZW50c1RvUm9vdFZpZXcocmVjdCk7CiB9CiAKLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQKIAotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBt
YW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICA6IG1fbWFuYWdlcigmbWFuYWdl
cikKICAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKIHsKIH0KIAotV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQo
KQorVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6flZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQoKQogewogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6OnNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGlu
Z0NvbnRleHQ+JiYgY29udGV4dCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29u
dGV4dD4mJiBjb250ZXh0KQogewogICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdURk1vdmUo
Y29udGV4dCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewogICAgIGlmICht
X21hbmFnZXIpCiAgICAgICAgIG1fbWFuYWdlci0+aGFzVmlkZW9DaGFuZ2VkKG1fY29udGV4dElk
LCBoYXNWaWRlbyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9u
cykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlkZW9EaW1lbnNpb25z
Q2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBpZiAobV9t
YW5hZ2VyKQogICAgICAgICBtX21hbmFnZXItPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV9jb250
ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyk7CiB9CiAKLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKIAot
UmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmNyZWF0ZShXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKQorUmVmPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIocGFnZSwgcGxh
eWJhY2tTZXNzaW9uTWFuYWdlcikpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCiAgICAgOiBtX3BhZ2UoJnBhZ2UpCiAgICAg
LCBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIocGxheWJhY2tTZXNzaW9uTWFuYWdlcikKIHsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdl
SUQoKSwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9j
b250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CiAgICAgICAgIHN0ZDo6dGllKG1vZGVs
LCBpbnRlcmZhY2UpID0gdHVwbGU7CiAKICAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChu
dWxscHRyKTsKQEAgLTEyNiwyMCArMTI2LDIwIEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKICAgICBtX2NsaWVudENvdW50cy5jbGVhcigp
OwogICAgIAogICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlE
KCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmludmFsaWRhdGUoKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKIHsKICAgICBBU1NFUlQo
bV9wYWdlKTsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogICAgIG1fcGFnZSA9IG51bGxw
dHI7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBs
ZSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRf
dCBjb250ZXh0SWQpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVh
dGUoKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlz
LCBjb250ZXh0SWQpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gbW9kZWwgPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsK
ICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4
dElkKTsKIAogICAgIGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3Rp
bmdDb250ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOwpAQCAtMTQ4LDcg
KzE0OCw3IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV90
dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKIH0KIAotV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQogewog
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50
ZXJmYWNlVHVwbGUoKSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpAQCAtMTU2LDIw
ICsxNTYsMjAgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBs
ZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXIKICAgICByZXR1cm4gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2
NF90IGNvbnRleHRJZCkKK1dlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQp
CiB7CiAgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpKTsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkK
K1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgcmV0dXJuICpzdGQ6
OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGlu
dGVyZmFjZTsKICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKGNvbnRleHRJZCk7CiAKICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPnJl
bW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKQEAgLTE4MiwxNCArMTgyLDE0IEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpCiAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291
bnRzLmFkZChjb250ZXh0SWQsIDEpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1
aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5z
KGNvbnRleHRJZCkpOwogCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKIAog
I3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQ6CiAKLWJvb2wgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Citib29sIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAogewog
I2lmIFBMQVRGT1JNKElPUykKICAgICBVTlVTRURfUEFSQU0obW9kZSk7CkBAIC0yMTgsMTkgKzIx
OCwxOSBAQCBib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxs
c2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbgogI2VuZGlmCiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQo
SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50
ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9F
bGVtZW50LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkK
IHsKICAgICBBU1NFUlQobV9wYWdlKTsKICAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9F
bGVtZW50KCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoJXApIiwgdGhpcyk7
CiAKICAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNv
bnRleHRJZEZvck1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQpOwogICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV92aWRlb0VsZW1lbnRzLmFkZCgmdmlkZW9FbGVtZW50LCBjb250ZXh0SWQpOwogICAgIFVO
VVNFRF9QQVJBTShhZGRSZXN1bHQpOwogICAgIEFTU0VSVChhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID09IGNvbnRleHRJZCk7CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dD4gaW50ZXJmYWNlOwogICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKICAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNv
bnRleHRJZCk7CiAgICAgaWYgKCFpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKQEAg
LTI1MiwxMiArMjUyLDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlCiAKICAgICBib29sIGFs
bG93c1BpY3R1cmVJblBpY3R1cmUgPSB2aWRlb0VsZW1lbnQud2Via2l0U3VwcG9ydHNQcmVzZW50
YXRpb25Nb2RlKEhUTUxWaWRlb0VsZW1lbnQ6OlZpZGVvUHJlc2VudGF0aW9uTW9kZTo6UGljdHVy
ZUluUGljdHVyZSk7CiAgICAgCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChjb250ZXh0SWQsIGlu
dGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5jb250ZXh0SUQoKSwgdmlkZW9SZWN0LCBt
X3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKSwg
YWxsb3dzUGljdHVyZUluUGljdHVyZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3Jl
ZW5XaXRoSUQoY29udGV4dElkLCBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+Y29u
dGV4dElEKCksIHZpZGVvUmVjdCwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBpbnRlcmZh
Y2UtPmZ1bGxzY3JlZW5Nb2RlKCksIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVv
RWxlbWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVl
bkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQp
CiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCVwKSIsIHRoaXMpOworICAgIExPRyhGdWxs
c2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZp
ZGVvRWxlbWVudCglcCkiLCB0aGlzKTsKICAgICBBU1NFUlQobV9wYWdlKTsKICAgICBBU1NFUlQo
bV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKIApAQCAtMjcwLDEyICsy
NzAsMTIgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUwKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aW50ZXJmYWNlLnNldElzQW5pbWF0aW5nKHRydWUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjb250ZXh0
SWQsIGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpF
eGl0RnVsbHNjcmVlbihjb250ZXh0SWQsIGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KSks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxW
aWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCiB7Ci0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuVG9N
b2RlV2l0aG91dEFuaW1hdGlvbiglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5p
bWF0aW9uKCVwKSIsIHRoaXMpOwogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpCiAgICAgQVNTRVJUKG1fcGFnZSk7CkBAIC0yODYsNDIgKzI4Niw0
MiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5U
b01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcgogCiAgICAgaW50ZXJmYWNlLnNldFRhcmdldElz
RnVsbHNjcmVlbihmYWxzZSk7CiAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9N
b2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNj
cmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoY29udGV4dElkLCB0YXJnZXRNb2RlKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2aWRlb0VsZW1lbnQpOwogICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXRNb2RlKTsKICNlbmRpZgogfQogCi0jcHJhZ21hIG1hcmsgSW50
ZXJmYWNlIHRvIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6CisjcHJhZ21hIG1h
cmsgSW50ZXJmYWNlIHRvIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBoYXNWaWRlbykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aGFzVmlk
ZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKIHsKICAgICBpZiAo
bV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6U2V0SGFzVmlkZW8oY29udGV4dElkLCBoYXNWaWRlbyksIG1fcGFnZS0+
cGFnZUlEKCkpOworICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6U2V0SGFzVmlkZW8oY29udGV4dElkLCBoYXNWaWRlbyksIG1fcGFnZS0+
cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVv
RGltZW5zaW9ucykKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6dmlkZW9EaW1lbnNpb25z
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNp
b25zKQogewogICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoY29udGV4
dElkLCB2aWRlb0RpbWVuc2lvbnMpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFZpZGVvRGlt
ZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6CisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1bGxzY3Jl
ZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBj
b250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQogewogICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkucmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVs
bHNjcmVlbk1vZGUpCiB7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmRpZFNldHVwRnVsbHNjcmVlbiglcCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbigl
cCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKIAogICAgIEFTU0VSVChtX3BhZ2UpOwogICAgIFBs
YXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CkBAIC0zNDAsMzAgKzM0
MCwzMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yID0gbV9w
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIFt2aWRlb0xheWVyIHNldFRyYW5zZm9ybTpD
QVRyYW5zZm9ybTNETWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3RvciwgaG9zdGluZ1NjYWxlRmFj
dG9yLCAxKV07CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
PiBpbnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlOwogICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKTsKIAogICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4
dCgpLT5zZXRSb290TGF5ZXIodmlkZW9MYXllcik7CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAKICAgICBtb2RlbC0+c2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9MYXllciwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNv
bnRleHRJZF0gewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7CiAgICAgICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1bGxzY3JlZW4oY29u
dGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgICAgICAg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVu
dGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgp
KTsKICAgICAgICAgfSk7CiAgICAgfSk7CiAgICAgCiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0
XTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbiglcCwg
JXgpIiwgdGhpcywgY29udGV4dElkKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbiglcCwgJXgpIiwgdGhpcywgY29udGV4dElk
KTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVs
OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7
CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpOwogCiAgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CkBA
IC0zNzcsMjEgKzM3NywyMSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIGV4aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1
cmluZyBhbiBhbmltYXRpb24uCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+
IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudF0gewogICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+bV9wYWdlKQogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZXhpdFZp
ZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50KTsKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCVwLCAleCkiLCB0aGlzLCBj
b250ZXh0SWQpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
ZGlkRXhpdEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7CiAKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgUmVm
UHRyYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwogICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICAKICAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihbcHJvdGVj
dGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7CiAgICAgICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0
SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKQEAgLTQwMiwxOSArNDAyLDE5IEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250
ZXh0KG51bGxwdHIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9w
YWdlLT5wYWdlSUQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5t
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Q2xlYW51
cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAgICAg
fSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3Jl
ZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbiglcCwgJXgpIiwgdGhpcywg
Y29udGV4dElkKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ+IGludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpOwogCiAgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhm
YWxzZSk7CkBAIC00MzEsMTkgKzQzMSwxOSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBpZiAoIXZp
ZGVvRWxlbWVudCB8fCAhdGFyZ2V0SXNGdWxsc2NyZWVuKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVk
VGhpcywgdmlkZW9FbGVtZW50LCBtb2RlXSB7CiAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5t
X3BhZ2UpCiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5lbnRlclZpZGVvRnVsbHNjcmVlbkZv
clZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50LCBtb2RlKTsKICAgICB9KTsKIH0KICAgICAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVp
bnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5z
aWduZWQgZ3Jhdml0eSkKIHsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldFZpZGVvTGF5
ZXJHcmF2aXR5KChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KWdyYXZpdHkp
OworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdyYXZpdHkoKFZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7CiB9CiAgICAgCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBpc1BhZ2VWaXNpYmxlKQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47
CkBAIC00NTIsMTUgKzQ1MiwxNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsCiAKICAgICBpZiAo
IWlzUGFnZVZpc2libGUpCiAgICAgICAgIG1vZGVsLnZpZGVvRWxlbWVudCgpLT5zY3JvbGxJbnRv
Vmlld0lmTm90VmlzaWJsZShmYWxzZSk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShjb250
ZXh0SWQsIHRydWUsIGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLnZpZGVvRWxlbWVudCgpKSksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVl
LCBpbmxpbmVWaWRlb0ZyYW1lKCptb2RlbC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9M
YXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJv
dW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKIHsKLSAgICBM
T0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJG
cmFtZUZlbmNlZCglcCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKyAgICBMT0coRnVsbHNjcmVl
biwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCglcCwg
JXgpIiwgdGhpcywgY29udGV4dElkKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2U7CiAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogCiAgICAgaWYgKHN0ZDo6aXNuYW4o
Ym91bmRzLngoKSkgfHwgc3RkOjppc25hbihib3VuZHMueSgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5k
cy53aWR0aCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy5oZWlnaHQoKSkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCA3NDNmY2RkZmZlYS4uMTg5YjBmNzJhY2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wNy0yMSAgSmVyZW15IEpv
bmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJv
bSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2VzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHJlZHVu
ZGFudCBXZWItIHByZWZpeCBmcm9tIGNsYXNzZXMgaW4gV2ViS2l0IG5hbWVzcGFjZS4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5
YmFja0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxlbWVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlZpZXdEYXRhLmg6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKwogMjAx
Ny0wNy0yMSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVXNl
IG1vcmUgcmVmZXJlbmNlcyBpbiBldmVudCBkaXNwYXRjaCBjb2RlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggMjQzMzVhY2E1NmYuLmZlYWNjNjVlZTBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0zMTYs
OCArMzE2LDggQEAKIAogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpCi0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNl
bmRpZgogCiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCkBAIC05MjY1LDExICs5MjY1LDEx
IEBAIC0gKHZvaWQpX3NldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJGb3JNZWRpYUVsZW1lbnQ6
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
X3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAgICBfcHJpdmF0ZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwgPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3Jl
YXRlKCk7CisgICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKICAgICBfcHJpdmF0ZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwtPnNldE1lZGlhRWxlbWVudCgmbWVkaWFFbGVtZW50KTsKIAogICAgIGlm
ICghX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICAgICAgX3ByaXZhdGUt
PnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6Y3JlYXRlKCpfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwpOworICAgICAgICBfcHJp
dmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpjcmVhdGUoKl9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCk7CiAKICAgICBbc2Vs
ZiB1cGRhdGVUb3VjaEJhcl07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXdEYXRhLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlZpZXdEYXRhLmgKaW5kZXggYTc4YjA5MGUwN2IuLmJkZWRmNzczZGRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCkBAIC01NCw4ICs1NCw4
IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93OwogY2xhc3MgVmFsaWRh
dGlvbkJ1YmJsZTsKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OworY2xhc3MgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CiAj
ZW5kaWYKIH0KIApAQCAtMzM4LDggKzMzOCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIFJlZlB0
cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJhY2tT
ZXNzaW9uTW9kZWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYz4gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJhY2tTZXNzaW9uTW9kZWw7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0
YS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5k
ZXggNzc5NzM2YTE2YWYuLmY5MzBmYTk2Yzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KQEAgLTUxLDggKzUxLDggQEAKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0jaW1w
b3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNlbmRpZgogCiBCT09MIGFwcGxp
Y2F0aW9uSXNUZXJtaW5hdGluZyA9IE5POwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316322</attachid>
            <date>2017-07-24 15:11:53 -0700</date>
            <delta_ts>2017-07-27 21:12:17 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-174437-20170724151152.patch</filename>
            <type>text/plain</type>
            <size>694020</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmExYTViMTM2MWYyOWJh
MGExZmZmZjJkYmExZDYzNzY5NDVhNjQ3YS4uMDk2OTgxZjFhNzU5ZTQzY2ZlYmI4ZTY4YjkyY2Zi
Y2NiMGM1MGMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE3LTA3LTIxICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgV2ViIHByZWZp
eCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNzaW9uIGNsYXNzZXMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0MzcK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVz
dHMgYmVjYXVzZSBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgUmVtb3ZlIHJlZHVuZGFu
dCBXZWItIHByZWZpeCBmcm9tIGNsYXNzZXMgaW4gV2ViQ29yZSBuYW1lc3BhY2UuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmguCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2U6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1BsYXliYWNrU2Vzc2lvbk1vZGVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oLgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uTW9kZWw6On5QbGF5YmFja1Nlc3Npb25Nb2RlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDo6flBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmguCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9W
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOjp+VmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1vZGVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuTW9kZWw6On5WaWRlb0Z1bGxzY3JlZW5Nb2RlbCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nv
Y29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0uCisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0uCisgICAg
ICAgICogcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJB
VlBsYXllckNvbnRyb2xsZXIubW06CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmguCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbTogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKwogMjAxNy0wNy0yMSAgS29uc3RhbnRp
biBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgW2NtYWtlXVtNYWNdIFVu
cmV2aWV3ZWQsIGZpeCBsaW5raW5nIFdlYktpdFN5c3RlbUludGVyZmFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3
ZDJhNmYyNWJmYjNjYmMxYTRjYmIxMjVjYzEyMTExZDJkNzJmZDE5Li4zZTVhNmYwOWQ0OTNhMjU4
NGNkZTJiYzMxY2M1ODBjOTQ2NDZmNDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE3
LTA3LTIxICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1v
dmUgV2ViIHByZWZpeCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNz
aW9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQ0MzcKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBSZW1vdmUgcmVkdW5kYW50IFdlYi0gcHJlZml4IGZyb20gY2xhc3NlcyBpbiBXZWJLaXQgbmFt
ZXNwYWNlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW06IEFkZGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbTogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZU1lZGlh
VG91Y2hCYXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjptX3dlYWtQdHJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAg
ICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp2aWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbi4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW06IEFkZGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIuaC4KKyAgICAgICAgKFdlYktpdDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
Y29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW06IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
bS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW06IFJlbW92ZWQuCisKIDIwMTctMDctMjEgIEtvbnN0YW50aW4gVG9rYXJldiAgPGFubnVsZW5A
eWFuZGV4LnJ1PgogCiAgICAgICAgIFtjbWFrZV1bTWFjXSBVbnJldmlld2VkLCBmaXggbGlua2lu
ZyBXZWJLaXRTeXN0ZW1JbnRlcmZhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA3
NDNmY2RkZmZlYTg5YjJhMDcyYmE4OGFhZmRiZDdiY2U4YmIwYWY2Li4zOTA1YTE1YmI2NTdmNTE3
ODczMjI4YzM3MjVjOTg0Y2NjN2U0ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTctMDctMjEgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbW92ZSBXZWIgcHJlZml4IGZyb20gV2ViVmlkZW9GdWxsc2NyZWVu
IGFuZCBXZWJQbGF5YmFja1Nlc3Npb24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDQzNworCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIFJlbW92ZSByZWR1bmRhbnQgV2ViLSBwcmVmaXggZnJvbSBj
bGFzc2VzIGluIFdlYktpdCBuYW1lc3BhY2UuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dlYlZpZXcgX3NldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJGb3JN
ZWRpYUVsZW1lbnQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5oOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlld0RhdGEubW06CisKIDIwMTctMDctMjEgIEFuZHJlYXMgS2xpbmcg
IDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBtb3JlIHJlZmVyZW5jZXMgaW4gZXZl
bnQgZGlzcGF0Y2ggY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDYyZmNkNGQ5Y2UyNjI5YjExYzVlZmUyMzVmZGQxZjI2ZmVj
ZTExZDguLmMzMGRkMGNhNmFmM2MwYjg1MjYwNTY5ZWM3YWZjNGUxNWM5Nzc4YTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2
ODMsOCArMTY4Myw4IEBACiAJCTNGODAyMDM2MUU5RTQ3QzMwMERFQzYxRCAvKiBDb3JlQXVkaW9D
YXB0dXJlRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGODAyMDMxMUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNl
LmNwcCAqLzsgfTsKIAkJM0Y4MDIwMzcxRTlFNDdDNTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1
cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmlj
ZU1hbmFnZXIuaCAqLzsgfTsKIAkJM0Y4MDIwMzgxRTlFNDdDOTAwREVDNjFEIC8qIENvcmVBdWRp
b0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDNGODAyMDMzMUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0
dXJlRGV2aWNlTWFuYWdlci5jcHAgKi87IH07Ci0JCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKLQkJM0ZCQzRBRjQxODk4
ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMjE4OTg4MTU2
MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzRkJDNEFGMzE4OTg4MTU2
MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMTE4OTg4MTU2MDA0NkVF
MzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi87IH07CisJCTNGQkM0QUY0
MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjIxODk4ODE1
NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZGMUZBNjYxRTczNTBGRDAw
QzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0YzQkI1ODIxRTcwOUVFNDAwQzcwMUYyIC8qIENv
cmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwICovOyB9OwogCQkzRkY4MTNBNzFEQkE4NjQwMDA5QkYw
MDEgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxv
Y2tDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJM0ZGRkY5QTgxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkZG
RjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcCAqLzsgfTsK
QEAgLTI0NjYsMTEgKzI0NjYsMTEgQEAKIAkJNTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2IC8qIEpT
Q2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLzsgfTsK
IAkJNTFGQjY3REIxQUU2QjgyQjAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI2
N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi87
IH07CiAJCTUxRkI2N0RDMUFFNkI4MkYwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVT
aGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
QjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTIxMzFFNUIx
QzRGMTU3NjAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMxRTVBMUM0RjE1
NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi87IH07CisJ
CTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMUU1
QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovOyB9
OwogCQk1MjY3MjRGMzFDQjJGRUFEMDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
NjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1t
ICovOyB9OwogCQk1MkIwRDRCRTFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRDFDNTdG
RDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJCMEQ0QzAxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNTJCMEQ0QzAxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRD
MTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJCNkM5QzIxNUUz
RjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QkQxNUUzRjRERjAwNjkwQjA1
IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk1MkI2QzlDMzE1RTNGNERG
MDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QkUxNUUzRjRERjAwNjkwQjA1IC8qIERP
TU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJNTJCNkM5QzUxNUUzRjRERjAwNjkwQjA1
IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QzAxNUUzRjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0Nv
bGxlY3Rpb24uY3BwICovOyB9OwpAQCAtMjQ3OCw5ICsyNDc4LDkgQEAKIAkJNTJDQ0E5RTIxNUUz
RjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNDQTlFMDE1RTNGNjJDMDA1M0M3
N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJNTJDQ0E5RTMxNUUz
RjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5RTExNUUzRjYyQzAwNTNDNzdG
IC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovOyB9OwogCQk1MkQ1QTE4RjFDNTQ1OTIz
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExOEQxQzU0NTkwMzAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSAqLzsgfTsKLQkJNTJENUExQTcxQzU3
NDg5RDAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLzsgfTsKKwkJNTJENUExQTcxQzU3
NDg5RDAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0QTMgLyogVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5tbSAqLzsgfTsKIAkJNTJFMkNBRkMxOUZGMDIwNzAwMUVFQjRGIC8qIE1l
ZGlhUHJvZHVjZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJGMTA4NjUxNjJCNkRB
NDAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1p
eGVkQ29udGVudENoZWNrZXIuY3BwICovOyB9OwogCQk1MkYxMDg2NjE2MkI2REE4MDA5QUM4MUUg
LyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJGMTA4NjMxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENo
ZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNjE3MywxNSArNjE3MywxNSBAQAogCQlDREEwN0ZCRTE4RTBBMTZBMDA0Njk5RkEgLyogU3lz
dGVtU2xlZXBMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RBMDdGQkMxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREEw
N0ZDMTE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTA3RkJGMThFMEEyMkIw
MDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tICovOyB9OwogCQlDREEwN0ZDMjE4
RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQzAxOEUwQTIyQjAwNDY5OUZB
IC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMuaCAqLzsgfTsKLQkJQ0RBMjlBMDkxQ0JEOTlGNDAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tICovOyB9OwotCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovOyB9OwotCQlDREEyOUExNzFDQkRBNTZDMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OworCQlDREEyOUEwOTFDQkQ5OUY0
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEw
RTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwQzFD
QkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87
IH07CisJCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi87
IH07CisJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEz
MDFDQkY3NEQ0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRjFDQkY3
M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gKi87IH07CiAJ
CUNEQTI5QTMxMUNCRjc0REEwMDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRDFDQkY3
M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tICovOyB9OwotCQlDREEyOUEz
MjFDQzAxQTk1MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJFMUNC
RjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNEQTI5QTMyMUND
MDFBOTUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkUxQ0JGNzNGQzAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RBNzk4MjQxNzBBMjU4MzAwRDQ1
QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREE3OTgyMzE3MEEyNTgzMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmNw
cCAqLzsgfTsKIAkJQ0RBNzk4MjcxNzBBMjc5MTAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTc5ODI1
MTcwQTI3OTAwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0gKi87IH07CiAJCUNEQTc5ODJB
MTcwQTNEMDAwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTc5ODIxMTcwQTIyREMwMEQ0NUM1NSAvKiBBdWRp
b1Nlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtOTI5Nyw4ICs5Mjk3LDggQEAKIAkJM0Y4MDIwMzIxRTlFMzgxRDAwREVDNjFEIC8qIENv
cmVBdWRpb0NhcHR1cmVEZXZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29yZUF1ZGlvQ2FwdHVyZURldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
RjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjgwMjAz
NDFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFn
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0ZCQzRBRjExODk4ODE1NjAwNDZF
RTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGQkM0QUYyMTg5ODgxNTYwMDQ2
RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVmll
d3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QTcxNTlE
OUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QUIxNTlEOUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0U3R5bGVS
ZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3cG9y
dFN0eWxlUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxOTMs
MTIgKzEwMTkzLDEyIEBACiAJCTUxRkI1NTAzMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDbG9zZUV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjY3RDkxQUU2QjVFNDAwRDA2
QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRl
bnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYx
MUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjIxQ0IyRkRG
NjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxh
dGZvcm1WaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmll
dy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NF
NTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjZDOUJEMTVFM0Y0REYw
MDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlCRTE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01OYW1l
ZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjZDOUJG
MTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwMjA4LDkgKzEwMjA4LDkgQEAKIAkJNTJDQ0E5RTExNUUzRjYyQzAw
NTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bkxheWVyTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTJENUExOEUxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQTQxQzU3
NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVv
RnVsbHNjcmVlbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVv
RnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE1
MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBNjFDNTc0ODg5
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFMkNBRkIxOUZGMDIw
NzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFQcm9kdWNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkYx
MDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNaXhlZENvbnRlbnRDaGVja2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGMTA4NjMxNjJCNkQ4MjAwOUFDODFFIC8qIE1p
eGVkQ29udGVudENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWl4
ZWRDb250ZW50Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2Nzks
MTYgKzE0Njc5LDE2IEBACiAJCUNEQTA3RkJDMThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVl
cExpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVNsZWVw
TGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQkYxOEUwQTIy
QjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREEwN0ZDMDE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVt
U2xlZXBMaXN0ZW5lck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0
ZW1TbGVlcExpc3RlbmVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5
QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
QTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTE0
MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTE1MUNCREE1NkMw
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5QTJDMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBs
YXllckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQVZQ
bGF5ZXJDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5QTJE
MUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBVlBsYXllckNvbnRyb2xsZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEF1ZGlvU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE3OTgy
MzE3MEEyNTgzMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNEQTc5ODI1MTcwQTI3OTAwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdWRpb1Nlc3Npb25JT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTA2NSwxNCArMTkwNjUsMTQgQEAK
IAkJCQlFMUEzMTYyQzEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0
cmFzLm1tICovLAogCQkJCUNENTg5NkUwMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlci5oICovLAogCQkJCUNENTg5NkRGMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSAqLywKLQkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8sCi0JCQkJQ0RBMjlBMTQx
Q0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLywK
KwkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggKi8sCisJCQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5tbSAqLywKIAkJCQlDRDgyMDMwNjEzOTVBQjZBMDBGOTU2QzYgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oICovLAogCQkJCUNEODIwMzA3MTM5NUFCNkEwMEY5
NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovLAogCQkJCUNEODIwMzA4
MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
LmggKi8sCiAJCQkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8sCi0JCQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovLAotCQkJCTUyMTMxRTVBMUM0
RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8sCisJ
CQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oICovLAorCQkJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldp
bmRvd0FuaW1hdGlvbi5oICovLAogCQkJCUNEODIwMzBGMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJX
aW5kb3dBbmltYXRpb24ubW0gKi8sCiAJCQkJOTM4MEY0NzcwOUExMUFDQzAwMUZEQjM0IC8qIFdp
ZGdldE1hYy5tbSAqLywKQEAgLTIxMDcyLDE0ICsyMTA3MiwxNCBAQAogCQkJCUZFMEQ4NEVBMTA0
ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLywKIAkJCQlGNDgyMjMwRjFFMzg2OUI4MDA2
NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5oICovLAogCQkJCUY0ODIyMzBFMUUz
ODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLm1tICovLAotCQkJCUNE
QTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oICovLAotCQkJCUNEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLywKKwkJCQlDREEyOUEyRjFDQkY3M0ZD
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJMUY4
NzU2QjExRTIyQkVFRjAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5o
ICovLAogCQkJCTFGODc1NkIwMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRy
YWNrZXJDbGllbnQubW0gKi8sCiAJCQkJM0Y0MkIzMUIxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oICovLAogCQkJCTNGNDJCMzFDMTg4MTE5MUIw
MDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8sCi0JCQkJ
M0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LmggKi8sCi0JCQkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0Lm1tICovLAorCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAorCQkJCTNGQkM0QUYxMTg5ODgx
NTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQlF
NDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBpb3M7CkBAIC0yMTEyNiwxNCArMjExMjYsMTQgQEAKIAkJCQlDREM5NzlGMzFDNDk4QzA5
MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJyb3JFeHRyYXMuaCAqLywKIAkJCQlDREM5NzlGMjFDNDk4
QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJyb3JFeHRyYXMubW0gKi8sCiAJCQkJNURGRUJBQjYx
ODU5MkI2RDAwQzc1QkVCIC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovLAotCQkJCUNEQTI5QTA4
MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLywKLQkJ
CQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAq
LywKLQkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQuaCAqLywKLQkJCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCi0JCQkJNTJCMEQ0QkYxQzU3
RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8sCi0J
CQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgg
Ki8sCi0JCQkJNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggKi8sCi0JCQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovLAorCQkJCUNEQTI5QTA4MUNC
RDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLywKKwkJCQlDREEy
OUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLywKKwkJCQlD
REEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaCAqLywKKwkJCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8q
IFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8sCisJCQkJNTJENUExQTQxQzU3NDg4
OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8sCisJCQkJNTJENUExQTUxQzU3
NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCisJ
CQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50Lm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0zMDAxMywxMSArMzAwMTMsMTEgQEAKIAkJCQkwNzA5RDc5MzFBRTU1NTdF
MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTFBMzE2MkQxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1ODk2RTIxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEwOTFDQkQ5
OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAq
LywKLQkJCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEwOTFD
QkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5
QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0FGMzQ4MTBBNkM0MDUyMDBBQkUw
NkUgLyogV2ViU2NyaXB0T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0FGMzQ4MzBBNkM0
MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUE1NjlEMUIwRDdFMkI4MjAwN0MzOTgzIC8qIFdlYlNjcmlwdE9iamVjdFByb3RvY29sLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMwMDM0LDE0ICszMDAzNCwxNCBAQAogCQkJCTFGODc1NkIyMUUy
MkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJv
cExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyog
V2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyQjBENEMwMUM1N0ZE
NjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTJCMEQ0QzAxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDgyMDMwQTEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
M0Y0MkIzMUQxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJB
VktpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q4MjAzMEMxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUEx
QTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTNGQkM0QUY0MTg5ODgxNTYw
MDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkQ1QTFBODFDNTc0OEEz
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MDE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRU
VG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMzM3MTYsOSArMzM3MTYsOSBAQAogCQkJCTA3MDlE
NzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxQTMxNjJFMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0
ZWRTdHJpbmdFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDU4OTZFMTFDRDJCMTUxMDBC
M0JDQzggLyogV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQubW0gaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RB
MjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlB
MTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCUNEQTI5QTBFMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDQUYzNDgyMEE2QzQw
NTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk5N0FB
QkQxQTE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3QUFCRDFEMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMzM3MzQsOSArMzM3MzQsOSBAQAogCQkJCUNEODIwMzBCMTM5NUFCNkEwMEY5
NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJM0Y0MkIzMUUxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJBVktpdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEODIwMzBEMTM5NUFCNkEwMEY5NTZDNiAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAy
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUy
MTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0g
aW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFBOTFDNTc0OEE5MDBERTM0QTMgLyogVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlGMTIxNzFGNTE2
QThDRUQyMDAwMDUzQ0EgLyogV2ViVlRURWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
RDIxQTgwMjEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIxMEI2OTgxMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRl
eCBhZmNkNzBiOTA4ODE2NDkyN2U5Nzg3MWQyYWVkZGNmOWMzMWFkYTg2Li5jMDIzY2FkNzdjZDJj
MjkxMjc4MmQyODVlMzdmYTI3NDc5MDIwMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQAogCiAjaWYgUExBVEZPUk0oSU9TKQog
I2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgotI2luY2x1ZGUgIldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKQEAgLTE1Niw3ICsxNTYsNyBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW5j
bHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC5oIgogI2VuZGlmCiAKICNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChmbXQs
IC4uLikgUkVMRUFTRV9MT0dfSUYoZG9jdW1lbnQoKS5wYWdlKCkgJiYgZG9jdW1lbnQoKS5wYWdl
KCktPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBNZWRpYSwgIiVwIC0gSFRNTE1lZGlhRWxl
bWVudDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmNwcAppbmRleCA3ZmQxM2ZhZWI2MzgyODUxNDdhZGEzNGI3NDdkMWMxMDkz
Y2NmM2Y2Li5jZjg1MTZkOGMwNjk3NDExNzM0NjMyMjg1YTI0YWI4NTgyMWEwMzQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNp
bmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKICNpZiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlICJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDEwNWVmNmRiMzI3MGYzMTViNzc1Yzc0MmYzNTE1Y2UwMTg2
NzA1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgVGltZVJhbmdlczsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UoKSB7IH07
CisgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpID0gMDsKK307CisKK30KKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg3NDQxNTc0NjlhMmE3YjJl
NzYzOWUxZjlhM2FlNzE0ZGYyODY0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsLmgKQEAgLTAsMCArMSwxMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRpbWVSYW5nZXM7Citj
bGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDsKK3N0cnVjdCBNZWRpYVNlbGVjdGlvbk9w
dGlvbjsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWwgeworcHVibGljOgorICAgIHZpcnR1
YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBhZGRDbGll
bnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
bW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdp
blNjcnViYmluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2NydWJiaW5nKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFj
a3dhcmQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB0b2dnbGVNdXRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0
ZWQoYm9vbCkgPSAwOworCisgICAgZW51bSBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB7IFRh
cmdldFR5cGVOb25lLCBUYXJnZXRUeXBlQWlyUGxheSwgVGFyZ2V0VHlwZVRWT3V0IH07CisKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGN1
cnJlbnRUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGJ1ZmZlcmVkVGltZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0
IHBsYXliYWNrUmF0ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZjxUaW1lUmFuZ2VzPiBz
ZWVrYWJsZVJhbmdlcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBzZWVrYWJsZVRp
bWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91Ymxl
IGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUGxh
eUZhc3RSZXZlcnNlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdWludDY0X3QgbGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZXh0ZXJuYWxQbGF5
YmFja0VuYWJsZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTXV0ZWQoKSBjb25zdCA9IDA7Cit9OworCitjbGFz
cyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGxh
eWJhY2tTZXNzaW9uTW9kZWxDbGllbnQoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9u
Q2hhbmdlZChkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQo
ZG91YmxlIC8qIGN1cnJlbnRUaW1lICovLCBkb3VibGUgLyogYW5jaG9yVGltZSAqLykgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIC8qIHBsYXliYWNrU3Rh
cnRlZFRpbWUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCByYXRlQ2hhbmdlZChib29sIC8qIGlz
UGxheWluZyAqLywgZmxvYXQgLyogcGxheWJhY2tSYXRlICovKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgLyogbGFz
dE1vZGlmaWVkICovLCBkb3VibGUgLyogbGl2ZUludGVydmFsICovKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlvbnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXgg
Ki8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1
aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4ICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXVkaW9N
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJp
bmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIG11dGVkQ2hhbmdlZChib29sKSB7IH0KK307CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Q
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwN2M0ZjZjYTk4
N2JlYTdlYTUzOWEyMWE0YmVhMWNmNTdiZDg5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5o
CkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJIVE1M
TWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1Ry
YWNrOworY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKK2NsYXNzIFRleHRUcmFjazsKK2NsYXNzIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWwsIHB1YmxpYyBFdmVu
dExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7CisgICAgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCop
OworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWVkaWFFbGVtZW50LmdldCgpOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUV2
ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXZWJDb3JlOjpFdmVudCYpIGZp
bmFsOworICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5n
Jik7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykgY29uc3Qg
ZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+
KHRoaXMpID09ICZyaHM7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1v
dmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHBsYXkoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhdXNlKCkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5k
U2Nhbm5pbmcoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU11dGVkKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKKworICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0
IGZpbmFsOworICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IGZpbmFsOworICAgIGRvdWJs
ZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUGxheWluZygpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFsOworICAgIFJlZjxUaW1l
UmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBzZWVrYWJs
ZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGxp
dmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgY2FuUGxheUZhc3RSZXZl
cnNlKCkgY29uc3QgZmluYWw7CisgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsOworICAgIHVpbnQ2NF90IGF1ZGlv
TWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7CisgICAgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWw7Cisg
ICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdCBmaW5hbDsKKyAgICBFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZp
bmFsOworICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbDsKKworcHJvdGVjdGVkOgor
ICAgIFdFQkNPUkVfRVhQT1JUIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCgpOworICAgIHN0YXRp
YyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsK
KyAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lQWxsKCk7CisKKyAgICBSZWZQ
dHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CisgICAgYm9vbCBtX2lzTGlzdGVu
aW5nIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0PFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4g
bV9jbGllbnRzOworICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tz
Rm9yTWVudTsKKyAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9y
TWVudTsKKworICAgIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3Q7CisgICAgdm9p
ZCB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZU1lZGlhU2Vs
ZWN0aW9uSW5kaWNlcygpOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYyOWM4MDAyMDY5N2FjMzI0YjNjYzgzMjZkYzYyOTY5
ZWZjYzI2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCkBAIC0wLDAgKzEsNTM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbXBvcnQgIkF1
ZGlvVHJhY2tMaXN0LmgiCisjaW1wb3J0ICJFdmVudC5oIgorI2ltcG9ydCAiRXZlbnRMaXN0ZW5l
ci5oIgorI2ltcG9ydCAiRXZlbnROYW1lcy5oIgorI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKKyNp
bXBvcnQgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
Ik1lZGlhQ29udHJvbHNIb3N0LmgiCisjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgor
I2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJUZXh0VHJh
Y2tMaXN0LmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0Nv
cmVBbmltYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8
d3RmL1NvZnRMaW5raW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkK
KyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUp
Cit7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQoKQoreworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50KQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCA9PSBtZWRpYUVsZW1lbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAg
ICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0
aGlzLCBmYWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLnJlbW92
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOwor
ICAgICAgICBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgIH0KKyAgICBtX2lz
TGlzdGVuaW5nID0gZmFsc2U7CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5yZXNldFBsYXliYWNrU2Vzc2lvblN0YXRlKCk7CisKKyAgICBtX21lZGlh
RWxlbWVudCA9IG1lZGlhRWxlbWVudDsKKworICAgIGlmIChtX21lZGlhRWxlbWVudCkgeworICAg
ICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQorICAgICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywg
ZmFsc2UpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKS5hZGRFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKKyAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9pc0xpc3RlbmluZyA9IHRy
dWU7CisgICAgfQorCisgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50JiBldmVudCkKK3sK
KyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQudHlwZSgpKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6
QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit7CisgICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgYWxsID0gZXZlbnROYW1lID09IGV2ZW50TmFt
ZUFsbCgpOworCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpIHsKKyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gdGhp
cy0+ZHVyYXRpb24oKTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAg
ICAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKKyAgICAgICAgLy8g
VGhlc2UgaXMgbm8gc3RhbmRhcmQgZXZlbnQgZm9yIG1pbkZhc3RSZXZlcnNlUmF0ZUNoYW5nZTsg
ZHVyYXRpb24gY2hhbmdlIGlzIGEgcmVhc29uYWJsZSBwcm94eSBmb3IgaXQuCisgICAgICAgIC8v
IEl0IGhhcHBlbnMgZXZlcnkgdGltZSBhIG5ldyBpdGVtIGJlY29tZXMgcmVhZHkgdG8gcGxheS4K
KyAgICAgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UgPSB0aGlzLT5jYW5QbGF5RmFzdFJldmVy
c2UoKTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAg
IGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOwor
ICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5aW5n
RXZlbnQpIHsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAg
ICAgIGNsaWVudC0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGlt
ZSgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkucGF1c2VFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygp
LnBsYXlFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJhdGVjaGFu
Z2VFdmVudCkgeworICAgICAgICBib29sIGlzUGxheWluZyA9IHRoaXMtPmlzUGxheWluZygpOwor
ICAgICAgICBmbG9hdCBwbGF5YmFja1JhdGUgPSB0aGlzLT5wbGF5YmFja1JhdGUoKTsKKyAgICAg
ICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+cmF0
ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOworICAgIH0KKworICAgIGlmIChhbGwK
KyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQpIHsK
KyAgICAgICAgYXV0byBjdXJyZW50VGltZSA9IHRoaXMtPmN1cnJlbnRUaW1lKCk7CisgICAgICAg
IGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0
aW1lXTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAg
IGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKKyAg
ICB9CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCku
cHJvZ3Jlc3NFdmVudCkgeworICAgICAgICBhdXRvIGJ1ZmZlcmVkVGltZSA9IHRoaXMtPmJ1ZmZl
cmVkVGltZSgpOworICAgICAgICBhdXRvIHNlZWthYmxlUmFuZ2VzID0gdGhpcy0+c2Vla2FibGVS
YW5nZXMoKTsKKyAgICAgICAgYXV0byBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1l
ID0gdGhpcy0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpOworICAgICAgICBh
dXRvIGxpdmVVcGRhdGVJbnRlcnZhbCA9IHRoaXMtPmxpdmVVcGRhdGVJbnRlcnZhbCgpOworICAg
ICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgICAgICBjbGllbnQt
PmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+
c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBzZWVrYWJsZVRpbWVSYW5nZXNM
YXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmFkZHRy
YWNrRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFj
a0V2ZW50KQorICAgICAgICB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKKworICAgIGlm
IChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50
cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KSB7CisgICAgICAgIGJvb2wgZW5h
YmxlZCA9IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCk7CisgICAgICAgIEV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpOwor
ICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGV4dGVybmFsUGxheWJhY2tMb2Nh
bGl6ZWREZXZpY2VOYW1lKCk7CisKKyAgICAgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCA9IHRoaXMtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCk7CisKKyAgICAg
ICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgeworICAgICAgICAgICAgY2xpZW50LT5l
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZp
Y2VOYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFdlIGRvbid0IGNhbGwgdXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkg
aW4gdGhlIGFsbCBjYXNlLCBzaW5jZQorICAgIC8vIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cygpIHdpbGwgYWxzbyB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpbmRpY2VzLgorICAgIGlmIChldmVu
dE5hbWUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50KQorICAgICAgICB1cGRhdGVNZWRpYVNl
bGVjdGlvbkluZGljZXMoKTsKKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCkgeworICAgICAgICBmb3IgKGF1dG8gY2xp
ZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQoaXNNdXRl
ZCgpKTsKKyAgICB9Cit9Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojph
ZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NF
UlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xp
ZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cmVtb3Zl
Q2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJU
KG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xp
ZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheSgp
Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxh
eSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwYXVzZSgp
Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1
c2UoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xl
UGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVu
dCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygpCit7CisgICAg
aWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5n
KCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1Rp
bWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21l
ZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQoreworICAgIGlmICht
X21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5n
Rm9yd2FyZCgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxl
bWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5n
QmFja3dhcmQoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpCYWNrd2FyZCk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjYW5uaW5n
KCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5l
bmRTY2FubmluZygpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVjdGVkQXVkaW9JbmRleCkKK3sK
KyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMCwgc2l6ZSA9IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJsZWQoaSA9PSBz
ZWxlY3RlZEF1ZGlvSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAg
aWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dFRyYWNrKiB0
ZXh0VHJhY2s7CisgICAgaWYgKGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5zaXplKCkp
CisgICAgICAgIHRleHRUcmFjayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnVbc3RhdGljX2Nhc3Q8
c2l6ZV90PihpbmRleCldLmdldCgpOworICAgIGVsc2UKKyAgICAgICAgdGV4dFRyYWNrID0gVGV4
dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKKworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRT
ZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2spOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBpZiAobV9t
ZWRpYUVsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgPT0gTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5l
eGl0RnVsbHNjcmVlbigpOworICAgIGVsc2UKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVudGVy
RnVsbHNjcmVlbihNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUlu
UGljdHVyZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRv
Z2dsZU11dGVkKCkKK3sKKyAgICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRNdXRlZCht
dXRlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1f
bWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5j
ZXMoKTsKKyAgICBhdXRvJiB0ZXh0VHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3Mo
KTsKKyAgICBpZiAodGV4dFRyYWNrcy5sZW5ndGgoKSkKKyAgICAgICAgbV9sZWdpYmxlVHJhY2tz
Rm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZ0ZXh0
VHJhY2tzKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuY2xlYXIo
KTsKKworICAgIGF1dG8mIGF1ZGlvVHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tz
KCk7CisgICAgaWYgKGF1ZGlvVHJhY2tzLmxlbmd0aCgpID4gMSkKKyAgICAgICAgbV9hdWRpb1Ry
YWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSgm
YXVkaW9UcmFja3MpOworICAgIGVsc2UKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUuY2xl
YXIoKTsKKworICAgIGF1dG8gYXVkaW9PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnMoKTsKKyAgICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpOwor
ICAgIGF1dG8gbGVnaWJsZU9wdGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7
CisgICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CisK
KyAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgIGNsaWVudC0+YXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvT3B0aW9ucywgYXVkaW9JbmRleCk7
CisgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobGVn
aWJsZU9wdGlvbnMsIGxlZ2libGVJbmRleCk7CisgICAgfQorfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKQorewor
ICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7CisgICAgYXV0
byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CisKKyAgICBmb3Ig
KGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZChhdWRpb0luZGV4KTsKKyAgICAgICAgY2xpZW50LT5sZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobGVnaWJsZUluZGV4KTsKKyAgICB9Cit9CisKK2Rv
dWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tTdGFydGVkVGlt
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrU3RhcnRlZFRpbWUoKTsKK30K
KworY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQoreworICAgIC8vIEZJWE1FKDE1NzQ1Mik6IFJl
bW92ZSB0aGUgcmlnaHQtaGFuZCBjb25zdHJ1Y3RvciBub3RhdGlvbiBvbmNlIE5ldmVyRGVzdHJv
eWVkIHN1cHBvcnRzIGluaXRpYWxpemVyX2xpc3RzLgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gbmFtZXMgPSBWZWN0b3I8QXRvbWljU3RyaW5nPih7Cisg
ICAgICAgIGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50LAorICAgICAgICBldmVudE5h
bWVzKCkucGF1c2VFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnBsYXlFdmVudCwKKyAgICAg
ICAgZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnRp
bWV1cGRhdGVFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsCisgICAg
ICAgIGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucmVt
b3ZldHJhY2tFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50LAor
ICAgICAgICBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVz
c2NoYW5nZWRFdmVudCwKKyAgICB9KTsKKyAgICByZXR1cm4gbmFtZXMuZ2V0KCk7Cit9CisKK2Nv
bnN0IEF0b21pY1N0cmluZyYgIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpldmVu
dE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGV2
ZW50TmFtZUFsbCgiYWxsRXZlbnRzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgcmV0dXJuIGV2ZW50TmFtZUFsbDsKK30KKworZG91YmxlIFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlh
RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5z
dXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpIDogc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKK30KKworZG91YmxlIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjdXJyZW50VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkgOiAwOworfQor
Citkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZlcmVkVGltZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1h
eEJ1ZmZlcmVkVGltZSgpIDogMDsKK30KKworYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6aXNQbGF5aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQg
PyAhbV9tZWRpYUVsZW1lbnQtPnBhdXNlZCgpIDogZmFsc2U7Cit9CisKK2Zsb2F0IFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSA6IDA7
Cit9CisKK1JlZjxUaW1lUmFuZ2VzPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
c2Vla2FibGVSYW5nZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1f
bWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7Cit9CisKK2Rv
dWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVUaW1lUmFuZ2Vz
TGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8g
bV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7
Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0
ZUludGVydmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlh
RWxlbWVudC0+bGl2ZVVwZGF0ZUludGVydmFsKCkgOiAwOworfQorICAgIAorYm9vbCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWluRmFzdFJldmVy
c2VSYXRlKCkgPCAwLjAgOiBmYWxzZTsKK30KKworVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9P
cHRpb25zOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRv
Y3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm4gYXVkaW9PcHRpb25zOworCisgICAgYXV0
byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
LT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOworCisgICAgYXVkaW9PcHRpb25zLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpKTsKKyAgICBmb3Ig
KGF1dG8mIGF1ZGlvVHJhY2sgOiBtX2F1ZGlvVHJhY2tzRm9yTWVudSkKKyAgICAgICAgYXVkaW9P
cHRpb25zLnVuY2hlY2tlZEFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25P
cHRpb25Gb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSk7CisKKyAgICByZXR1cm4gYXVkaW9PcHRp
b25zOworfQorCit1aW50NjRfdCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVk
aW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgaWYgKG1fYXVkaW9UcmFja3NGb3JNZW51W2luZGV4XS0+ZW5hYmxlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50NjRfdD46Om1heCgpOworfQorCitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
KCkgY29uc3QKK3sKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVPcHRp
b25zOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3Vt
ZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7CisKKyAgICBhdXRv
JiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkt
Pmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bV9sZWdpYmxlVHJhY2tzRm9yTWVudSkKKyAgICAgICAgbGVnaWJsZU9wdGlvbnMuYXBwZW5kKGNh
cHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgp
KSk7CisKKyAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Cit9CisKK3VpbnQ2NF90IFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29u
c3QKK3sKKyAgICB1aW50NjRfdCBzZWxlY3RlZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50NjRfdD46Om1heCgpOworICAgIHVpbnQ2NF90IG9mZkluZGV4ID0gMDsKKyAgICBib29sIHRy
YWNrTWVudUl0ZW1TZWxlY3RlZCA9IGZhbHNlOworCisgICAgYXV0byBob3N0ID0gbV9tZWRpYUVs
ZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSA6IG51bGxwdHI7CisK
KyAgICBpZiAoIWhvc3QpCisgICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4OworCisgICAgQXRv
bWljU3RyaW5nIGRpc3BsYXlNb2RlID0gaG9zdC0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7CisgICAg
VGV4dFRyYWNrKiBvZmZJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4
dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7
CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9y
TWVudS5zaXplKCk7IGluZGV4KyspIHsKKyAgICAgICAgYXV0byYgdHJhY2sgPSBtX2xlZ2libGVU
cmFja3NGb3JNZW51W2luZGV4XTsKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCisgICAg
ICAgICAgICBvZmZJbmRleCA9IGluZGV4OworCisgICAgICAgIGlmICh0cmFjayA9PSBhdXRvbWF0
aWNJdGVtICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3
b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAg
IHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZGlzcGxheU1vZGUgIT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSAmJiB0
cmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgeworICAgICAgICAgICAg
c2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVk
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvZmZJdGVtICYmICF0cmFja01l
bnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNl
ZE9ubHlLZXl3b3JkKCkpCisgICAgICAgIHNlbGVjdGVkSW5kZXggPSBvZmZJbmRleDsKKworICAg
IHJldHVybiBzZWxlY3RlZEluZGV4OworfQorCitib29sIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT53ZWJraXRDdXJyZW50UGxheWJhY2tU
YXJnZXRJc1dpcmVsZXNzKCk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQg
fHwgIW1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQorICAgICAgICByZXR1cm4g
VGFyZ2V0VHlwZU5vbmU7CisKKyAgICBzd2l0Y2ggKG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRy
b2xzSG9zdCgpLT5leHRlcm5hbERldmljZVR5cGUoKSkgeworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7Cisg
ICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6Tm9uZToKKyAgICAgICAgcmV0
dXJuIFRhcmdldFR5cGVOb25lOworICAgIGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5
cGU6OkFpcnBsYXk6CisgICAgICAgIHJldHVybiBUYXJnZXRUeXBlQWlyUGxheTsKKyAgICBjYXNl
IE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpUdm91dDoKKyAgICAgICAgcmV0dXJuIFRh
cmdldFR5cGVUVk91dDsKKyAgICB9Cit9CisKK1N0cmluZyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdAor
eworICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9s
c0hvc3QoKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9z
dCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLndpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCA/IG1fbWVkaWFFbGVtZW50LT5tdXRlZCgpIDogZmFsc2U7Cit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWMxNWIxMTk4NzIxMTNmNDgw
Yzk4MzFhYmE4NjhkOGVmZWIwOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
cHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSB7IH07CisgICAgdmlydHVhbCB2b2lk
IGRpZFNldHVwRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxs
c2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpID0gMDsKK307CisKK30KKworI2Vu
ZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1vZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjODQ5ZmMyMGRhMGNiNDJiZDkyNzYxN2YxNDE4Zjli
NzczMGMyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudDsKKworY2xh
c3MgVmlkZW9GdWxsc2NyZWVuTW9kZWwgeworcHVibGljOgorICAgIHZpcnR1YWwgflZpZGVvRnVs
bHNjcmVlbk1vZGVsKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSA9IDA7CisgICAgZW51bSBWaWRlb0dyYXZp
dHkgeyBWaWRlb0dyYXZpdHlSZXNpemUsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgVmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0RmlsbCB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVy
R3Jhdml0eShWaWRlb0dyYXZpdHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgPSAw
OworCisgICAgdmlydHVhbCBib29sIGlzVmlzaWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGhhc1ZpZGVvKCkgY29uc3QgPSAwOworfTsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAw
OworfTsKKworV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsK
KyAgICAKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjYwNzM3NDg2YTQ0ZmU5OTU0ZDc1Y2E1ZjkxYTljZTYyYzQxNDg5MzEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5
ZXIuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEF1ZGlvVHJhY2s7CitjbGFzcyBIVE1MVmlk
ZW9FbGVtZW50OworY2xhc3MgVGV4dFRyYWNrOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ7CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IDog
cHVibGljIFZpZGVvRnVsbHNjcmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50KCkpOworICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKKyAgICBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRWxlbWVudC5n
ZXQoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
UGxhdGZvcm1MYXllciosIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
ID0gW10geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdhaXRGb3JQcmVwYXJlZEZvcklu
bGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIgPSBbXSB7
IH0pOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50Jikgb3ZlcnJpZGU7CisgICAg
dm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykg
PT0gJnJoczsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
bW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNl
KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShG
bG9hdFJlY3QpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXll
ckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWaXNpYmxlKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHZpZGVvRGltZW5z
aW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9CisgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
aGFzVmlkZW87IH0KKworCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldEhhc1Zp
ZGVvKGJvb2wpOworICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYp
OworCisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVk
RXZlbnROYW1lcygpOworICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwo
KTsKKworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKKyAgICBS
ZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKKyAgICBib29s
IG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKKyAg
ICBGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lvbnM7CisgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFt
ZTsKKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7
CisgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7Cit9
OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjIyZWQyMTM1OGNlNjNmZTNlZmJmOTBkODUwY2Y0ZTE1YzkyZjY0NTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5tbQpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKKwor
I2ltcG9ydCAiRE9NV2luZG93LmgiCisjaW1wb3J0ICJIaXN0b3J5LmgiCisjaW1wb3J0ICJMb2dn
aW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1h
dGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dExpc3RlbmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRUcmFja0xp
c3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgorI2ltcG9ydCA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCisgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlz
dGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQoreworfQorCitWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKK3sKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50
KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKK3sKKyAgICBpZiAobV92aWRlb0VsZW1l
bnQgPT0gdmlkZW9FbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV92aWRlb0Vs
ZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPnZpZGVvRnVsbHNjcmVlbkxheWVyKCkpCisgICAgICAg
IG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihudWxscHRyKTsKKworICAg
IGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgICAgIGZvciAoYXV0
byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAgICBtX3ZpZGVv
RWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Cisg
ICAgfQorICAgIG1faXNMaXN0ZW5pbmcgPSBmYWxzZTsKKworICAgIG1fdmlkZW9FbGVtZW50ID0g
dmlkZW9FbGVtZW50OworCisgICAgaWYgKG1fdmlkZW9FbGVtZW50KSB7CisgICAgICAgIGZvciAo
YXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7Cisg
ICAgICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOworICAgIH0KKworICAgIHVwZGF0ZUZvckV2ZW50
TmFtZShldmVudE5hbWVBbGwoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBX
ZWJDb3JlOjpFdmVudCYgZXZlbnQpCit7CisgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LnR5
cGUoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0
ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQoreworICAg
IGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9v
bCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAg
ICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpIHsKKyAgICAgICAg
c2V0SGFzVmlkZW8obV92aWRlb0VsZW1lbnQpOworICAgICAgICBzZXRWaWRlb0RpbWVuc2lvbnMo
bV92aWRlb0VsZW1lbnQgPyBGbG9hdFNpemUobV92aWRlb0VsZW1lbnQtPnZpZGVvV2lkdGgoKSwg
bV92aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpIDogRmxvYXRTaXplKCkpOworICAgIH0KK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIoUGxhdGZvcm1MYXllciogdmlkZW9MYXllciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIg
PT0gdmlkZW9MYXllcikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xh
eWVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRB
bmNob3JQb2ludDpDR1BvaW50TWFrZSgwLCAwKV07CisjZWxzZQorICAgIFttX3ZpZGVvRnVsbHNj
cmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAuNSwgMC41KV07CisjZW5kaWYK
KyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3VuZHM6bV92aWRlb0ZyYW1lXTsKKyAg
ICAKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0Vmlk
ZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghbV92aWRlb0VsZW1lbnQpIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fdmlkZW9FbGVtZW50LT53YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQoreworICAgIGlmICht
X3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSAhPSBtb2Rl
KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7CisKKyAg
ICBpZiAobV92aWRlb0VsZW1lbnQgJiYgZmluaXNoZWRXaXRoTWVkaWEgJiYgbW9kZSA9PSBNZWRp
YVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSkgeworICAgICAgICBpZiAobV92
aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
IGlmIChET01XaW5kb3cqIHdpbmRvdyA9IG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLmRvbVdp
bmRvdygpKSB7CisgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnkqIGhpc3RvcnkgPSB3aW5kb3ct
Pmhpc3RvcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS0+YmFjaygpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7CisgICAg
bV92aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3Vu
ZHM6Q0dSZWN0KHJlY3QpXTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlk
ZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9G
dWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQoreworICAgIE1lZGlhUGxheWVy
OjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jhdml0eSA9PSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5UmVzaXplKQorICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6Vmlk
ZW9HcmF2aXR5UmVzaXplOworICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gVmlkZW9GdWxsc2NyZWVu
TW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0g
TWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2
aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxs
KQorICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0RmlsbDsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IAorICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jh
dml0eSk7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMgY29u
c3QgYXV0byBuYW1lcyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8QXRvbWljU3RyaW5nPiB7
IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCB9KTsKKyAgICByZXR1cm4gbmFtZXM7Cit9CisKK2Nv
bnN0IEF0b21pY1N0cmluZyYgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50
TmFtZUFsbCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc0V2
ZW50TmFtZUFsbCA9ICJhbGxFdmVudHMiOworICAgIHJldHVybiBzRXZlbnROYW1lQWxsOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVs
bHNjcmVlbk1vZGUpCit7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVv
RWxlbWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjphZGRDbGllbnQoVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5j
b250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250
YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKworYm9v
bCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fdmlkZW9FbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAg
ICAgcmV0dXJuIHBhZ2UtPmlzVmlzaWJsZSgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRIYXNWaWRlbyhib29sIGhh
c1ZpZGVvKQoreworICAgIGlmIChoYXNWaWRlbyA9PSBtX2hhc1ZpZGVvKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2hhc1ZpZGVvID0gaGFzVmlkZW87CisKKyAgICBmb3IgKGF1dG8mIGNsaWVu
dCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQobV9oYXNWaWRl
byk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVv
RGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAo
bV92aWRlb0RpbWVuc2lvbnMgPT0gdmlkZW9EaW1lbnNpb25zKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uczsKKworICAgIGZvciAoYXV0
byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPnZpZGVvRGltZW5zaW9uc0No
YW5nZWQobV92aWRlb0RpbWVuc2lvbnMpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOWU3OTc0NGI0OTg5YTNhN2I5MzU3
MGFhZWI3ZTgyZWIwN2U5MzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFRpbWVSYW5nZXM7Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCByZXNldE1lZGlhU3RhdGUoKSA9IDA7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwNmQ1M2YwZjc3NjkzNzc1YWQ0ODYxYzIyMzA0YWM5MzgwMDljODIzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgVGltZVJhbmdlczsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Owot
c3RydWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9uOwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7
IH07Ci0gICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQbGF5
U3RhdGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlZWtU
b1RpbWUoZG91YmxlIHRpbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmFzdFNlZWsoZG91Ymxl
IHRpbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0
TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZU11
dGVkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNdXRlZChib29sKSA9IDA7Ci0KLSAgICBl
bnVtIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgVGFyZ2V0VHlwZU5vbmUsIFRhcmdldFR5
cGVBaXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQgfTsKLQotICAgIHZpcnR1YWwgZG91YmxlIHBsYXli
YWNrU3RhcnRlZFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24o
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBkb3VibGUgYnVmZmVyZWRUaW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU2NydWJi
aW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgUmVmPFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRp
bWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdWludDY0X3QgYXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGV4dGVybmFsUGxh
eWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNNdXRlZCgpIGNvbnN0ID0gMDsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLyogY3VycmVu
dFRpbWUgKi8sIGRvdWJsZSAvKiBhbmNob3JUaW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFj
a1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgLyogcGxheWJhY2tTdGFydGVkVGltZSAqLykgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyogaXNQbGF5aW5nICovLCBmbG9h
dCAvKiBwbGF5YmFja1JhdGUgKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZWVrYWJsZVJhbmdl
c0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSAvKiBsYXN0TW9kaWZpZWQgKi8sIGRv
dWJsZSAvKiBsaXZlSW50ZXJ2YWwgKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjYW5QbGF5RmFz
dFJldmVyc2VDaGFuZ2VkKGJvb2wpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYg
Lyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlvbnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVj
dGVkSW5kZXggKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxp
emVkRGV2aWNlTmFtZSAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbXV0ZWRDaGFu
Z2VkKGJvb2wpIHsgfQotfTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGUyODQ2OTQ2NDk2YTlhYzQ5NTk1MWJkZjFjODE3ZGNlYmI3NWVkMjEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJIVE1M
TWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRp
b1RyYWNrOwotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFRleHRUcmFjazsKLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWws
IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7
Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1l
bnQoSFRNTE1lZGlhRWxlbWVudCopOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBXZWJDb3JlOjpFdmVudCYpIGZpbmFsOwotICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNv
bnN0IFdURjo6QXRvbWljU3RyaW5nJik7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50
TGlzdGVuZXImIHJocykgY29uc3QgZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2Vi
Q29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXkoKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHBhdXNlKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0
b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2Ny
dWJiaW5nKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kU2Nhbm5pbmcoKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2
NF90IGluZGV4KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU11dGVkKCkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKLQot
ICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBjdXJyZW50VGlt
ZSgpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIGlzUGxheWluZygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3J1YmJpbmco
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgp
IGNvbnN0IGZpbmFsOwotICAgIFJlZjxUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0
IGZpbmFsOwotICAgIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkg
Y29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgZmluYWw7Ci0gICAgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0
IGZpbmFsOwotICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmlu
YWw7Ci0gICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCkgY29uc3QgZmluYWw7Ci0gICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0
ZWRJbmRleCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQo
KSBjb25zdCBmaW5hbDsKLSAgICBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsOwotICAgIFN0cmluZyBleHRlcm5hbFBsYXli
YWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgd2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzTXV0ZWQoKSBj
b25zdCBmaW5hbDsKLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwcm9ncmVz
c0V2ZW50VGltZXJGaXJlZCgpOwotICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNT
dHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKLSAgICBjb25zdCBXVEY6OkF0b21pY1N0cmlu
ZyYgZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRp
YUVsZW1lbnQ7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsKLSAgICBIYXNoU2V0
PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudTsKLSAgICBWZWN0b3I8UmVm
UHRyPEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVudTsKLQotICAgIGRvdWJsZSBwbGF5
YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKTsKLSAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpOwotfTsKLQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YWRkNDliYTZiZDc0OTJhZGEwMjdlNzMyZDYzMmU2
NzJiNmExYTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQubW0KKysrIC9kZXYvbnVsbApAQCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBdWRpb1RyYWNr
TGlzdC5oIgotI2ltcG9ydCAiRXZlbnQuaCIKLSNpbXBvcnQgIkV2ZW50TGlzdGVuZXIuaCIKLSNp
bXBvcnQgIkV2ZW50TmFtZXMuaCIKLSNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCi0jaW1wb3J0ICJI
VE1MTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNv
bnRyb2xzSG9zdC5oIgotI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBvcnQg
IlBhZ2UuaCIKLSNpbXBvcnQgIlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiVGV4dFRyYWNrTGlzdC5o
IgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0
aW9uLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0
TGlua2luZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpCi0g
ICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQot
ewotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3Rlbmlu
ZykgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygp
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lLCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3Mo
KS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZh
bHNlKTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5yZW1vdmVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICB9Ci0g
ICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAg
ICAgICBtX21lZGlhRWxlbWVudC0+cmVzZXRQbGF5YmFja1Nlc3Npb25TdGF0ZSgpOwotCi0gICAg
bV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkK
LSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwg
KnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCkuYWRk
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7Ci0g
ICAgICAgIG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkuYWRkRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1faXNMaXN0ZW5p
bmcgPSB0cnVlOwotICAgIH0KLQotICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudE5hbWVBbGwo
KSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmhhbmRs
ZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXZWJDb3JlOjpFdmVudCYg
ZXZlbnQpCi17Ci0gICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LnR5cGUoKSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFt
ZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQotewotICAgIGlmIChtX2NsaWVu
dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGFsbCA9IGV2ZW50TmFt
ZSA9PSBldmVudE5hbWVBbGwoKTsKLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIGRvdWJsZSBk
dXJhdGlvbiA9IHRoaXMtPmR1cmF0aW9uKCk7Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBt
X2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7
Ci0gICAgICAgIC8vIFRoZXNlIGlzIG5vIHN0YW5kYXJkIGV2ZW50IGZvciBtaW5GYXN0UmV2ZXJz
ZVJhdGVDaGFuZ2U7IGR1cmF0aW9uIGNoYW5nZSBpcyBhIHJlYXNvbmFibGUgcHJveHkgZm9yIGl0
LgotICAgICAgICAvLyBJdCBoYXBwZW5zIGV2ZXJ5IHRpbWUgYSBuZXcgaXRlbSBiZWNvbWVzIHJl
YWR5IHRvIHBsYXkuCi0gICAgICAgIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlID0gdGhpcy0+Y2Fu
UGxheUZhc3RSZXZlcnNlKCk7Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMp
Ci0gICAgICAgICAgICBjbGllbnQtPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZh
c3RSZXZlcnNlKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkucGxheUV2ZW50Ci0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVzKCkucGxheWluZ0V2ZW50KSB7Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVu
dHMpCi0gICAgICAgICAgICBjbGllbnQtPnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXli
YWNrU3RhcnRlZFRpbWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVu
dE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5yYXRlY2hhbmdlRXZlbnQpIHsKLSAgICAgICAgYm9vbCBpc1BsYXlpbmcgPSB0aGlzLT5p
c1BsYXlpbmcoKTsKLSAgICAgICAgZmxvYXQgcGxheWJhY2tSYXRlID0gdGhpcy0+cGxheWJhY2tS
YXRlKCk7Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAg
ICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKLSAgICB9Ci0K
LSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVw
ZGF0ZUV2ZW50KSB7Ci0gICAgICAgIGF1dG8gY3VycmVudFRpbWUgPSB0aGlzLT5jdXJyZW50VGlt
ZSgpOwotICAgICAgICBhdXRvIGFuY2hvclRpbWUgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0lu
Zm9dIHN5c3RlbVVwdGltZV07Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMp
Ci0gICAgICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5j
aG9yVGltZSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0g
ZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpIHsKLSAgICAgICAgYXV0byBidWZmZXJlZFRpbWUg
PSB0aGlzLT5idWZmZXJlZFRpbWUoKTsKLSAgICAgICAgYXV0byBzZWVrYWJsZVJhbmdlcyA9IHRo
aXMtPnNlZWthYmxlUmFuZ2VzKCk7Ci0gICAgICAgIGF1dG8gc2Vla2FibGVUaW1lUmFuZ2VzTGFz
dE1vZGlmaWVkVGltZSA9IHRoaXMtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUo
KTsKLSAgICAgICAgYXV0byBsaXZlVXBkYXRlSW50ZXJ2YWwgPSB0aGlzLT5saXZlVXBkYXRlSW50
ZXJ2YWwoKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAg
ICAgICAgY2xpZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Ci0gICAgICAg
ICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdlcywgc2Vla2Fi
bGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50
TmFtZXMoKS5hZGR0cmFja0V2ZW50Ci0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVz
KCkucmVtb3ZldHJhY2tFdmVudCkKLSAgICAgICAgdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25z
KCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCku
d2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCkgewotICAg
ICAgICBib29sIGVuYWJsZWQgPSBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpOwotICAgICAgICBF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUoKTsKLSAgICAgICAgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUgPSBleHRlcm5h
bFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpOwotCi0gICAgICAgIGJvb2wgd2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWQgPSB0aGlzLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpOwotCi0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAgICAg
ICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdGFyZ2V0VHlwZSwg
bG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgICAgICAgICBjbGllbnQtPndpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBjYWxsIHVwZGF0ZU1lZGlhU2VsZWN0
aW9uSW5kaWNlcygpIGluIHRoZSBhbGwgY2FzZSwgc2luY2UKLSAgICAvLyB1cGRhdGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnMoKSB3aWxsIGFsc28gdXBkYXRlIHRoZSBzZWxlY3Rpb24gaW5kaWNlcy4K
LSAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCkKLSAgICAgICAg
dXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8
IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudm9sdW1lY2hhbmdlRXZlbnQpIHsKLSAgICAgICAg
Zm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgICAgIGNsaWVudC0+bXV0ZWRD
aGFuZ2VkKGlzTXV0ZWQoKSk7Ci0gICAgfQotfQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBj
bGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAg
IG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwot
ICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkK
LSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2UoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVu
dCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCi17Ci0gICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRl
KCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2lu
U2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFF
bGVtZW50LT5iZWdpblNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVu
dCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1l
KQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNl
dEN1cnJlbnRUaW1lKHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQo
KQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJl
Z2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3
YXJkKCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50
LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygp
Ci17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5k
U2Nhbm5pbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBzZWxlY3RlZEF1ZGlvSW5kZXgpCi17
Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSBtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7IGkgPCBzaXpl
OyArK2kpCi0gICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51W2ldLT5zZXRFbmFibGVkKGkgPT0g
c2VsZWN0ZWRBdWRpb0luZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQotewot
ICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRleHRUcmFj
ayogdGV4dFRyYWNrOwotICAgIGlmIChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6
ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19j
YXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRUcmFjayA9
IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCk7Ci0KLSAgICBtX21lZGlhRWxlbWVudC0+
c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAg
aWYgKG1fbWVkaWFFbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpID09IE1lZGlhUGxheWVyRW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQotICAgICAgICBtX21lZGlhRWxl
bWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fbWVkaWFFbGVtZW50
LT5lbnRlckZ1bGxzY3JlZW4oTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBp
Y3R1cmVJblBpY3R1cmUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Ojp0b2dnbGVNdXRlZCgpCi17Ci0gICAgc2V0TXV0ZWQoIWlzTXV0ZWQoKSk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE11dGVkKGJvb2wg
bXV0ZWQpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVu
dC0+c2V0TXV0ZWQobXV0ZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKQotewotICAgIGlmICghbV9t
ZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9tZWRpYUVsZW1lbnQt
PmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBjYXB0aW9u
UHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
Y2FwdGlvblByZWZlcmVuY2VzKCk7Ci0gICAgYXV0byYgdGV4dFRyYWNrcyA9IG1fbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKHRleHRUcmFja3MubGVuZ3RoKCkpCi0gICAgICAg
IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tM
aXN0Rm9yTWVudSgmdGV4dFRyYWNrcyk7Ci0gICAgZWxzZQotICAgICAgICBtX2xlZ2libGVUcmFj
a3NGb3JNZW51LmNsZWFyKCk7Ci0KLSAgICBhdXRvJiBhdWRpb1RyYWNrcyA9IG1fbWVkaWFFbGVt
ZW50LT5hdWRpb1RyYWNrcygpOwotICAgIGlmIChhdWRpb1RyYWNrcy5sZW5ndGgoKSA+IDEpCi0g
ICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRy
YWNrTGlzdEZvck1lbnUoJmF1ZGlvVHJhY2tzKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYXVkaW9U
cmFja3NGb3JNZW51LmNsZWFyKCk7Ci0KLSAgICBhdXRvIGF1ZGlvT3B0aW9ucyA9IGF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCk7Ci0gICAgYXV0byBhdWRpb0luZGV4ID0gYXVkaW9NZWRpYVNl
bGVjdGVkSW5kZXgoKTsKLSAgICBhdXRvIGxlZ2libGVPcHRpb25zID0gbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucygpOwotICAgIGF1dG8gbGVnaWJsZUluZGV4ID0gbGVnaWJsZU1lZGlhU2Vs
ZWN0ZWRJbmRleCgpOwotCi0gICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAg
ICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb09wdGlv
bnMsIGF1ZGlvSW5kZXgpOwotICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGxlZ2libGVPcHRpb25zLCBsZWdpYmxlSW5kZXgpOwotICAgIH0KLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxl
Y3Rpb25JbmRpY2VzKCkKLXsKLSAgICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0
ZWRJbmRleCgpOwotICAgIGF1dG8gbGVnaWJsZUluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJ
bmRleCgpOwotCi0gICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICBj
bGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoYXVkaW9JbmRleCk7Ci0gICAg
ICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGxlZ2libGVJbmRl
eCk7Ci0gICAgfQotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdAotewotICAgIGlmICghbV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5wbGF5
YmFja1N0YXJ0ZWRUaW1lKCk7Ci19Ci0KLWNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsK
LSAgICAvLyBGSVhNRSgxNTc0NTIpOiBSZW1vdmUgdGhlIHJpZ2h0LWhhbmQgY29uc3RydWN0b3Ig
bm90YXRpb24gb25jZSBOZXZlckRlc3Ryb3llZCBzdXBwb3J0cyBpbml0aWFsaXplcl9saXN0cy4K
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IG5hbWVzID0g
VmVjdG9yPEF0b21pY1N0cmluZz4oewotICAgICAgICBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFu
Z2VFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnBhdXNlRXZlbnQsCi0gICAgICAgIGV2ZW50
TmFtZXMoKS5wbGF5RXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQs
Ci0gICAgICAgIGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFt
ZXMoKS5wcm9ncmVzc0V2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudCwK
LSAgICAgICAgZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQsCi0gICAgICAgIGV2ZW50TmFt
ZXMoKS52b2x1bWVjaGFuZ2VFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLndlYmtpdGN1cnJl
bnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQsCi0gICAgfSk7Ci0gICAgcmV0
dXJuIG5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmICBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKLXsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBldmVudE5hbWVBbGwoImFsbEV2ZW50cyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBldmVudE5hbWVBbGw7
Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZHVyYXRp
b24oKSBjb25zdAotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+c3VwcG9ydHNTZWVraW5nKCkgPyBtX21lZGlh
RWxlbWVudC0+ZHVyYXRpb24oKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
Y3VycmVudFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVk
aWFFbGVtZW50LT5jdXJyZW50VGltZSgpIDogMDsKLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpidWZmZXJlZFRpbWUoKSBjb25zdAotewotICAgIHJldHVy
biBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tYXhCdWZmZXJlZFRpbWUoKSA6IDA7
Ci19Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWlu
ZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gIW1fbWVkaWFFbGVtZW50
LT5wYXVzZWQoKSA6IGZhbHNlOwotfQotCi1mbG9hdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVs
ZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tSYXRlKCkgOiAwOwotfQotCi1SZWY8VGlt
ZVJhbmdlcz4gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxlUmFu
Z2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVu
dC0+c2Vla2FibGUoKSA6IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwotfQotCi1kb3VibGUgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2Rp
ZmllZFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFF
bGVtZW50LT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgOiAwOwotfQotCi1k
b3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxpdmVVcGRhdGVJbnRl
cnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1l
bnQtPmxpdmVVcGRhdGVJbnRlcnZhbCgpIDogMDsKLX0KLSAgICAKLWJvb2wgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNl
UmF0ZSgpIDwgMC4wIDogZmFsc2U7Ci19Ci0KLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4g
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlv
T3B0aW9uczsKLQotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5k
b2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGF1ZGlvT3B0aW9uczsKLQotICAgIGF1
dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKLQotICAgIGF1ZGlvT3B0aW9ucy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKSk7Ci0gICAgZm9y
IChhdXRvJiBhdWRpb1RyYWNrIDogbV9hdWRpb1RyYWNrc0Zvck1lbnUpCi0gICAgICAgIGF1ZGlv
T3B0aW9ucy51bmNoZWNrZWRBcHBlbmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9u
T3B0aW9uRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGF1ZGlvT3B0
aW9uczsKLX0KLQotdWludDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgbV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyArK2luZGV4KSB7Ci0g
ICAgICAgIGlmIChtX2F1ZGlvVHJhY2tzRm9yTWVudVtpbmRleF0tPmVuYWJsZWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDY0X3Q+OjptYXgoKTsKLX0KLQotVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdp
YmxlT3B0aW9uczsKLQotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOwotCi0g
ICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOwotCi0gICAgZm9yIChhdXRvJiB0
cmFjayA6IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUpCi0gICAgICAgIGxlZ2libGVPcHRpb25zLmFw
cGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFj
ay5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOwotfQotCi11aW50NjRfdCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJ
bmRleCgpIGNvbnN0Ci17Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKLSAgICB1aW50NjRfdCBvZmZJbmRleCA9IDA7Ci0g
ICAgYm9vbCB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSBmYWxzZTsKLQotICAgIGF1dG8gaG9zdCA9
IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkgOiBu
dWxscHRyOwotCi0gICAgaWYgKCFob3N0KQotICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleDsK
LQotICAgIEF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9IGhvc3QtPmNhcHRpb25EaXNwbGF5TW9k
ZSgpOwotICAgIFRleHRUcmFjayogb2ZmSXRlbSA9IGhvc3QtPmNhcHRpb25NZW51T2ZmSXRlbSgp
OwotICAgIFRleHRUcmFjayogYXV0b21hdGljSXRlbSA9IGhvc3QtPmNhcHRpb25NZW51QXV0b21h
dGljSXRlbSgpOwotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJs
ZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0g
bV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAgIGlmICh0cmFjayA9PSBvZmZJ
dGVtKQotICAgICAgICAgICAgb2ZmSW5kZXggPSBpbmRleDsKLQotICAgICAgICBpZiAodHJhY2sg
PT0gYXV0b21hdGljSXRlbSAmJiBkaXNwbGF5TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0
b21hdGljS2V5d29yZCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID0gaW5kZXg7Ci0g
ICAgICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3
b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAg
ICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0
ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAob2ZmSXRlbSAm
JiAhdHJhY2tNZW51SXRlbVNlbGVjdGVkICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNI
b3N0Ojpmb3JjZWRPbmx5S2V5d29yZCgpKQotICAgICAgICBzZWxlY3RlZEluZGV4ID0gb2ZmSW5k
ZXg7Ci0KLSAgICByZXR1cm4gc2VsZWN0ZWRJbmRleDsKLX0KLQotYm9vbCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+d2Via2l0Q3Vy
cmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25N
b2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3Qo
KSkKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwotCi0gICAgc3dpdGNoIChtX21lZGlh
RWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCkpIHsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IFRhcmdldFR5cGVOb25lOwotICAgIGNhc2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6
Ok5vbmU6Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsKLSAgICBjYXNlIE1lZGlhQ29u
dHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpBaXJwbGF5OgotICAgICAgICByZXR1cm4gVGFyZ2V0VHlw
ZUFpclBsYXk7Ci0gICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6VHZvdXQ6
Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBlVFZPdXQ7Ci0gICAgfQotfQotCi1TdHJpbmcgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6
ZWREZXZpY2VOYW1lKCkgY29uc3QKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRp
YUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAgIHJldHVybiBtX21lZGlhRWxl
bWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZSgpOwot
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYVNlc3Np
b24oKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgqbV9tZWRpYUVsZW1lbnQpOwotfQot
Ci1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojppc011dGVkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bXV0ZWQo
KSA6IGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMzJiNDM5MzVkMmIyODFkODE2M2Zi
MTc2NThhMWM3Y2U0NGEzNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBG
dWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgPSAwOwotfTsKLQotfQotCi0jZW5kaWYKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjcwMmRiODZiNTkyNjQ5
MjJhZWI0MDFjZGIyMjIxOWQ5ZmRlNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVu
dDsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwgewotcHVibGljOgotICAgIHZpcnR1
YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBhZGRD
bGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSA9IDA7
Ci0gICAgZW51bSBWaWRlb0dyYXZpdHkgeyBWaWRlb0dyYXZpdHlSZXNpemUsIFZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdCwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCB9OwotICAgIHZpcnR1
YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzVmlzaWJsZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3QgPSAwOwotfTsKLQotY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGhhc1Zp
ZGVvQ2hhbmdlZChib29sKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZpZGVvRGltZW5zaW9uc0No
YW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAwOwotfTsKLQotV0VCQ09SRV9FWFBPUlQgYm9vbCBz
dXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKLSAgICAKLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5YTBmYjE3MDkxOWZkMTg3ZjIwMGY2ODliNzIyYTVlZGFhNWQ2YzEzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJIVE1MTWVk
aWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAi
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBBdWRpb1RyYWNrOwotY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKLWNs
YXNzIFRleHRUcmFjazsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IGNy
ZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpKTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7Ci0gICAgSFRN
TFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0VsZW1l
bnQuZ2V0KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxh
eWVyKFBsYXRmb3JtTGF5ZXIqLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlciA9IFtdIHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyID0g
W10geyB9KTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXZWJDb3JlOjpFdmVudCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7Ci0g
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRo
aXMpID09ICZyaHM7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVk
aWEgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0xh
eWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
VmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSB2
aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvRGltZW5zaW9u
czsgfQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2hhc1ZpZGVvOyB9Ci0KLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JU
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBzZXRIYXNWaWRlbyhib29sKTsKLSAgICB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyhjb25z
dCBGbG9hdFNpemUmKTsKLQotICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJp
bmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKLSAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
ZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0Vs
ZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5
ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsKLSAgICBIYXNoU2V0PFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIGJvb2wgbV9oYXNWaWRl
byB7IGZhbHNlIH07Ci0gICAgRmxvYXRTaXplIG1fdmlkZW9EaW1lbnNpb25zOwotICAgIEZsb2F0
UmVjdCBtX3ZpZGVvRnJhbWU7Ci0gICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2li
bGVUcmFja3NGb3JNZW51OwotICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9U
cmFja3NGb3JNZW51OwotfTsKLQotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBiZjQ3YzBj
NGRlNjVmZWNjNDVmYzVmZjc0NTc2ODViMGM1NWM1Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDIz
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgotCi0jaW1wb3J0ICJET01XaW5kb3cuaCIKLSNp
bXBvcnQgIkhpc3RvcnkuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk1lZGlhQ29u
dHJvbHNIb3N0LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0V2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Bh
Z2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRM
aXN0ZW5lclR5cGUpCi17Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQotewotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZp
ZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQotewotICAgIGlmIChtX3ZpZGVvRWxlbWVudCA9PSB2
aWRlb0VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3ZpZGVvRWxlbWVudCAm
JiBtX3ZpZGVvRWxlbWVudC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKLSAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOwotCi0gICAgaWYgKG1f
dmlkZW9FbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKLSAgICAgICAgZm9yIChhdXRvJiBldmVu
dE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50
LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKLSAgICB9Ci0g
ICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgbV92aWRlb0VsZW1lbnQgPSB2aWRlb0Vs
ZW1lbnQ7Ci0KLSAgICBpZiAobV92aWRlb0VsZW1lbnQpIHsKLSAgICAgICAgZm9yIChhdXRvJiBl
dmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVt
ZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKLSAgICAgICAg
bV9pc0xpc3RlbmluZyA9IHRydWU7Ci0gICAgfQotCi0gICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2
ZW50TmFtZUFsbCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNv
cmU6OkV2ZW50JiBldmVudCkKLXsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQudHlwZSgp
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRl
Rm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAg
aWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBib29s
IGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVBbGwoKTsKLQotICAgIGlmIChhbGwKLSAgICAg
ICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCkgewotICAgICAgICBz
ZXRIYXNWaWRlbyhtX3ZpZGVvRWxlbWVudCk7Ci0gICAgICAgIHNldFZpZGVvRGltZW5zaW9ucyht
X3ZpZGVvRWxlbWVudCA/IEZsb2F0U2l6ZShtX3ZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCBt
X3ZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSkgOiBGbG9hdFNpemUoKSk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxz
Y3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXll
ciA9PSB2aWRlb0xheWVyKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IHZpZGVv
TGF5ZXI7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNl
dEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAsIDApXTsKLSNlbHNlCi0gICAgW21fdmlkZW9GdWxs
c2NyZWVuTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UoMC41LCAwLjUpXTsKLSNlbmRp
ZgotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVdOwot
ICAgIAotICAgIGlmICghbV92aWRlb0VsZW1lbnQpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdmlkZW9FbGVtZW50LT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkg
ewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV92aWRlb0VsZW1lbnQtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0g
ICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgp
ICE9IG1vZGUpCi0gICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2Rl
KTsKLQotICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBmaW5pc2hlZFdpdGhNZWRpYSAmJiBtb2Rl
ID09IE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKSB7Ci0gICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKSkgewotICAg
ICAgICAgICAgaWYgKERPTVdpbmRvdyogd2luZG93ID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50
KCkuZG9tV2luZG93KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeSogaGlzdG9yeSA9
IHdpbmRvdy0+aGlzdG9yeSgpKQotICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LT5iYWNrKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVj
dCkKLXsKLSAgICBtX3ZpZGVvRnJhbWUgPSByZWN0OwotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxh
eWVyIHNldEJvdW5kczpDR1JlY3QocmVjdCldOwotICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAg
ICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVy
R3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCi17
Ci0gICAgTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXll
cjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGlmIChncmF2aXR5ID09IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemUpCi0gICAgICAgIHZpZGVvR3Jhdml0
eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemU7Ci0gICAgZWxzZSBpZiAoZ3Jhdml0
eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQot
ICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0OwotICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpCi0gICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlh
UGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOwotICAgIGVsc2UKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgCi0gICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVv
RnVsbHNjcmVlbkdyYXZpdHkodmlkZW9HcmF2aXR5KTsKLX0KLQotY29uc3QgVmVjdG9yPEF0b21p
Y1N0cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2
ZW50TmFtZXMoKQotewotICAgIHN0YXRpYyBjb25zdCBhdXRvIG5hbWVzID0gbWFrZU5ldmVyRGVz
dHJveWVkKFZlY3RvcjxBdG9taWNTdHJpbmc+IHsgZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50IH0p
OwotICAgIHJldHVybiBuYW1lczsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7
Ci0gICAgcmV0dXJuIHNFdmVudE5hbWVBbGw7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLXsKLSAgICBp
ZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQp
KTsKLSAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZW1vdmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGll
bnQpKTsKLSAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwotfQotCi1ib29sIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAotewotICAgIGlm
ICghbV92aWRlb0VsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChQYWdl
KiBwYWdlID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1
cm4gcGFnZS0+aXNWaXNpYmxlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhhc1ZpZGVvKGJvb2wgaGFzVmlk
ZW8pCi17Ci0gICAgaWYgKGhhc1ZpZGVvID09IG1faGFzVmlkZW8pCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faGFzVmlkZW8gPSBoYXNWaWRlbzsKLQotICAgIGZvciAoYXV0byYgY2xpZW50IDog
bV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmhhc1ZpZGVvQ2hhbmdlZChtX2hhc1ZpZGVvKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9E
aW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAgIGlmICht
X3ZpZGVvRGltZW5zaW9ucyA9PSB2aWRlb0RpbWVuc2lvbnMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fdmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1lbnNpb25zOwotCi0gICAgZm9yIChhdXRv
JiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+dmlkZW9EaW1lbnNpb25zQ2hh
bmdlZChtX3ZpZGVvRGltZW5zaW9ucyk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45ZmNkN2I0YmNmMTRiYzc0YTY1MjUyMDhjYmYzMTJjZTYyNWQzNjExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZP
Uk0oSU9TKQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgor
I2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPG9iamMvb2JqYy5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7CitPQkpDX0NM
QVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7
CitPQkpDX0NMQVNTIFVJV2luZG93OworT0JKQ19DTEFTUyBVSVZpZXc7CisKK25hbWVzcGFjZSBX
VEYgeworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRS
ZWN0OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWw7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Np
b25DaGFuZ2VPYnNlcnZlcjsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQKKyAgICA6IHB1YmxpYyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAg
ICAsIHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFJlZkNv
dW50ZWQ8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHsKKworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZShQbGF5YmFja1Nl
c3Npb25Nb2RlbCYgbW9kZWwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChtb2RlbCkpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpOworICAgIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNz
aW9uTW9kZWw7IH0KKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7CisKKyAgICAvLyBQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVyYXRpb25D
aGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkg
b3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RN
b2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpIG92ZXJyaWRlOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSBvdmVycmlk
ZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVk
LCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0
IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAg
V2ViQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VY
UE9SVCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25Nb2RlbCYp
OworCisgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gbV9wbGF5ZXJDb250cm9s
bGVyOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsg
bnVsbHB0ciB9OworfTsKKworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk1YmE5MDVhNzAxOTQ5NjU3NzMxN2IxMGQ1MzAwMjdmYzFjNTE1MTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0KQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKKworI2lmIFBMQVRGT1JNKElP
UykKKyNpZiBIQVZFKEFWS0lUKQorCisjaW1wb3J0ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiTG9n
Z2luZy5oIgorI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKKyNpbXBvcnQgIlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJXZWJB
VlBsYXllckNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KKyNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGlu
ay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NM
QVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdChQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCisgICAgOiBtX3BsYXllckNvbnRy
b2xsZXIoYWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF0pKQorICAg
ICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCit7CisgICAgbW9kZWwuYWRkQ2xpZW50
KCp0aGlzKTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZTp0aGlzXTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOiZtb2RlbF07
CisKKyAgICBkdXJhdGlvbkNoYW5nZWQobW9kZWwuZHVyYXRpb24oKSk7CisgICAgY3VycmVudFRp
bWVDaGFuZ2VkKG1vZGVsLmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5m
b10gc3lzdGVtVXB0aW1lXSk7CisgICAgYnVmZmVyZWRUaW1lQ2hhbmdlZChtb2RlbC5idWZmZXJl
ZFRpbWUoKSk7CisgICAgcmF0ZUNoYW5nZWQobW9kZWwuaXNQbGF5aW5nKCksIG1vZGVsLnBsYXli
YWNrUmF0ZSgpKTsKKyAgICBzZWVrYWJsZVJhbmdlc0NoYW5nZWQobW9kZWwuc2Vla2FibGVSYW5n
ZXMoKSwgbW9kZWwuc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpLCBtb2RlbC5s
aXZlVXBkYXRlSW50ZXJ2YWwoKSk7CisgICAgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtb2Rl
bC5jYW5QbGF5RmFzdFJldmVyc2UoKSk7CisgICAgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCksIG1vZGVsLmF1ZGlvTWVk
aWFTZWxlY3RlZEluZGV4KCkpOworICAgIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKG1vZGVsLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwubGVnaWJsZU1l
ZGlhU2VsZWN0ZWRJbmRleCgpKTsKKyAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtb2RlbC5l
eHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpKTsKKyAgICB3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQobW9kZWwud2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQoKSk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKQoreworICAgIFttX3BsYXllckNvbnRyb2xs
ZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOm51bGxwdHJdOworICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0RXh0ZXJuYWxQbGF5YmFja0FjdGl2ZTpmYWxzZV07CisKKyAgICBpbnZhbGlk
YXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVk
aWFTdGF0ZSgpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxlciByZXNldE1lZGlhU3RhdGVdOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQo
ZG91YmxlIGR1cmF0aW9uKQoreworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29u
dHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKKworICAgIHBsYXllckNvbnRyb2xs
ZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247CisgICAgcGxheWVyQ29udHJvbGxlci5jb250
ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOworCisgICAgLy8gRklYTUU6IHdl
IHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCisgICAg
cGxheWVyQ29udHJvbGxlci5jYW5QbGF5ID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2Fu
UGF1c2UgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlF
UzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKKyAgICBwbGF5
ZXJDb250cm9sbGVyLmNhblNlZWsgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMg
PSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50
VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGlt
ZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOwor
ICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1
ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQorICAgICAgICBhbmNob3JUaW1lU3Rh
bXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07CisKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNl
dFRpbWluZzp0aW1pbmddOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgV2ViQVZQ
bGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdl
dCgpOworICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0
aW9uOworICAgIGRvdWJsZSBub3JtYWxpemVkQnVmZmVyZWRUaW1lOworICAgIGlmICghZHVyYXRp
b24pCisgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOworICAgIGVsc2UKKyAgICAg
ICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZSAvIGR1cmF0aW9uOworICAg
IHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFsaXplZEJ1
ZmZlcmVkVGltZSldOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojpy
YXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVk
VGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IHNlZWthYmxlUmFuZ2VzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5n
dGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5nZXMuc3RhcnQoaSku
cmVsZWFzZVJldHVyblZhbHVlKCk7CisgICAgICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLmVu
ZChpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKworICAgICAgICBDTVRpbWVSYW5nZSByYW5nZSA9
IENNVGltZVJhbmdlTWFrZShDTVRpbWVNYWtlV2l0aFNlY29uZHMoc3RhcnQsIDEwMDApLCBDTVRp
bWVNYWtlV2l0aFNlY29uZHMoZW5kLXN0YXJ0LCAxMDAwKSk7CisgICAgICAgIFtzZWVrYWJsZVJh
bmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKKyAg
ICB9CisKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdlczpzZWVr
YWJsZVJhbmdlcy5nZXQoKV07CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRp
bWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lOiBsYXN0TW9kaWZpZWRUaW1lXTsKKyAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldExpdmVVcGRhdGVJbnRlcnZhbDpsaXZlVXBkYXRlSW50ZXJ2YWxdOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjYW5QbGF5RmFzdFJldmVy
c2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQoreworICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlGYXN0UmV2ZXJzZV07Cit9CisKK3N0YXRp
YyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQoreworICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV0pOworICAgIGZvciAoYXV0byYgb3B0
aW9uIDogb3B0aW9ucykgeworICAgICAgICBSZXRhaW5QdHI8V2ViQVZNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24gYWxs
b2NdIGluaXRdKTsKKyAgICAgICAgW3dlYk9wdGlvbiBzZXRMb2NhbGl6ZWREaXNwbGF5TmFtZTpv
cHRpb24uZGlzcGxheU5hbWVdOworICAgICAgICBbd2ViT3B0aW9ucyBhZGRPYmplY3Q6d2ViT3B0
aW9uLmdldCgpXTsKKyAgICB9CisgICAgcmV0dXJuIHdlYk9wdGlvbnM7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0
aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBbbV9wbGF5ZXJDb250
cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwor
ICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAgICAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJP
cHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRl
eCldXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9u
cyk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zOndlYk9wdGlvbnMuZ2V0KCldOworICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlv
bnMgY291bnRdKQorICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBl
LCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgQVZQbGF5ZXJDb250
cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGUgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXll
ckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZU5vbmU7CisgICAgaWYgKHRhcmdldFR5cGUg
PT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5KQorICAgICAgICBleHRl
cm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBl
QWlyUGxheTsKKyAgICBlbHNlIGlmICh0YXJnZXRUeXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpUYXJnZXRUeXBlVFZPdXQpCisgICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5
ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKKworICAgIFdlYkFWUGxheWVy
Q29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsK
KyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBaXJQbGF5RGV2aWNlTG9jYWxp
emVkTmFtZSA9IGxvY2FsaXplZERldmljZU5hbWU7CisgICAgcGxheWVyQ29udHJvbGxlci5leHRl
cm5hbFBsYXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOworICAgIHBsYXllckNvbnRy
b2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSA9IGVuYWJsZWQ7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChib29sIGRpc2FibGVkKQoreworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0QWxsb3dz
RXh0ZXJuYWxQbGF5YmFjazohZGlzYWJsZWRdOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldE11dGVkOm11dGVkXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1v
ZGVsKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVn
YXRlOm51bGxwdHJdOworICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgq
dGhpcyk7CisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7Cit9CisKK30KKwor
I2VuZGlmIC8vIEhBVkUoQVZLSVQpCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjc3MTAzYzM0MTFhOTMwOWM4ZmM1MjQ5MzY1YmYwNTg1
MTQ2NWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisj
aWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNp
bmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorI2luY2x1ZGUgIlZpZGVv
RnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CisjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CisKK09CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1Mg
VUlWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlXaW5kb3c7CitPQkpDX0NMQVNTIFVJVmll
dzsKK09CSkNfQ0xBU1MgQ0FMYXllcjsKK09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9sbGVy
OworT0JKQ19DTEFTUyBXZWJBVlBsYXllckxheWVyVmlldzsKK09CSkNfQ0xBU1MgV2ViQVZQbGF5
ZXJMYXllcjsKK09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlOwor
CituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIFZpZGVvRnVsbHNjcmVl
bk1vZGVsOworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7CisgICAgCitjbGFz
cyBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBmaW5hbAorICAg
IDogcHVibGljIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4geworCitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0Jik7CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZp
ZGVvRnVsbHNjcmVlbk1vZGVsKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwor
ICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgp
OyB9CisKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKKwor
ICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKSBmaW5hbDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXR1
cEZ1bGxzY3JlZW4oVUlWaWV3JiwgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyAq
LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dz
UGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZW50ZXJGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGV4
aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJ
bnRSZWN0JiBpbmxpbmVSZWN0KTsKKworICAgIGVudW0gY2xhc3MgRXhpdEZ1bGxTY3JlZW5SZWFz
b24geworICAgICAgICBEb25lQnV0dG9uVGFwcGVkLAorICAgICAgICBGdWxsU2NyZWVuQnV0dG9u
VGFwcGVkLAorICAgICAgICBQaW5jaEdlc3R1cmVIYW5kbGVkLAorICAgICAgICBSZW1vdGVDb250
cm9sU3RvcEV2ZW50UmVjZWl2ZWQsCisgICAgICAgIFBpY3R1cmVJblBpY3R1cmVTdGFydGVkCisg
ICAgfTsKKworICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KKyAgICBib29sIHNob3VsZEV4aXRGdWxsc2NyZWVu
V2l0aFJlYXNvbihFeGl0RnVsbFNjcmVlblJlYXNvbik7CisgICAgSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0K
KyAgICBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOyB9CisgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Owor
ICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChi
b29sKT4mJiBjYWxsYmFjayk7CisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0OworICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKKworICAg
IHZvaWQgd2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOworICAgIHZvaWQgZGlkU3RhcnRQaWN0
dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgp
OworICAgIHZvaWQgd2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBkaWRTdG9w
UGljdHVyZUluUGljdHVyZSgpOworICAgIHZvaWQgcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVT
dG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQgKF4pKEJPT0wpKTsKKworICAgIHZvaWQgc2V0
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZv
aWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7
CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgJiBtb2RlOyB9CisgICAgYm9vbCBpc01v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VY
UE9SVCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdCYpOworICAgIHZvaWQgYmVnaW5TZXNzaW9uKCk7CisgICAgdm9pZCBlbnRlclBpY3R1
cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7CisgICAg
dm9pZCB3YXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBs
YXllckNvbnRyb2xsZXIoKSBjb25zdDsKKworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdD4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgUmV0YWluUHRyPFdlYkFW
UGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVn
YXRlOworICAgIFJldGFpblB0cjxBVlBsYXllclZpZXdDb250cm9sbGVyPiBtX3BsYXllclZpZXdD
b250cm9sbGVyOworICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsIHsgbnVsbHB0ciB9OworICAgIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIgfTsKKworICAgIC8vIFRoZXNlIGFyZSBv
bmx5IHVzZWQgd2hlbiBmdWxsc2NyZWVuIGlzIHByZXNlbnRlZCBpbiBhIHNlcGFyYXRlIHdpbmRv
dy4KKyAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0cjxVSVZp
ZXdDb250cm9sbGVyPiBtX3ZpZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxVSVZpZXc+IG1f
cGFyZW50VmlldzsKKyAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IG1fcGFyZW50V2luZG93OworICAg
IFJldGFpblB0cjxXZWJBVlBsYXllckxheWVyVmlldz4gbV9wbGF5ZXJMYXllclZpZXc7CisgICAg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKKyAgICBXVEY6OkZ1
bmN0aW9uPHZvaWQoYm9vbCk+IG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2s7CisgICAgUnVuTG9v
cDo6VGltZXI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1fd2F0Y2hkb2dUaW1lcjsK
KyAgICBib29sIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fZXhpdFJlcXVlc3RlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2V4aXRDb21wbGV0
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9lbnRlclJlcXVlc3RlZCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wg
bV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0
dXJlU3RvcCB7IGZhbHNlIH07CisKKyAgICB2b2lkIGRvRW50ZXJGdWxsc2NyZWVuKCk7Cit9Owor
Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjkzMjBm
ZGUxZWVjYjAwZDI5ZGJlZTI1Yjk4NDkyNjVjYWQyODIxOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5t
bQpAQCAtMCwwICsxLDEwNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JNKElPUykK
KyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCisKKyNpZiBIQVZFKEFW
S0lUKQorCisjaW1wb3J0ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiR2VvbWV0cnlVdGlsaXRpZXMu
aCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0LmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKKyNpbXBvcnQg
IlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgi
CisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2ltcG9ydCAiV2ViQVZQbGF5ZXJD
b250cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CisjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2ltcG9y
dCA8b2JqYy9tZXNzYWdlLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbXBvcnQgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gU29m
dC1saW5raW5nIGhlYWRlcnMgbXVzdCBiZSBpbmNsdWRlZCBsYXN0IHNpbmNlIHRoZXkgI2RlZmlu
ZSBmdW5jdGlvbnMsIGNvbnN0YW50cywgZXRjLgorI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsu
aCIKKworU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pCitTT0ZUX0xJTktfQ0xBU1Mo
QVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQorU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRh
dGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19D
T05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIE5T
U3RyaW5nICopCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0RmlsbCwgTlNTdHJpbmcgKikKKworU09GVF9MSU5LX0ZSQU1FV09S
S19PUFRJT05BTChBVktpdCkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZQaWN0
dXJlSW5QaWN0dXJlQ29udHJvbGxlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwg
QVZQbGF5ZXJWaWV3Q29udHJvbGxlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwg
X19BVlBsYXllckxheWVyVmlldykKKworU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKK1NPRlRf
TElOS19DTEFTUyhVSUtpdCwgVUlBcHBsaWNhdGlvbikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwg
VUlTY3JlZW4pCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJV2luZG93KQorU09GVF9MSU5LX0NM
QVNTKFVJS2l0LCBVSVZpZXcpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJVmlld0NvbnRyb2xs
ZXIpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJQ29sb3IpCitTT0ZUX0xJTktfQ09OU1RBTlQo
VUlLaXQsIFVJVGV4dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwsIFVJV2luZG93
TGV2ZWwpCisKK3N0YXRpYyBVSUNvbG9yICpjbGVhclVJQ29sb3IoKQoreworICAgIHJldHVybiAo
VUlDb2xvciAqKVtnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXTsKK30KKworI2lmICFMT0df
RElTQUJMRUQKK3N0YXRpYyBjb25zdCBjaGFyKiBib29sU3RyaW5nKGJvb2wgdmFsKQoreworICAg
IHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25z
dCBTZWNvbmRzIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwgeyAxX3MgfTsKKworQGNsYXNz
IFdlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb247CisKK0BpbnRlcmZhY2UgV2ViQVZQbGF5ZXJWaWV3
Q29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QgPEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZV9XZWJLaXRPbmx5PiB7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsKK30KK0Bwcm9wZXJ0eSAoYXNzaWduKSBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsKKy0gKEJPT0wpcGxh
eWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29u
dHJvbGxlciBzaG91bGRFeGl0RnVsbFNjcmVlbldpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRy
b2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbilyZWFzb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUKKy0gKFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgcmV0dXJuIF9mdWxsc2Ny
ZWVuSW50ZXJmYWNlLmdldCgpOworfQorCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6
KFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7Cisg
ICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOworfQorCistICh2
b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5
ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VEX1BB
UkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2Ut
PndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29u
dHJvbGxlckRpZFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAq
KXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250
cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0YXJ0UGljdHVyZUlu
UGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyRmFpbGVkVG9TdGFy
dFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29u
dHJvbGxlciB3aXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIFVOVVNFRF9QQVJBTShw
bGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBzZWxm
LmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9
CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3RvcFBpY3R1cmVJblBpY3R1cmU6
KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVO
VVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50
ZXJmYWNlLT53aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9pZClwbGF5ZXJW
aWV3Q29udHJvbGxlckRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9s
bGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmll
d0NvbnRyb2xsZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3RvcFBpY3R1
cmVJblBpY3R1cmUoKTsKK30KKworc3RhdGljIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpFeGl0RnVsbFNjcmVlblJlYXNvbiBjb252ZXJ0VG9FeGl0RnVsbFNjcmVlblJlYXNvbihBVlBs
YXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29uKQoreworICAgIHN3
aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxT
Y3JlZW5SZWFzb25Eb25lQnV0dG9uVGFwcGVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVk
OworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uRnVs
bFNjcmVlbkJ1dHRvblRhcHBlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RnVsbFNjcmVlbkJ1dHRvblRhcHBlZDsK
KyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpY3R1
cmVJblBpY3R1cmVTdGFydGVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDsK
KyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpbmNo
R2VzdHVyZUhhbmRsZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpbmNoR2VzdHVyZUhhbmRsZWQ7CisgICAgY2Fz
ZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25SZW1vdGVDb250cm9s
U3RvcEV2ZW50UmVjZWl2ZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNl
aXZlZDsKKyAgICB9Cit9CisKKy0gKEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVy
Vmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciBzaG91bGRFeGl0RnVsbFNjcmVl
bldpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbily
ZWFzb24KK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHJl
dHVybiBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJl
YXNvbihjb252ZXJ0VG9FeGl0RnVsbFNjcmVlblJlYXNvbihyZWFzb24pKTsKK30KKworLSAodm9p
ZClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZp
ZXdDb250cm9sbGVyIHJlc3RvcmVVc2VySW50ZXJmYWNlRm9yUGljdHVyZUluUGljdHVyZVN0b3BX
aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgcmVzdG9yZWQpKWNvbXBsZXRpb25I
YW5kbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBz
ZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdp
dGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9uSGFuZGxlcik7Cit9CitAZW5kCisKK0BpbnRl
cmZhY2UgV2ViQVZQbGF5ZXJMYXllciA6IENBTGF5ZXIKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIE5TU3RyaW5nICp2aWRlb0dyYXZpdHk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0
dGVyPWlzUmVhZHlGb3JEaXNwbGF5KSBCT09MIHJlYWR5Rm9yRGlzcGxheTsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2Ny
ZWVuSW50ZXJmYWNlOworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgQVZQbGF5ZXJDb250
cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikg
Q0FMYXllciAqdmlkZW9TdWJsYXllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBudWxs
YWJsZSkgTlNEaWN0aW9uYXJ5ICpwaXhlbEJ1ZmZlckF0dHJpYnV0ZXM7CitAcHJvcGVydHkgQ0dT
aXplIHZpZGVvRGltZW5zaW9uczsKK0Bwcm9wZXJ0eSBDR1JlY3QgbW9kZWxWaWRlb0xheWVyRnJh
bWU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBVlBsYXllckxheWVyIHsKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOwor
ICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IF9hdlBsYXllckNvbnRyb2xsZXI7
CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IF92aWRlb1N1YmxheWVyOworICAgIFJldGFpblB0cjxO
U1N0cmluZz4gX3ZpZGVvR3Jhdml0eTsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmIChzZWxmKSB7CisgICAgICAgIFtzZWxmIHNl
dE1hc2tzVG9Cb3VuZHM6WUVTXTsKKyAgICAgICAgX3ZpZGVvR3Jhdml0eSA9IGdldEFWTGF5ZXJW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykg
b2JqZWN0Om5pbF07CisgICAgW19waXhlbEJ1ZmZlckF0dHJpYnV0ZXMgcmVsZWFzZV07CisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCistIChWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCop
ZnVsbHNjcmVlbkludGVyZmFjZQoreworICAgIHJldHVybiBfZnVsbHNjcmVlbkludGVyZmFjZS5n
ZXQoKTsKK30KKworLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQoreworICAgIF9mdWxsc2NyZWVu
SW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKK30KKworLSAoQVZQbGF5ZXJDb250cm9s
bGVyICopcGxheWVyQ29udHJvbGxlcgoreworICAgIHJldHVybiAoQVZQbGF5ZXJDb250cm9sbGVy
ICopX2F2UGxheWVyQ29udHJvbGxlci5nZXQoKTsKK30KKworLSAodm9pZClzZXRQbGF5ZXJDb250
cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyCit7CisgICAgQVNT
RVJUKCFwbGF5ZXJDb250cm9sbGVyIHx8IFtwbGF5ZXJDb250cm9sbGVyIGlzS2luZE9mQ2xhc3M6
W1dlYkFWUGxheWVyQ29udHJvbGxlciBjbGFzc11dKTsKKyAgICBfYXZQbGF5ZXJDb250cm9sbGVy
ID0gKFdlYkFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXI7Cit9CisKKy0gKHZv
aWQpc2V0VmlkZW9TdWJsYXllcjooQ0FMYXllciAqKXZpZGVvU3VibGF5ZXIKK3sKKyAgICBfdmlk
ZW9TdWJsYXllciA9IHZpZGVvU3VibGF5ZXI7Cit9CisKKy0gKENBTGF5ZXIqKXZpZGVvU3VibGF5
ZXIKK3sKKyAgICByZXR1cm4gX3ZpZGVvU3VibGF5ZXIuZ2V0KCk7Cit9CisKKy0gKHZvaWQpbGF5
b3V0U3VibGF5ZXJzCit7CisgICAgaWYgKFtfdmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBz
ZWxmKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRl
bGVnYXRlXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW192aWRlb1N1YmxheWVyIHNldFBvc2l0
aW9uOkNHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoc2VsZi5ib3VuZHMpLCBDR1JlY3RHZXRNaWRZ
KHNlbGYuYm91bmRzKSldOworCisgICAgaWYgKHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodCA8
PSAwIHx8IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIDw9IDApCisgICAgICAgIHJldHVybjsK
KworICAgIEZsb2F0UmVjdCBzb3VyY2VWaWRlb0ZyYW1lOworICAgIEZsb2F0UmVjdCB0YXJnZXRW
aWRlb0ZyYW1lOworICAgIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBzZWxmLnZpZGVvRGltZW5z
aW9ucy53aWR0aCAvIHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodDsKKyAgICAKKyAgICBpZiAo
W2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRl
b0dyYXZpdHldKSB7CisgICAgICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBzZWxmLm1vZGVsVmlkZW9M
YXllckZyYW1lOworICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gc2VsZi5ib3VuZHM7CisgICAg
fSBlbHNlIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxU
b1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsKKyAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9
IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBz
ZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKKyAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IGxh
cmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxm
LmJvdW5kcyk7CisgICAgfSBlbHNlIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFz
cGVjdEZpbGwoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7CisgICAgICAg
IHNvdXJjZVZpZGVvRnJhbWUgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0
KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICBz
ZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lID0gQ0dSZWN0TWFrZSgwLCAwLCBzb3VyY2VWaWRlb0Zy
YW1lLndpZHRoKCksIHNvdXJjZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQo
X2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOworICAgICAgICBfZnVsbHNjcmVlbkludGVy
ZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKHNlbGYubW9kZWxWaWRlb0xheWVyRnJh
bWUpOworICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJh
dGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisgICAgfSBlbHNl
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgVUlWaWV3ICp2aWV3ID0gKFVJ
VmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV07CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUodGFyZ2V0VmlkZW9GcmFtZS53
aWR0aCgpIC8gc291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCB0YXJnZXRWaWRlb0ZyYW1lLmhlaWdo
dCgpIC8gc291cmNlVmlkZW9GcmFtZS5oZWlnaHQoKSk7CisgICAgW3ZpZXcgc2V0VHJhbnNmb3Jt
OnRyYW5zZm9ybV07CisgICAgCisgICAgTlNUaW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24g
PSBbQ0FUcmFuc2FjdGlvbiBhbmltYXRpb25EdXJhdGlvbl07CisgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXiB7CisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQ
cmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
cmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07CisKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVj
dG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OmFu
aW1hdGlvbkR1cmF0aW9uICsgMC4xXTsKKyAgICB9KTsKK30KKworLSAodm9pZClyZXNvbHZlQm91
bmRzCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRh
cmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsK
KyAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGlmIChbX3ZpZGVvU3VibGF5ZXIgc3VwZXJsYXllcl0gIT0gc2VsZikKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChzZWxmLm1vZGVs
VmlkZW9MYXllckZyYW1lLCBbc2VsZiBib3VuZHNdKSAmJiBDR0FmZmluZVRyYW5zZm9ybUlzSWRl
bnRpdHkoWyhVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdIHRyYW5zZm9ybV0pKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtD
QVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOworICAgIFtDQVRyYW5zYWN0aW9u
IHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgCisgICAgaWYgKCFDR1JlY3RFcXVhbFRvUmVj
dChzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lLCBbc2VsZiBib3VuZHNdKSkgeworICAgICAgICBz
ZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lID0gW3NlbGYgYm91bmRzXTsKKyAgICAgICAgQVNTRVJU
KF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKKyAgICAgICAgX2Z1bGxzY3JlZW5JbnRl
cmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShzZWxmLm1vZGVsVmlkZW9MYXllckZy
YW1lKTsKKyAgICB9CisgICAgWyhVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdIHNl
dFRyYW5zZm9ybTpDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5XTsKKyAgICAKKyAgICBbQ0FUcmFu
c2FjdGlvbiBjb21taXRdOworfQorCistICh2b2lkKXNldFZpZGVvR3Jhdml0eTooTlNTdHJpbmcg
Kil2aWRlb0dyYXZpdHkKK3sKKyAgICBfdmlkZW9HcmF2aXR5ID0gdmlkZW9HcmF2aXR5OworICAg
IAorICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdy
YXZpdHkgPSBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0OworICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJl
c2l6ZSgpKQorICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZTsKKyAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSkKKyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CisgICAgZWxzZSBp
ZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxs
KCkpCisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIAorICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwo
KSk7CisgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2
aXR5KGdyYXZpdHkpOworfQorCistIChOU1N0cmluZyAqKXZpZGVvR3Jhdml0eQoreworICAgIHJl
dHVybiBfdmlkZW9HcmF2aXR5LmdldCgpOworfQorCistIChDR1JlY3QpdmlkZW9SZWN0Cit7Cisg
ICAgaWYgKHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIDw9IDAgfHwgc2VsZi52aWRlb0RpbWVu
c2lvbnMuaGVpZ2h0IDw9IDApCisgICAgICAgIHJldHVybiBzZWxmLmJvdW5kczsKKyAgICAKKyAg
ICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBz
ZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7CisKKyAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKQor
ICAgICAgICByZXR1cm4gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVv
QXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKKyAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZp
dHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkK
KyAgICAgICAgcmV0dXJuIHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3Qodmlk
ZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOworCisgICAgcmV0dXJuIHNlbGYuYm91bmRzOwor
fQorCisrIChOU1NldCAqKWtleVBhdGhzRm9yVmFsdWVzQWZmZWN0aW5nVmlkZW9SZWN0Cit7Cisg
ICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0czpAInZpZGVvRGltZW5zaW9ucyIsIEAidmlk
ZW9HcmF2aXR5IiwgbmlsXTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyA6IFVJVmlldworQGVuZAorCitzdGF0aWMgQ2xhc3MgV2Vi
QVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKK3sK
KyAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5ZXIgY2xhc3NdOworfQorCitzdGF0aWMgV2ViQVZQ
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICphbGxvY1dlYkFWUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlld0luc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3Mg
PSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0
Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKKyAgICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRl
Q2xhc3NQYWlyKGdldFVJVmlld0NsYXNzKCksICJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXciLCAwKTsKKyAgICAgICAgb2JqY19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7
CisgICAgICAgIENsYXNzIG1ldGFDbGFzcyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1l
dGFDbGFzcywgQHNlbGVjdG9yKGxheWVyQ2xhc3MpLCAoSU1QKVdlYkFWUGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlld19sYXllckNsYXNzLCAiQEA6Iik7CisgICAgfSk7CisgICAgCisgICAg
cmV0dXJuIChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbdGhlQ2xhc3Mg
YWxsb2NdOworfQorCitAaW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXJWaWV3IDogX19BVlBsYXll
ckxheWVyVmlldworQHByb3BlcnR5IChyZXRhaW4pIFVJVmlldyogdmlkZW9WaWV3OworQGVuZAor
CitzdGF0aWMgQ2xhc3MgV2ViQVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQor
eworICAgIHJldHVybiBbV2ViQVZQbGF5ZXJMYXllciBjbGFzc107Cit9CisKK3N0YXRpYyBBVlBs
YXllckNvbnRyb2xsZXIgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIoaWQg
YVNlbGYsIFNFTCkKK3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllciA9IGFT
ZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5
ZXJMYXllciAqKVtwbGF5ZXJMYXllciBwbGF5ZXJMYXllcl07CisgICAgcmV0dXJuIFt3ZWJBVlBs
YXllckxheWVyIHBsYXllckNvbnRyb2xsZXJdOworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXll
ckxheWVyVmlld19zZXRQbGF5ZXJDb250cm9sbGVyKGlkIGFTZWxmLCBTRUwsIEFWUGxheWVyQ29u
dHJvbGxlciAqcGxheWVyQ29udHJvbGxlcikKK3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpw
bGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXll
ckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVy
XTsKKyAgICBbd2ViQVZQbGF5ZXJMYXllciBzZXRQbGF5ZXJDb250cm9sbGVyOiBwbGF5ZXJDb250
cm9sbGVyXTsKK30KKworc3RhdGljIFVJVmlldyAqV2ViQVZQbGF5ZXJMYXllclZpZXdfdmlkZW9W
aWV3KGlkIGFTZWxmLCBTRUwpCit7CisgICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5
ZXIgPSBhU2VsZjsKKyAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdl
YkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXIgcGxheWVyTGF5ZXJdOworICAgIENBTGF5ZXIq
IHZpZGVvTGF5ZXIgPSBbd2ViQVZQbGF5ZXJMYXllciB2aWRlb1N1YmxheWVyXTsKKyAgICBpZiAo
IXZpZGVvTGF5ZXIgfHwgIXZpZGVvTGF5ZXIuZGVsZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKFtbdmlkZW9MYXllciBkZWxlZ2F0ZV0gaXNLaW5kT2ZDbGFzczpnZXRVSVZp
ZXdDbGFzcygpXSk7CisgICAgcmV0dXJuIChVSVZpZXcgKilbdmlkZW9MYXllciBkZWxlZ2F0ZV07
Cit9CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFZpZGVvVmlldyhpZCBh
U2VsZiwgU0VMLCBVSVZpZXcgKnZpZGVvVmlldykKK3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3
ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBs
YXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxh
eWVyXTsKKyAgICBbd2ViQVZQbGF5ZXJMYXllciBzZXRWaWRlb1N1YmxheWVyOlt2aWRlb1ZpZXcg
bGF5ZXJdXTsKK30KKworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0
aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkK
K3sKKyAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Cisg
ICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFW
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVtwbGF5ZXJMYXllclZpZXcgcGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlld107CisKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5
ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXll
cl07CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJM
YXllciAqKVtwaXBWaWV3IGxheWVyXTsKKyAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5
OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKV07CisgICAgW3BpcFBsYXllckxh
eWVyIHNldFZpZGVvU3VibGF5ZXI6cGxheWVyTGF5ZXIudmlkZW9TdWJsYXllcl07CisgICAgW3Bp
cFBsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lv
bnNdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6cGxheWVyTGF5ZXIudmlk
ZW9HcmF2aXR5XTsKKyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6
cGxheWVyTGF5ZXIubW9kZWxWaWRlb0xheWVyRnJhbWVdOworICAgIFtwaXBQbGF5ZXJMYXllciBz
ZXRQbGF5ZXJDb250cm9sbGVyOnBsYXllckxheWVyLnBsYXllckNvbnRyb2xsZXJdOworICAgIFtw
aXBQbGF5ZXJMYXllciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOnBsYXllckxheWVyLmZ1bGxzY3Jl
ZW5JbnRlcmZhY2VdOworICAgIFtwaXBWaWV3IGFkZFN1YnZpZXc6cGxheWVyTGF5ZXJWaWV3LnZp
ZGVvVmlld107Cit9CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0b3BSb3V0
aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkK
K3sKKyAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Cisg
ICAgaWYgKFVJVmlldyAqdmlkZW9WaWV3ID0gcGxheWVyTGF5ZXJWaWV3LnZpZGVvVmlldykKKyAg
ICAgICAgW3BsYXllckxheWVyVmlldyBhZGRTdWJ2aWV3OnZpZGVvVmlld107CisgICAgV2ViQVZQ
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyAqKVtwbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlld107CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAo
V2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworICAgIFdl
YkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlw
VmlldyBsYXllcl07CisgICAgW3BsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBp
cFBsYXllckxheWVyLm1vZGVsVmlkZW9MYXllckZyYW1lXTsKK30KKworc3RhdGljIFdlYkFWUGlj
dHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqV2ViQVZQbGF5ZXJMYXllclZpZXdfcGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQoreworICAgIFdlYkFWUGxh
eWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSBbcGxheWVyTGF5ZXJWaWV3IHZhbHVl
Rm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKKyAgICBpZiAoIXBp
cFZpZXcpIHsKKyAgICAgICAgcGlwVmlldyA9IFthbGxvY1dlYkFWUGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlld0luc3RhbmNlKCkgaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvXTsKKyAgICAg
ICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1ZTpwaXBWaWV3IGZvcktleTpAIl9waWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07CisgICAgfQorICAgIHJldHVybiBwaXBWaWV3OworfQor
CitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19kZWFsbG9jKGlkIGFTZWxmLCBTRUwp
Cit7CisgICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwor
ICAgIFJldGFpblB0cjxXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXc+IHBpcFZp
ZXcgPSBhZG9wdE5TKFtwbGF5ZXJMYXllclZpZXcgdmFsdWVGb3JLZXk6QCJfcGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyJdKTsKKyAgICBbcGxheWVyTGF5ZXJWaWV3IHNldFZhbHVlOm5p
bCBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOworICAgIG9iamNf
c3VwZXIgc3VwZXJDbGFzcyB7IHBsYXllckxheWVyVmlldywgZ2V0X19BVlBsYXllckxheWVyVmll
d0NsYXNzKCkgfTsKKyAgICBhdXRvIHN1cGVyX2RlYWxsb2MgPSByZWludGVycHJldF9jYXN0PHZv
aWQoKikob2JqY19zdXBlciosIFNFTCk+KG9iamNfbXNnU2VuZFN1cGVyKTsKKyAgICBzdXBlcl9k
ZWFsbG9jKCZzdXBlckNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYykpOworfQorCisjcHJhZ21hIG1h
cmsgLSBNZXRob2RzCisKK3N0YXRpYyBXZWJBVlBsYXllckxheWVyVmlldyAqYWxsb2NXZWJBVlBs
YXllckxheWVyVmlld0luc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBu
aWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hf
b25jZSgmb25jZVRva2VuLCBeIHsKKyAgICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xh
c3NQYWlyKGdldF9fQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpLCAiV2ViQVZQbGF5ZXJMYXllclZp
ZXciLCAwKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IoZGVh
bGxvYyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYywgInZAOiIpOworICAgICAg
ICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRQbGF5ZXJDb250cm9sbGVy
OiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxlciwgInZAOkAi
KTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IocGxheWVyQ29u
dHJvbGxlciksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfcGxheWVyQ29udHJvbGxlciwgIkBA
OiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRWaWRl
b1ZpZXc6KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zZXRWaWRlb1ZpZXcsICJ2QDpAIik7
CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHZpZGVvVmlldyks
IChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfdmlkZW9WaWV3LCAiQEA6Iik7CisgICAgICAgIGNs
YXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHN0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19z
dGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgInZAOiIp
OworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzdG9wUm91dGlu
Z1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXll
ckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3LCAidkA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9y
KHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJW
aWV3X3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcsICJAQDoiKTsKKyAgICAgICAgCisg
ICAgICAgIGNsYXNzX2FkZEl2YXIodGhlQ2xhc3MsICJfcGljdHVyZUluUGljdHVyZVBsYXllckxh
eWVyVmlldyIsIHNpemVvZihXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKiks
IGxvZzIoc2l6ZW9mKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKSksICJA
Iik7CisgICAgICAgIAorICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsK
KyAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2JqY19nZXRNZXRhQ2xhc3MoIldlYkFWUGxheWVy
TGF5ZXJWaWV3Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxlY3Rv
cihsYXllckNsYXNzKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19sYXllckNsYXNzLCAiQEA6
Iik7CisgICAgfSk7CisgICAgcmV0dXJuIChXZWJBVlBsYXllckxheWVyVmlldyAqKVt0aGVDbGFz
cyBhbGxvY107Cit9CisKK1JlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZShQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQoreworICAgIFJlZjxWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdChwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsKKyAgICBbaW50ZXJm
YWNlLT5tX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgc2V0RnVsbHNjcmVlbkludGVyZmFj
ZTppbnRlcmZhY2UucHRyKCldOworICAgIHJldHVybiBpbnRlcmZhY2U7Cit9CisKK1ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAg
IDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQor
ICAgICwgbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXZWJBVlBsYXll
clZpZXdDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fd2F0Y2hkb2dU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6d2F0Y2hkb2dUaW1lckZpcmVkKQoreworfQorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6flZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCkKK3sKKyAgICBXZWJBVlBsYXll
ckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSB0aGlzLT5wbGF5ZXJDb250cm9sbGVyKCk7
CisgICAgaWYgKHBsYXllckNvbnRyb2xsZXIgJiYgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBs
YXliYWNrQWN0aXZlKQorICAgICAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChmYWxzZSwgUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lLCAiIik7CisgICAgaWYgKG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNs
aWVudCgqdGhpcyk7Cit9CisKK1dlYkFWUGxheWVyQ29udHJvbGxlciAqVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRyb2xsZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWVyQ29udHJvbGxlcigpOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChW
aWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhp
cyk7CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbW9kZWw7CisKKyAgICBpZiAobV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRk
Q2xpZW50KCp0aGlzKTsKKworICAgIGhhc1ZpZGVvQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aGFzVmlkZW8oKSA6IGZhbHNlKTsKKyAgICB2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPyBtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6IEZsb2F0U2l6ZSgpKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gb2JzZXJ2ZXI7Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQor
eworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsK
KyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEhhc1ZpZGVvOmhhc1ZpZGVvXTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChj
b25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBXZWJBVlBsYXllckxheWVy
ICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBs
YXllckxheWVyXTsKKworICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9E
aW1lbnNpb25zXTsKKyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldENvbnRlbnREaW1lbnNpb25z
OnZpZGVvRGltZW5zaW9uc107CisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldE5lZWRzTGF5b3V0
XTsKKworICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9
IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbbV9wbGF5ZXJMYXllclZp
ZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld107CisgICAgV2ViQVZQbGF5ZXJMYXll
ciAqcGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsK
KyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVv
RGltZW5zaW9uc107CisgICAgW3BpcFZpZXcgc2V0TmVlZHNMYXlvdXRdOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
IGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOmVu
YWJsZWRdOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNh
dGlvbkRpZEJlY29tZUFjdGl2ZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoJXApIiwgdGhp
cyk7CisgICAgaWYgKG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVn
cm91bmQgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5pc1Zpc2libGUoKSkgeworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGlj
dHVyZUluUGljdHVyZV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBh
cmUgYm90aCBpbiBQaVAgYW5kIGluIEZ1bGxzY3JlZW4gKGkuZS4sIHZpYSBhdXRvLVBpUCksIGFu
ZCB3ZSBkaWQgbm90IHN0b3AgZnVsbHNjcmVlbiB1cG9uIHJldHVybmluZywgaXQgbXVzdCBiZQor
ICAgIC8vIGJlY2F1c2UgdGhlIG9yaWdpbmF0aW5nIHZpZXcgaXMgbm90IHZpc2libGUsIHNvIGhp
ZGUgdGhlIGZ1bGxzY3JlZW4gd2luZG93LgorICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgfCBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgeworICAgICAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8g
Y29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikg
eworICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgICAgICAgICAgW1tt
X3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOworICAgICAgICB9XTsK
KyAgICB9Cit9CisKK0BpbnRlcmZhY2UgVUlXaW5kb3cgKCkKKy0gKEJPT0wpX2lzSG9zdGVkSW5B
bm90aGVyUHJvY2VzczsKK0BlbmQKKworQGludGVyZmFjZSBVSVZpZXdDb250cm9sbGVyICgpCitA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCBzZXR0ZXI9X3NldElnbm9yZUFwcFN1cHBvcnRl
ZE9yaWVudGF0aW9uczopIEJPT0wgX2lnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczsKK0Bl
bmQKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVu
KFVJVmlldyYgdmlkZW9WaWV3LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwg
VUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCit7CisgICAg
QVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
Tm9uZSk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworCisgICAgbV9hbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlUGxheWJhY2sgPSBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7CisKKyAgICBb
Q0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlv
bnM6WUVTXTsKKyAgICBib29sIGlzSW5QaWN0dXJlSW5QaWN0dXJlTW9kZSA9IGhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7
CisgICAgbV9tb2RlID0gbW9kZTsKKyAgICBtX3BhcmVudFZpZXcgPSBwYXJlbnRWaWV3OworICAg
IG1fcGFyZW50V2luZG93ID0gcGFyZW50Vmlldy53aW5kb3c7CisKKyAgICBpZiAoIVtbcGFyZW50
VmlldyB3aW5kb3ddIF9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3NdKSB7CisgICAgICAgIGlmICgh
bV93aW5kb3cpCisgICAgICAgICAgICBtX3dpbmRvdyA9IGFkb3B0TlMoW2FsbG9jVUlXaW5kb3dJ
bnN0YW5jZSgpIGluaXRXaXRoRnJhbWU6W1tnZXRVSVNjcmVlbkNsYXNzKCkgbWFpblNjcmVlbl0g
Ym91bmRzXV0pOworICAgICAgICBbbV93aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlD
b2xvcigpXTsKKyAgICAgICAgaWYgKCFtX3ZpZXdDb250cm9sbGVyKQorICAgICAgICAgICAgbV92
aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jVUlWaWV3Q29udHJvbGxlckluc3RhbmNlKCkg
aW5pdF0pOworICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gc2V0RnJhbWU6W21fd2lu
ZG93IGJvdW5kc11dOworICAgICAgICBbbV92aWV3Q29udHJvbGxlciBfc2V0SWdub3JlQXBwU3Vw
cG9ydGVkT3JpZW50YXRpb25zOllFU107CisgICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0Nv
bnRyb2xsZXI6bV92aWV3Q29udHJvbGxlci5nZXQoKV07CisgICAgICAgIFttX3dpbmRvdyBzZXRX
aW5kb3dMZXZlbDpnZXRVSVRleHRFZmZlY3RzQmVuZWF0aFN0YXR1c0JhcldpbmRvd0xldmVsKCkg
KyAxXTsKKyAgICAgICAgW21fd2luZG93IG1ha2VLZXlBbmRWaXNpYmxlXTsKKyAgICB9CisKKyAg
ICBpZiAoIW1fcGxheWVyTGF5ZXJWaWV3KQorICAgICAgICBtX3BsYXllckxheWVyVmlldyA9IGFk
b3B0TlMoW2FsbG9jV2ViQVZQbGF5ZXJMYXllclZpZXdJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBb
bV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOltwbGF5ZXJDb250cm9sbGVyKCkgaXNFeHRlcm5h
bFBsYXliYWNrQWN0aXZlXV07CisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRD
b2xvcjpjbGVhclVJQ29sb3IoKV07CisKKyAgICBpZiAoIWlzSW5QaWN0dXJlSW5QaWN0dXJlTW9k
ZSkgeworICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0VmlkZW9WaWV3OiZ2aWRlb1ZpZXdd
OworICAgICAgICBbbV9wbGF5ZXJMYXllclZpZXcgYWRkU3VidmlldzomdmlkZW9WaWV3XTsKKyAg
ICB9CisKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxh
eWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKworICAgIFtwbGF5ZXJMYXll
ciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIGluaXRpYWxSZWN0Lndp
ZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgpKV07CisgICAgW3BsYXllckxheWVyIHNldFZpZGVv
RGltZW5zaW9uczpbcGxheWVyQ29udHJvbGxlcigpIGNvbnRlbnREaW1lbnNpb25zXV07CisgICAg
cGxheWVyTGF5ZXIuZnVsbHNjcmVlbkludGVyZmFjZSA9IHRoaXM7CisKKyAgICBpZiAoIW1fcGxh
eWVyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIgPSBhZG9w
dE5TKFthbGxvY0FWUGxheWVyVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRoUGxheWVy
TGF5ZXJWaWV3Om1fcGxheWVyTGF5ZXJWaWV3LmdldCgpXSk7CisKKyAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOworICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHNldFBsYXllckNvbnRyb2xsZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBs
YXllckNvbnRyb2xsZXIoKV07CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdh
dGU6bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsKKyAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciBzZXRBbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s6bV9hbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlUGxheWJhY2tdOworCisgICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRQ
aWN0dXJlSW5QaWN0dXJlUG9zc2libGU6bV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2td
OworCisgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgW21fdmlld0NvbnRyb2xs
ZXIgYWRkQ2hpbGRWaWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpXTsK
KyAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIGFkZFN1YnZpZXc6W21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld11dOworICAgIH0gZWxzZQorICAgICAgICBbcGFyZW50VmlldyBhZGRT
dWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKKworICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5pdGlh
bFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisK
KyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNs
ZWFyVUlDb2xvcigpXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QXV0
b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVCb3R0b21NYXJnaW4gfCBV
SVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVJpZ2h0TWFyZ2luKV07CisKKyAgICBbW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgdmlld10gc2V0TmVlZHNMYXlvdXRdOworICAgIFtbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRTZXR1cEZ1bGxzY3JlZW4oKTsKKyAgICB9KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhp
cyk7CisKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSBmYWxzZTsKKyAgICBtX2V4aXRSZXF1ZXN0ZWQg
PSBmYWxzZTsKKyAgICBtX2VudGVyUmVxdWVzdGVkID0gdHJ1ZTsKKworICAgIGlmIChtb2RlKCkg
PT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSkKKyAgICAgICAgZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgZWxzZSBpZiAobW9k
ZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
KQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOworICAgIGVsc2UKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCVwKSIs
IHRoaXMpOworICAgIAorICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1cmVJ
blBpY3R1cmVQb3NzaWJsZV0pCisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0YXJ0
UGljdHVyZUluUGljdHVyZV07CisgICAgZWxzZQorICAgICAgICBmYWlsZWRUb1N0YXJ0UGljdHVy
ZUluUGljdHVyZSgpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpl
bnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoJXApIiwgdGhp
cyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworCisgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUlu
UGljdHVyZUFjdGl2ZV0pIHsKKyAgICAgICAgLy8gTk9URTogVGhlIGZ1bGxzY3JlZW4gbW9kZSB3
aWxsIGJlIHJlc3RvcmVkIGluIHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21w
bGV0aW9uSGFuZGxlcigpLgorICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5T
dG9wcGluZ1BpUCA9IHRydWU7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQ
aWN0dXJlSW5QaWN0dXJlXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFu
ZGxlcjpbdGhpcywgcHJvdGVjdGVkVGhpc10gKEJPT0wgc3VjY2VlZGVkLCBOU0Vycm9yKikgewor
ICAgICAgICBVTlVTRURfUEFSQU0oc3VjY2VlZGVkKTsKKyAgICAgICAgTE9HKEZ1bGxzY3JlZW4s
ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQg
LSBsYW1iZGEoJXApIC0gc3VjY2VlZGVkKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcoc3VjY2VlZGVk
KSk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250
cm9sczpZRVNdOworCisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAg
ICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4o
KTsKKyAgICB9XTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhp
dEZ1bGxzY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxSZWN0KQoreworICAgIG1f
d2F0Y2hkb2dUaW1lci5zdG9wKCk7CisKKyAgICBtX2V4aXRSZXF1ZXN0ZWQgPSB0cnVlOworICAg
IGlmIChtX2V4aXRDb21wbGV0ZWQpIHsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRG
dWxsc2NyZWVuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgTE9HKEZ1bGxz
Y3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oJXAp
IiwgdGhpcyk7CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0Nv
bnRyb2xzOk5PXTsKKyAgICAKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFt
ZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6ZmluYWxSZWN0IHRvVmlldzpbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOworCisgICAgV2ViQVZQbGF5ZXJMYXllciAq
cGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5
ZXJMYXllcl07CisgICAgaWYgKFtwbGF5ZXJMYXllciB2aWRlb0dyYXZpdHldICE9IGdldEFWTGF5
ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSkKKyAgICAgICAgW3BsYXllckxheWVyIHNldFZp
ZGVvR3Jhdml0eTpnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCldOworICAgIFtb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBpZiAo
aXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJ
blBpY3R1cmUpKSB7CisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3Bw
aW5nUGlQID0gZmFsc2U7CisgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgICAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAgfSBl
bHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSB8IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVN0YW5kYXJkKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3Rl
ZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgY2xlYXJNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAg
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgICAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOworICAgICAgICB9XTsKKyAgICB9IGVs
c2UgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBl
eGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhp
cywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBtX2V4aXRDb21wbGV0ZWQg
PSB0cnVlOworCisgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgICAg
ICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgICAgICAgICAgW21f
cGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAg
ICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9y
OmNsZWFyVUlDb2xvcigpXTsKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisK
KyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtw
cm90ZWN0ZWRUaGlzLCB0aGlzXSgpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH1d
OworICAgIH07Cit9CisKK0BpbnRlcmZhY2UgVUlBcHBsaWNhdGlvbiAoKQorLSAodm9pZClfc2V0
U3RhdHVzQmFyT3JpZW50YXRpb246KFVJSW50ZXJmYWNlT3JpZW50YXRpb24pbzsKK0BlbmQKKwor
QGludGVyZmFjZSBVSVdpbmRvdyAoKQorLSAoVUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZh
Y2VPcmllbnRhdGlvbjsKK0BlbmQKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworICAg
IGlmIChtX3dpbmRvdykgeworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAg
ICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAgaWYgKG1f
cGFyZW50V2luZG93KQorICAgICAgICAgICAgW1tnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBzaGFy
ZWRBcHBsaWNhdGlvbl0gX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOlttX3BhcmVudFdpbmRvdyBp
bnRlcmZhY2VPcmllbnRhdGlvbl1dOworICAgIH0KKyAgICAKKyAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNl
dFBsYXllckNvbnRyb2xsZXI6bmlsXTsKKyAgICAKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkKKyAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOworICAgIGlm
IChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5k
YXJkKSkKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5Bbmlt
YXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbXSAoQk9PTCwgTlNFcnJvciAqKSB7IH1dOworICAg
IAorICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKKyAgICBpZiAobV92aWV3Q29udHJvbGxlcikKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsKKyAgICAKKyAgICBbbV9wbGF5
ZXJMYXllclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW1ttX3ZpZXdDb250cm9sbGVy
IHZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBu
aWw7CisgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBtX3dpbmRvdyA9IG5p
bDsKKyAgICBtX3BhcmVudFZpZXcgPSBuaWw7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7Cisg
ICAgCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKKworICAgIG1fZW50
ZXJSZXF1ZXN0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6aW52YWxpZGF0ZSgpCit7CisgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsK
KyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKKyAgICAKKyAgICBjbGVhbnVw
RnVsbHNjcmVlbigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpy
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAoIW1fZW50ZXJSZXF1ZXN0
ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisKKyAg
ICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVy
IHZpZXddIHNldEhpZGRlbjpZRVNdOworCisgICAgaWYgKHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkg
JiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAmJiAhbV9leGl0UmVxdWVzdGVkKSB7CisgICAgICAg
IHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNv
bnN0IEludFJlY3QmIGlubGluZVJlY3QpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSAtIHZp
c2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSk7CisgICAgaWYgKG1fcHJlcGFy
ZVRvSW5saW5lQ2FsbGJhY2spIHsKKyAgICAgICAgCisgICAgICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDppbmxpbmVSZWN0
IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOworCisgICAg
ICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gY2FsbGJhY2sgPSBXVEZNb3ZlKG1fcHJlcGFy
ZVRvSW5saW5lQ2FsbGJhY2spOworICAgICAgICBjYWxsYmFjayh2aXNpYmxlKTsKKyAgICB9Cit9
CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Om1heUF1dG9tYXRpY2FsbHlT
aG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW3BsYXllckNv
bnRyb2xsZXIoKSBpc1BsYXlpbmddICYmIG1fbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCAmJiBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUo
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChib29sKT4mJiBjYWxsYmFjaykKK3sK
KyAgICBtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisgICAg
aWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKQor
eworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Ondp
bGxTdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgc2V0TW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgbV9zaG91
bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dy
b3VuZF07CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRy
b2xzOllFU107CisKKyAgICBpZiAobV9tb2RlICYgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHsKKyAgICAgICAgaWYgKCFbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRd
KSB7CisgICAgICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBl
eGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhp
cywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICAgICAgW21fd2luZG93IHNl
dEhpZGRlbjpZRVNdOworICAgICAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgICAgIH1dOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgICAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107CisgICAgfQorCisgICAgaWYg
KG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBM
T0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0
YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKworICAgIGlmIChoYXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKworICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOworCisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0
dXJlKCkKK3sKKyAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9
IGZhbHNlOworICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVn
cm91bmQgPSBmYWxzZTsKKworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBp
ZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFu
ZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApCisg
ICAgICAgIHJldHVybjsKKworICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgIFtbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46Tk9dOworCisgICAgaWYgKG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVl
c3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3Rv
cFBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwor
ICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVN0YW5kYXJkKSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3Rv
cCkgeworICAgICAgICAvLyBBU1NVTVBUSU9OOiB3ZSBhcmUgZXhpdGluZyBwaXAgYmVjYXVzZSB3
ZSBhcmUgZW50ZXJpbmcgZnVsbHNjcmVlbgorICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKwor
ICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCld
OworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6
Y2xlYXJVSUNvbG9yKCldOworCisgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworICAgIAorICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFu
ZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpKQoreworICAgIExP
RyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQ
aWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciglcCkiLCB0aGlzKTsKKyAg
ICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgfHwgbV9zaG91
bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCkgeworICAgICAgICBt
X3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOworICAgICAg
ICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gZmFs
c2U7CisgICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9w
ID0gdHJ1ZTsKKworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAgW1tt
X3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107CisKKyAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRp
b25IYW5kbGVyOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yKikgeworICAgICAgICAgICAgbV9yZXN0
b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3VjY2Vzcyk7CisgICAgICAg
ICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgICAgICB9
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZXRhaW5QdHI8aWQ+IHN0
cm9uZ0NvbXBsZXRpb25IYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0p
OworICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShbcHJvdGVjdGVkVGhpcywgc3Ryb25n
Q29tcGxldGlvbkhhbmRsZXJdKGJvb2wgcmVzdG9yZWQpICB7CisgICAgICAgIExPRyhGdWxsc2Ny
ZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5Q
aWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlciBsYW1iZGEoJXApIC0gcmVzdG9yZWQoJXMp
IiwgcHJvdGVjdGVkVGhpcy5nZXQoKSwgYm9vbFN0cmluZyhyZXN0b3JlZCkpOworICAgICAgICB2
b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpID0gc3Ryb25nQ29tcGxldGlv
bkhhbmRsZXIuZ2V0KCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3RvcmVkKTsKKyAg
ICB9KTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2hvdWxkRXhp
dEZ1bGxzY3JlZW5XaXRoUmVhc29uKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0
RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCit7CisgICAgaWYgKCFtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWFzb24gPT0gRXhpdEZ1bGxT
Y3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVkKSB7CisgICAgICAgIGlmIChbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmlu
Z0JhY2tncm91bmRdKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fc2hv
dWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gaGFzTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgIGNsZWFy
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChwbGF5YmFja1Nlc3Npb25N
b2RlbCgpICYmIChyZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBw
ZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2
ZW50UmVjZWl2ZWQpKQorICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwor
ICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lLCByZWFzb24gPT0g
RXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQpOworCisgICAgaWYgKCFtX3dh
dGNoZG9nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV93YXRjaGRvZ1RpbWVyLnN0YXJ0T25l
U2hvdChkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsKTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoJXApIC0gbm8g
ZXhpdCBmdWxsc2NyZWVuIHJlc3BvbnNlIGluICVnczsgZm9yY2luZyBmdWxsc2NyZWVuIGhpZGRl
bi4iLCB0aGlzLCBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsLnZhbHVlKCkpOworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICBb
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgfCBtb2RlOworICAgIGlm
IChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3
TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOworICAg
IGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb2RlID0g
bmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKKyNl
bmRpZiAvLyBIQVZFKEFWS0lUKQorCitib29sIFdlYkNvcmU6OnN1cHBvcnRzUGljdHVyZUluUGlj
dHVyZSgpCit7CisjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKQorICAgIHJldHVybiBb
Z2V0QVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlckNsYXNzKCkgaXNQaWN0dXJlSW5QaWN0dXJl
U3VwcG9ydGVkXTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViQVZQbGF5ZXJDb250cm9sbGVyLmgKaW5kZXggZTVjZmYxMmJiYWZhZTY5MTE4MzEyN2JmMjgw
ZmE5M2NlOTBmMjUxMi4uMWIxMGZiYTBkNDIxOWYwOTFmNzNiOGM3OTcwNjA0YmI1ZDIwYzBlZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRy
b2xsZXIuaApAQCAtMjgsOCArMjgsOCBAQAogI2ltcG9ydCAiQVZLaXRTUEkuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw7Ci1jbGFzcyBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVs
OworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ7CiB9CiAKIEBpbnRlcmZhY2Ug
V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiA6IE5TT2JqZWN0CkBAIC00NCw4ICs0NCw4IEBAIGNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OwogfQogCiBAcHJvcGVydHkgKHJl
dGFpbikgQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyUHJveHk7Ci1AcHJvcGVy
dHkgKGFzc2lnbikgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIGRlbGVnYXRlOwot
QHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CitAcHJvcGVydHkgKGFzc2lnbikgV2ViQ29y
ZTo6UGxheWJhY2tTZXNzaW9uTW9kZWwqIGRlbGVnYXRlOworQHByb3BlcnR5IChhc3NpZ24pIFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KiBwbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2U7CiAKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wgY2FuU2NhbkZvcndhcmQ7CiBAcHJv
cGVydHkgQk9PTCBjYW5TY2FuQmFja3dhcmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5tbQppbmRleCA2YmZjNWNhMWFhMjZiMjNl
NWU4YTQ3YTJmNjhjMjI4N2YzMThhYTAxLi44NTAzMDZhYzE1ZWQwYTE4YmM4ZjE3YjRmMmI3YTY0
YzEwZGVkMzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQ
bGF5ZXJDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJB
VlBsYXllckNvbnRyb2xsZXIubW0KQEAgLTMxLDkgKzMxLDkgQEAKIAogI2ltcG9ydCAiQVZLaXRT
UEkuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCAi
VGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZUaW1lLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMzdkNGU1NjMxODkxMDEwYWE4YTdiYTVkYjk2OTgxNjJj
MjdjZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJ
T1MpCi0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudEVudW1zLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgot
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8b2JqYy9vYmpjLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotCi1PQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKLU9CSkNf
Q0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxl
cjsKLU9CSkNfQ0xBU1MgVUlXaW5kb3c7Ci1PQkpDX0NMQVNTIFVJVmlldzsKLQotbmFtZXNwYWNl
IFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIElu
dFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDsKLWNsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbkNoYW5nZU9ic2VydmVyOwotCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdAotICAgIDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAg
LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gewot
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1v
ZGVsKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0KCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQotCi0gICAgLy8g
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNl
dE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3Vi
bGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5
YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5n
ZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91
YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2Nh
bGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICBXZWJBVlBsYXllckNv
bnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllckNvbnRy
b2xsZXIuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0KLSAg
ICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7Ci0g
ICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxs
cHRyIH07Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZDE2ZGIxZWY0ZGRmYTNlZmIwNTNlZTBm
ODUwYjk1OWJmZTJiMzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLQotI2lm
IFBMQVRGT1JNKElPUykKLSNpZiBIQVZFKEFWS0lUKQotCi0jaW1wb3J0ICJBVktpdFNQSS5oIgot
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKLSNp
bXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5oIgot
I2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbXBvcnQgPEFWRm91bmRhdGlv
bi9BVlRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaW1wb3J0ICJD
b3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0
KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9k
ZWwpCi0gICAgOiBtX3BsYXllckNvbnRyb2xsZXIoYWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJv
bGxlciBhbGxvY10gaW5pdF0pKQotICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwp
Ci17Ci0gICAgbW9kZWwuYWRkQ2xpZW50KCp0aGlzKTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTp0aGlzXTsKLSAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldERlbGVnYXRlOiZtb2RlbF07Ci0KLSAgICBkdXJhdGlvbkNoYW5nZWQobW9kZWwuZHVy
YXRpb24oKSk7Ci0gICAgY3VycmVudFRpbWVDaGFuZ2VkKG1vZGVsLmN1cnJlbnRUaW1lKCksIFtb
TlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSk7Ci0gICAgYnVmZmVyZWRU
aW1lQ2hhbmdlZChtb2RlbC5idWZmZXJlZFRpbWUoKSk7Ci0gICAgcmF0ZUNoYW5nZWQobW9kZWwu
aXNQbGF5aW5nKCksIG1vZGVsLnBsYXliYWNrUmF0ZSgpKTsKLSAgICBzZWVrYWJsZVJhbmdlc0No
YW5nZWQobW9kZWwuc2Vla2FibGVSYW5nZXMoKSwgbW9kZWwuc2Vla2FibGVUaW1lUmFuZ2VzTGFz
dE1vZGlmaWVkVGltZSgpLCBtb2RlbC5saXZlVXBkYXRlSW50ZXJ2YWwoKSk7Ci0gICAgY2FuUGxh
eUZhc3RSZXZlcnNlQ2hhbmdlZChtb2RlbC5jYW5QbGF5RmFzdFJldmVyc2UoKSk7Ci0gICAgYXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zKCksIG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkpOwotICAgIGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSwgbW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpKTsKLSAgICBleHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChtb2RlbC5leHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpLCBtb2RlbC5l
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNrTG9jYWxp
emVkRGV2aWNlTmFtZSgpKTsKLSAgICB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQobW9kZWwud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSk7Ci19Ci0KLVdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQoKQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlOm51bGxwdHJdOwotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RXh0ZXJuYWxQbGF5YmFj
a0FjdGl2ZTpmYWxzZV07Ci0KLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCi17Ci0gICAgW21fcGxh
eWVyQ29udHJvbGxlciByZXNldE1lZGlhU3RhdGVdOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQotewot
ICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29u
dHJvbGxlci5nZXQoKTsKLQotICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uID0g
ZHVyYXRpb247Ci0gICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb25XaXRoaW5FbmRU
aW1lcyA9IGR1cmF0aW9uOwotCi0gICAgLy8gRklYTUU6IHdlIHRha2UgdGhpcyBhcyBhbiBpbmRp
Y2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCi0gICAgcGxheWVyQ29udHJvbGxlci5jYW5Q
bGF5ID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGF1c2UgPSBZRVM7Ci0gICAgcGxh
eWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKLSAgICBwbGF5ZXJDb250cm9s
bGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmNhblNlZWsg
PSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJT
dGF0dXNSZWFkeVRvUGxheTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hv
clRpbWUpCi17Ci0gICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVttX3BsYXll
ckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOwotICAgIEFWVmFsdWVUaW1pbmcg
KnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JW
YWx1ZTpjdXJyZW50VGltZQotICAgICAgICBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1w
IHJhdGU6MF07Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFRpbWluZzp0aW1pbmddOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpidWZmZXJlZFRpbWVD
aGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVy
KiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwotICAgIGRvdWJs
ZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uOwotICAgIGRvdWJs
ZSBub3JtYWxpemVkQnVmZmVyZWRUaW1lOwotICAgIGlmICghZHVyYXRpb24pCi0gICAgICAgIG5v
cm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOwotICAgIGVsc2UKLSAgICAgICAgbm9ybWFsaXplZEJ1
ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZSAvIGR1cmF0aW9uOwotICAgIHBsYXllckNvbnRyb2xs
ZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFsaXplZEJ1ZmZlcmVkVGltZSldOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpyYXRlQ2hhbmdlZChi
b29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChj
b25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91
YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+
IHNlZWthYmxlUmFuZ2VzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsr
KSB7Ci0gICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5nZXMuc3RhcnQoaSkucmVsZWFzZVJl
dHVyblZhbHVlKCk7Ci0gICAgICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLmVuZChpKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKLQotICAgICAgICBDTVRpbWVSYW5nZSByYW5nZSA9IENNVGltZVJh
bmdlTWFrZShDTVRpbWVNYWtlV2l0aFNlY29uZHMoc3RhcnQsIDEwMDApLCBDTVRpbWVNYWtlV2l0
aFNlY29uZHMoZW5kLXN0YXJ0LCAxMDAwKSk7Ci0gICAgICAgIFtzZWVrYWJsZVJhbmdlcyBhZGRP
YmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKLSAgICB9Ci0KLSAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdlczpzZWVrYWJsZVJhbmdl
cy5nZXQoKV07Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRpbWVSYW5nZXNM
YXN0TW9kaWZpZWRUaW1lOiBsYXN0TW9kaWZpZWRUaW1lXTsKLSAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldExpdmVVcGRhdGVJbnRlcnZhbDpsaXZlVXBkYXRlSW50ZXJ2YWxdOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFu
Z2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIg
c2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlGYXN0UmV2ZXJzZV07Ci19Ci0KLXN0YXRpYyBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYgb3B0aW9uIDog
b3B0aW9ucykgewotICAgICAgICBSZXRhaW5QdHI8V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbj4g
d2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24gYWxsb2NdIGlu
aXRdKTsKLSAgICAgICAgW3dlYk9wdGlvbiBzZXRMb2NhbGl6ZWREaXNwbGF5TmFtZTpvcHRpb24u
ZGlzcGxheU5hbWVdOwotICAgICAgICBbd2ViT3B0aW9ucyBhZGRPYmplY3Q6d2ViT3B0aW9uLmdl
dCgpXTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYk9wdGlvbnM7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9u
cyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKLSAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAg
IGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQotICAgICAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRp
b25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCld
XTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9u
cyk7Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlv
bnMgY291bnRdKQotICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQs
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJn
ZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0gICAgQVZQbGF5
ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGUgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBB
VlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZU5vbmU7Ci0gICAgaWYgKHRhcmdl
dFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5KQotICAg
ICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxh
eWJhY2tUeXBlQWlyUGxheTsKLSAgICBlbHNlIGlmICh0YXJnZXRUeXBlID09IFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQpCi0gICAgICAgIGV4dGVybmFsUGxheWJhY2tU
eXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKLQotICAg
IFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJv
bGxlci5nZXQoKTsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBaXJQbGF5
RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2FsaXplZERldmljZU5hbWU7Ci0gICAgcGxheWVyQ29u
dHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOwotICAg
IHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSA9IGVuYWJsZWQ7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQotewotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0QWxsb3dzRXh0ZXJuYWxQbGF5YmFjazohZGlzYWJsZWRdOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkK
LXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldE11dGVkOm11dGVkXTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaWYg
KCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm51bGxwdHJdOwotICAgIG1fcGxheWJhY2tTZXNzaW9u
TW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA9
IG51bGxwdHI7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEhBVkUoQVZLSVQpCi0jZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KaW5kZXggZWJjOWE2NzY2
NDFjOTc5YWI3ODNhMGRlMWNkNTEwZTRlZjk4M2QxNi4uMjY4NGRkZGIyZmYyOTE3N2FkOTRiNzdl
ZTAyYTQxNzc2ZTJkNzVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCkBAIC0z
MSwxMyArMzEsMTMgQEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFTZWxl
Y3Rpb25PcHRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmgi
CisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgogI2ltcG9ydCAi
UXVhcnR6Q29yZVNQSS5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIK
LSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCisjaW1wb3J0
ICJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50LmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQg
PFVJS2l0L1VJVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KQEAgLTkyLDI0
ICs5MiwyNCBAQCBzdGF0aWMgSW50UmVjdCBlbGVtZW50UmVjdEluV2luZG93KEhUTUxWaWRlb0Vs
ZW1lbnQqIHZpZGVvRWxlbWVudCkKICAgICByZXR1cm4gdmlldy0+Y29udmVydFRvQ29udGFpbmlu
Z1dpbmRvdyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiB9CiAKLWNsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OworY2xhc3MgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ7CiAKIEBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciAoZGVsZWdhdGUpCi0tKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjooV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQ7CistKHZvaWQpZGlkRmluaXNoRnVs
bHNjcmVlbjooVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQ7CiBAZW5k
CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0IGZpbmFsCi0gICAg
OiBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgLCBwcml2YXRlIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgLCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyCi0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0gICAg
LCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHsK
K2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0IGZpbmFsCisgICAgOiBwcml2
YXRlIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgLCBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50CisgICAgLCBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisg
ICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisgICAgLCBwcml2YXRlIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHsKIAogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IGNyZWF0ZSgpCisgICAgc3Rh
dGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gY3JlYXRlKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQpOwogICAgIH0KIAogICAgIHZvaWQgc2V0Q29udHJvbGxlcihXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiBjb250cm9sbGVyKSB7IG1fY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7IH0KQEAgLTExOSwyMiArMTE5LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFs
aWRhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dCgpIHsgfQorICAgIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkgeyB9CiAK
LSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIC8vIFZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyCiAgICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgfQogICAgIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENsZWFudXBGdWxs
c2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
KSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAg
Ly8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKICAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChi
b29sKSBvdmVycmlkZTsKICAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxv
YXRTaXplJikgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAotICAg
IHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBv
dmVycmlkZTsKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50
KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVD
bGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHBs
YXkoKSBvdmVycmlkZTsKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB0b2dn
bGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgdG9nZ2xlTXV0ZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZp
bmFsOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAvLyBQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudAogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFu
Z2VkKGRvdWJsZSkgb3ZlcnJpZGU7CkBAIC0xNzksMzkgKzE3OSwzOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lk
IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsK
ICAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
IG92ZXJyaWRlOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVk
LCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNv
bnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VO
YW1lKSBvdmVycmlkZTsKICAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlk
ZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQo
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92
ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIC8v
IFZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5N
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5p
c2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFZpZGVvTGF5ZXJG
cmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHko
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5
KSBvdmVycmlkZTsKICAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwogICAgIGJvb2wgaXNWaXNp
YmxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRl
OwogICAgIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZTsKICAgICBi
b29sIGlzTXV0ZWQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEhhc2hTZXQ8V2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQqPiBtX3BsYXliYWNrQ2xpZW50czsKLSAgICBIYXNoU2V0PFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9mdWxsc2NyZWVuQ2xpZW50czsKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1faW50ZXJmYWNlOwotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbV9mdWxsc2NyZWVuTW9k
ZWw7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtX3Bs
YXliYWNrTW9kZWw7CisgICAgSGFzaFNldDxQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1f
cGxheWJhY2tDbGllbnRzOworICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQq
PiBtX2Z1bGxzY3JlZW5DbGllbnRzOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gbV9pbnRlcmZhY2U7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50PiBtX2Z1bGxzY3JlZW5Nb2RlbDsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ+IG1fcGxheWJhY2tNb2RlbDsKICAgICBSZWZQdHI8SFRNTFZpZGVv
RWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgUmV0YWluUHRyPFVJVmlldz4gbV92aWRlb0Z1
bGxzY3JlZW5WaWV3OwogICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
PiBtX2NvbnRyb2xsZXI7CiB9OwogCi0jcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIKKyNwcmFnbWEgbWFyayBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxz
Y3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBG
dWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBSZXRhaW5QdHI8
Q0FMYXllcj4gdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSBbbV92aWRlb0Z1bGxzY3JlZW5WaWV3IGxh
eWVyXTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVk
VGhpcywgdGhpcywgdmlkZW9GdWxsc2NyZWVuTGF5ZXJdIHsKICAgICAgICAgW3ZpZGVvRnVsbHNj
cmVlbkxheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9y
Ojp0cmFuc3BhcmVudCldOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxs
c2NyZWVuTGF5ZXIodmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFtwcm90ZWN0ZWRUaGlzLCB0
aGlzXSB7CkBAIC0yMjIsMTAgKzIyMiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQogICAgIH0pOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigp
CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgbV9mdWxsc2Ny
ZWVuTW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCwgW3Byb3RlY3RlZFRoaXMsIHRo
aXNdIHsKICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CkBAIC0yMzUsMTUgKzIzNSwxNSBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRp
ZENsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
LSAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0cik7Ci0g
ICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKG51bGxw
dHIpOworICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxscHRyKTsK
KyAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIobnVsbHB0
cik7CiAgICAgbV9pbnRlcmZhY2UgPSBudWxscHRyOwogICAgIG1fdmlkZW9GdWxsc2NyZWVuVmll
dyA9IG5pbDsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90
ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcihuaWwpOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9F
bGVtZW50KG51bGxwdHIpOwpAQCAtMjU2LDEwICsyNTYsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVk
VGhpcywgdGhpc10gewogICAgICAgICBJbnRSZWN0IGNsaWVudFJlY3QgPSBlbGVtZW50UmVjdElu
V2luZG93KG1fdmlkZW9FbGVtZW50LmdldCgpKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNsaWVudFJlY3Rd
IHsKQEAgLTI2OCwxMiArMjY4LDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCiAgICAgfSk7CiB9CiAKLSNw
cmFnbWEgbWFyayBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorI3ByYWdtYSBtYXJrIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0
aW9uKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGR1cmF0aW9uXSB7CiAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwogICAgICAgICB9KTsKQEAgLTI4NCwx
MCArMjg0LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1
cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCiAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25D
aGFuZ2VkKGR1cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFu
Y2hvclRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKICAg
ICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtw
cm90ZWN0ZWRUaGlzLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0gewogICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsK
ICAgICAgICAgfSk7CkBAIC0yOTgsMTAgKzI5OCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1l
LAogICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9y
VGltZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1
ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVk
VGltZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBidWZmZXJlZFRpbWVdIHsKICAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKICAgICAgICAg
fSk7CkBAIC0zMTIsMTAgKzMxMiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbQogICAgICAg
ICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1Bs
YXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUp
CiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbcHJvdGVjdGVkVGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsK
ICAgICAgICAgfSk7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxh
eQogICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9D
aGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKIHsKICAgICBpZiAoV2ViVGhyZWFk
SXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBo
YXNWaWRlb10gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+aGFzVmlkZW9DaGFuZ2VkKGhh
c1ZpZGVvKTsKICAgICAgICAgfSk7CkBAIC0zNDAsMTAgKzM0MCwxMCBAQCB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRl
bykKICAgICAgICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQoaGFzVmlkZW8pOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFu
Z2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNp
emUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsK
LSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0RpbWVuc2lvbnMg
PSB2aWRlb0RpbWVuc2lvbnNdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnZpZGVvRGlt
ZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsKICAgICAgICAgfSk7CkBAIC0zNTQsMTAg
KzM1NCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRl
b0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZQogICAgICAgICBjbGllbnQtPnZpZGVv
RGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRp
bWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2
ZVVwZGF0ZUludGVydmFsKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJs
ZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQogewogICAgIGlm
IChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3Rl
Y3RlZFRoaXMsIHBsYXRmb3JtVGltZVJhbmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCksIGxhc3RN
b2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbF0gewogICAgICAgICAgICAgcHJvdGVjdGVk
VGhpcy0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKFRpbWVSYW5nZXM6OmNyZWF0ZShwbGF0Zm9ybVRp
bWVSYW5nZXMpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogICAgICAg
ICB9KTsKQEAgLTM2OCwxMCArMzY4LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzCiAgICAg
ICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHRpbWVSYW5nZXMsIGxhc3RNb2RpZmll
ZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5
RmFzdFJldmVyc2UpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5Q
bGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQogewogICAgIGlm
IChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3Rl
Y3RlZFRoaXMsIGNhblBsYXlGYXN0UmV2ZXJzZV0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOwogICAgICAg
ICB9KTsKQEAgLTM5MSwxMCArMzkxLDEwIEBAIHN0YXRpYyBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+IGlzb2xhdGVkQ29weShjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpCiAgICAg
cmV0dXJuIG9wdGlvbnNDb3B5OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJl
bnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIG9wdGlvbnMg
PSBpc29sYXRlZENvcHkob3B0aW9ucyksIHNlbGVjdGVkSW5kZXhdIHsKICAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBz
ZWxlY3RlZEluZGV4KTsKICAgICAgICAgfSk7CkBAIC00MDUsMTAgKzQwNSwxMCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29ucwogICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAg
aWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJv
dGVjdGVkVGhpcywgb3B0aW9ucyA9IGlzb2xhdGVkQ29weShvcHRpb25zKSwgc2VsZWN0ZWRJbmRl
eF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiAgICAgICAgIH0pOwpAQCAtNDE5
LDcgKzQxOSw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Omxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvCiAgICAgICAgIGNsaWVudC0+bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2
aWNlTmFtZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNl
TmFtZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKICAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0aGlzLCBlbmFibGVk
LCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZS5pc29sYXRl
ZENvcHkoKV0gewpAQCAtNDMzLDEwICs0MzMsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLAog
ICAgICAgICBjbGllbnQtPmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxv
Y2FsaXplZERldmljZU5hbWUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNh
YmxlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQogewogICAgIGlmIChXZWJU
aHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRo
aXMsIGRpc2FibGVkXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT53aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwogICAgICAgICB9KTsKQEAgLTQ0Nywx
MCArNDQ3LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Ondp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChiCiAgICAgICAgIGNsaWVudC0+d2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0
ZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5nZWQo
Ym9vbCBtdXRlZCkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBtdXRlZF0gewogICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+bXV0ZWRDaGFuZ2VkKG11dGVkKTsKICAgICAgICAgfSk7CkBAIC00NjEsMzQg
KzQ2MSwzNCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRl
ZENoYW5nZWQoYm9vbCBtdXRlZCkKICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0ZWQp
OwogfQogCi0jcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyNwcmFnbWEgbWFy
ayBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVu
dCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewogICAgIEFTU0VSVCghbV9mdWxsc2Ny
ZWVuQ2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9mdWxsc2NyZWVuQ2xpZW50cy5h
ZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fZnVsbHNjcmVl
bkNsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fZnVsbHNjcmVlbkNsaWVudHMucmVt
b3ZlKCZjbGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRo
TWVkaWEpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIG1vZGUsIGZpbmlzaGVk
V2l0aE1lZGlhXSB7CiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAg
IG1fZnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobW9kZSwgZmluaXNoZWRX
aXRoTWVkaWEpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IGZyYW1lKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVj
dCBmcmFtZSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgIFJldGFpblB0cjxDQUxheWVyPiB2aWRlb0Z1bGxzY3JlZW5MYXllciA9IFttX3Zp
ZGVvRnVsbHNjcmVlblZpZXcgbGF5ZXJdOwogICAgIAogICAgIFt2aWRlb0Z1bGxzY3JlZW5MYXll
ciBzZXRTdWJsYXllclRyYW5zZm9ybTpbdmlkZW9GdWxsc2NyZWVuTGF5ZXIgdHJhbnNmb3JtXV07
CkBAIC01MDgsMTA1ICs1MDgsMTA1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgZnJhbWUpCiAgICAgfSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2
aXR5KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXll
ckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkp
CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIHZpZGVvR3Jhdml0eV0gewogICAg
ICAgICBpZiAobV9mdWxsc2NyZWVuTW9kZWwpCiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5Nb2Rl
bC0+c2V0VmlkZW9MYXllckdyYXZpdHkodmlkZW9HcmF2aXR5KTsKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAg
IEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhy
ZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBtb2RlXSB7CiAgICAgICAgIGlmIChtX2Z1bGxz
Y3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQobW9kZSk7CiAgICAgfSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVlbk1vZGVs
LT5pc1Zpc2libGUoKSA6IGZhbHNlOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpoYXNWaWRlbygpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpoYXNWaWRlbygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8gbV9mdWxsc2NyZWVuTW9kZWwtPmhh
c1ZpZGVvKCkgOiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6aXNNdXRlZCgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0Ojppc011dGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAg
ICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5pc011dGVkKCkgOiBm
YWxzZTsKIH0KIAotRmxvYXRTaXplIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
Ojp2aWRlb0RpbWVuc2lvbnMoKSBjb25zdAorRmxvYXRTaXplIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVlbk1v
ZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6IEZsb2F0U2l6ZSgpOwogfQogCi0jcHJhZ21hIG1hcmsg
LSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAorI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNzaW9u
TW9kZWwKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xp
ZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fcGxheWJhY2tDbGllbnRzLmNvbnRhaW5z
KCZjbGllbnQpKTsKICAgICBtX3BsYXliYWNrQ2xpZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fcGxheWJhY2tDbGllbnRzLmNvbnRhaW5zKCZjbGll
bnQpKTsKICAgICBtX3BsYXliYWNrQ2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkoKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3Rl
ZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAg
IG1fcGxheWJhY2tNb2RlbC0+cGxheSgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRo
aXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJh
Y2tNb2RlbC0+cGF1c2UoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3Rl
Y3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAg
ICAgIG1fcGxheWJhY2tNb2RlbC0+dG9nZ2xlUGxheVN0YXRlKCk7CiAgICAgfSk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKCkKIHsKICAg
ICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01v
ZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT50b2dnbGVNdXRlZCgpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRl
ZChib29sIG11dGVkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
TXV0ZWQoYm9vbCBtdXRlZCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBXZWJU
aHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpLCB0aGlzLCBtdXRlZF0g
ewpAQCAtNjE1LDE1MSArNjE1LDE1MSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZXRNdXRlZChib29sIG11dGVkKQogICAgIH0pOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZygpCiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2Rl
bCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+YmVnaW5TY3J1YmJpbmcoKTsKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Ny
dWJiaW5nKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnVi
YmluZygpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYg
KG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZW5kU2NydWJi
aW5nKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90
ZWN0ZWRUaGlzLCB0aGlzLCB0aW1lXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAg
ICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnNlZWtUb1RpbWUodGltZSk7CiAgICAgfSk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZhc3RTZWVrKGRv
dWJsZSB0aW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNl
ZWsoZG91YmxlIHRpbWUpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIHRpbWVd
IHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tN
b2RlbC0+ZmFzdFNlZWsodGltZSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKIHsKICAg
ICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01v
ZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjYW5uaW5nRm9yd2FyZCgp
OwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVk
VGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAg
bV9wbGF5YmFja01vZGVsLT5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQogewog
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2Vi
VGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNr
TW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPmVuZFNjYW5uaW5nKCk7CiAgICAg
fSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQog
ewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
V2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBpbmRleF0gewogICAgICAgICBpZiAo
bV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWxlY3RBdWRp
b01lZGlhT3B0aW9uKGluZGV4KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGlu
ZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0TGVnaWJs
ZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlz
LCB0aGlzLCBpbmRleF0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAg
ICAgbV9wbGF5YmFja01vZGVsLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOwogICAg
IH0pOwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1
cmF0aW9uKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZHVyYXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVy
biBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmR1cmF0aW9uKCkgOiAwOwogfQog
Ci1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1l
KCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVu
dFRpbWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBt
X3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwOwogfQog
Ci1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGlt
ZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZl
cmVkVGltZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJu
IG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+YnVmZmVyZWRUaW1lKCkgOiAwOwog
fQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmco
KSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNQbGF5aW5n
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5
YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5pc1BsYXlpbmcoKSA6IGZhbHNlOwogfQogCi1m
bG9hdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheWJhY2tSYXRlKCkg
Y29uc3QKK2Zsb2F0IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5YmFja1Jh
dGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3Bs
YXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPnBsYXliYWNrUmF0ZSgpIDogMDsKIH0KIAot
UmVmPFRpbWVSYW5nZXM+IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVr
YWJsZVJhbmdlcygpIGNvbnN0CitSZWY8VGltZVJhbmdlcz4gVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5z
ZWVrYWJsZVJhbmdlcygpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7CiB9CiAKLWRvdWJsZSBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1v
ZGlmaWVkVGltZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAogewogICAgIEFT
U0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXli
YWNrTW9kZWwtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7CiB9CiAK
LWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGl2ZVVwZGF0ZUlu
dGVydmFsKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
ICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5saXZlVXBkYXRl
SW50ZXJ2YWwoKSA6IDA7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNr
TW9kZWwtPmNhblBsYXlGYXN0UmV2ZXJzZSgpIDogZmFsc2U7CiB9CiAKLVZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBpZiAobV9w
bGF5YmFja01vZGVsKQpAQCAtNzY3LDEzICs3NjcsMTMgQEAgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNl
bGUKICAgICByZXR1cm4geyB9OwogfQogCi11aW50NjRfdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAordWludDY0X3Qg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5
YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIDog
LTE7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAor
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7CiAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKQEAgLTc4MSwzMSArNzgx
LDMxIEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdWlu
dDY0X3QgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNl
bGVjdGVkSW5kZXgoKSBjb25zdAordWludDY0X3QgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9k
ZWwtPmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSA6IC0xOwogfQogCi1ib29sIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNv
bnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXli
YWNrRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0
dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+ZXh0ZXJuYWxQbGF5YmFja0Vu
YWJsZWQoKSA6IGZhbHNlOwogfQogCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKK1BsYXliYWNrU2Vzc2lvbk1vZGVsOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwt
PmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgOiBUYXJnZXRUeXBlTm9uZTsKIH0KIAotU3Ry
aW5nIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNr
TG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0CitTdHJpbmcgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVs
ID8gbV9wbGF5YmFja01vZGVsLT5leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgp
IDogU3RyaW5nKCk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFj
a01vZGVsID8gbV9wbGF5YmFja01vZGVsLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgp
IDogdHJ1ZTsKQEAgLTgxMywxNiArODEzLDE2IEBAIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKIAog
I3ByYWdtYSBtYXJrIE90aGVyCiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OnNldFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFVJ
VmlldyAqdmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3Jl
ZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBVSVZpZXcgKnZpZXcsIEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgUmV0YWluUHRyPFVJVmlldz4gdmlld1JlZiA9IHZpZXc7CiAg
ICAgbV92aWRlb0VsZW1lbnQgPSAmdmlkZW9FbGVtZW50OwotICAgIG1fcGxheWJhY2tNb2RlbCA9
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICBtX3Bs
YXliYWNrTW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7
CiAgICAgbV9wbGF5YmFja01vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwogICAgIG1fcGxheWJhY2tN
b2RlbC0+c2V0TWVkaWFFbGVtZW50KG1fdmlkZW9FbGVtZW50LmdldCgpKTsKIAotICAgIG1fZnVs
bHNjcmVlbk1vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0
ZSgpOworICAgIG1fZnVsbHNjcmVlbk1vZGVsID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OmNyZWF0ZSgpOwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5hZGRDbGllbnQoKnRoaXMp
OwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobV92aWRlb0VsZW1lbnQu
Z2V0KCkpOwogCkBAIC04MzIsMTUgKzgzMiwxNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZQog
ICAgIEZsb2F0UmVjdCB2aWRlb0xheWVyRnJhbWUgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB2
aWRlb0VsZW1lbnRDbGllbnRSZWN0LnNpemUoKSk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNl
dFZpZGVvTGF5ZXJGcmFtZSh2aWRlb0xheWVyRnJhbWUpOwogCi0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgdGhpcywgdmlkZW9FbGVtZW50Q2xpZW50UmVjdCwgdmlld1JlZiwgbW9kZSwgYWxs
b3dzUGljdHVyZUluUGljdHVyZV0gewogICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKIAot
ICAgICAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHNlc3Npb25JbnRl
cmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCp0aGlzKTsK
LSAgICAgICAgbV9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
Y3JlYXRlKHNlc3Npb25JbnRlcmZhY2UuZ2V0KCkpOwotICAgICAgICBtX2ludGVyZmFjZS0+c2V0
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7Ci0gICAgICAgIG1faW50ZXJm
YWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKLSAgICAgICAgbV9pbnRlcmZh
Y2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOworICAgICAgICBS
ZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHNlc3Npb25JbnRlcmZhY2UgPSBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9pbnRl
cmZhY2UgPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKHNlc3Npb25JbnRl
cmZhY2UuZ2V0KCkpOworICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIodGhpcyk7CisgICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCh0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKHRoaXMpOwogCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuVmlldyA9IGFk
b3B0TlMoW2FsbG9jVUlWaWV3SW5zdGFuY2UoKSBpbml0XSk7CiAgICAgICAgIApAQCAtODQ4LDI1
ICs4NDgsMjUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGUKICAgICB9KTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4oKQordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4oKQogewog
ICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCBpc01haW5UaHJlYWQoKSk7CiAgICAg
SW50UmVjdCBjbGllbnRSZWN0ID0gZWxlbWVudFJlY3RJbldpbmRvdyhtX3ZpZGVvRWxlbWVudC5n
ZXQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY2xpZW50UmVjdF0gewog
ICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICAgICAgbV9pbnRlcmZhY2UtPmV4aXRG
dWxsc2NyZWVuKGNsaWVudFJlY3QpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIG1faW50ZXJmYWNl
LT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IF9jb250ZXh0OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gX2NvbnRleHQ7CiAgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1l
bnQ+IF92aWRlb0VsZW1lbnQ7CiB9CiAKQEAgLTg5MSw3ICs4OTEsNyBAQCAtIChIVE1MVmlkZW9F
bGVtZW50Kil2aWRlb0VsZW1lbnQKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2
aWV3IG1vZGU6KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSltb2Rl
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBfY29udGV4dCA9IFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjcmVhdGUoKTsKKyAgICBfY29udGV4dCA9IFZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjcmVhdGUoKTsKICAgICBfY29udGV4dC0+
c2V0Q29udHJvbGxlcihzZWxmKTsKICAgICBfY29udGV4dC0+c2V0VXBGdWxsc2NyZWVuKCpfdmlk
ZW9FbGVtZW50LmdldCgpLCB2aWV3LCBtb2RlKTsKIH0KQEAgLTkwOSw3ICs5MDksNyBAQCAtICh2
b2lkKXJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4KICAgICAgICAgX2NvbnRleHQtPnJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAotLSAodm9pZClkaWRGaW5pc2hGdWxsc2Ny
ZWVuOihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dAorLSAodm9p
ZClkaWRGaW5pc2hGdWxsc2NyZWVuOihWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCop
Y29udGV4dAogewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CiAgICAgQVNTRVJU
X1VOVVNFRChjb250ZXh0LCBjb250ZXh0ID09IF9jb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYzcwNDdhYjcyY2IzNGRm
NjE4YzY0ZTA2NjMyOTI1YjZkZTc4ZGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW5jbHVk
ZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbmNsdWRlIDxvYmpjL29iamMuaD4KLSNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KLQotT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOwot
T0JKQ19DTEFTUyBVSVZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBVSVdpbmRvdzsKLU9CSkNf
Q0xBU1MgVUlWaWV3OwotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXZWJBVlBsYXll
ckNvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFdlYkFWUGxheWVyTGF5ZXJWaWV3OwotT0JKQ19DTEFT
UyBXZWJBVlBsYXllckxheWVyOwotT0JKQ19DTEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVy
RGVsZWdhdGU7Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcjsKLSAgICAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0IGZpbmFsCi0gICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiB7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKLSAgICB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7Ci0gICAgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
KCk7IH0KLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFs
OwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcm
IGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIHNldHVwRnVsbHNjcmVlbihVSVZpZXcmLCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVj
dCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwg
Ym9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2li
bGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpOwotCi0gICAgZW51bSBjbGFzcyBFeGl0RnVs
bFNjcmVlblJlYXNvbiB7Ci0gICAgICAgIERvbmVCdXR0b25UYXBwZWQsCi0gICAgICAgIEZ1bGxT
Y3JlZW5CdXR0b25UYXBwZWQsCi0gICAgICAgIFBpbmNoR2VzdHVyZUhhbmRsZWQsCi0gICAgICAg
IFJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZCwKLSAgICAgICAgUGljdHVyZUluUGljdHVy
ZVN0YXJ0ZWQKLSAgICB9OwotCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKCkg
Y29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQotICAgIGJvb2wgc2hvdWxk
RXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKEV4aXRGdWxsU2NyZWVuUmVhc29uKTsKLSAgICBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQotICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KLSAgICBX
RUJDT1JFX0VYUE9SVCBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpG
dW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKTsKLSAgICBib29sIHdpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFj
dGl2ZSgpOwotCi0gICAgdm9pZCB3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9p
ZCBkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIGZhaWxlZFRvU3RhcnRQaWN0
dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCB3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKLSAg
ICB2b2lkIGRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yUGlj
dHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXikoQk9PTCkpOwot
Ci0gICAgdm9pZCBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSk7Ci0gICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlKTsKLSAgICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7IH0K
LSAgICBib29sIGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09IG1vZGU7IH0KLQotcHJvdGVjdGVkOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Jik7Ci0gICAgdm9pZCBiZWdpblNlc3Npb24oKTsK
LSAgICB2b2lkIGVudGVyUGljdHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgZW50ZXJGdWxsc2Ny
ZWVuU3RhbmRhcmQoKTsKLSAgICB2b2lkIHdhdGNoZG9nVGltZXJGaXJlZCgpOwotICAgIFdlYkFW
UGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcigpIGNvbnN0OwotCi0gICAgUmVmPFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3Bs
YXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0Nv
bnRyb2xsZXI+IG1fcGxheWVyVmlld0NvbnRyb2xsZXI7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Ci0gICAgV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVs
bHB0ciB9OwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCB3aGVuIGZ1bGxzY3JlZW4gaXMg
cHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2luZG93LgotICAgIFJldGFpblB0cjxVSVdpbmRvdz4g
bV93aW5kb3c7Ci0gICAgUmV0YWluUHRyPFVJVmlld0NvbnRyb2xsZXI+IG1fdmlld0NvbnRyb2xs
ZXI7Ci0gICAgUmV0YWluUHRyPFVJVmlldz4gbV9wYXJlbnRWaWV3OwotICAgIFJldGFpblB0cjxV
SVdpbmRvdz4gbV9wYXJlbnRXaW5kb3c7Ci0gICAgUmV0YWluUHRyPFdlYkFWUGxheWVyTGF5ZXJW
aWV3PiBtX3BsYXllckxheWVyVmlldzsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSB9OwotICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gbV9wcmVwYXJl
VG9JbmxpbmVDYWxsYmFjazsKLSAgICBSdW5Mb29wOjpUaW1lcjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gbV93YXRjaGRvZ1RpbWVyOwotICAgIGJvb2wgbV9hbGxvd3NQaWN0dXJl
SW5QaWN0dXJlUGxheWJhY2sgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9leGl0UmVxdWVzdGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fZXhpdENvbXBsZXRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2VudGVyUmVxdWVzdGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bldoZW5TdG9wcGluZ1BpUCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFJldHVyblRvRnVs
bHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVz
dG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wIHsgZmFsc2UgfTsKLQotICAg
IHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4oKTsKLX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1Y2Uz
YjczYjBiMmUyNGQ4YzdhMWQ1NTZhZjQwMGE0ZTNjMTk2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMDQy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgotCi0jaWYgSEFWRShBVktJVCkK
LQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNpbXBvcnQgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0j
aW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIK
LSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5o
IgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2ltcG9ydCAiV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2lt
cG9ydCA8VUlLaXQvVUlLaXQuaD4KLSNpbXBvcnQgPG9iamMvbWVzc2FnZS5oPgotI2ltcG9ydCA8
b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFNvZnQtbGlua2luZyBoZWFkZXJzIG11c3QgYmUgaW5j
bHVkZWQgbGFzdCBzaW5jZSB0aGV5ICNkZWZpbmUgZnVuY3Rpb25zLCBjb25zdGFudHMsIGV0Yy4K
LSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdPUksoQVZG
b3VuZGF0aW9uKQotU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikK
LVNPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNp
emUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVy
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBOU1N0cmluZyAqKQotU09GVF9MSU5LX0NPTlNUQU5U
KEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwsIE5TU3Ry
aW5nICopCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCi1TT0ZUX0xJTktf
Q0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXIpCi1TT0ZU
X0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGxheWVyVmlld0NvbnRyb2xsZXIpCi1TT0ZU
X0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIF9fQVZQbGF5ZXJMYXllclZpZXcpCi0KLVNPRlRf
TElOS19GUkFNRVdPUksoVUlLaXQpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJQXBwbGljYXRp
b24pCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJU2NyZWVuKQotU09GVF9MSU5LX0NMQVNTKFVJ
S2l0LCBVSVdpbmRvdykKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3KQotU09GVF9MSU5L
X0NMQVNTKFVJS2l0LCBVSVZpZXdDb250cm9sbGVyKQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBV
SUNvbG9yKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJS2l0LCBVSVRleHRFZmZlY3RzQmVuZWF0aFN0
YXR1c0JhcldpbmRvd0xldmVsLCBVSVdpbmRvd0xldmVsKQotCi1zdGF0aWMgVUlDb2xvciAqY2xl
YXJVSUNvbG9yKCkKLXsKLSAgICByZXR1cm4gKFVJQ29sb3IgKilbZ2V0VUlDb2xvckNsYXNzKCkg
Y2xlYXJDb2xvcl07Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgY29uc3QgY2hhciog
Ym9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAgICByZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNl
IjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBkZWZhdWx0V2F0Y2hkb2dUaW1l
ckludGVydmFsIHsgMV9zIH07Ci0KLUBjbGFzcyBXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uOwot
Ci1AaW50ZXJmYWNlIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0
IDxBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGVfV2ViS2l0T25seT4gewotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7
Ci19Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQq
IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci0tIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBs
YXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1bGxT
Y3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFz
b24pcmVhc29uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJWaWV3Q29udHJv
bGxlckRlbGVnYXRlCi0tIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNj
cmVlbkludGVyZmFjZQotewotICAgIHJldHVybiBfZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKTsK
LX0KLQotLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOihXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIF9mdWxsc2NyZWVuSW50
ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29u
dHJvbGxlcldpbGxTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIg
KilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29u
dHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT53aWxsU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJEaWRTdGFydFBp
Y3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJv
bGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgc2Vs
Zi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQot
LSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJl
OihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgd2l0aEVycm9y
OihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xs
ZXIpOwotICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJm
YWNlLT5mYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lkKXBsYXll
clZpZXdDb250cm9sbGVyV2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250
cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVy
Vmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+d2lsbFN0b3BQ
aWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJEaWRT
dG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdD
b250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAg
ICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci19
Ci0KLXN0YXRpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3Jl
ZW5SZWFzb24gY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24oQVZQbGF5ZXJWaWV3Q29udHJv
bGxlckV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKLXsKLSAgICBzd2l0Y2ggKHJlYXNvbikg
ewotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uRG9u
ZUJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZDsKLSAgICBjYXNl
IEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkZ1bGxTY3JlZW5CdXR0
b25UYXBwZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ7Ci0gICAgY2Fz
ZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaWN0dXJlSW5QaWN0
dXJlU3RhcnRlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ7Ci0gICAg
Y2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaW5jaEdlc3R1
cmVIYW5kbGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1cmVIYW5kbGVkOwotICAgIGNhc2Ug
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUmVtb3RlQ29udHJvbFN0
b3BFdmVudFJlY2VpdmVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVj
ZWl2ZWQ7Ci0gICAgfQotfQotCi0tIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXll
clZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3Jl
ZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24p
cmVhc29uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBy
ZXR1cm4gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5zaG91bGRFeGl0RnVsbHNjcmVlbldpdGhS
ZWFzb24oY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24ocmVhc29uKSk7Ci19Ci0KLS0gKHZv
aWQpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJW
aWV3Q29udHJvbGxlciByZXN0b3JlVXNlckludGVyZmFjZUZvclBpY3R1cmVJblBpY3R1cmVTdG9w
V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIHJlc3RvcmVkKSljb21wbGV0aW9u
SGFuZGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAg
c2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5wcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BX
aXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXIpOwotfQotQGVuZAotCi1AaW50
ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXIgOiBDQUxheWVyCi1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBOU1N0cmluZyAqdmlkZW9HcmF2aXR5OwotQHByb3BlcnR5IChub25hdG9taWMsIGdl
dHRlcj1pc1JlYWR5Rm9yRGlzcGxheSkgQk9PTCByZWFkeUZvckRpc3BsYXk7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVs
bHNjcmVlbkludGVyZmFjZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIEFWUGxheWVy
Q29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4pIENBTGF5ZXIgKnZpZGVvU3VibGF5ZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwg
bnVsbGFibGUpIE5TRGljdGlvbmFyeSAqcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOwotQHByb3BlcnR5
IENHU2l6ZSB2aWRlb0RpbWVuc2lvbnM7Ci1AcHJvcGVydHkgQ0dSZWN0IG1vZGVsVmlkZW9MYXll
ckZyYW1lOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJMYXllciB7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbkludGVy
ZmFjZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBfYXZQbGF5ZXJDb250
cm9sbGVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBfdmlkZW9TdWJsYXllcjsKLSAgICBSZXRh
aW5QdHI8TlNTdHJpbmc+IF92aWRlb0dyYXZpdHk7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoc2VsZikgewotICAgICAgICBb
c2VsZiBzZXRNYXNrc1RvQm91bmRzOllFU107Ci0gICAgICAgIF92aWRlb0dyYXZpdHkgPSBnZXRB
VkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQ
ZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVC
b3VuZHMpIG9iamVjdDpuaWxdOwotICAgIFtfcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzIHJlbGVhc2Vd
OwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAgICByZXR1cm4gX2Z1bGxzY3JlZW5J
bnRlcmZhY2UuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAg
ICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci19Ci0KLS0gKEFW
UGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKLXsKLSAgICByZXR1cm4gKEFWUGxh
eWVyQ29udHJvbGxlciAqKV9hdlBsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQp
c2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxl
cgotewotICAgIEFTU0VSVCghcGxheWVyQ29udHJvbGxlciB8fCBbcGxheWVyQ29udHJvbGxlciBp
c0tpbmRPZkNsYXNzOltXZWJBVlBsYXllckNvbnRyb2xsZXIgY2xhc3NdXSk7Ci0gICAgX2F2UGxh
eWVyQ29udHJvbGxlciA9IChXZWJBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVy
OwotfQotCi0tICh2b2lkKXNldFZpZGVvU3VibGF5ZXI6KENBTGF5ZXIgKil2aWRlb1N1YmxheWVy
Ci17Ci0gICAgX3ZpZGVvU3VibGF5ZXIgPSB2aWRlb1N1YmxheWVyOwotfQotCi0tIChDQUxheWVy
Kil2aWRlb1N1YmxheWVyCi17Ci0gICAgcmV0dXJuIF92aWRlb1N1YmxheWVyLmdldCgpOwotfQot
Ci0tICh2b2lkKWxheW91dFN1YmxheWVycwotewotICAgIGlmIChbX3ZpZGVvU3VibGF5ZXIgc3Vw
ZXJsYXllcl0gIT0gc2VsZikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFbX2F2UGxheWVy
Q29udHJvbGxlciBkZWxlZ2F0ZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfdmlkZW9TdWJs
YXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKHNlbGYuYm91bmRzKSwg
Q0dSZWN0R2V0TWlkWShzZWxmLmJvdW5kcykpXTsKLQotICAgIGlmIChzZWxmLnZpZGVvRGltZW5z
aW9ucy5oZWlnaHQgPD0gMCB8fCBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8PSAwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlVmlkZW9GcmFtZTsKLSAgICBGbG9h
dFJlY3QgdGFyZ2V0VmlkZW9GcmFtZTsKLSAgICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gc2Vs
Zi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7Ci0g
ICAgCi0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplKCkgaXNFcXVhbFRvU3Ry
aW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgewotICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc2Vs
Zi5tb2RlbFZpZGVvTGF5ZXJGcmFtZTsKLSAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNlbGYu
Ym91bmRzOwotICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7Ci0gICAgICAgIHNvdXJj
ZVZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9B
c3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgICAgIHRhcmdldFZp
ZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9Bc3Bl
Y3RSYXRpbywgc2VsZi5ib3VuZHMpOwotICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5
XSkgewotICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJh
dGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1l
KTsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IENHUmVjdE1ha2UoMCwgMCwg
c291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKLSAg
ICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsKLSAgICAgICAgX2Z1
bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShzZWxmLm1vZGVs
VmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVj
dFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMp
OwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIFVJVmll
dyAqdmlldyA9IChVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdOwotICAgIENHQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHRhcmdl
dFZpZGVvRnJhbWUud2lkdGgoKSAvIHNvdXJjZVZpZGVvRnJhbWUud2lkdGgoKSwgdGFyZ2V0Vmlk
ZW9GcmFtZS5oZWlnaHQoKSAvIHNvdXJjZVZpZGVvRnJhbWUuaGVpZ2h0KCkpOwotICAgIFt2aWV3
IHNldFRyYW5zZm9ybTp0cmFuc2Zvcm1dOwotICAgIAotICAgIE5TVGltZUludGVydmFsIGFuaW1h
dGlvbkR1cmF0aW9uID0gW0NBVHJhbnNhY3Rpb24gYW5pbWF0aW9uRHVyYXRpb25dOwotICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4gewotICAgICAgICBbTlNP
YmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwotCi0gICAgICAgIFtzZWxm
IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgd2l0aE9iamVjdDpuaWwg
YWZ0ZXJEZWxheTphbmltYXRpb25EdXJhdGlvbiArIDAuMV07Ci0gICAgfSk7Ci19Ci0KLS0gKHZv
aWQpcmVzb2x2ZUJvdW5kcwotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykg
b2JqZWN0Om5pbF07Ci0gICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5ZXJd
ICE9IHNlbGYpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoQ0dSZWN0RXF1YWxUb1Jl
Y3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkgJiYgQ0dBZmZpbmVU
cmFuc2Zvcm1Jc0lkZW50aXR5KFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXSB0
cmFuc2Zvcm1dKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIAotICAgIGlmICghQ0dS
ZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkp
IHsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSA9IFtzZWxmIGJvdW5kc107Ci0g
ICAgICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7Ci0gICAgICAgIF9m
dWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2Rl
bFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgfQotICAgIFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVy
IGRlbGVnYXRlXSBzZXRUcmFuc2Zvcm06Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eV07Ci0gICAg
Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotLSAodm9pZClzZXRWaWRlb0dyYXZp
dHk6KE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Ci17Ci0gICAgX3ZpZGVvR3Jhdml0eSA9IHZpZGVv
R3Jhdml0eTsKLSAgICAKLSAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eSBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFW
TGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSkKLSAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6Oldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemU7Ci0gICAgaWYgKHZpZGVv
R3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCi0gICAgICAg
IGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5
UmVzaXplQXNwZWN0OwotICAgIGVsc2UgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpKQotICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7Ci0g
ICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAKLSAgICBBU1NFUlQo
X2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOwotICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNl
LT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShncmF2aXR5KTsKLX0KLQotLSAoTlNTdHJp
bmcgKil2aWRlb0dyYXZpdHkKLXsKLSAgICByZXR1cm4gX3ZpZGVvR3Jhdml0eS5nZXQoKTsKLX0K
LQotLSAoQ0dSZWN0KXZpZGVvUmVjdAotewotICAgIGlmIChzZWxmLnZpZGVvRGltZW5zaW9ucy53
aWR0aCA8PSAwIHx8IHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodCA8PSAwKQotICAgICAgICBy
ZXR1cm4gc2VsZi5ib3VuZHM7Ci0gICAgCi0gICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNl
bGYudmlkZW9EaW1lbnNpb25zLndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0Owot
Ci0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkgaXNFcXVhbFRv
U3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKLSAgICAgICAgcmV0dXJuIGxhcmdlc3RSZWN0V2l0
aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7Ci0g
ICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpIGlzRXF1YWxU
b1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pCi0gICAgICAgIHJldHVybiBzbWFsbGVzdFJlY3RX
aXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsK
LQotICAgIHJldHVybiBzZWxmLmJvdW5kczsKLX0KLQotKyAoTlNTZXQgKilrZXlQYXRoc0ZvclZh
bHVlc0FmZmVjdGluZ1ZpZGVvUmVjdAotewotICAgIHJldHVybiBbTlNTZXQgc2V0V2l0aE9iamVj
dHM6QCJ2aWRlb0RpbWVuc2lvbnMiLCBAInZpZGVvR3Jhdml0eSIsIG5pbF07Ci19Ci0KLUBlbmQK
LQotQGludGVyZmFjZSBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgOiBVSVZp
ZXcKLUBlbmQKLQotc3RhdGljIENsYXNzIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVy
Vmlld19sYXllckNsYXNzKGlkLCBTRUwpCi17Ci0gICAgcmV0dXJuIFtXZWJBVlBsYXllckxheWVy
IGNsYXNzXTsKLX0KLQotc3RhdGljIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqYWxsb2NXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdJbnN0YW5jZSgpCi17
Ci0gICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0gbmlsOwotICAgIHN0YXRpYyBkaXNwYXRjaF9v
bmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7Ci0gICAg
ICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihnZXRVSVZpZXdDbGFzcygpLCAi
V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3IiwgMCk7Ci0gICAgICAgIG9iamNf
cmVnaXN0ZXJDbGFzc1BhaXIodGhlQ2xhc3MpOwotICAgICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBv
YmpjX2dldE1ldGFDbGFzcygiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Iik7
Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNsYXNz
KSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywg
IkBAOiIpOwotICAgIH0pOwotICAgIAotICAgIHJldHVybiAoV2ViQVZQaWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3ICopW3RoZUNsYXNzIGFsbG9jXTsKLX0KLQotQGludGVyZmFjZSBXZWJB
VlBsYXllckxheWVyVmlldyA6IF9fQVZQbGF5ZXJMYXllclZpZXcKLUBwcm9wZXJ0eSAocmV0YWlu
KSBVSVZpZXcqIHZpZGVvVmlldzsKLUBlbmQKLQotc3RhdGljIENsYXNzIFdlYkFWUGxheWVyTGF5
ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKLXsKLSAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5
ZXIgY2xhc3NdOwotfQotCi1zdGF0aWMgQVZQbGF5ZXJDb250cm9sbGVyICpXZWJBVlBsYXllckxh
eWVyVmlld19wbGF5ZXJDb250cm9sbGVyKGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgX19BVlBsYXll
ckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsKLSAgICBXZWJBVlBsYXllckxheWVyICp3
ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXIgcGxheWVy
TGF5ZXJdOwotICAgIHJldHVybiBbd2ViQVZQbGF5ZXJMYXllciBwbGF5ZXJDb250cm9sbGVyXTsK
LX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxl
cihpZCBhU2VsZiwgU0VMLCBBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIpCi17
Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAg
V2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICop
W3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0gICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0
UGxheWVyQ29udHJvbGxlcjogcGxheWVyQ29udHJvbGxlcl07Ci19Ci0KLXN0YXRpYyBVSVZpZXcg
KldlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldyhpZCBhU2VsZiwgU0VMKQotewotICAgIF9f
QVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJM
YXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVy
IHBsYXllckxheWVyXTsKLSAgICBDQUxheWVyKiB2aWRlb0xheWVyID0gW3dlYkFWUGxheWVyTGF5
ZXIgdmlkZW9TdWJsYXllcl07Ci0gICAgaWYgKCF2aWRlb0xheWVyIHx8ICF2aWRlb0xheWVyLmRl
bGVnYXRlKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChbW3ZpZGVvTGF5ZXIgZGVs
ZWdhdGVdIGlzS2luZE9mQ2xhc3M6Z2V0VUlWaWV3Q2xhc3MoKV0pOwotICAgIHJldHVybiAoVUlW
aWV3ICopW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdOwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXll
ckxheWVyVmlld19zZXRWaWRlb1ZpZXcoaWQgYVNlbGYsIFNFTCwgVUlWaWV3ICp2aWRlb1ZpZXcp
Ci17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0g
ICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVy
ICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0gICAgW3dlYkFWUGxheWVyTGF5ZXIg
c2V0VmlkZW9TdWJsYXllcjpbdmlkZW9WaWV3IGxheWVyXV07Ci19Ci0KLXN0YXRpYyB2b2lkIFdl
YkFWUGxheWVyTGF5ZXJWaWV3X3N0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcg
KnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwot
Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAq
KVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBp
cFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAg
W3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0KCldOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb1N1YmxheWVyOnBsYXllckxh
eWVyLnZpZGVvU3VibGF5ZXJdOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lv
bnM6cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNpb25zXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0
VmlkZW9HcmF2aXR5OnBsYXllckxheWVyLnZpZGVvR3Jhdml0eV07Ci0gICAgW3BpcFBsYXllckxh
eWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBsYXllckxheWVyLm1vZGVsVmlkZW9MYXllckZy
YW1lXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0UGxheWVyQ29udHJvbGxlcjpwbGF5ZXJMYXll
ci5wbGF5ZXJDb250cm9sbGVyXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0RnVsbHNjcmVlbklu
dGVyZmFjZTpwbGF5ZXJMYXllci5mdWxsc2NyZWVuSW50ZXJmYWNlXTsKLSAgICBbcGlwVmlldyBh
ZGRTdWJ2aWV3OnBsYXllckxheWVyVmlldy52aWRlb1ZpZXddOwotfQotCi1zdGF0aWMgdm9pZCBX
ZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcg
KnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIGlmIChVSVZpZXcgKnZpZGVvVmlldyA9IHBs
YXllckxheWVyVmlldy52aWRlb1ZpZXcpCi0gICAgICAgIFtwbGF5ZXJMYXllclZpZXcgYWRkU3Vi
dmlldzp2aWRlb1ZpZXddOwotICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxh
eWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwotICAgIFdlYkFW
UGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5
ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXll
ciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOwotICAgIFtwbGF5ZXJMYXll
ciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpwaXBQbGF5ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJG
cmFtZV07Ci19Ci0KLXN0YXRpYyBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcg
KldlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQg
YVNlbGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3
ID0gYVNlbGY7Ci0gICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBW
aWV3ID0gW3BsYXllckxheWVyVmlldyB2YWx1ZUZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3Il07Ci0gICAgaWYgKCFwaXBWaWV3KSB7Ci0gICAgICAgIHBpcFZpZXcgPSBb
YWxsb2NXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdJbnN0YW5jZSgpIGluaXRX
aXRoRnJhbWU6Q0dSZWN0WmVyb107Ci0gICAgICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0VmFsdWU6
cGlwVmlldyBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOwotICAg
IH0KLSAgICByZXR1cm4gcGlwVmlldzsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXll
clZpZXdfZGVhbGxvYyhpZCBhU2VsZiwgU0VMKQotewotICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3
ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAgICBSZXRhaW5QdHI8V2ViQVZQaWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3PiBwaXBWaWV3ID0gYWRvcHROUyhbcGxheWVyTGF5ZXJWaWV3
IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXSk7Ci0gICAg
W3BsYXllckxheWVyVmlldyBzZXRWYWx1ZTpuaWwgZm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXciXTsKLSAgICBvYmpjX3N1cGVyIHN1cGVyQ2xhc3MgeyBwbGF5ZXJMYXll
clZpZXcsIGdldF9fQVZQbGF5ZXJMYXllclZpZXdDbGFzcygpIH07Ci0gICAgYXV0byBzdXBlcl9k
ZWFsbG9jID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKG9iamNfc3VwZXIqLCBTRUwpPihvYmpj
X21zZ1NlbmRTdXBlcik7Ci0gICAgc3VwZXJfZGVhbGxvYygmc3VwZXJDbGFzcywgQHNlbGVjdG9y
KGRlYWxsb2MpKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gTWV0aG9kcwotCi1zdGF0aWMgV2ViQVZQ
bGF5ZXJMYXllclZpZXcgKmFsbG9jV2ViQVZQbGF5ZXJMYXllclZpZXdJbnN0YW5jZSgpCi17Ci0g
ICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0gbmlsOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNl
X3Qgb25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7Ci0gICAgICAg
IHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihnZXRfX0FWUGxheWVyTGF5ZXJWaWV3
Q2xhc3MoKSwgIldlYkFWUGxheWVyTGF5ZXJWaWV3IiwgMCk7Ci0gICAgICAgIGNsYXNzX2FkZE1l
dGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKGRlYWxsb2MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJW
aWV3X2RlYWxsb2MsICJ2QDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBA
c2VsZWN0b3Ioc2V0UGxheWVyQ29udHJvbGxlcjopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3
X3NldFBsYXllckNvbnRyb2xsZXIsICJ2QDpAIik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0
aGVDbGFzcywgQHNlbGVjdG9yKHBsYXllckNvbnRyb2xsZXIpLCAoSU1QKVdlYkFWUGxheWVyTGF5
ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIsICJAQDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9k
KHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0VmlkZW9WaWV3OiksIChJTVApV2ViQVZQbGF5ZXJMYXll
clZpZXdfc2V0VmlkZW9WaWV3LCAidkA6QCIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhl
Q2xhc3MsIEBzZWxlY3Rvcih2aWRlb1ZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3Zp
ZGVvVmlldywgIkBAOiIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxl
Y3RvcihzdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyks
IChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcsICJ2QDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRo
ZUNsYXNzLCBAc2VsZWN0b3Ioc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXll
ckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RvcFJvdXRpbmdWaWRlb1Rv
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgInZAOiIpOwotICAgICAgICBjbGFzc19h
ZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3LCAiQEA6Iik7Ci0gICAgICAgIAotICAgICAgICBjbGFzc19hZGRJdmFyKHRoZUNsYXNz
LCAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciLCBzaXplb2YoV2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopLCBsb2cyKHNpemVvZihXZWJBVlBpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcgKikpLCAiQCIpOwotICAgICAgICAKLSAgICAgICAgb2JqY19y
ZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7Ci0gICAgICAgIENsYXNzIG1ldGFDbGFzcyA9IG9i
amNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBsYXllckxheWVyVmlldyIpOwotICAgICAgICBjbGFzc19h
ZGRNZXRob2QobWV0YUNsYXNzLCBAc2VsZWN0b3IobGF5ZXJDbGFzcyksIChJTVApV2ViQVZQbGF5
ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOwotICAgIH0pOwotICAgIHJldHVybiAoV2Vi
QVZQbGF5ZXJMYXllclZpZXcgKilbdGhlQ2xhc3MgYWxsb2NdOwotfQotCi1SZWY8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZSkKLXsKLSAgICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7Ci0gICAgW2ludGVyZmFjZS0+bV9wbGF5ZXJW
aWV3Q29udHJvbGxlckRlbGVnYXRlIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJmYWNlLnB0
cigpXTsKLSAgICByZXR1cm4gaW50ZXJmYWNlOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICA6IG1f
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICAs
IG1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZShhZG9wdE5TKFtbV2ViQVZQbGF5ZXJWaWV3
Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0XSkpCi0gICAgLCBtX3dhdGNoZG9nVGltZXIo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OndhdGNoZG9nVGltZXJGaXJlZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCi17Ci0gICAgV2ViQVZQ
bGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxl
cigpOwotICAgIGlmIChwbGF5ZXJDb250cm9sbGVyICYmIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJu
YWxQbGF5YmFja0FjdGl2ZSkKLSAgICAgICAgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZmFsc2Us
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSwgIiIpOwotICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5y
ZW1vdmVDbGllbnQoKnRoaXMpOwotfQotCi1XZWJBVlBsYXllckNvbnRyb2xsZXIgKldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXllckNvbnRyb2xsZXIoKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQotewotICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5yZW1vdmVDbGllbnQoKnRoaXMpOwotCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG1v
ZGVsOwotCi0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7Ci0KLSAgICBoYXNWaWRlb0NoYW5nZWQo
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmhhc1ZpZGVv
KCkgOiBmYWxzZSk7Ci0gICAgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9h
dFNpemUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKiBvYnNlcnZlcikKLXsKLSAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9
IG9ic2VydmVyOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpo
YXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKLXsKLSAgICBbcGxheWVyQ29udHJvbGxlcigp
IHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRlb107Ci0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBz
ZXRIYXNWaWRlbzpoYXNWaWRlb107Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0Rp
bWVuc2lvbnMpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQ
bGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0KLSAgICBbcGxh
eWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107Ci0gICAgW3BsYXll
ckNvbnRyb2xsZXIoKSBzZXRDb250ZW50RGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwotICAg
IFttX3BsYXllckxheWVyVmlldyBzZXROZWVkc0xheW91dF07Ci0KLSAgICBXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3ICopW21fcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXddOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdl
YkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAgW3BpcFBsYXllckxheWVyIHNl
dFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOwotICAgIFtwaXBW
aWV3IHNldE5lZWRzTGF5b3V0XTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYp
Ci17Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEhpZGRlbjplbmFibGVkXTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCVwKSIsIHRoaXMpOwotICAgIGlm
IChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kICYmIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aXNWaXNpYmxl
KCkpIHsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1
cmVdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIGJvdGggaW4g
UGlQIGFuZCBpbiBGdWxsc2NyZWVuIChpLmUuLCB2aWEgYXV0by1QaVApLCBhbmQgd2UgZGlkIG5v
dCBzdG9wIGZ1bGxzY3JlZW4gdXBvbiByZXR1cm5pbmcsIGl0IG11c3QgYmUKLSAgICAvLyBiZWNh
dXNlIHRoZSBvcmlnaW5hdGluZyB2aWV3IGlzIG5vdCB2aXNpYmxlLCBzbyBoaWRlIHRoZSBmdWxs
c2NyZWVuIHdpbmRvdy4KLSAgICBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRp
b25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAg
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgfV07Ci0gICAgfQot
fQotCi1AaW50ZXJmYWNlIFVJV2luZG93ICgpCi0tIChCT09MKV9pc0hvc3RlZEluQW5vdGhlclBy
b2Nlc3M7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAoKQotQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbiwgc2V0dGVyPV9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRh
dGlvbnM6KSBCT09MIF9pZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM7Ci1AZW5kCi0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZp
ZXcmIHZpZGVvVmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmll
dyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQotewotICAgIEFTU0VS
VChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUp
OwotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAgIG1fYWxsb3dzUGljdHVyZUluUGlj
dHVyZVBsYXliYWNrID0gYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOwotCi0gICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25z
OllFU107Ci0gICAgYm9vbCBpc0luUGljdHVyZUluUGljdHVyZU1vZGUgPSBoYXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwot
ICAgIG1fbW9kZSA9IG1vZGU7Ci0gICAgbV9wYXJlbnRWaWV3ID0gcGFyZW50VmlldzsKLSAgICBt
X3BhcmVudFdpbmRvdyA9IHBhcmVudFZpZXcud2luZG93OwotCi0gICAgaWYgKCFbW3BhcmVudFZp
ZXcgd2luZG93XSBfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzXSkgewotICAgICAgICBpZiAoIW1f
d2luZG93KQotICAgICAgICAgICAgbV93aW5kb3cgPSBhZG9wdE5TKFthbGxvY1VJV2luZG93SW5z
dGFuY2UoKSBpbml0V2l0aEZyYW1lOltbZ2V0VUlTY3JlZW5DbGFzcygpIG1haW5TY3JlZW5dIGJv
dW5kc11dKTsKLSAgICAgICAgW21fd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29s
b3IoKV07Ci0gICAgICAgIGlmICghbV92aWV3Q29udHJvbGxlcikKLSAgICAgICAgICAgIG1fdmll
d0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY1VJVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGlu
aXRdKTsKLSAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOlttX3dpbmRv
dyBib3VuZHNdXTsKLSAgICAgICAgW21fdmlld0NvbnRyb2xsZXIgX3NldElnbm9yZUFwcFN1cHBv
cnRlZE9yaWVudGF0aW9uczpZRVNdOwotICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250
cm9sbGVyOm1fdmlld0NvbnRyb2xsZXIuZ2V0KCldOwotICAgICAgICBbbV93aW5kb3cgc2V0V2lu
ZG93TGV2ZWw6Z2V0VUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCgpICsg
MV07Ci0gICAgICAgIFttX3dpbmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07Ci0gICAgfQotCi0gICAg
aWYgKCFtX3BsYXllckxheWVyVmlldykKLSAgICAgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBhZG9w
dE5TKFthbGxvY1dlYkFWUGxheWVyTGF5ZXJWaWV3SW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgW21f
cGxheWVyTGF5ZXJWaWV3IHNldEhpZGRlbjpbcGxheWVyQ29udHJvbGxlcigpIGlzRXh0ZXJuYWxQ
bGF5YmFja0FjdGl2ZV1dOwotICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29s
b3I6Y2xlYXJVSUNvbG9yKCldOwotCi0gICAgaWYgKCFpc0luUGljdHVyZUluUGljdHVyZU1vZGUp
IHsKLSAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldFZpZGVvVmlldzomdmlkZW9WaWV3XTsK
LSAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6JnZpZGVvVmlld107Ci0gICAg
fQotCi0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXll
ciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0KLSAgICBbcGxheWVyTGF5ZXIg
c2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBpbml0aWFsUmVjdC53aWR0
aCgpLCBpbml0aWFsUmVjdC5oZWlnaHQoKSldOwotICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0Rp
bWVuc2lvbnM6W3BsYXllckNvbnRyb2xsZXIoKSBjb250ZW50RGltZW5zaW9uc11dOwotICAgIHBs
YXllckxheWVyLmZ1bGxzY3JlZW5JbnRlcmZhY2UgPSB0aGlzOwotCi0gICAgaWYgKCFtX3BsYXll
clZpZXdDb250cm9sbGVyKQotICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gYWRvcHRO
UyhbYWxsb2NBVlBsYXllclZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0aFBsYXllckxh
eWVyVmlldzptX3BsYXllckxheWVyVmlldy5nZXQoKV0pOwotCi0gICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKLSAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5
ZXJDb250cm9sbGVyKCldOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRl
Om1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc2V0QWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOm1fYWxsb3dzUGlj
dHVyZUluUGljdHVyZVBsYXliYWNrXTsKLQotICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0UGlj
dHVyZUluUGljdHVyZVBvc3NpYmxlOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrXTsK
LQotICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKSB7Ci0gICAgICAgIFttX3ZpZXdDb250cm9sbGVy
IGFkZENoaWxkVmlld0NvbnRyb2xsZXI6bV9wbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07Ci0g
ICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddXTsKLSAgICB9IGVsc2UKLSAgICAgICAgW3BhcmVudFZpZXcgYWRkU3Vi
dmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07Ci0KLSAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFtwYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmluaXRpYWxS
ZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOwotCi0g
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVh
clVJQ29sb3IoKV07Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEF1dG9y
ZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlQm90dG9tTWFyZ2luIHwgVUlW
aWV3QXV0b3Jlc2l6aW5nRmxleGlibGVSaWdodE1hcmdpbildOwotCi0gICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldE5lZWRzTGF5b3V0XTsKLSAgICBbW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVkZWRdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29t
bWl0XTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewotICAgICAgICBpZiAobV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+
ZGlkU2V0dXBGdWxsc2NyZWVuKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCVw
KSIsIHRoaXMpOwotCi0gICAgbV9leGl0Q29tcGxldGVkID0gZmFsc2U7Ci0gICAgbV9leGl0UmVx
dWVzdGVkID0gZmFsc2U7Ci0gICAgbV9lbnRlclJlcXVlc3RlZCA9IHRydWU7Ci0KLSAgICBpZiAo
bW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpCi0gICAgICAgIGVudGVyUGljdHVyZUluUGljdHVyZSgpOwotICAgIGVsc2Ug
aWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCkKLSAgICAgICAgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKLSAgICBlbHNlCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUlu
UGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICAKLSAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgaXNQaWN0dXJlSW5QaWN0dXJlUG9zc2libGVdKQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzdGFydFBpY3R1cmVJblBpY3R1cmVdOwotICAgIGVsc2UKLSAgICAgICAgZmFpbGVk
VG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQotewotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVl
blN0YW5kYXJkKCVwKSIsIHRoaXMpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIGlmIChbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVBY3RpdmVdKSB7Ci0gICAgICAgIC8vIE5PVEU6
IFRoZSBmdWxsc2NyZWVuIG1vZGUgd2lsbCBiZSByZXN0b3JlZCBpbiBwcmVwYXJlRm9yUGljdHVy
ZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoKS4KLSAgICAgICAgbV9zaG91bGRS
ZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSB0cnVlOwotICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5Bbmlt
YXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3RoaXMsIHByb3RlY3RlZFRoaXNdIChCT09MIHN1
Y2NlZWRlZCwgTlNFcnJvciopIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN1Y2NlZWRlZCk7Ci0g
ICAgICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkIC0gbGFtYmRhKCVwKSAtIHN1Y2NlZWRlZCglcykiLCB0
aGlzLCBib29sU3RyaW5nKHN1Y2NlZWRlZCkpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLQotICAgICAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfV07Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGZpbmFsUmVjdCkKLXsKLSAgICBtX3dhdGNoZG9nVGltZXIuc3RvcCgpOwotCi0gICAg
bV9leGl0UmVxdWVzdGVkID0gdHJ1ZTsKLSAgICBpZiAobV9leGl0Q29tcGxldGVkKSB7Ci0gICAg
ICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107Ci0gICAgCi0gICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRS
ZWN0OmZpbmFsUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2
aWV3XTsKLQotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVy
TGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAgIGlmIChbcGxheWVy
TGF5ZXIgdmlkZW9HcmF2aXR5XSAhPSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
KCkpCi0gICAgICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6Z2V0QVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdCgpXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmll
d10gbGF5b3V0SWZOZWVkZWRdOwotCi0gICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkgewotICAgICAgICBtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOwotICAgICAgICBb
bV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
c3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgfCBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKLSAgICAgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1h
dGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNF
cnJvciopIHsKLSAgICAgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7Ci0gICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlk
ZGVuOk5PXTsKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJl
SW5QaWN0dXJlXTsKLSAgICAgICAgfV07Ci0gICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRl
ZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vy
cm9yKikgewotICAgICAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0
RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICAgICAgICAgIFttX3BsYXllckxheWVyVmlldyBzZXRC
YWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAgICAgICAgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0g
ICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotCi0gICAgICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10o
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAg
ICAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxz
Y3JlZW4oKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9XTsKLSAgICB9OwotfQotCi1AaW50
ZXJmYWNlIFVJQXBwbGljYXRpb24gKCkKLS0gKHZvaWQpX3NldFN0YXR1c0Jhck9yaWVudGF0aW9u
OihVSUludGVyZmFjZU9yaWVudGF0aW9uKW87Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlXaW5kb3cg
KCkKLS0gKFVJSW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJmYWNlT3JpZW50YXRpb247Ci1AZW5k
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2Ny
ZWVuKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLSAgICBpZiAobV93aW5kb3cp
IHsKLSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICBbbV93aW5kb3cg
c2V0Um9vdFZpZXdDb250cm9sbGVyOm5pbF07Ci0gICAgICAgIGlmIChtX3BhcmVudFdpbmRvdykK
LSAgICAgICAgICAgIFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25d
IF9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjpbbV9wYXJlbnRXaW5kb3cgaW50ZXJmYWNlT3JpZW50
YXRpb25dXTsKLSAgICB9Ci0gICAgCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVs
ZWdhdGU6bmlsXTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9s
bGVyOm5pbF07Ci0gICAgCi0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCi0gICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICBpZiAoaGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCi0gICAgICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxl
dGlvbkhhbmRsZXI6W10gKEJPT0wsIE5TRXJyb3IgKikgeyB9XTsKLSAgICAKLSAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgaWYgKG1f
dmlld0NvbnRyb2xsZXIpCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHJlbW92ZUZy
b21QYXJlbnRWaWV3Q29udHJvbGxlcl07Ci0gICAgCi0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHJl
bW92ZUZyb21TdXBlcnZpZXddOwotICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKLQotICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gbmlsOwotICAgIG1fcGxh
eWVyVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgbV9wYXJl
bnRWaWV3ID0gbmlsOwotICAgIG1fcGFyZW50V2luZG93ID0gbmlsOwotICAgIAotICAgIGlmICht
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7Ci0KLSAgICBtX2VudGVyUmVxdWVzdGVkID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFs
aWRhdGUoKQotewotICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7Ci0gICAgbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7Ci0gICAgCi0gICAgY2xlYW51cEZ1bGxzY3JlZW4o
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKCFtX2VudGVyUmVxdWVzdGVkKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgW21f
d2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBzZXRIaWRkZW46WUVTXTsKLQotICAgIGlmICh3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYm
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgewotICAgICAgICB3
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwotICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxl
LCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSgl
cCkgLSB2aXNpYmxlKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcodmlzaWJsZSkpOwotICAgIGlmICht
X3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7Ci0gICAgICAgIAotICAgICAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5s
aW5lUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsK
LQotICAgICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGTW92ZSht
X3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7Ci0g
ICAgfQotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFtwbGF5ZXJDb250cm9sbGVyKCkgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQgJiYgc3VwcG9ydHNQaWN0dXJl
SW5QaWN0dXJlKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYg
Y2FsbGJhY2spCi17Ci0gICAgbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spOwotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0
dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwot
ICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGlj
dHVyZUluUGljdHVyZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJl
KCVwKSIsIHRoaXMpOwotICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmlu
Z0ZvcmVncm91bmQgPSBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2Fz
U3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdOwotICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwotCi0gICAgaWYgKG1fbW9kZSAmIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB7Ci0gICAg
ICAgIGlmICghW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0
ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXSkgewotICAgICAgICAgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29t
cGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewot
ICAgICAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgICAg
ICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107Ci0gICAgICAg
ICAgICB9XTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFttX3dpbmRvdyBzZXRI
aWRkZW46WUVTXTsKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhp
ZGRlbjpZRVNdOwotICAgIH0KLQotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikK
LSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0
YXJ0UGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoJXAp
IiwgdGhpcyk7Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0Nv
bnRyb2xzOllFU107Ci0KLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZXhp
dENvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIp
Ci0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4o
KTsKLQotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgbV9zaG91
bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKLSAgICBtX3Nob3Vs
ZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gZmFsc2U7Ci0KLSAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxs
U3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0gICAgaWYgKGhhc01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9y
aW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKLQotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
KQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0
dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICBpZiAoaGFz
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkg
fHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApIHsKLSAgICAg
ICAgLy8gQVNTVU1QVElPTjogd2UgYXJlIGV4aXRpbmcgcGlwIGJlY2F1c2Ugd2UgYXJlIGVudGVy
aW5nIGZ1bGxzY3JlZW4KLSAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgICAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICBbbV9wbGF5
ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLSAgICBbW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xv
cigpXTsKLQotICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICAKLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0
RnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9p
ZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSkKLXsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVy
ZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoJXApIiwgdGhpcyk7Ci0gICAgaWYg
KG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQIHx8IG1fc2hvdWxkUmV0
dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQpIHsKLSAgICAgICAgbV9zaG91
bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBmYWxzZTsKLSAgICAgICAgbV9z
aG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOwot
ICAgICAgICBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IHRy
dWU7Ci0KLSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAgICAgIFtbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46Tk9dOwotCi0gICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFu
ZGxlcjpeKEJPT0wgc3VjY2VzcywgTlNFcnJvciopIHsKLSAgICAgICAgICAgIG1fcmVzdG9yaW5n
RnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wID0gZmFsc2U7Ci0gICAgICAgICAgICBz
ZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
KTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOwotICAgICAgICAgICAg
aWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgIG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgfV07Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgUmV0YWluUHRyPGlkPiBzdHJv
bmdDb21wbGV0aW9uSGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsK
LSAgICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoW3Byb3RlY3RlZFRoaXMsIHN0cm9uZ0Nv
bXBsZXRpb25IYW5kbGVyXShib29sIHJlc3RvcmVkKSAgewotICAgICAgICBMT0coRnVsbHNjcmVl
biwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUlu
UGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIgbGFtYmRhKCVwKSAtIHJlc3RvcmVkKCVz
KSIsIHByb3RlY3RlZFRoaXMuZ2V0KCksIGJvb2xTdHJpbmcocmVzdG9yZWQpKTsKLSAgICAgICAg
dm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSA9IHN0cm9uZ0NvbXBsZXRp
b25IYW5kbGVyLmdldCgpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN0b3JlZCk7Ci0g
ICAgfSk7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3Vs
ZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29uKQotewotICAgIGlmICghbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVhc29uID09IEV4
aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZCkgewotICAgICAgICBp
ZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVu
RW50ZXJpbmdCYWNrZ3JvdW5kXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAg
ICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAod2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwoKSAmJiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25l
QnV0dG9uVGFwcGVkIHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29u
dHJvbFN0b3BFdmVudFJlY2VpdmVkKSkKLSAgICAgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KS0+cGF1c2UoKTsKLSAgICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVs
bHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9u
ZSwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkKTsKLQot
ICAgIGlmICghbV93YXRjaGRvZ1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fd2F0Y2hkb2dU
aW1lci5zdGFydE9uZVNob3QoZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLU5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCgpCi17Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dU
aW1lckZpcmVkKCVwKSAtIG5vIGV4aXQgZnVsbHNjcmVlbiByZXNwb25zZSBpbiAlZ3M7IGZvcmNp
bmcgZnVsbHNjcmVlbiBoaWRkZW4uIiwgdGhpcywgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZh
bC52YWx1ZSgpKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBbbV93aW5kb3cgc2V0
SGlkZGVuOllFU107Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRl
bjpZRVNdOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewot
ICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0g
bV9tb2RlIHwgbW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZChtX21vZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
Ci17Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01v
ZGUgPSBtX21vZGUgJiB+bW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZChtX21vZGUpOwotfQotCi0jZW5kaWYgLy8gSEFWRShBVktJVCkKLQotYm9vbCBXZWJD
b3JlOjpzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKQotewotI2lmIFBMQVRGT1JNKElPUykgJiYg
SEFWRShBVktJVCkKLSAgICByZXR1cm4gW2dldEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJD
bGFzcygpIGlzUGljdHVyZUluUGljdHVyZVN1cHBvcnRlZF07Ci0jZWxzZQotICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZgotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjViODEyZGE2ZDZhMmFjZDBiYjY1Y2ZhZDQ5NjEwOThlYWM0NmJlMmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkKKworI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1
ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lv
bk1vZGVsLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK09CSkNfQ0xBU1Mg
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IEludFJlY3Q7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKKworY2xhc3MgV0VCQ09SRV9F
WFBPUlQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIGZpbmFsCisgICAgOiBwdWJsaWMgUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgLCBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQKKyAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yz4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
PiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tT
ZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9CisK
KyAgICAvLyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlc2V0TWVkaWFTdGF0ZSgpIGZpbmFsIHsgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJs
ZSAvKmN1cnJlbnRUaW1lKi8sIGRvdWJsZSAvKmFuY2hvclRpbWUqLykgZmluYWw7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIC8qaXNQbGF5aW5nKi8sIGZsb2F0IC8q
cGxheWJhY2tSYXRlKi8pIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVS
YW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgLypsYXN0TW9kaWZpZWRUaW1l
Ki8sIGRvdWJsZSAvKmxpdmVVcGRhdGVJbnRlcnZhbCovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKm9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZElu
ZGV4Ki8pIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypv
cHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFs
UGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERl
dmljZU5hbWUgKi8pIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRl
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKKyNp
ZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlciAqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAq
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYmVnaW5TY3J1YmJpbmcoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmlu
ZygpOworCitwcml2YXRlOgorICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5YmFj
a1Nlc3Npb25Nb2RlbCYpOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vz
c2lvbk1vZGVsIHsgbnVsbHB0ciB9OworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbV9wbGF5YmFja0NvbnRy
b2xzTWFuYWdlciAgeyBudWxscHRyIH07CisKKyAgICB2b2lkIHVwZGF0ZVBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRv
dWJsZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKTsKKyNlbmRpZgorCit9OworCit9CisK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ZWYyMjMwNjlhOWNlZTlmMTEyNTEz
YmJmZWYwYjEyYzY3YjI0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCkBAIC0wLDAgKzEsMjU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJJ
bnRSZWN0LmgiCisjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiTWVk
aWFUaW1lQVZGb3VuZGF0aW9uLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgor
I2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01hbmFn
ZXIuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KKworI2ltcG9ydCAiQ29yZU1l
ZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKK1NP
RlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYz4gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoUGxh
eWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQoreworICAgIGF1dG8gaW50ZXJmYWNlID0gYWRvcHRS
ZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMobW9kZWwpKTsKKyAgICBtb2RlbC5h
ZGRDbGllbnQoaW50ZXJmYWNlKTsKKyAgICByZXR1cm4gaW50ZXJmYWNlOworfQorCitQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5YmFj
a1Nlc3Npb25Nb2RlbCYgbW9kZWwpCisgICAgOiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2Rl
bCkKK3sKK30KKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp+UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjKCkKK3sKKyAgICBpbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQorewor
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFn
ZXIoKTsKKworICAgIGNvbnRyb2xzTWFuYWdlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsK
KworICAgIC8vIEZJWE1FOiBXZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXli
YWNrIGlzIHJlYWR5LCBidXQgdGhhdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZS4KKyAgICBjb250
cm9sc01hbmFnZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAgIGNvbnRyb2xzTWFuYWdlci5o
YXNFbmFibGVkVmlkZW8gPSBZRVM7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkdXJhdGlvbik7
CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1cnJlbnRU
aW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIo
KTsKKyAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhjdXJyZW50VGltZSwg
YW5jaG9yVGltZSwgY29udHJvbHNNYW5hZ2VyLnJhdGUsIGNvbnRyb2xzTWFuYWdlci5wbGF5aW5n
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRUaW1lKTsKKyAgICBVTlVTRURfUEFS
QU0oYW5jaG9yVGltZSk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7
CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFu
YWdlcigpOworICAgIFtjb250cm9sc01hbmFnZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFj
a1JhdGUgOiAwLl07CisgICAgW2NvbnRyb2xzTWFuYWdlciBzZXRQbGF5aW5nOmlzUGxheWluZ107
CisgICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Np
b25Nb2RlbCA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05T
UHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0sIHBsYXliYWNrUmF0ZSwgaXNQ
bGF5aW5nKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlzUGxheWluZyk7CisgICAgVU5VU0VE
X1BBUkFNKHBsYXliYWNrUmF0ZSk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCisgICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1p
bmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJl
bnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0s
IDAsIGZhbHNlKTsKKyNlbmRpZgorICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmJlZ2luU2Ny
dWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbmRTY3J1
YmJpbmcoKQoreworICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmVuZFNjcnViYmluZygpOwor
fQorCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorc3RhdGljIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gdGltZVJhbmdlc1RvQXJyYXkoY29uc3QgVGltZVJhbmdl
cyYgdGltZVJhbmdlcykKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJhbmdlQXJy
YXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAg
Y29uc3QgUGxhdGZvcm1UaW1lUmFuZ2VzJiByYW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdlcygpOwor
ICAgICAgICBDTVRpbWVSYW5nZSByYW5nZSA9IENNVGltZVJhbmdlTWFrZSh0b0NNVGltZShyYW5n
ZXMuc3RhcnQoaSkpLCB0b0NNVGltZShyYW5nZXMuZW5kKGkpKSk7CisgICAgICAgIFtyYW5nZUFy
cmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOworICAg
IH0KKworICAgIHJldHVybiByYW5nZUFycmF5OworfQorI2VuZGlmCisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdl
cyYgdGltZVJhbmdlcywgZG91YmxlLCBkb3VibGUpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFNl
ZWthYmxlVGltZVJhbmdlczp0aW1lUmFuZ2VzVG9BcnJheSh0aW1lUmFuZ2VzKS5nZXQoKV07Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0aW1lUmFuZ2VzKTsKKyNlbmRpZgorfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdl
cj4oc2VsZWN0ZWRJbmRleCldOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKKyAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdl
cj4oc2VsZWN0ZWRJbmRleCldOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFT
ZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4XTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAg
W3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6
c2VsZWN0ZWRJbmRleF07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsK
KyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCit7CisjaWYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigp
IHNldENhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmU6IWVuYWJsZWRdOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmludmFsaWRhdGUoKQoreworICAgIGlmICghbV9wbGF5YmFja1Nlc3Npb25Nb2Rl
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cmVtb3Zl
Q2xpZW50KCp0aGlzKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdl
cigpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIHBs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKworV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250cm9sc01hbmFnZXIoKQorewor
ICAgIHJldHVybiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIpCit7CisgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFu
YWdlciA9IG1hbmFnZXI7CisKKyAgICBpZiAoIW1hbmFnZXIgfHwgIW1fcGxheWJhY2tTZXNzaW9u
TW9kZWwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVT
dGFtcCA9ICFbbWFuYWdlciByYXRlXSA/IE5BTiA6IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5m
b10gc3lzdGVtVXB0aW1lXTsKKyAgICBtYW5hZ2VyLnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5n
Q2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTptX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5jdXJyZW50VGltZSgpIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsK
KyAgICBkb3VibGUgZHVyYXRpb24gPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5kdXJhdGlvbigp
OworICAgIG1hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247CisgICAgbWFuYWdlci5o
YXNFbmFibGVkQXVkaW8gPSBkdXJhdGlvbiA+IDA7CisgICAgbWFuYWdlci5oYXNFbmFibGVkVmlk
ZW8gPSBkdXJhdGlvbiA+IDA7CisgICAgbWFuYWdlci5yYXRlID0gbV9wbGF5YmFja1Nlc3Npb25N
b2RlbC0+aXNQbGF5aW5nKCkgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5wbGF5YmFja1JhdGUo
KSA6IDAuOworICAgIG1hbmFnZXIuc2Vla2FibGVUaW1lUmFuZ2VzID0gdGltZVJhbmdlc1RvQXJy
YXkobV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+c2Vla2FibGVSYW5nZXMoKSkuZ2V0KCk7CisgICAg
bWFuYWdlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKKyAgICBtYW5hZ2VyLnBsYXlpbmcgPSBt
X3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKTsKKyAgICBbbWFuYWdlciBzZXRBdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5hdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVn
ZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsK
KyAgICBbbWFuYWdlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOm1fcGxheWJhY2tT
ZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSB3aXRoU2VsZWN0ZWRJ
bmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5sZWdp
YmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQ
bGF5aW5nKQoreworICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptYW5hZ2VyID0gcGxh
eUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICBpZiAoIW1hbmFnZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsICptb2RlbCA9IHBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCk7CisgICAgaWYgKCFtb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIGVm
ZmVjdGl2ZUFuY2hvclRpbWUgPSBwbGF5YmFja1JhdGUgPyBhbmNob3JUaW1lIDogTkFOOworICAg
IGRvdWJsZSBlZmZlY3RpdmVQbGF5YmFja1JhdGUgPSBwbGF5YmFja1JhdGU7CisgICAgaWYgKCFp
c1BsYXlpbmcKKyAgICAgICAgfHwgbW9kZWwtPmlzU2NydWJiaW5nKCkKKyAgICAgICAgfHwgKG1h
bmFnZXIucmF0ZSA+IDAgJiYgbW9kZWwtPnBsYXliYWNrU3RhcnRlZFRpbWUoKSA+PSBjdXJyZW50
VGltZSkKKyAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA8IDAgJiYgbW9kZWwtPnBsYXliYWNrU3Rh
cnRlZFRpbWUoKSA8PSBjdXJyZW50VGltZSkpCisgICAgICAgIGVmZmVjdGl2ZVBsYXliYWNrUmF0
ZSA9IDA7CisKKyAgICBtYW5hZ2VyLnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2
YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZSBhbmNob3JUaW1lU3RhbXA6ZWZm
ZWN0aXZlQW5jaG9yVGltZSByYXRlOmVmZmVjdGl2ZVBsYXliYWNrUmF0ZV07Cit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisKK30KKworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjNzRiODQ4ZmFmOWIyOTBlZWY4NmE3MjkwMmI2MzBk
ZGRiZWMxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorCisjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNs
dWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCitPQkpDX0NMQVNTIE5TV2luZG93OworT0JKQ19DTEFTUyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWNPYmpDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0
OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwor
Y2xhc3MgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7CisKK2NsYXNzIFdFQkNPUkVfRVhQ
T1JUIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYworICAgIDogcHVibGljIFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50CisgICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHsK
KworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBj
cmVhdGUoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7CisgICAgfQorICAgIHZpcnR1
YWwgflZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpOworICAgIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWw7IH0KKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tT
ZXNzaW9uTW9kZWwoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2Ny
ZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlciogdmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVy
biBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIqKTsKKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlk
ZTsKKworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3Rl
ZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93
LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dz
UGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVudGVy
RnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29u
c3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGlu
dmFsaWRhdGUoKTsKKyAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKSB7IH0K
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZp
c2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CisKKyAg
ICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9k
ZTsgfQorICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQorICAgIHZvaWQg
c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAg
IHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSk7CisKKyAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25z
dDsKKworICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUoKSB7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hY09iakMgKnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKTsKKworcHJpdmF0ZToK
KyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjJik7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gbV9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2U7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgeyBudWxscHRyIH07CisgICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIq
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OworICAgIEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAgUmV0YWluUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM+IG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQzsKK307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgxNDBlMzljYmFkYTE0ZWVjMDliZDkyMDQxYjdlYjQ4OWYyNGY2YmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLm1tCkBAIC0wLDAgKzEsNTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKQorCisjaW1wb3J0ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiSW50UmVj
dC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFUaW1lQVZGb3VuZGF0aW9u
LmgiCisjaW1wb3J0ICJQSVBTUEkuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW1w
b3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9u
L0FWVGltZS5oPgorCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktf
RlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0
LCBBVlZhbHVlVGltaW5nKQorCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwo
UElQKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFBJUCwgUElQVmlld0NvbnRyb2xsZXIpCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAY2xhc3MgV2ViVmlkZW9WaWV3Q29udGFpbmVy
OworCitAcHJvdG9jb2wgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgPE5TT2JqZWN0Pgor
CistICh2b2lkKWJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9W
aWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyOworLSAodm9pZClzdXBlcnZpZXdEaWRD
aGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVv
Vmlld0NvbnRhaW5lcjsKKworQGVuZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvVmlld0NvbnRhaW5l
ciA6IE5TVmlldyB7CisgICAgaWQgPFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiBfdmlk
ZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGlkIDxXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gdmlkZW9WaWV3Q29udGFpbmVy
RGVsZWdhdGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvVmlld0NvbnRhaW5l
cgorCitAc3ludGhlc2l6ZSB2aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT1fdmlkZW9WaWV3Q29u
dGFpbmVyRGVsZWdhdGU7CisKKy0gKHZvaWQpcmVzaXplV2l0aE9sZFN1cGVydmlld1NpemU6KE5T
U2l6ZSlvbGRCb3VuZHNTaXplCit7CisgICAgW3N1cGVyIHJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdT
aXplOm9sZEJvdW5kc1NpemVdOworCisgICAgW192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBi
b3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6c2VsZl07Cit9CisKKy0gKHZvaWQp
dmlld0RpZE1vdmVUb1N1cGVydmlldworeworICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvU3VwZXJ2
aWV3XTsKKworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgc3VwZXJ2aWV3RGlkQ2hh
bmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNlbGZdOworfQorCitAZW5kCisKK2VudW0gY2xhc3Mg
UElQU3RhdGUgeworICAgIE5vdEluUElQLAorICAgIEluUElQLAorICAgIEV4aXRpbmdQSVAKK307
CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyA6IE5TT2Jq
ZWN0IDxQSVBWaWV3Q29udHJvbGxlckRlbGVnYXRlLCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxl
Z2F0ZT4geworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyogX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKyAgICBOU1NpemUgX3ZpZGVvRGltZW5zaW9uczsKKyAg
ICBSZXRhaW5QdHI8UElQVmlld0NvbnRyb2xsZXI+IF9waXBWaWV3Q29udHJvbGxlcjsKKyAgICBS
ZXRhaW5QdHI8TlNWaWV3Q29udHJvbGxlcj4gX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXI7
CisgICAgUmV0YWluUHRyPFdlYlZpZGVvVmlld0NvbnRhaW5lcj4gX3ZpZGVvVmlld0NvbnRhaW5l
cjsKKyAgICBQSVBTdGF0ZSBfcGlwU3RhdGU7CisgICAgUmV0YWluUHRyPE5TV2luZG93PiBfcmV0
dXJuaW5nV2luZG93OworICAgIE5TUmVjdCBfcmV0dXJuaW5nUmVjdDsKKyAgICBCT09MIF9wbGF5
aW5nOworICAgIEJPT0wgX2RpZFJlcXVlc3RFeGl0aW5nUElQOworICAgIEJPT0wgX2V4aXRpbmdU
b1N0YW5kYXJkRnVsbHNjcmVlbjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMqKXZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKy0gKHZvaWQpaW52YWxpZGF0ZUZ1bGxz
Y3JlZW5TdGF0ZTsKKy0gKHZvaWQpaW52YWxpZGF0ZTsKKworLy8gVHJhY2tpbmcgdmlkZW8gcGxh
eWJhY2sgc3RhdGUKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1NpemUgdmlkZW9EaW1lbnNpb25z
OworQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWluZzsK
Ky0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6
KGZsb2F0KXBsYXliYWNrUmF0ZTsKKworLy8gSGFuZGxpbmcgUElQIHRyYW5zaXRpb25zCitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgZGlkUmVxdWVzdEV4aXRpbmdQSVA7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVu
KSBCT09MIGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKKworLSAodm9pZClzZXRVcFBJUEZv
clZpZGVvVmlldzooTlNWaWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGlu
V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKKy0gKHZvaWQpZW50ZXJQSVA7CistICh2b2lkKWV4
aXRQSVA7CistICh2b2lkKWV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2lu
ZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQworCitAc3ludGhlc2l6ZSBwbGF5aW5nPV9wbGF5
aW5nOworQHN5bnRoZXNpemUgdmlkZW9EaW1lbnNpb25zPV92aWRlb0RpbWVuc2lvbnM7CitAc3lu
dGhlc2l6ZSBkaWRSZXF1ZXN0RXhpdGluZ1BJUD1fZGlkUmVxdWVzdEV4aXRpbmdQSVA7CitAc3lu
dGhlc2l6ZSBleGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW49X2V4aXRpbmdUb1N0YW5kYXJkRnVs
bHNjcmVlbjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOihXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IHZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKyAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6Tm90
SW5QSVA7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClpbnZhbGlkYXRlRnVsbHNj
cmVlblN0YXRlCit7CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwor
ICAgIF9waXBWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1Zp
ZXdDb250YWluZXJEZWxlZ2F0ZTpuaWxdOworICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBuaWw7
CisgICAgX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgPSBuaWw7CisgICAgX3BpcFN0YXRl
ID0gUElQU3RhdGU6Ok5vdEluUElQOworICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IE5POwor
ICAgIF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBOTzsKKyAgICBfcmV0dXJuaW5nV2lu
ZG93ID0gbmlsOworICAgIF9yZXR1cm5pbmdSZWN0ID0gTlNaZXJvUmVjdDsKK30KKworLSAodm9p
ZClpbnZhbGlkYXRlCit7CisgICAgW3NlbGYgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07Cisg
ICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IG51bGxwdHI7CisgICAgX3ZpZGVvRGlt
ZW5zaW9ucyA9IE5TWmVyb1NpemU7Cit9CisKKy0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09M
KWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZQoreworICAgIF9w
bGF5aW5nID0gaXNQbGF5aW5nICYmIHBsYXliYWNrUmF0ZTsKKworICAgIFtfcGlwVmlld0NvbnRy
b2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9EaW1lbnNp
b25zOihOU1NpemUpdmlkZW9EaW1lbnNpb25zCit7CisgICAgX3ZpZGVvRGltZW5zaW9ucyA9IHZp
ZGVvRGltZW5zaW9uczsKKworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0QXNwZWN0UmF0aW86
X3ZpZGVvRGltZW5zaW9uc107Cit9CisKKy0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6KE5T
VmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNXaW5k
b3cgKil3aW5kb3cKK3sKKyAgICBBU1NFUlQoIV9waXBWaWV3Q29udHJvbGxlcik7CisgICAgQVNT
RVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcik7CisgICAgQVNTRVJUKCFfdmlkZW9W
aWV3Q29udGFpbmVyKTsKKworICAgIF9waXBWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9j
UElQVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBbX3BpcFZpZXdDb250cm9s
bGVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0VXNlckNh
blJlc2l6ZTpZRVNdOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWlu
Z107CisgICAgW3NlbGYgc2V0VmlkZW9EaW1lbnNpb25zOk5TRXF1YWxTaXplcyhfdmlkZW9EaW1l
bnNpb25zLCBOU1plcm9TaXplKSA/IGZyYW1lLnNpemUgOiBfdmlkZW9EaW1lbnNpb25zXTsKKyAg
ICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQorICAgICAgICBfdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jh
dml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCk7
CisKKyAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gYWRvcHROUyhbW1dlYlZpZGVvVmlld0NvbnRh
aW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOworICAgIFtfdmlkZW9WaWV3Q29udGFp
bmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOnNlbGZdOworICAgIFtfdmlkZW9WaWV3
Q29udGFpbmVyIGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKKyAgICB2aWRlb1ZpZXcuZnJhbWUgPSBb
X3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdOworICAgIHZpZGVvVmlldy5hdXRvcmVzaXppbmdN
YXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZTsKKworICAgIF92
aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyID0gYWRvcHROUyhbW05TVmlld0NvbnRyb2xsZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgc2V0Vmll
dzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpXTsKKyAgICBbd2luZG93LmNvbnRlbnRWaWV3IGFk
ZFN1YnZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93QWJv
dmUgcmVsYXRpdmVUbzpuaWxdOworfQorCistICh2b2lkKWVudGVyUElQCit7CisgICAgaWYgKF9w
aXBTdGF0ZSA9PSBQSVBTdGF0ZTo6SW5QSVApCisgICAgICAgIHJldHVybjsKKworICAgIFtfdmlk
ZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBD
R0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKTsKKyAgICBbX3BpcFZpZXdDb250
cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlckFzUGljdHVyZUluUGljdHVyZTpfdmlkZW9WaWV3
Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Oklu
UElQOworfQorCistICh2b2lkKWV4aXRQSVAKK3sKKyAgICBpZiAoX3BpcFN0YXRlICE9IFBJUFN0
YXRlOjpJblBJUCB8fCAhX3BpcFZpZXdDb250cm9sbGVyIHx8ICFfdmlkZW9WaWV3Q29udGFpbmVy
Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQ
ID0gWUVTOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5i
YWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckNsZWFyKTsK
KyAgICBbX3BpcFZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlcjpfdmlkZW9WaWV3
Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6OkV4
aXRpbmdQSVA7Cit9CisKKy0gKHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJl
Y3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93Cit7CisgICAgX3JldHVybmluZ1dpbmRvdyA9
IHdpbmRvdzsKKyAgICBfcmV0dXJuaW5nUmVjdCA9IHJlY3Q7CisgICAgCisgICAgW19waXBWaWV3
Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFJlY3Q6cmVjdF07CisgICAgW19waXBWaWV3Q29udHJv
bGxlciBzZXRSZXBsYWNlbWVudFdpbmRvdzp3aW5kb3ddOworCisgICAgW3NlbGYgZXhpdFBJUF07
Cit9CisKKy8vIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlCisKKy0gKHZvaWQpYm91bmRz
RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2
aWRlb1ZpZXdDb250YWluZXIKK3sKKyAgICBpZiAoIV92aWRlb1ZpZXdDb250YWluZXIgfHwgIV9w
aXBWaWV3Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX1VOVVNFRCh2
aWRlb1ZpZXdDb250YWluZXIsIHZpZGVvVmlld0NvbnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFp
bmVyKTsKKworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF92
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZp
ZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNdKTsKK30KKworLSAodm9p
ZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0Nv
bnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcgoreworICAgIGlmICghX3ZpZGVvVmlld0NvbnRh
aW5lciB8fCAhX3BpcFZpZXdDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQodmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250YWluZXIpOworCisgICAgaWYg
KCFbdmlkZW9WaWV3Q29udGFpbmVyIGlzRGVzY2VuZGFudE9mOltfcGlwVmlld0NvbnRyb2xsZXIg
dmlld11dKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmNlIHRoZSB2aWV3IGlzIG1vdmVk
IGludG8gdGhlIHBpcCB2aWV3LCBtYWtlIHN1cmUgaXQgcmVzaXplcyB3aXRoIHRoZSBwaXAgdmll
dy4KKyAgICB2aWRlb1ZpZXdDb250YWluZXIuZnJhbWUgPSBbdmlkZW9WaWV3Q29udGFpbmVyIHN1
cGVydmlld10uYm91bmRzOworICAgIHZpZGVvVmlld0NvbnRhaW5lci5hdXRvcmVzaXppbmdNYXNr
ID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZTsKK30KKworLy8gUElQ
Vmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQorCistIChCT09MKXBpcFNob3VsZENsb3NlOihQSVBWaWV3
Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZp
ZXdDb250cm9sbGVyKTsKKworICAgIGlmICghX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyB8
fCAhX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJ
UCA9IFlFUzsKKyAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcigpLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKKworICAg
IHJldHVybiBOTzsKK30KKworLSAodm9pZClwaXBEaWRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIg
KilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxl
cik7CisKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpICYmIF92aWRlb1ZpZXdD
b250YWluZXIgJiYgX3JldHVybmluZ1dpbmRvdyAmJiAhTlNFcXVhbFJlY3RzKF9yZXR1cm5pbmdS
ZWN0LCBOU1plcm9SZWN0KSkgeworICAgICAgICBbTlNBbmltYXRpb25Db250ZXh0IHJ1bkFuaW1h
dGlvbkdyb3VwOl4oTlNBbmltYXRpb25Db250ZXh0ICpjb250ZXh0KSB7CisgICAgICAgICAgICBj
b250ZXh0LmFsbG93c0ltcGxpY2l0QW5pbWF0aW9uID0gTk87CisgICAgICAgICAgICBbX3ZpZGVv
Vmlld0NvbnRhaW5lciBzZXRGcmFtZTpfcmV0dXJuaW5nUmVjdF07CisgICAgICAgICAgICBfdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRl
b0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7CisgICAgICAgICAgICBf
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRW
aWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0KTsKKworICAgICAgICAgICAgW1tfcmV0dXJuaW5nV2luZG93IGNvbnRlbnRWaWV3XSBh
ZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fi
b3ZlIHJlbGF0aXZlVG86bmlsXTsKKyAgICAgICAgfSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOwor
ICAgIH0KKworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKSB7CisgICAgICAg
IGlmICghc2VsZi5pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikgeworICAgICAgICAgICAg
aWYgKFZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IF92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbk1vZGVsKCkpIHsKKyAgICAgICAg
ICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgICAgICAgICAg
ICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPmNsZWFyTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0
dXJlKTsKKworICAgICAgICBpZiAoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIGZ1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCisgICAgICAgICAgICBmdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgfQorfQorCistICh2b2lkKXBpcEFj
dGlvblBsYXk6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChw
aXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOworCisgICAgaWYgKF92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tT
ZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOworfQorCistICh2b2lkKXBpcEFjdGlvblBhdXNl
OihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAg
PT0gX3BpcFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vz
c2lvbk1vZGVsKCktPnBhdXNlKCk7Cit9CisKKy0gKHZvaWQpcGlwQWN0aW9uU3RvcDooUElQVmll
d0NvbnRyb2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBW
aWV3Q29udHJvbGxlcik7CisKKyAgICBpZiAoIV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJh
Y2tTZXNzaW9uTW9kZWwgPSBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbCgpKQorICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbC0+cGF1c2UoKTsKKwor
ICAgIC8vIEZJWE1FIDI1MDk2MTcwOiBTaG91bGQgYW5pbWF0ZSBvbmx5IGlmIHRoZSBwYWdlIHdp
dGggdGhlIHZpZGVvIGlzIHVub2JzY3VyZWQuIEZvciBub3csIGFsd2F5cyBjbG9zZSB3aXRob3V0
IGFuaW1hdGlvbi4KKyAgICBbc2VsZiBleGl0UElQXTsKK30KKworQGVuZAorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKQorICAgIDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKQoreworICAgIEFTU0VSVChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+
cGxheWJhY2tTZXNzaW9uTW9kZWwoKSk7CisgICAgYXV0byBtb2RlbCA9IG1fcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOworICAgIG1vZGVsLT5hZGRDbGll
bnQoKnRoaXMpOworICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQ
bGF5aW5nOm1vZGVsLT5pc1BsYXlpbmcoKSBuZXdQbGF5YmFja1JhdGU6bW9kZWwtPnBsYXliYWNr
UmF0ZSgpXTsKK30KKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp+VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjKCkKK3sKKyAgICBpZiAobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Ut
PnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5yZW1vdmVDbGllbnQoKnRoaXMpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVs
KQoreworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwgPSBtb2RlbDsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1vZGU7CisgICAgaWYgKG1fbW9kZSA9PSBuZXdN
b2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21vZGUgPSBuZXdNb2RlOworICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5m
dWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3
TW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAo
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKQoreworICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5
aW5nOmlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6cGxheWJhY2tSYXRlXTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCit7Cisg
ICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOwor
fQorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDICpWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKQoreworICAgIGlmICgh
bV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKQorICAgICAgICBtX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU9iakMgPSBhZG9wdE5TKFtbV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjT2JqQyBhbGxvY10gaW5pdFdpdGhWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6dGhp
c10pOworCisgICAgcmV0dXJuIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQy5nZXQo
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVl
bihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5T
V2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3sKKyAg
ICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxs
c2NyZWVuKCVwKSwgaW5pdGlhbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVw
LCBtb2RlOiVkIiwgdGhpcywgaW5pdGlhbFJlY3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRp
YWxSZWN0LndpZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUp
OworCisgICAgVU5VU0VEX1BBUkFNKGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7Cisg
ICAgQVNTRVJUKG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlUGljdHVyZUluUGljdHVyZSk7CisKKyAgICBtX21vZGUgPSBtb2RlOworCisgICAgW3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSBzZXRVcFBJUEZvclZpZGVvVmlldzombGF5ZXJIb3N0
ZWRWaWV3IHdpdGhGcmFtZTooTlNSZWN0KWluaXRpYWxSZWN0IGluV2luZG93OnBhcmVudFdpbmRv
d107CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1
cEZ1bGxzY3JlZW4oKTsKKyAgICB9KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OmVudGVyRnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAg
IGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSkgeworICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDIGVudGVyUElQXTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFO
QUdFUikKKyAgICAgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRy
b2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6WUVTXTsKKyNlbmRpZgorCisg
ICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKKyAgICB9Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbihjb25zdCBJ
bnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpCit7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKCVw
KSwgZmluYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGZp
bmFsUmVjdC54KCksIGZpbmFsUmVjdC55KCksIGZpbmFsUmVjdC53aWR0aCgpLCBmaW5hbFJlY3Qu
aGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOworI2VuZGlmCisK
KyAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhp
dGluZ1BJUF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChmaW5hbFJlY3QuaXNFbXB0eSgp
KQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwor
ICAgIGVsc2UKKyAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0
UElQQW5pbWF0aW5nVG9SZWN0OmZpbmFsUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0
QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoJXApLCBtb2RlOiVkIiwg
dGhpcywgbW9kZSk7CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
CisgICAgW21fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdl
cigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6Tk9dOworI2VuZGlmCisKKyAgICBpZiAoW21f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCisg
ICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4g
PSBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5k
YXJkOworICAgIC8vIE9uIE1hYywgc3RhbmRhcmQgZnVsbHNjcmVlbiBpcyBoYW5kbGVkIGJ5IHRo
ZSBGdWxsc2NyZWVuIEFQSSBhbmQgbm90IGJ5IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuCisgICAg
Ly8gSnVzdCB1cGRhdGUgbV9tb2RlIGRpcmVjdGx5IHRvIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIGluIHRoYXQgY2FzZSB0byBrZWVwCisgICAgLy8g
bV9tb2RlIGluIHN5bmMgd2l0aCB0aGUgZnVsbHNjcmVlbiBtb2RlIGluIEhUTUxNZWRpYUVsZW1l
bnQuCisgICAgaWYgKGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKQorICAgICAgICBtX21v
ZGUgPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsK
KworICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgc2V0RXhpdGluZ1RvU3Rh
bmRhcmRGdWxsc2NyZWVuOmlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuXTsKKyAgICBbbV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oKQoreworICAgIExPRyhG
dWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVl
biglcCkiLCB0aGlzKTsKKworICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMg
ZXhpdFBJUF07CisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlk
YXRlRnVsbHNjcmVlblN0YXRlXTsKKworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2Ny
ZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRl
KCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
aW52YWxpZGF0ZSglcCkiLCB0aGlzKTsKKworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBu
aWw7CisgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7CisKKyAgICBjbGVhbnVw
RnVsbHNjcmVlbigpOworCisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBp
bnZhbGlkYXRlXTsKKyAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBuaWw7
Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhi
b29sIHZhbCkKK3sKKyAgICByZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKK30KKyNlbmRp
ZgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgSW50UmVjdCYgaW5saW5lUmVjdCwgTlNXaW5kb3cg
KnBhcmVudFdpbmRvdykKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSwgdmlzaWJsZTolcywgaW5s
aW5lUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBib29sU3Ry
aW5nKHZpc2libGUpLCBpbmxpbmVSZWN0LngoKSwgaW5saW5lUmVjdC55KCksIGlubGluZVJlY3Qu
d2lkdGgoKSwgaW5saW5lUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKKworICAgIGlmICgh
dmlzaWJsZSkgeworICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4
aXRQSVBdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKHBhcmVudFdpbmRv
dyk7CisgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0
aW5nVG9SZWN0OihOU1JlY3QpaW5saW5lUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5n
ZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKCVwKSwgZW5hYmxl
ZDolcyIsIHRoaXMsIGJvb2xTdHJpbmcoZW5hYmxlZCkpOworCisgICAgaWYgKGVuYWJsZWQgJiYg
bV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpCisgICAgICAgIGV4aXRGdWxsc2NyZWVuKEludFJlY3QoKSwgbmlsKTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29s
IGhhc1ZpZGVvKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoJXApOiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRl
bykpOworCisgICAgaWYgKCFoYXNWaWRlbykKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5XaXRob3V0
QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZU5vbmUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1l
bnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBM
T0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNp
b25zQ2hhbmdlZCglcCksIHdpZHRoOiUuMGYsIGhlaWdodDolLjBmIiwgdGhpcywgdmlkZW9EaW1l
bnNpb25zLndpZHRoKCksIHZpZGVvRGltZW5zaW9ucy5oZWlnaHQoKSk7CisKKyAgICAvLyBXaWR0
aCBhbmQgaGVpZ2h0IGNhbiBiZSB6ZXJvIHdoZW4gd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBv
bmUgdmlkZW8gdG8gYW5vdGhlci4gSWdub3JlIHplcm8gdmFsdWVzLgorICAgIGlmICghdmlkZW9E
aW1lbnNpb25zLmlzWmVybygpKQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDIHNldFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOworfQorCitib29sIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNj
cmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgJiYgW21fd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpc1BsYXlpbmddOworfQorCitib29sIHN1cHBv
cnRzUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgcmV0dXJuIFBJUExpYnJhcnkoKSAmJiBnZXRQ
SVBWaWV3Q29udHJvbGxlckNsYXNzKCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5o
CmluZGV4IDcwNWQ2M2I0OGE5OWFlZTFlODkzOTY1NjI0MDEzMjI0M2U0NzJjNGQuLjc2N2YwMTI4
NzMwMDAxYWI0ZDc5ZmU2MDNjMTIyNzc0YWY3MTNlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oCkBAIC0z
MCw3ICszMCw3IEBACiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKK2NsYXNzIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzsKIHN0cnVjdCBNZWRpYVNlbGVjdGlvbk9wdGlvbjsKIH0KIApA
QCAtNTgsMTAgKzU4LDEwIEBAIFdFQkNPUkVfRVhQT1JUCiAgICAgZmxvYXQgX3JhdGU7CiAgICAg
Qk9PTCBfY2FuVG9nZ2xlUGxheWJhY2s7CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IF9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM7CiB9CiAKLUBwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqIHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMqIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIEBwcm9wZXJ0eSAocmVhZHdyaXRl
KSBOU1RpbWVJbnRlcnZhbCBjb250ZW50RHVyYXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluLCByZWFkd3JpdGUpIEFWVmFsdWVUaW1pbmcgKnRpbWluZzsKIEBwcm9wZXJ0eSAobm9u
YXRvbWljKSBOU1RpbWVJbnRlcnZhbCBzZWVrVG9UaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4
IDdiNDRhMDc0ZGYyOTgwNjJmODA1M2U5ZWJjN2QzMTQ1MWU4MmU1ZTUuLmFiYmRiNTI3NzIwNzI0
YWZlNTQ3MzExNzQwOGI0MzdhMDk0OTJhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KQEAgLTI5LDgg
KzI5LDggQEAKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogCiAjaW1wb3J0
ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9y
dCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Np
b25Nb2RlbC5oIgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtNTksOCArNTksOCBAQCBAc3ludGhlc2l6ZSBjYW5Ub2dnbGVQ
aWN0dXJlSW5QaWN0dXJlOwogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBpZiAoX3dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CisgICAgaWYgKF9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxwdHIpOwogICAgIFtzdXBl
ciBkZWFsbG9jXTsKIH0KIApAQCAtOTMsNyArOTMsNyBAQCAtICh2b2lkKXNlZWtUb1RpbWU6KE5T
VGltZUludGVydmFsKXRpbWUgdG9sZXJhbmNlQmVmb3JlOihOU1RpbWVJbnRlcnZhbCl0b2xlcmFu
YwogewogICAgIFVOVVNFRF9QQVJBTSh0b2xlcmFuY2VCZWZvcmUpOwogICAgIFVOVVNFRF9QQVJB
TSh0b2xlcmFuY2VBZnRlcik7Ci0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2Vla1RvVGltZSh0aW1lKTsKKyAgICBfcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWVrVG9UaW1l
KHRpbWUpOwogfQogCiAtICh2b2lkKWNhbmNlbFRodW1ibmFpbEFuZEF1ZGlvQW1wbGl0dWRlU2Ft
cGxlR2VuZXJhdGlvbgpAQCAtMTI1LDEyICsxMjUsMTIgQEAgLSAoQk9PTCljYW5CZWdpblRvdWNo
QmFyU2NydWJiaW5nCiAKIC0gKHZvaWQpYmVnaW5Ub3VjaEJhclNjcnViYmluZwogewotICAgIF93
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+YmVnaW5TY3J1YmJpbmcoKTsKIH0KIAogLSAodm9p
ZCllbmRUb3VjaEJhclNjcnViYmluZwogewotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMtPmVuZFNjcnViYmluZygpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMt
PmVuZFNjcnViYmluZygpOwogfQogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA8IDEwMTMwMApAQCAtMTkyLDcgKzE5Miw3IEBAIC0gKHZvaWQpc2V0Q3VycmVudEF1ZGlvVG91
Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbjooQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0CiAg
ICAgaWYgKGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb24gJiYgX2F1ZGlvVG91Y2hCYXJNZWRpYVNl
bGVjdGlvbk9wdGlvbnMpCiAgICAgICAgIGluZGV4ID0gW19hdWRpb1RvdWNoQmFyTWVkaWFTZWxl
Y3Rpb25PcHRpb25zIGluZGV4T2ZPYmplY3Q6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbl07CiAK
LSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCgpLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRl
eCA6IFVJTlQ2NF9NQVgpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXli
YWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RG
b3VuZCA/IGluZGV4IDogVUlOVDY0X01BWCk7CiB9CiAKIC0gKE5TQXJyYXk8QVZUb3VjaEJhck1l
ZGlhU2VsZWN0aW9uT3B0aW9uICo+ICopbGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRp
b25zCkBAIC0yMjIsNyArMjIyLDcgQEAgLSAodm9pZClzZXRDdXJyZW50TGVnaWJsZVRvdWNoQmFy
TWVkaWFTZWxlY3Rpb25PcHRpb246KEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk8KICAgICBpZiAo
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uICYmIF9sZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVj
dGlvbk9wdGlvbnMpCiAgICAgICAgIGluZGV4ID0gW19sZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVj
dGlvbk9wdGlvbnMgaW5kZXhPZk9iamVjdDpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25dOwog
Ci0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKS0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBp
bmRleCA6IFVJTlQ2NF9NQVgpOworICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBs
YXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCAhPSBO
U05vdEZvdW5kID8gaW5kZXggOiBVSU5UNjRfTUFYKTsKIH0KIAogI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCkBAIC0yOTIsNDcgKzI5Miw0NyBAQCAtICh2b2lk
KXNldExlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4OihOU1VJbnRlZ2VyKXNlbGVjdGVkSW5kZXgK
ICAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAImN1cnJlbnRMZWdpYmxlVG91Y2hCYXJN
ZWRpYVNlbGVjdGlvbk9wdGlvbiJdOwogfQogCi0tIChXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMqKXdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYworLSAoUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjKilwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKIHsKLSAgICByZXR1cm4g
X3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5nZXQoKTsKKyAgICByZXR1cm4gX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5nZXQoKTsKIH0KIAotLSAodm9pZClzZXRXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopd2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjCistICh2b2lkKXNldFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzooUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKilwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9
PSB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgaWYgKF9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMgPT0gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAgICAg
ICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01h
bmFnZXIobnVsbHB0cik7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisg
ICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNN
YW5hZ2VyKG51bGxwdHIpOwogCi0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9
IHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjID0gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwogCi0gICAgaWYgKF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKHNlbGYpOworICAgIGlmIChf
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihzZWxmKTsKIH0KIAogLSAodm9p
ZCl0b2dnbGVQbGF5YmFjawogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjICYmIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCkpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgIGlmIChfcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBs
YXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBsYXlTdGF0ZSgpOwogfQogCiAtICh2
b2lkKXNldFBsYXlpbmc6KEJPT0wpcGxheWluZwogewotICAgIGlmICghX3dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYyB8fCAhX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICBpZiAoIV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMgfHwgIV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEJPT0wgaXNDdXJyZW50bHlQbGF5aW5nID0g
c2VsZi5wbGF5aW5nOwogICAgIGlmICghaXNDdXJyZW50bHlQbGF5aW5nICYmIHBsYXlpbmcpCi0g
ICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPnBsYXkoKTsKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgpOwogICAgIGVsc2UgaWYgKGlzQ3VycmVudGx5
UGxheWluZyAmJiAhcGxheWluZykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKKyAgICAgICAgX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsK
IH0KIAogLSAoQk9PTClpc1BsYXlpbmcKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYyAmJiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICByZXR1cm4gX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+aXNQbGF5aW5nKCk7CisgICAgaWYg
KF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgcmV0dXJuIF9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmlzUGxheWluZygpOwog
CiAgICAgcmV0dXJuIE5POwogfQpAQCAtMzQwLDggKzM0MCw4IEBAIC0gKEJPT0wpaXNQbGF5aW5n
CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDAKIC0gKHZvaWQp
dG9nZ2xlUGljdHVyZUluUGljdHVyZQogewotICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjICYmIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMt
PndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKKyAg
ICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICBfcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT50b2dnbGVQaWN0dXJlSW5Q
aWN0dXJlKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiODEyNGMxZTFiZmUwMTViZDI5YzBlZjA3YTcwZTM3MWMxOWI1
MWU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpCi0KLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1PQkpDX0NMQVNTIFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJ
bnRSZWN0OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw7Ci0KLWNsYXNzIFdFQkNPUkVf
RVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBmaW5hbAotICAgIDogcHVibGlj
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYz4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0gICAg
dmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCk7Ci0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbCB7
IH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLypjdXJyZW50VGltZSovLCBkb3Vi
bGUgLyphbmNob3JUaW1lKi8pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmF0ZUNo
YW5nZWQoYm9vbCAvKmlzUGxheWluZyovLCBmbG9hdCAvKnBsYXliYWNrUmF0ZSovKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1l
UmFuZ2VzJiwgZG91YmxlIC8qbGFzdE1vZGlmaWVkVGltZSovLCBkb3VibGUgLypsaXZlVXBkYXRl
SW50ZXJ2YWwqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYg
LypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyovLCB1aW50NjRfdCAvKnNl
bGVjdGVkSW5kZXgqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8q
IGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICovKSBmaW5hbDsK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGxheUJhY2tD
b250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKnBsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKCk7Ci0jZW5kaWYKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2NydWJiaW5nKCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKTsKLQotcHJpdmF0ZToKLSAg
ICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwm
KTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7
IG51bGxwdHIgfTsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0g
ICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIg
IHsgbnVsbHB0ciB9OwotCi0gICAgdm9pZCB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRp
bWluZyhkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJh
Y2tSYXRlLCBib29sIGlzUGxheWluZyk7Ci0jZW5kaWYKLQotfTsKLQotfQotCi0jZW5kaWYgLy8g
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0NGE2MWM1
MGUwMTYyYzNjMTBlNzE3NWQ4MWM2ZjJhMjQ4NGNlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNpbXBv
cnQgIkludFJlY3QuaCIKLSNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0
ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgotCi0jaW1wb3J0
ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFW
S2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8V2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi17Ci0gICAgYXV0byBp
bnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyht
b2RlbCkpOwotICAgIG1vZGVsLmFkZENsaWVudChpbnRlcmZhY2UpOwotICAgIHJldHVybiBpbnRl
cmZhY2U7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKLSAgICA6
IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1vZGVsKQotewotfQotCi1XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKQotewotICAg
IGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBj
b250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotCi0gICAgY29udHJv
bHNNYW5hZ2VyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotCi0gICAgLy8gRklYTUU6IFdl
IHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHksIGJ1dCB0
aGF0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLgotICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFi
bGVkQXVkaW8gPSBZRVM7Ci0gICAgY29udHJvbHNNYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IFlF
UzsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGR1cmF0aW9uKTsKLSNlbmRpZgotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJs
ZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBj
b250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIHVwZGF0ZVBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lLCBjb250
cm9sc01hbmFnZXIucmF0ZSwgY29udHJvbHNNYW5hZ2VyLnBsYXlpbmcpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oY3VycmVudFRpbWUpOwotICAgIFVOVVNFRF9QQVJBTShhbmNob3JUaW1lKTsK
LSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cmF0ZUNo
YW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJhY2tDb250cm9sc01h
bmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAg
W2NvbnRyb2xzTWFuYWdlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsK
LSAgICBbY29udHJvbHNNYW5hZ2VyIHNldFBsYXlpbmc6aXNQbGF5aW5nXTsKLSAgICB1cGRhdGVQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID8gbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6IDAsIFtbTlNQcm9jZXNzSW5mbyBw
cm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgcGxheWJhY2tSYXRlLCBpc1BsYXlpbmcpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oaXNQbGF5aW5nKTsKLSAgICBVTlVTRURfUEFSQU0ocGxheWJh
Y2tSYXRlKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yzo6YmVnaW5TY3J1YmJpbmcoKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKLSAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6
IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwgMCwgZmFsc2Up
OwotI2VuZGlmCi0gICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+YmVnaW5TY3J1YmJpbmco
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuZFNjcnViYmlu
ZygpCi17Ci0gICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7Ci19
Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi1zdGF0aWMgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0aW1lUmFuZ2VzVG9BcnJheShjb25zdCBUaW1lUmFuZ2Vz
JiB0aW1lUmFuZ2VzKQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmFuZ2VBcnJh
eSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewotICAgICAgICBj
b25zdCBQbGF0Zm9ybVRpbWVSYW5nZXMmIHJhbmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCk7Ci0g
ICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01UaW1lUmFuZ2VNYWtlKHRvQ01UaW1lKHJhbmdl
cy5zdGFydChpKSksIHRvQ01UaW1lKHJhbmdlcy5lbmQoaSkpKTsKLSAgICAgICAgW3JhbmdlQXJy
YXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJhbmdlQXJyYXk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFu
Z2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUsIGRvdWJsZSkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0
U2Vla2FibGVUaW1lUmFuZ2VzOnRpbWVSYW5nZXNUb0FycmF5KHRpbWVSYW5nZXMpLmdldCgpXTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRpbWVSYW5nZXMpOwotI2VuZGlmCi19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJ
bnRlZ2VyPihzZWxlY3RlZEluZGV4KV07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvcHRpb25z
KTsKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxO
U1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvcHRp
b25zKTsKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0
QXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5kZXhdOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFT
ZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4XTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNl
bGVjdGVkSW5kZXgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikK
LXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlC
YWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0Q2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZTohZW5hYmxl
ZF07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKLSNlbmRpZgotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaWYg
KCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgIG1fcGxheWJhY2tTZXNz
aW9uTW9kZWwgPSBudWxscHRyOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCi0gICAgcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSNlbmRp
ZgotfQotCi0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotCi1XZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlciAqV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpCi17Ci0gICAgcmV0dXJuIG1fcGxheWJhY2tDb250cm9s
c01hbmFnZXI7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQ
bGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdl
cikKLXsKLSAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyID0gbWFuYWdlcjsKLQotICAgIGlm
ICghbWFuYWdlciB8fCAhbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVttYW5hZ2VyIHJhdGVdID8g
TkFOIDogW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwotICAgIG1h
bmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFu
Y2hvclZhbHVlOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgYW5jaG9yVGlt
ZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOwotICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1f
cGxheWJhY2tTZXNzaW9uTW9kZWwtPmR1cmF0aW9uKCk7Ci0gICAgbWFuYWdlci5jb250ZW50RHVy
YXRpb24gPSBkdXJhdGlvbjsKLSAgICBtYW5hZ2VyLmhhc0VuYWJsZWRBdWRpbyA9IGR1cmF0aW9u
ID4gMDsKLSAgICBtYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IGR1cmF0aW9uID4gMDsKLSAgICBt
YW5hZ2VyLnJhdGUgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKSA/IG1fcGxh
eWJhY2tTZXNzaW9uTW9kZWwtPnBsYXliYWNrUmF0ZSgpIDogMC47Ci0gICAgbWFuYWdlci5zZWVr
YWJsZVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2VzVG9BcnJheShtX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5zZWVrYWJsZVJhbmdlcygpKS5nZXQoKTsKLSAgICBtYW5hZ2VyLmNhblRvZ2dsZVBsYXliYWNr
ID0gWUVTOwotICAgIG1hbmFnZXIucGxheWluZyA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlz
UGxheWluZygpOwotICAgIFttYW5hZ2VyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm1f
cGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNl
bGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2Rl
bC0+YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSldOwotICAgIFttYW5hZ2VyIHNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVn
ZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSld
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6dXBkYXRlUGxheWJh
Y2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9y
VGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpCi17Ci0gICAgV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigp
OwotICAgIGlmICghbWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwgKm1vZGVsID0gd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKLSAgICBpZiAo
IW1vZGVsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgZWZmZWN0aXZlQW5jaG9yVGlt
ZSA9IHBsYXliYWNrUmF0ZSA/IGFuY2hvclRpbWUgOiBOQU47Ci0gICAgZG91YmxlIGVmZmVjdGl2
ZVBsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKLSAgICBpZiAoIWlzUGxheWluZwotICAgICAg
ICB8fCBtb2RlbC0+aXNTY3J1YmJpbmcoKQotICAgICAgICB8fCAobWFuYWdlci5yYXRlID4gMCAm
JiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGltZSgpID49IGN1cnJlbnRUaW1lKQotICAgICAgICB8
fCAobWFuYWdlci5yYXRlIDwgMCAmJiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGltZSgpIDw9IGN1
cnJlbnRUaW1lKSkKLSAgICAgICAgZWZmZWN0aXZlUGxheWJhY2tSYXRlID0gMDsKLQotICAgIG1h
bmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFu
Y2hvclZhbHVlOmN1cnJlbnRUaW1lIGFuY2hvclRpbWVTdGFtcDplZmZlY3RpdmVBbmNob3JUaW1l
IHJhdGU6ZWZmZWN0aXZlUGxheWJhY2tSYXRlXTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJf
UExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NTFiMmNlM2EyZTllNDU1OWExMjEz
NjA0ZDEyNjBiZmU5MzBiNGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNp
bmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1PQkpDX0NMQVNTIE5TV2luZG93OwotT0JKQ19DTEFTUyBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJ
bnRSZWN0OwotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7Ci0KLWNsYXNz
IFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYwotICAgIDogcHVi
bGljIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgLCBwcml2YXRlIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHsKLQotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYygpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiB3ZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KLSAg
ICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCogd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25z
dCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlciogd2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7
IHJldHVybiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsgfQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywg
ZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKSBvdmVycmlkZTsKLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xp
ZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZs
b2F0U2l6ZSYpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXR1cEZ1bGxzY3Jl
ZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBO
U1dpbmRvdyAqcGFyZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFy
ZW50V2luZG93KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91
dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKLSAgICB2b2lkIHJlcXVlc3RIaWRlQW5k
RXhpdEZ1bGxzY3JlZW4oKSB7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5T
V2luZG93ICpwYXJlbnRXaW5kb3cpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29u
dHJvbHNNYW5hZ2VyKCk7Ci0KLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIGJvb2wgaGFzTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUg
PT0gbW9kZTsgfQotICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpOwotICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0KLSAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5Fbmhh
bmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKLQotICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dW
aWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQg
YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKSB7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKnZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMoKTsKLQotcHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMo
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJik7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYz4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Ci0g
ICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyIHsgbnVsbHB0ciB9OwotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVOb25lIH07Ci0gICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Y09iakM+IG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQzsKLX07Ci0KLX0KLQotI2Vu
ZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5MmU2NDJjOGVjMGNiZjk0NzVlODQ5NmRmN2M4NzAyYzI0ODY1NTNiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw1NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkKLQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNpbXBvcnQgIkludFJlY3QuaCIK
LSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgot
I2ltcG9ydCAiUElQU1BJLmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5o
IgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbXBvcnQgPEFWRm91bmRh
dGlvbi9BVlRpbWUuaD4KLQotI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKLQotU09GVF9M
SU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChB
VktpdCwgQVZWYWx1ZVRpbWluZykKLQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElP
TkFMKFBJUCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChQSVAsIFBJUFZpZXdDb250cm9sbGVy
KQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGNsYXNzIFdlYlZpZGVvVmlld0NvbnRh
aW5lcjsKLQotQHByb3RvY29sIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIDxOU09iamVj
dD4KLQotLSAodm9pZClib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZp
ZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcjsKLS0gKHZvaWQpc3VwZXJ2aWV3
RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2
aWRlb1ZpZXdDb250YWluZXI7Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJWaWRlb1ZpZXdDb250
YWluZXIgOiBOU1ZpZXcgewotICAgIGlkIDxXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4g
X3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywg
YXNzaWduKSBpZCA8V2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IHZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb1ZpZXdDb250
YWluZXIKLQotQHN5bnRoZXNpemUgdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU9X3ZpZGVvVmll
d0NvbnRhaW5lckRlbGVnYXRlOwotCi0tICh2b2lkKXJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXpl
OihOU1NpemUpb2xkQm91bmRzU2l6ZQotewotICAgIFtzdXBlciByZXNpemVXaXRoT2xkU3VwZXJ2
aWV3U2l6ZTpvbGRCb3VuZHNTaXplXTsKLQotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdh
dGUgYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNlbGZdOwotfQotCi0tICh2
b2lkKXZpZXdEaWRNb3ZlVG9TdXBlcnZpZXcKLXsKLSAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1N1
cGVydmlld107Ci0KLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIHN1cGVydmlld0Rp
ZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjpzZWxmXTsKLX0KLQotQGVuZAotCi1lbnVtIGNs
YXNzIFBJUFN0YXRlIHsKLSAgICBOb3RJblBJUCwKLSAgICBJblBJUCwKLSAgICBFeGl0aW5nUElQ
Ci19OwotCi1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgOiBO
U09iamVjdCA8UElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSwgV2ViVmlkZW9WaWV3Q29udGFpbmVy
RGVsZWdhdGU+IHsKLSAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMq
IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7Ci0gICAgTlNTaXplIF92aWRlb0RpbWVu
c2lvbnM7Ci0gICAgUmV0YWluUHRyPFBJUFZpZXdDb250cm9sbGVyPiBfcGlwVmlld0NvbnRyb2xs
ZXI7Ci0gICAgUmV0YWluUHRyPE5TVmlld0NvbnRyb2xsZXI+IF92aWRlb1ZpZXdDb250YWluZXJD
b250cm9sbGVyOwotICAgIFJldGFpblB0cjxXZWJWaWRlb1ZpZXdDb250YWluZXI+IF92aWRlb1Zp
ZXdDb250YWluZXI7Ci0gICAgUElQU3RhdGUgX3BpcFN0YXRlOwotICAgIFJldGFpblB0cjxOU1dp
bmRvdz4gX3JldHVybmluZ1dpbmRvdzsKLSAgICBOU1JlY3QgX3JldHVybmluZ1JlY3Q7Ci0gICAg
Qk9PTCBfcGxheWluZzsKLSAgICBCT09MIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUDsKLSAgICBCT09M
IF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzooV2ViQ29yZTo6V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjKil3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7Ci0tICh2
b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGU7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0KLS8v
IFRyYWNraW5nIHZpZGVvIHBsYXliYWNrIHN0YXRlCi1AcHJvcGVydHkgKG5vbmF0b21pYykgTlNT
aXplIHZpZGVvRGltZW5zaW9uczsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNQbGF5
aW5nKSBCT09MIHBsYXlpbmc7Ci0tICh2b2lkKXVwZGF0ZUlzUGxheWluZzooQk9PTClpc1BsYXlp
bmcgbmV3UGxheWJhY2tSYXRlOihmbG9hdClwbGF5YmFja1JhdGU7Ci0KLS8vIEhhbmRsaW5nIFBJ
UCB0cmFuc2l0aW9ucwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGRpZFJl
cXVlc3RFeGl0aW5nUElQOwotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc0V4aXRpbmdU
b1N0YW5kYXJkRnVsbHNjcmVlbikgQk9PTCBleGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47Ci0K
LS0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJh
bWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7Ci0tICh2b2lkKWVu
dGVyUElQOwotLSAodm9pZClleGl0UElQOwotLSAodm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0
OihOU1JlY3QpcmVjdCBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMKLQotQHN5bnRo
ZXNpemUgcGxheWluZz1fcGxheWluZzsKLUBzeW50aGVzaXplIHZpZGVvRGltZW5zaW9ucz1fdmlk
ZW9EaW1lbnNpb25zOwotQHN5bnRoZXNpemUgZGlkUmVxdWVzdEV4aXRpbmdQSVA9X2RpZFJlcXVl
c3RFeGl0aW5nUElQOwotQHN5bnRoZXNpemUgZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuPV9l
eGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzooV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjKil3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSB3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM7Ci0gICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Ok5vdEluUElQOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZQotewotICAgIFtfcGlw
Vmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBfcGlwVmlld0NvbnRyb2xsZXIg
PSBuaWw7Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXIgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0g
ICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU6bmls
XTsKLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gbmlsOwotICAgIF92aWRlb1ZpZXdDb250YWlu
ZXJDb250cm9sbGVyID0gbmlsOwotICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpOb3RJblBJUDsK
LSAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBOTzsKLSAgICBfZXhpdGluZ1RvU3RhbmRhcmRG
dWxsc2NyZWVuID0gTk87Ci0gICAgX3JldHVybmluZ1dpbmRvdyA9IG5pbDsKLSAgICBfcmV0dXJu
aW5nUmVjdCA9IE5TWmVyb1JlY3Q7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIFtz
ZWxmIGludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGVdOwotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMgPSBudWxscHRyOwotICAgIF92aWRlb0RpbWVuc2lvbnMgPSBOU1plcm9TaXpl
OwotfQotCi0tICh2b2lkKXVwZGF0ZUlzUGxheWluZzooQk9PTClpc1BsYXlpbmcgbmV3UGxheWJh
Y2tSYXRlOihmbG9hdClwbGF5YmFja1JhdGUKLXsKLSAgICBfcGxheWluZyA9IGlzUGxheWluZyAm
JiBwbGF5YmFja1JhdGU7Ci0KLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFBsYXlpbmc6X3Bs
YXlpbmddOwotfQotCi0tICh2b2lkKXNldFZpZGVvRGltZW5zaW9uczooTlNTaXplKXZpZGVvRGlt
ZW5zaW9ucwotewotICAgIF92aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnM7Ci0KLSAg
ICBbX3BpcFZpZXdDb250cm9sbGVyIHNldEFzcGVjdFJhdGlvOl92aWRlb0RpbWVuc2lvbnNdOwot
fQotCi0tICh2b2lkKXNldFVwUElQRm9yVmlkZW9WaWV3OihOU1ZpZXcgKil2aWRlb1ZpZXcgd2l0
aEZyYW1lOihOU1JlY3QpZnJhbWUgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0gICAg
QVNTRVJUKCFfcGlwVmlld0NvbnRyb2xsZXIpOwotICAgIEFTU0VSVCghX3ZpZGVvVmlld0NvbnRh
aW5lckNvbnRyb2xsZXIpOwotICAgIEFTU0VSVCghX3ZpZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAg
ICBfcGlwVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY1BJUFZpZXdDb250cm9sbGVySW5z
dGFuY2UoKSBpbml0XSk7Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpzZWxm
XTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFVzZXJDYW5SZXNpemU6WUVTXTsKLSAgICBb
X3BpcFZpZXdDb250cm9sbGVyIHNldFBsYXlpbmc6X3BsYXlpbmddOwotICAgIFtzZWxmIHNldFZp
ZGVvRGltZW5zaW9uczpOU0VxdWFsU2l6ZXMoX3ZpZGVvRGltZW5zaW9ucywgTlNaZXJvU2l6ZSkg
PyBmcmFtZS5zaXplIDogX3ZpZGVvRGltZW5zaW9uc107Ci0gICAgaWYgKF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHko
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpOwot
Ci0gICAgX3ZpZGVvVmlld0NvbnRhaW5lciA9IGFkb3B0TlMoW1tXZWJWaWRlb1ZpZXdDb250YWlu
ZXIgYWxsb2NdIGluaXRXaXRoRnJhbWU6ZnJhbWVdKTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5l
ciBzZXRWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3ZpZGVvVmlld0Nv
bnRhaW5lciBhZGRTdWJ2aWV3OnZpZGVvVmlld107Ci0gICAgdmlkZW9WaWV3LmZyYW1lID0gW192
aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXTsKLSAgICB2aWRlb1ZpZXcuYXV0b3Jlc2l6aW5nTWFz
ayA9IE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGU7Ci0KLSAgICBfdmlk
ZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tOU1ZpZXdDb250cm9sbGVyIGFs
bG9jXSBpbml0XSk7Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHNldFZpZXc6
X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKV07Ci0gICAgW3dpbmRvdy5jb250ZW50VmlldyBhZGRT
dWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3Zl
IHJlbGF0aXZlVG86bmlsXTsKLX0KLQotLSAodm9pZCllbnRlclBJUAotewotICAgIGlmIChfcGlw
U3RhdGUgPT0gUElQU3RhdGU6OkluUElQKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX3ZpZGVv
Vmlld0NvbnRhaW5lckNvbnRyb2xsZXIgdmlld10ubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gQ0dD
b2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JCbGFjayk7Ci0gICAgW19waXBWaWV3Q29udHJv
bGxlciBwcmVzZW50Vmlld0NvbnRyb2xsZXJBc1BpY3R1cmVJblBpY3R1cmU6X3ZpZGVvVmlld0Nv
bnRhaW5lckNvbnRyb2xsZXIuZ2V0KCldOwotICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpJblBJ
UDsKLX0KLQotLSAodm9pZClleGl0UElQCi17Ci0gICAgaWYgKF9waXBTdGF0ZSAhPSBQSVBTdGF0
ZTo6SW5QSVAgfHwgIV9waXBWaWV3Q29udHJvbGxlciB8fCAhX3ZpZGVvVmlld0NvbnRhaW5lckNv
bnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9
IFlFUzsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgdmlld10ubGF5ZXIuYmFj
a2dyb3VuZENvbG9yID0gQ0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JDbGVhcik7Ci0g
ICAgW19waXBWaWV3Q29udHJvbGxlciBkaXNtaXNzVmlld0NvbnRyb2xsZXI6X3ZpZGVvVmlld0Nv
bnRhaW5lckNvbnRyb2xsZXIuZ2V0KCldOwotICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpFeGl0
aW5nUElQOwotfQotCi0tICh2b2lkKWV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0
IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwotewotICAgIF9yZXR1cm5pbmdXaW5kb3cgPSB3
aW5kb3c7Ci0gICAgX3JldHVybmluZ1JlY3QgPSByZWN0OwotICAgIAotICAgIFtfcGlwVmlld0Nv
bnRyb2xsZXIgc2V0UmVwbGFjZW1lbnRSZWN0OnJlY3RdOwotICAgIFtfcGlwVmlld0NvbnRyb2xs
ZXIgc2V0UmVwbGFjZW1lbnRXaW5kb3c6d2luZG93XTsKLQotICAgIFtzZWxmIGV4aXRQSVBdOwot
fQotCi0vLyBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZQotCi0tICh2b2lkKWJvdW5kc0Rp
ZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlk
ZW9WaWV3Q29udGFpbmVyCi17Ci0gICAgaWYgKCFfdmlkZW9WaWV3Q29udGFpbmVyIHx8ICFfcGlw
Vmlld0NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVF9VTlVTRUQodmlk
ZW9WaWV3Q29udGFpbmVyLCB2aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5l
cik7Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAg
ICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7
Ci19Ci0KLS0gKHZvaWQpc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihX
ZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXIKLXsKLSAgICBpZiAoIV92
aWRlb1ZpZXdDb250YWluZXIgfHwgIV9waXBWaWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKHZpZGVvVmlld0NvbnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFpbmVy
KTsKLQotICAgIGlmICghW3ZpZGVvVmlld0NvbnRhaW5lciBpc0Rlc2NlbmRhbnRPZjpbX3BpcFZp
ZXdDb250cm9sbGVyIHZpZXddXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25jZSB0aGUg
dmlldyBpcyBtb3ZlZCBpbnRvIHRoZSBwaXAgdmlldywgbWFrZSBzdXJlIGl0IHJlc2l6ZXMgd2l0
aCB0aGUgcGlwIHZpZXcuCi0gICAgdmlkZW9WaWV3Q29udGFpbmVyLmZyYW1lID0gW3ZpZGVvVmll
d0NvbnRhaW5lciBzdXBlcnZpZXddLmJvdW5kczsKLSAgICB2aWRlb1ZpZXdDb250YWluZXIuYXV0
b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGU7
Ci19Ci0KLS8vIFBJUFZpZXdDb250cm9sbGVyRGVsZWdhdGUKLQotLSAoQk9PTClwaXBTaG91bGRD
bG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHBpcCwg
cGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMgfHwgIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAg
ICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBZRVM7Ci0gICAgX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKS0+ZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKCk7Ci0KLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpcGlw
RGlkQ2xvc2U6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNFRChw
aXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwotCi0gICAgaWYgKF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwoKSAmJiBfdmlkZW9WaWV3Q29udGFpbmVyICYmIF9yZXR1cm5p
bmdXaW5kb3cgJiYgIU5TRXF1YWxSZWN0cyhfcmV0dXJuaW5nUmVjdCwgTlNaZXJvUmVjdCkpIHsK
LSAgICAgICAgW05TQW5pbWF0aW9uQ29udGV4dCBydW5BbmltYXRpb25Hcm91cDpeKE5TQW5pbWF0
aW9uQ29udGV4dCAqY29udGV4dCkgewotICAgICAgICAgICAgY29udGV4dC5hbGxvd3NJbXBsaWNp
dEFuaW1hdGlvbiA9IE5POwotICAgICAgICAgICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0RnJh
bWU6X3JldHVybmluZ1JlY3RdOwotICAgICAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtf
dmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOwotICAgICAgICAgICAgX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXll
ckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dCk7Ci0KLSAgICAgICAgICAgIFtbX3JldHVybmluZ1dpbmRvdyBjb250ZW50Vmlld10gYWRkU3Vi
dmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSBy
ZWxhdGl2ZVRvOm5pbF07Ci0gICAgICAgIH0gY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKLSAgICB9
Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYykgewotICAgICAgICBp
ZiAoIXNlbGYuaXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4pIHsKLSAgICAgICAgICAgIGlm
IChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKSB7Ci0g
ICAgICAgICAgICAgICAgdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICAg
ICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
UGljdHVyZUluUGljdHVyZSk7Ci0KLSAgICAgICAgaWYgKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKiBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpKQotICAgICAg
ICAgICAgZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAg
IH0KLX0KLQotLSAodm9pZClwaXBBY3Rpb25QbGF5OihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAot
ewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKLQot
ICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkt
PnBsYXkoKTsKLX0KLQotLSAodm9pZClwaXBBY3Rpb25QYXVzZTooUElQVmlld0NvbnRyb2xsZXIg
KilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxl
cik7Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAg
ICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCgpLT5wYXVzZSgpOwotfQotCi0tICh2b2lkKXBpcEFjdGlvblN0b3A6KFBJUFZpZXdDb250
cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0Nv
bnRyb2xsZXIpOwotCi0gICAgaWYgKCFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXli
YWNrU2Vzc2lvbk1vZGVsID0gX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBhdXNl
KCk7Ci0KLSAgICAvLyBGSVhNRSAyNTA5NjE3MDogU2hvdWxkIGFuaW1hdGUgb25seSBpZiB0aGUg
cGFnZSB3aXRoIHRoZSB2aWRlbyBpcyB1bm9ic2N1cmVkLiBGb3Igbm93LCBhbHdheXMgY2xvc2Ug
d2l0aG91dCBhbmltYXRpb24uCi0gICAgW3NlbGYgZXhpdFBJUF07Ci19Ci0KLUBlbmQKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMm
IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLXsKLSAgICBBU1NFUlQobV9wbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpOwotICAgIGF1dG8gbW9k
ZWwgPSBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwo
KTsKLSAgICBtb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKLSAgICBbdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzptb2RlbC0+aXNQbGF5aW5nKCkgbmV3UGxheWJh
Y2tSYXRlOm1vZGVsLT5wbGF5YmFja1JhdGUoKV07Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpCi17Ci0gICAgaWYg
KG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQot
ICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKLXsKLSAgICBpZiAo
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+
cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbW9kZWw7
Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCi17Ci0gICAgbV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgfCBtb2RlOwotICAgIGlmIChtX21vZGUgPT0gbmV3TW9k
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tb2RlID0gbmV3TW9kZTsKLSAgICBpZiAobV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgJiB+bW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5l
d01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYg
KG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwt
PmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXli
YWNrUmF0ZSkKLXsKLSAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlz
UGxheWluZzppc1BsYXlpbmcgbmV3UGxheWJhY2tSYXRlOnBsYXliYWNrUmF0ZV07Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIo
KQotewotICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5lbnN1cmVDb250cm9sc01hbmFn
ZXIoKTsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyAqV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkKLXsK
LSAgICBpZiAoIW1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQykKLSAgICAgICAgbV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDID0gYWRvcHROUyhbW1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hY09iakMgYWxsb2NdIGluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOnRoaXNdKTsKLQotICAgIHJldHVybiBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU9iakMuZ2V0KCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3Qm
IGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJl
UGxheWJhY2spCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbiglcCksIGluaXRpYWxSZWN0OnslZCwgJWQsICVkLCAl
ZH0sIHBhcmVudFdpbmRvdzolcCwgbW9kZTolZCIsIHRoaXMsIGluaXRpYWxSZWN0LngoKSwgaW5p
dGlhbFJlY3QueSgpLCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0aWFsUmVjdC5oZWlnaHQoKSwg
cGFyZW50V2luZG93LCBtb2RlKTsKLQotICAgIFVOVVNFRF9QQVJBTShhbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlUGxheWJhY2spOwotICAgIEFTU0VSVChtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotCi0gICAgbV9tb2RlID0g
bW9kZTsKLQotICAgIFt2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkgc2V0VXBQSVBGb3JW
aWRlb1ZpZXc6JmxheWVySG9zdGVkVmlldyB3aXRoRnJhbWU6KE5TUmVjdClpbml0aWFsUmVjdCBp
bldpbmRvdzpwYXJlbnRXaW5kb3ddOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewotICAgICAgICBp
ZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oKQotewotICAg
IExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1
bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAgICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpIHsKLSAgICAgICAg
W21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBlbnRlclBJUF07Ci0KLSNpZiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgICAgIFttX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0
dXJlQWN0aXZlOllFU107Ci0jZW5kaWYKLQotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50
ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRv
dyAqcGFyZW50V2luZG93KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbiglcCksIGZpbmFsUmVjdDp7JWQsICVkLCAl
ZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBmaW5hbFJlY3QueCgpLCBmaW5hbFJlY3Qu
eSgpLCBmaW5hbFJlY3Qud2lkdGgoKSwgZmluYWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cp
OwotCi0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFttX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0
dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKLSNlbmRpZgotCi0gICAgaWYgKFttX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU9iakMgZGlkUmVxdWVzdEV4aXRpbmdQSVBdKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoZmluYWxSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgW21fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKLSAgICBlbHNlCi0gICAgICAgIFttX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDpmaW5h
bFJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3Jl
ZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKCVwKSwgbW9kZTolZCIsIHRoaXMsIG1vZGUpOwotCi0j
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFttX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5Q
aWN0dXJlQWN0aXZlOk5PXTsKLSNlbmRpZgotCi0gICAgaWYgKFttX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgZGlkUmVxdWVzdEV4aXRpbmdQSVBdKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBib29sIGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuID0gbW9kZSA9PSBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsKLSAgICAvLyBPbiBN
YWMsIHN0YW5kYXJkIGZ1bGxzY3JlZW4gaXMgaGFuZGxlZCBieSB0aGUgRnVsbHNjcmVlbiBBUEkg
YW5kIG5vdCBieSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLgotICAgIC8vIEp1c3QgdXBkYXRl
IG1fbW9kZSBkaXJlY3RseSB0byBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVTdGFuZGFyZCBpbiB0aGF0IGNhc2UgdG8ga2VlcAotICAgIC8vIG1fbW9kZSBpbiBzeW5j
IHdpdGggdGhlIGZ1bGxzY3JlZW4gbW9kZSBpbiBIVE1MTWVkaWFFbGVtZW50LgotICAgIGlmIChp
c0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikKLSAgICAgICAgbV9tb2RlID0gSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQ7Ci0KLSAgICBbbV93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNldEV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVl
bjppc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbl07Ci0gICAgW21fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwg
dGhpcyk7Ci0KLSAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBd
OwotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaW52YWxpZGF0ZUZ1bGxz
Y3JlZW5TdGF0ZV07Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAg
ICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCi17
Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omlu
dmFsaWRhdGUoJXApIiwgdGhpcyk7Ci0KLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmls
OwotICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gbmlsOwotCi0gICAgY2xlYW51cEZ1
bGxzY3JlZW4oKTsKLQotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaW52
YWxpZGF0ZV07Ci0gICAgbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDID0gbmlsOwot
fQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9v
bCB2YWwpCi17Ci0gICAgcmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci19Ci0jZW5kaWYK
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5U
b0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93
ICpwYXJlbnRXaW5kb3cpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCksIHZpc2libGU6JXMs
IGlubGluZVJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwIiwgdGhpcywgYm9v
bFN0cmluZyh2aXNpYmxlKSwgaW5saW5lUmVjdC54KCksIGlubGluZVJlY3QueSgpLCBpbmxpbmVS
ZWN0LndpZHRoKCksIGlubGluZVJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7Ci0KLSAgICBp
ZiAoIXZpc2libGUpIHsKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyBleGl0UElQXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChwYXJlbnRX
aW5kb3cpOwotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFu
aW1hdGluZ1RvUmVjdDooTlNSZWN0KWlubGluZVJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQotewotICAgIExPRyhGdWxsc2NyZWVu
LCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdl
ZCglcCksIGVuYWJsZWQ6JXMiLCB0aGlzLCBib29sU3RyaW5nKGVuYWJsZWQpKTsKLQotICAgIGlm
IChlbmFibGVkICYmIG1fbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQotICAgICAgICBleGl0RnVsbHNjcmVlbihJbnRSZWN0
KCksIG5pbCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNW
aWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2VkKCVwKTolcyIsIHRoaXMs
IGJvb2xTdHJpbmcoaGFzVmlkZW8pKTsKLQotICAgIGlmICghaGFzVmlkZW8pCi0gICAgICAgIGV4
aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRl
b0RpbWVuc2lvbnMpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoJXApLCB3aWR0aDolLjBmLCBoZWln
aHQ6JS4wZiIsIHRoaXMsIHZpZGVvRGltZW5zaW9ucy53aWR0aCgpLCB2aWRlb0RpbWVuc2lvbnMu
aGVpZ2h0KCkpOwotCi0gICAgLy8gV2lkdGggYW5kIGhlaWdodCBjYW4gYmUgemVybyB3aGVuIHdl
IGFyZSB0cmFuc2l0aW9uaW5nIGZyb20gb25lIHZpZGVvIHRvIGFub3RoZXIuIElnbm9yZSB6ZXJv
IHZhbHVlcy4KLSAgICBpZiAoIXZpZGVvRGltZW5zaW9ucy5pc1plcm8oKSkKLSAgICAgICAgW21f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9E
aW1lbnNpb25zXTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6Omlz
UGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiBo
YXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVBpY3R1cmVJblBpY3R1cmUpICYmIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMg
aXNQbGF5aW5nXTsKLX0KLQotYm9vbCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKQotewotICAg
IHJldHVybiBQSVBMaWJyYXJ5KCkgJiYgZ2V0UElQVmlld0NvbnRyb2xsZXJDbGFzcygpOwotfQot
Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5t
YWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDE5YjQyZjlkYmFi
NmQ1ZjFmMzI5NjY4N2Q5MDc4ZmFiOWU2MDdmNTMuLmM1MGI0NjExNjE4OWY2MWZlMjZiN2I2NjVi
YmRlMDFjOGNiOTUzNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE1Miw4ICsx
NTIsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBXZWJQYXN0ZWJvYXJkUHJveHkgXAog
ICAgIFdlYlBheW1lbnRDb29yZGluYXRvciBcCiAgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHkgXAotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgXAotICAgIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eSBcCisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlciBcCisgICAgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IFwKICAgICBXZWJQcm9jZXNzIFwKICAgICBXZWJQcm9j
ZXNzQ29ubmVjdGlvbiBcCiAgICAgV2ViUHJvY2Vzc1Bvb2wgXApAQCAtMTY2LDggKzE2Niw4IEBA
IE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYlNvY2tldFN0cmVhbSBcCiAgICAgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyIFwKICAgICBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSBc
Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBcCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5IFwKKyAgICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIFwKKyAgICBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkgXAogIwogCiBTQ1JJUFRTID0gXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggN2RhNGQ2MGM0ZDY0OWIx
M2QxZjM2NDM1MmRjMjBkYjMwMzkwNDg1ZC4uN2Q0MzJkM2I1MjhjNmU3NTQ1OGUyNGY5NWY2YjI0
MTU4OWJiNDVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tCkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eS5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1w
b3J0ICJXS1BERlZpZXcuaCIKICNpbXBvcnQgIldLUGFzc3dvcmRWaWV3LmgiCiAjaW1wb3J0ICJX
S1Njcm9sbFZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5
LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQg
Il9XS0RyYWdnYWJsZUVsZW1lbnRJbmZvSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dlYlZpZXdQ
cmludEZvcm1hdHRlci5oIgogI2ltcG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTgwZjk1NzdmMDQ0MzBjY2M2NGNmMzNjZWU3ZTdh
ODliOTUzZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1WaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2Rl
bC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Lmg+CisjZWxzZQorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKK3R5cGVk
ZWYgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQgUGxhdGZvcm1QbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2U7CisjZWxzZQordHlwZWRlZiBXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKKworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0IGZpbmFsOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+
LCBwdWJsaWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWwgIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gY3JlYXRlKFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KG1h
bmFnZXIsIGNvbnRleHRJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQoKSB7IH0KKworICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0g
bnVsbHB0cjsgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICB2b2lkIGFkZENs
aWVudChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIGZpbmFsOworICAgIHZv
aWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JilmaW5h
bDsKKworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSk7CisgICAgdm9pZCBjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlKTsKKyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91Ymxl
KTsKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7CisgICAgdm9p
ZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKKyAgICB2
b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxh
c3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBhdWRpb01lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVn
aWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwor
ICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCwgUGxheWJhY2tTZXNzaW9uTW9k
ZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIG11
dGVkQ2hhbmdlZChib29sKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OworCisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQor
ICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKKyAgICAgICAgLCBtX2NvbnRleHRJZChjb250
ZXh0SWQpCisgICAgeworICAgIH0KKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisgICAg
dm9pZCBwbGF5KCkgZmluYWw7CisgICAgdm9pZCBwYXVzZSgpIGZpbmFsOworICAgIHZvaWQgdG9n
Z2xlUGxheVN0YXRlKCkgZmluYWw7CisgICAgdm9pZCBiZWdpblNjcnViYmluZygpIGZpbmFsOwor
ICAgIHZvaWQgZW5kU2NydWJiaW5nKCkgZmluYWw7CisgICAgdm9pZCBzZWVrVG9UaW1lKGRvdWJs
ZSkgZmluYWw7CisgICAgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7CisgICAgdm9p
ZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0Jh
Y2t3YXJkKCkgZmluYWw7CisgICAgdm9pZCBlbmRTY2FubmluZygpIGZpbmFsOworICAgIHZvaWQg
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgdG9nZ2xlUGljdHVy
ZUluUGljdHVyZSgpIGZpbmFsOworICAgIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKKyAgICB2
b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOworCisgICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRp
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrU3RhcnRlZFRpbWU7IH0KKyAgICBk
b3VibGUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAg
ZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jdXJyZW50VGltZTsg
fQorICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1ZmZl
cmVkVGltZTsgfQorICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9p
c1BsYXlpbmc7IH0KKyAgICBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9pc1NjcnViYmluZzsgfQorICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fcGxheWJhY2tSYXRlOyB9CisgICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IHNl
ZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVrYWJsZVJhbmdlcy5jb3B5
UmVmKCk7IH0KKyAgICBkb3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGlt
ZTsgfQorICAgIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2xp
dmVVcGRhdGVJbnRlcnZhbDsgfQorICAgIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9jYW5QbGF5RmFzdFJldmVyc2U7IH0KKyAgICBWZWN0b3I8V2ViQ29y
ZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQorICAgIHVp
bnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9h
dWRpb01lZGlhU2VsZWN0ZWRJbmRleDsgfQorICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsgfQorICAgIHVpbnQ2NF90IGxl
Z2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXg7IH0KKyAgICBib29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZDsgfQorICAgIFBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGU7IH0KKyAgICBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmlj
ZU5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWRE
ZXZpY2VOYW1lOyB9CisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7IH0KKyAg
ICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGVkOyB9CisKKyAgICBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKKyAgICB1aW50NjRfdCBtX2Nv
bnRleHRJZDsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
Kj4gbV9jbGllbnRzOworICAgIGRvdWJsZSBtX3BsYXliYWNrU3RhcnRlZFRpbWUgeyAwIH07Cisg
ICAgYm9vbCBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSB7IGZhbHNlIH07CisgICAg
ZG91YmxlIG1fZHVyYXRpb24geyAwIH07CisgICAgZG91YmxlIG1fY3VycmVudFRpbWUgeyAwIH07
CisgICAgZG91YmxlIG1fYnVmZmVyZWRUaW1lIHsgMCB9OworICAgIGJvb2wgbV9pc1BsYXlpbmcg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1NjcnViYmluZyB7IGZhbHNlIH07CisgICAgZmxvYXQg
bV9wbGF5YmFja1JhdGUgeyAwIH07CisgICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IG1fc2Vl
a2FibGVSYW5nZXMgeyBXZWJDb3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKSB9OworICAgIGRvdWJs
ZSBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgeyAwIH07CisgICAgZG91Ymxl
IG1fbGl2ZVVwZGF0ZUludGVydmFsIHsgMCB9OworICAgIGJvb2wgbV9jYW5QbGF5RmFzdFJldmVy
c2UgeyBmYWxzZSB9OworICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4g
bV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKKyAgICB1aW50NjRfdCBtX2F1ZGlvTWVkaWFT
ZWxlY3RlZEluZGV4IHsgMCB9OworICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOworICAgIHVpbnQ2NF90IG1fbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKKyAgICBib29sIG1fZXh0ZXJuYWxQbGF5YmFj
a0VuYWJsZWQgeyBmYWxzZSB9OworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgUGxheWJhY2tT
ZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lIH07CisgICAgU3RyaW5nIG1fZXh0ZXJuYWxQbGF5
YmFja0xvY2FsaXplZERldmljZU5hbWU7CisgICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OworfTsKKwor
Y2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgUGxhdGZvcm1QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpOworICAgIHZv
aWQgcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CisKKyAgICBleHBsaWNpdCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKworICAgIHR5cGVkZWYgc3Rk
Ojp0dXBsZTxSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRm
b3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBN
b2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIGVu
c3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVt
b3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgLy8gTWVzc2Fn
ZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisgICAgdm9pZCBzZXRVcFBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBjbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKTsKKyAgICB2b2lkIGJ1
ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1l
KTsKKyAgICB2b2lkIHNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0
TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsKKyAgICB2b2lkIGNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKTsKKyAg
ICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBhdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lk
IGV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5h
bWUpOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCk7CisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pOworICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGlt
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSk7
CisgICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5n
LCBkb3VibGUgcmF0ZSk7CisgICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9u
c2UodWludDY0X3QsIFN0cmluZykgY29uc3Q7CisgICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKKworICAgIC8vIE1lc3NhZ2VzIHRvIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIKKyAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2
b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUo
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAg
ICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAg
dm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lk
IGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdp
blNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5u
aW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9u
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAg
IHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldE11dGVkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7CisKKyAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKKyAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Cisg
ICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07CisgICAgSGFzaENv
dW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FjOGY3OWQxYjI0NTVhNzgwZjgyMjdhM2VmYTQ5
MTY5ZmQwNWVhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQ1
IEBACisjIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKK21lc3NhZ2VzIC0+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSB7CisgICAg
UmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBDdXJyZW50VGltZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGlt
ZSkKKyAgICBCdWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1
ZmZlcmVkVGltZSkKKyAgICBTZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKKyAgICBDYW5QbGF5
RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKKyAgICBB
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0
b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCisgICAgTGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgQXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAg
TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUs
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQorICAgIFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCisgICAgRHVy
YXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQorICAgIFBs
YXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXli
YWNrU3RhcnRlZFRpbWUpCisgICAgUmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IGlzUGxheWluZywgZG91YmxlIHJhdGUpCisgICAgTXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBtdXRlZCk7CisgICAgU2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJ
RCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQ2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigp
CisKKyAgICBIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4
dElkLCBTdHJpbmcgaWQpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40MmMzOTllOGRiODZhOTE1MDVhMmFkZDY2NDRkZDg5MDM2MjI3ZTczCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Lm1tCkBAIC0wLDAgKzEsNTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgorCisj
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMu
aCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9y
dCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphZGRDbGllbnQo
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xp
ZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29u
dGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KCkKK3sKKyAgICBpZiAobV9tYW5h
Z2VyKQorICAgICAgICBtX21hbmFnZXItPnBsYXkobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGF1c2UoKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+cGF1c2UobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9t
YW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmlu
ZyhtX2NvbnRleHRJZCk7CisKKyAgICBtX2lzU2NydWJiaW5nID0gdHJ1ZTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZygpCit7CisgICAgaWYgKG1f
bWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY3J1YmJpbmcobV9jb250ZXh0SWQpOwor
CisgICAgbV9pc1NjcnViYmluZyA9IGZhbHNlOworICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5l
ZWRzVXBkYXRlID0gaXNQbGF5aW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisg
ICAgICAgIG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1fY29udGV4
dElkLCB0aW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit7CisgICAgaWYg
KG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nQmFja3dhcmQobV9j
b250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZW5kU2Nh
bm5pbmcoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZW5kU2Nh
bm5pbmcobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKK3sKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24obV9j
b250ZXh0SWQsIG9wdGlvbklkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlbGVjdExlZ2libGVNZWRpYU9wdGlv
bihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikK
KyAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKG1fY29udGV4dElkKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZU11dGVkKCkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnRvZ2dsZU11dGVkKG1fY29u
dGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNldE11dGVk
KGJvb2wgbXV0ZWQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5z
ZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3Rh
cnRlZFRpbWUpCit7CisgICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lID0gcGxheWJhY2tTdGFydGVk
VGltZTsKKyAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGZhbHNlOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJs
ZSBkdXJhdGlvbikKK3sKKyAgICBtX2R1cmF0aW9uID0gZHVyYXRpb247CisgICAgZm9yIChhdXRv
KiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1
cmF0aW9uKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRU
aW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUpCit7CisgICAgbV9jdXJyZW50VGltZSA9IGN1
cnJlbnRUaW1lOworICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNz
SW5mb10gc3lzdGVtVXB0aW1lXTsKKyAgICBpZiAobV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNV
cGRhdGUpCisgICAgICAgIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsK
KworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmN1
cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZm
ZXJlZFRpbWUpCit7CisgICAgbV9idWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWU7CisgICAgZm9y
IChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1l
Q2hhbmdlZChidWZmZXJlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sK
KyAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKKyAgICBtX3BsYXliYWNrUmF0ZSA9IHBsYXli
YWNrUmF0ZTsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xp
ZW50LT5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6
VGltZVJhbmdlcyYgc2Vla2FibGVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3Vi
bGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIG1fc2Vla2FibGVSYW5nZXMgPSBzZWVrYWJs
ZVJhbmdlczsKKyAgICBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSBsYXN0
TW9kaWZpZWRUaW1lOworICAgIG1fbGl2ZVVwZGF0ZUludGVydmFsID0gbGl2ZVVwZGF0ZUludGVy
dmFsOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQt
PnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwg
bGl2ZVVwZGF0ZUludGVydmFsKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit7
CisgICAgbV9jYW5QbGF5RmFzdFJldmVyc2UgPSBjYW5QbGF5RmFzdFJldmVyc2U7CisgICAgZm9y
IChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RS
ZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0
IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
LCB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2F1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAgbV9hdWRp
b01lZGlhU2VsZWN0ZWRJbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OworICAgIGZvciAo
YXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucywgYXVkaW9NZWRp
YVNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOworICAgIG1fbGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7CisKKyAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBsZWdpYmxl
TWVkaWFTZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKK3sKKyAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKKwor
ICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmF1ZGlv
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5n
ZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVk
SW5kZXggPSBzZWxlY3RlZEluZGV4OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVu
dHMpCisgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNl
bGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRO
YW1lKQoreworICAgIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBlbmFibGVkOworICAgIG1f
ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgPSB0eXBlOworICAgIG1fZXh0ZXJuYWxQbGF5YmFj
a0xvY2FsaXplZERldmljZU5hbWUgPSBsb2NhbGl6ZWROYW1lOworCisgICAgZm9yIChhdXRvKiBj
bGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5n
ZWQoZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkTmFtZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9v
bCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKK3sKKyAgICBtX3dpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7CisgICAgZm9y
IChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Om11dGVkQ2hhbmdlZChib29s
IG11dGVkKQoreworICAgIG1fbXV0ZWQgPSBtdXRlZDsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0ZWQpOworfQorCisj
cHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKKworUmVmUHRyPFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVh
dGUoV2ViUGFnZVByb3h5JiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5KHBhZ2UpKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQor
ICAgIDogbV9wYWdlKCZwYWdlKQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKK30KKworUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Ojp+UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCkKK3sKKyAgICBp
ZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGludmFsaWRhdGUoKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIG1fcGFn
ZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkp
OworICAgIG1fcGFnZSA9IG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250
ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2U+IGludGVyZmFjZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0
dXBsZTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBt
X2NvbnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOworfQorCitQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKKyAg
ICBSZWY8UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGludGVyZmFjZSA9IFBsYXRm
b3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9kZWwpOworCisgICAgcmV0dXJu
IHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKK30K
KworUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29u
dGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5k
SW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJu
ICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwor
UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4g
KnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250
ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBpZiAoIW1fY2xpZW50Q291bnRzLnJlbW92
ZShjb250ZXh0SWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29u
dGV4dElkKS5pbnZhbGlkYXRlKCk7CisgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQp
OworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyNpZiBQTEFURk9STShNQUMp
CisgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAg
ICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKwor
ICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOworICAgIGVuc3VyZUlu
dGVyZmFjZShtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkuZW5zdXJlQ29udHJvbHNNYW5hZ2Vy
KCk7CisgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7
CisKKyAgICBtX3BhZ2UtPnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKK3sKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCk7CisgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOworICAg
IG1fcGFnZS0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKKyNlbmRpZgorfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5yZXNldE1lZGlh
U3RhdGUoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGhvc3RUaW1lKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY3VycmVudFRpbWVDaGFu
Z2VkKGN1cnJlbnRUaW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRU
aW1lKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYnVmZmVyZWRUaW1lQ2hhbmdlZChi
dWZmZXJlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vl
a2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6
cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRv
dWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgUmVmPFRpbWVSYW5nZXM+IHRpbWVSYW5n
ZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDog
cmFuZ2VzKSB7CisgICAgICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5maXJzdCkpOworICAgICAg
ICBBU1NFUlQoaXNmaW5pdGUocmFuZ2Uuc2Vjb25kKSk7CisgICAgICAgIEFTU0VSVChyYW5nZS5z
ZWNvbmQgPj0gcmFuZ2UuZmlyc3QpOworICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFuZ2UuZmly
c3QsIHJhbmdlLnNlY29uZCk7CisgICAgfQorCisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5z
ZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVw
ZGF0ZUludGVydmFsKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQor
eworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh2
YWx1ZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
b3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNl
bGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVn
aWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmxlZ2libGVN
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwg
U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU+KHRhcmdldFR5cGUpOworICAg
IEFTU0VSVCh0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSB8
fCB0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQgfHwgdHlwZSA9
PSBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUpOworCisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2Nh
bGl6ZWREZXZpY2VOYW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgZGlzYWJsZWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBtdXRlZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm11dGVkQ2hhbmdlZChtdXRl
ZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpkdXJhdGlvbkNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRl
ZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCit7Cisg
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHJhdGUpOwor
fQorCisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9sbGVk
RWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJpbmcgaWRlbnRpZmllcikg
Y29uc3QKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKGNvbnRleHRJZCA9PSBtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgbV9wYWdlLT5oYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVzcG9uc2UoaWRlbnRpZmllcik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0SWQpOworICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsKKyNlbmRpZgorfQorCisKKyNw
cmFnbWEgbWFyayBNZXNzYWdlcyB0byBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBsYXkoY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRv
Z2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUoY29udGV4dElk
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjcnViYmluZyhjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY3J1YmJpbmcoY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWVr
VG9UaW1lKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OkZhc3RTZWVrKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0Zvcndh
cmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpi
ZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3
YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQoreworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2Nhbm5p
bmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlUGljdHVyZUluUGljdHVy
ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZU11dGVk
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQor
eworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2V0
TXV0ZWQoY29udGV4dElkLCBtdXRlZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKQor
eworICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpIYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVxdWVzdChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOworfQorCitQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKQoreworICAgIGlmICgh
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkKTsKKyAgICByZXR1cm4gJmludGVyZmFjZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmMxNzcyNTZlNGFlZTgxZWQ0NmNjYWQ2ZmRlMjYwOWIzZWJjNDk2ZjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkuaApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVs
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWMuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQordHlwZWRlZiBXZWJDb3Jl
OjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZTsKKyNlbHNlCit0eXBlZGVmIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYyBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OworY2xhc3Mg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQgZmluYWwKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbAor
ICAgICwgcHVibGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyICB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0
ZShWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dChtYW5hZ2VyLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKSk7CisgICAgfQor
ICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpOworCisgICAgdm9pZCBp
bnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisKKyAgICBQbGF0Zm9ybVZpZXcg
KmxheWVySG9zdFZpZXcoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdFZpZXcuZ2V0KCk7IH0K
KyAgICB2b2lkIHNldExheWVySG9zdFZpZXcoUmV0YWluUHRyPFBsYXRmb3JtVmlldz4mJiBsYXll
ckhvc3RWaWV3KSB7IG1fbGF5ZXJIb3N0VmlldyA9IFdURk1vdmUobGF5ZXJIb3N0Vmlldyk7IH0K
KworcHJpdmF0ZToKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5JiwgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiwgdWludDY0X3Qp
OworCisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2b2lkIGFkZENsaWVudChXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVt
b3ZlQ2xpZW50KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFs
c2UpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0
UmVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZp
dHkpIG92ZXJyaWRlOworICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CisgICAg
Ym9vbCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQorICAgIFdlYkNvcmU6OkZsb2F0U2l6
ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvRGltZW5z
aW9uczsgfQorCisgICAgLy8gVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICB2b2lk
IGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2Ny
ZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOworCisgICAgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dD4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsK
KyAgICBSZXRhaW5QdHI8UGxhdGZvcm1WaWV3ICo+IG1fbGF5ZXJIb3N0VmlldzsKKyAgICBIYXNo
U2V0PFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsKKyAgICBib29sIG1faGFzVmlk
ZW8geyBmYWxzZSB9OworfTsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDog
cHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCByZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgYm9vbCBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3Q7CisgICAgYm9vbCBtYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0OworICAgIHZvaWQgYXBw
bGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0Owor
CisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisg
ICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OworCisgICAgZXhwbGljaXQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQ
cm94eSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOworICAgIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4s
IFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFBsYXRmb3Jt
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKwor
ICAgIC8vIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIHZvaWQgc2V0
dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXll
cklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1Nj
YWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7CisgICAgdm9pZCBzZXRIYXNWaWRl
byh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOworICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25z
KHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAgdm9p
ZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGV4aXRGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOwor
ICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJs
ZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KTsKKyNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0
aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisjZW5kaWYKKworICAgIC8vIE1l
c3NhZ2VzIHRvIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyAgICB2b2lkIHJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKTsK
KyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7CisgICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OlZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOworICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1
aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7CisgICAgUmVm
PFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0
TWFwOworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAg
IEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7Cit9OworICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZmMzYjUwNDdlZjQ3YWJhMTk1
NzFlNzY0M2EwNzJlY2U4MjIwYWVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0wLDAgKzEsMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
I2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorbWVzc2FnZXMgLT4gVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5IHsKKyAgICBTZXRIYXNWaWRlbyh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaGFzVmlkZW8pCisgICAgU2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucykKKyAgICBTZXR1cEZ1bGxzY3JlZW5X
aXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIFdlYkNvcmU6
OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVl
bk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKKyAgICBFbnRlckZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQorICAgIEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCisgICAgQ2xlYW51cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKQorICAgIFByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KQorI2lm
IFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorICAgIEV4
aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1
bGxzY3JlZW5Nb2RlKQorI2VuZGlmCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lY2NiOWIyOTIxOTY4MjY4NjRmMDA5MTAwOGY5MzA4OTg4OGExOGEyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1tCkBAIC0wLDAgKzEsNTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKKwor
I2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIK
KyNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgi
CisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbXBvcnQg
PFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9NYWNoU2VuZFJp
Z2h0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWVyRW51bXMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Cisj
aW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNp
bXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIlVJS2l0
U1BJLmgiCisjZW5kaWYKKworQGludGVyZmFjZSBXS0xheWVySG9zdFZpZXcgOiBQbGF0Zm9ybVZp
ZXcKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIHVpbnQzMl90IGNvbnRleHRJRDsKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdLTGF5ZXJIb3N0VmlldworCisjaWYgUExBVEZPUk0oSU9T
KQorKyAoQ2xhc3MpbGF5ZXJDbGFzcyB7CisgICAgcmV0dXJuIFtDQUxheWVySG9zdCBjbGFzc107
Cit9CisjZWxzZQorLSAoQ0FMYXllciAqKW1ha2VCYWNraW5nTGF5ZXIKK3sKKyAgICByZXR1cm4g
W1tbQ0FMYXllckhvc3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKyNlbmRpZgorCist
ICh1aW50MzJfdCljb250ZXh0SUQgeworICAgIHJldHVybiBbW3NlbGYgbGF5ZXJIb3N0XSBjb250
ZXh0SWRdOworfQorCistICh2b2lkKXNldENvbnRleHRJRDoodWludDMyX3QpY29udGV4dElEIHsK
KyAgICBbW3NlbGYgbGF5ZXJIb3N0XSBzZXRDb250ZXh0SWQ6Y29udGV4dElEXTsKK30KKworLSAo
Q0FMYXllckhvc3QgKilsYXllckhvc3QgeworICAgIHJldHVybiAoQ0FMYXllckhvc3QgKilbc2Vs
ZiBsYXllcl07Cit9CisKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCisjaWYgUExBVEZPUk0oSU9TKSAmJiAhSEFWRShBVktJVCkKKworUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQoreworfQorCiti
b29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNo
b3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4oKQoreworCit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojph
cHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCit7CisKK30KKyNlbHNlCisKKyNwcmFnbWEgbWFy
ayAtIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAorCitWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkmIG1hbmFnZXIsIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNz
aW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikK
KyAgICAsIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwocGxheWJhY2tTZXNzaW9uTW9kZWwpCisgICAg
LCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xp
ZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1f
Y2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7CisgICAgaWYg
KG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobV9j
b250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKK30KKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3Qg
ZnJhbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRl
b0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6OlZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJHcmF2aXR5KG1fY29udGV4dElkLCBncmF2
aXR5KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRleHRJZCwgbW9kZSk7Cit9CisKK2Jvb2wgVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X21hbmFnZXIgPyBtX21hbmFnZXItPmlzVmlzaWJsZSgpIDogZmFsc2U7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQoreworICAgIGlm
IChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKG1fY29u
dGV4dElkKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVy
RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5k
aWRFbnRlckZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+ZGlkRXhpdEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4o
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlkQ2xlYW51cEZ1
bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShtX2NvbnRl
eHRJZCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQor
CitSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KHBhZ2UsIHBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSkpOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQorICAgIDogbV9wYWdl
KCZwYWdlKQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5KQoreworICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKK30KKworVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Ojp+VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCkKK3sKKyAgICBpZiAo
IW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIG1fcGFnZS0+
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIG1fcGFnZSA9IG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0
TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ+IG1vZGVsOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U+IGludGVyZmFjZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBs
ZTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICAgICAgW21vZGVsLT5s
YXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgICAgIG1vZGVsLT5zZXRM
YXllckhvc3RWaWV3KG51bGxwdHIpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigp
OworICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQorICAgICAgICBzdGQ6OmdldDwx
Pih0dXBsZSktPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKK30KKworYm9vbCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6
IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUp
LT5oYXNNb2RlKG1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1
dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKK3sKKyAgICBmb3Ig
KGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6
OmdldDwxPih0dXBsZSktPm1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
Citib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFu
Y2VkRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4
dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5pc1BsYXlp
bmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCit7Cisg
ICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKKyAgICAgICAgc3Rk
OjpnZXQ8MT4odHVwbGUpLT5hcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOworfQorCitWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0
SWQpCit7CisgICAgYXV0byYgcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS0+ZW5zdXJlTW9kZWwoY29udGV4dElkKTsKKyAgICBSZWY8VmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKTsKKyAgICBhdXRv
JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS0+ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgUmVmPFBsYXRmb3JtVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZTo6Y3JlYXRlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7CisgICAgbV9wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHktPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKworICAg
IGludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsKKyAgICBp
bnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7
CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGlu
dGVyZmFjZSkpOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJm
YWNlVHVwbGUmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250
ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCkpOworfQorCitQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQor
eworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4
dElkKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphZGRDbGllbnRG
b3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
Y2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQsIDEpOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0
X3QgY29udGV4dElkKQoreworICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250
ZXh0SWQpKTsKKworICAgIGludCBjbGllbnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250
ZXh0SWQpOworICAgIEFTU0VSVChjbGllbnRDb3VudCA+IDApOworICAgIGNsaWVudENvdW50LS07
CisKKyAgICBpZiAoY2xpZW50Q291bnQgPD0gMCkgeworICAgICAgICBtX3BsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS0+cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworICAgICAg
ICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKTsKKyAgICAgICAgbV9jb250ZXh0TWFw
LnJlbW92ZShjb250ZXh0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jbGll
bnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOworfQorCisjcHJhZ21hIG1hcmsg
TWVzc2FnZXMgZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElk
LCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxS
ZWN0LCBmbG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1Bp
Y3R1cmVJblBpY3R1cmUpCit7CisgICAgQVNTRVJUKHZpZGVvTGF5ZXJJRCk7CisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgUmVmUHRyPFBsYXRmb3Jt
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisKKyAgICBzdGQ6OnRpZShtb2Rl
bCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAg
YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworCisgICAgUmV0YWluUHRyPFdLTGF5ZXJI
b3N0Vmlldz4gdmlldyA9IHN0YXRpY19jYXN0PFdLTGF5ZXJIb3N0Vmlldyo+KG1vZGVsLT5sYXll
ckhvc3RWaWV3KCkpOworICAgIGlmICghdmlldykgeworICAgICAgICB2aWV3ID0gYWRvcHROUyhb
W1dLTGF5ZXJIb3N0VmlldyBhbGxvY10gaW5pdF0pOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAg
ICAgW3ZpZXcgc2V0V2FudHNMYXllcjpZRVNdOworI2VuZGlmCisgICAgICAgIG1vZGVsLT5zZXRM
YXllckhvc3RWaWV3KHZpZXcpOworICAgIH0KKyAgICBbdmlldyBzZXRDb250ZXh0SUQ6dmlkZW9M
YXllcklEXTsKKyAgICBpZiAoaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yICE9IDEpIHsKKyAgICAg
ICAgLy8gSW52ZXJ0IHRoZSBzY2FsZSB0cmFuc2Zvcm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3Mg
dG8gZml4IDxyZGFyOi8vcHJvYmxlbS8xODMxNjU0Mj4uCisgICAgICAgIGZsb2F0IGludmVyc2VT
Y2FsZSA9IDEgLyBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgIFtbdmlldyBsYXll
cl0gc2V0U3VibGF5ZXJUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2Nh
bGUsIGludmVyc2VTY2FsZSwgMSldOworICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBV
SVZpZXcgKnBhcmVudFZpZXcgPSBkb3duY2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5PigqbV9wYWdlLT5kcmF3aW5nQXJlYSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExh
eWVyKCk7CisgICAgaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3RW
aWV3KCksIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxv
d3NQaWN0dXJlSW5QaWN0dXJlKTsKKyNlbHNlCisgICAgSW50UmVjdCBpbml0aWFsV2luZG93UmVj
dDsKKyAgICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3coaW5pdGlhbFJlY3QsIGluaXRpYWxXaW5k
b3dSZWN0KTsKKyAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9z
dFZpZXcoKSwgaW5pdGlhbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSwgdmlk
ZW9GdWxsc2NyZWVuTW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7CisjZW5kaWYKKyAgICBt
X3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9w
YWdlLCB2aWRlb0Z1bGxzY3JlZW5Nb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQor
eworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRl
byk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVu
c2lvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9u
cykKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lvbnNDaGFu
Z2VkKHZpZGVvRGltZW5zaW9ucyk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8mIGlu
dGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOworICAgIGludGVyZmFjZS5lbnRl
ckZ1bGxzY3JlZW4oKTsKKworICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGluIGEgZ2l2
ZW4gZnVsbCBzY3JlZW4gbW9kZSBhdCBhIHRpbWU6CisgICAgZm9yIChhdXRvJiBjb250ZXh0UGFp
ciA6IG1fY29udGV4dE1hcCkgeworICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9IGNvbnRl
eHRQYWlyLmtleTsKKyAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJZCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNlID0gc3Rk
OjpnZXQ8MT4oY29udGV4dFBhaXIudmFsdWUpOworICAgICAgICBpZiAob3RoZXJJbnRlcmZhY2Ut
Pmhhc01vZGUoaW50ZXJmYWNlLm1vZGUoKSkpCisgICAgICAgICAgICBvdGhlckludGVyZmFjZS0+
cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIH0KK30KKwordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVjdCk7CisjZWxz
ZQorICAgIEludFJlY3QgZmluYWxXaW5kb3dSZWN0OworICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dp
bmRvdyhmaW5hbFJlY3QsIGZpbmFsV2luZG93UmVjdCk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3Jt
V2luZG93KCkpOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpl
eGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElkLCBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0
TW9kZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNjcmVlbldp
dGhvdXRBbmltYXRpb25Ub01vZGUodGFyZ2V0TW9kZSk7Cit9CisjZW5kaWYKKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVwRnVsbHNjcmVl
bigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1Jl
dHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJ
bnRSZWN0IGlubGluZVJlY3QpCit7CisgICAgbV9wYWdlLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVjdCk7CisjZWxz
ZQorICAgIEludFJlY3QgaW5saW5lV2luZG93UmVjdDsKKyAgICBtX3BhZ2UtPnJvb3RWaWV3VG9X
aW5kb3coaW5saW5lUmVjdCwgaW5saW5lV2luZG93UmVjdCk7CisgICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlubGluZVdpbmRv
d1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7CisjZW5kaWYKK30KKworI3ByYWdtYSBt
YXJrIE1lc3NhZ2VzIHRvIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKGNvbnRleHRJ
ZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQo
KSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7
CisgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7
CisKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKGNvbnRleHRJZCk7CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07CisgICAgW21vZGVs
LT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgbW9kZWwtPnNldExh
eWVySG9zdFZpZXcobnVsbHB0cik7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKworICAgIGludGVyZmFjZS0+c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0
KGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRW
aWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJh
bWUpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICBtYWNoX3BvcnRfbmFtZV90IGZlbmNlUG9ydCA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVEcmF3
aW5nQWNyb3NzUHJvY2Vzc2VzXTsKKyNlbHNlCisgICAgICAgIE1hY2hTZW5kUmlnaHQgZmVuY2VT
ZW5kUmlnaHQ7CisgICAgICAgIGlmIChEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IG1f
cGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgICAgIGZlbmNlU2VuZFJpZ2h0ID0gZHJhd2lu
Z0FyZWEtPmNyZWF0ZUZlbmNlKCk7CisgICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0
ID0gZmVuY2VTZW5kUmlnaHQubGVha1NlbmRSaWdodCgpOworI2VuZGlmCisKKyAgICAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVy
RnJhbWVGZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwg
TUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgfQorfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHko
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5IGdyYXZpdHkpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElkLCAodW5zaWdu
ZWQpZ3Jhdml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
Cit7CisgICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJlRGlk
Q2hhbmdlKG1fcGFnZSwgbW9kZSAmIE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChjb250ZXh0SWQsIG1vZGUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgp
ICYmIG1fcGFnZS0+aXNJbldpbmRvdygpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3Jl
ZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlzVmlld1Zpc2libGUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNmMzM2JlNjVhOThjMjE5YzBkYjkxZDAzMjg0Mjk1ZWNlNWY1NDczZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaAorKysg
L2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFT
ZWxlY3Rpb25PcHRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9S
TShJT1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi10eXBlZGVmIFdlYkNvcmU6Oldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlOwotI2Vsc2UKLXR5cGVkZWYgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjIFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dCBmaW5hbDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0PiwgcHVibGljIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsICB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IGNyZWF0
ZShXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRl
eHRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KCkgeyB9Ci0KLSAgICB2b2lkIGludmFs
aWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpZmluYWw7Ci0KLSAgICB2b2lkIGR1cmF0aW9uQ2hh
bmdlZChkb3VibGUpOwotICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSk7Ci0gICAg
dm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7Ci0gICAgdm9pZCBwbGF5YmFja1N0YXJ0
ZWRUaW1lQ2hhbmdlZChkb3VibGUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlp
bmcsIGZsb2F0IHBsYXliYWNrUmF0ZSk7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQo
V2ViQ29yZTo6VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2
ZVVwZGF0ZUludGVydmFsKTsKLSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9v
bCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3QgaW5k
ZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qg
aW5kZXgpOwotICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hh
bmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCk7Ci0KLXBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsK
LQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICAgICAgOiBtX21h
bmFnZXIoJm1hbmFnZXIpCi0gICAgICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotICAgIHsK
LSAgICB9Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAotICAgIHZvaWQgcGxheSgp
IGZpbmFsOwotICAgIHZvaWQgcGF1c2UoKSBmaW5hbDsKLSAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0
ZSgpIGZpbmFsOwotICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKLSAgICB2b2lkIGVu
ZFNjcnViYmluZygpIGZpbmFsOwotICAgIHZvaWQgc2Vla1RvVGltZShkb3VibGUpIGZpbmFsOwot
ICAgIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZpbmFsOwotICAgIHZvaWQgYmVnaW5TY2Fu
bmluZ0ZvcndhcmQoKSBmaW5hbDsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZp
bmFsOwotICAgIHZvaWQgZW5kU2Nhbm5pbmcoKSBmaW5hbDsKLSAgICB2b2lkIHNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24odWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlh
T3B0aW9uKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUo
KSBmaW5hbDsKLSAgICB2b2lkIHRvZ2dsZU11dGVkKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRNdXRl
ZChib29sKSBmaW5hbDsKLQotICAgIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wbGF5YmFja1N0YXJ0ZWRUaW1lOyB9Ci0gICAgZG91YmxlIGR1cmF0
aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIGRvdWJsZSBjdXJy
ZW50VGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY3VycmVudFRpbWU7IH0KLSAgICBkb3Vi
bGUgYnVmZmVyZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9idWZmZXJlZFRpbWU7IH0K
LSAgICBib29sIGlzUGxheWluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9
Ci0gICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNTY3J1YmJp
bmc7IH0KLSAgICBmbG9hdCBwbGF5YmFja1JhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Bs
YXliYWNrUmF0ZTsgfQotICAgIFJlZjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdl
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vla2FibGVSYW5nZXMuY29weVJlZigpOyB9Ci0g
ICAgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWU7IH0KLSAgICBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9saXZlVXBkYXRlSW50
ZXJ2YWw7IH0KLSAgICBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fY2FuUGxheUZhc3RSZXZlcnNlOyB9Ci0gICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7IH0KLSAgICB1aW50NjRfdCBhdWRp
b01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXVkaW9NZWRpYVNl
bGVjdGVkSW5kZXg7IH0KLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+
IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7IH0KLSAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFT
ZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rl
ZEluZGV4OyB9Ci0gICAgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQ7IH0KLSAgICBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlOyB9Ci0gICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFt
ZTsgfQotICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOyB9Ci0gICAgYm9vbCBp
c011dGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRlZDsgfQotCi0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5KiBtX21hbmFnZXI7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0
SWQ7Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+
IG1fY2xpZW50czsKLSAgICBkb3VibGUgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lIHsgMCB9OwotICAg
IGJvb2wgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgeyBmYWxzZSB9OwotICAgIGRv
dWJsZSBtX2R1cmF0aW9uIHsgMCB9OwotICAgIGRvdWJsZSBtX2N1cnJlbnRUaW1lIHsgMCB9Owot
ICAgIGRvdWJsZSBtX2J1ZmZlcmVkVGltZSB7IDAgfTsKLSAgICBib29sIG1faXNQbGF5aW5nIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faXNTY3J1YmJpbmcgeyBmYWxzZSB9OwotICAgIGZsb2F0IG1f
cGxheWJhY2tSYXRlIHsgMCB9OwotICAgIFJlZjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBtX3NlZWth
YmxlUmFuZ2VzIHsgV2ViQ29yZTo6VGltZVJhbmdlczo6Y3JlYXRlKCkgfTsKLSAgICBkb3VibGUg
bV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lIHsgMCB9OwotICAgIGRvdWJsZSBt
X2xpdmVVcGRhdGVJbnRlcnZhbCB7IDAgfTsKLSAgICBib29sIG1fY2FuUGxheUZhc3RSZXZlcnNl
IHsgZmFsc2UgfTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1f
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAgdWludDY0X3QgbV9hdWRpb01lZGlhU2Vs
ZWN0ZWRJbmRleCB7IDAgfTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+IG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczsKLSAgICB1aW50NjRfdCBtX2xlZ2li
bGVNZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07Ci0gICAgYm9vbCBtX2V4dGVybmFsUGxheWJhY2tF
bmFibGVkIHsgZmFsc2UgfTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUgbV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB7IFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSB9OwotICAgIFN0cmluZyBtX2V4dGVybmFs
UGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOwotICAgIGJvb2wgbV93aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKLX07
Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdl
UmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQot
ICAgIFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBjb250cm9sc01hbmFnZXJJ
bnRlcmZhY2UoKTsKLSAgICB2b2lkIHJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCk7Ci0KLXBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsK
LSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OwotCi0gICAg
ZXhwbGljaXQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYpOwot
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
JikgZmluYWw7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVh
dGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJm
YWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBlbnN1
cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNv
bnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRl
eHQodWludDY0X3QgY29udGV4dElkKTsKLQotICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcgotICAgIHZvaWQgc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldp
dGhJRCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcigpOwotICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
Y3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSk7Ci0gICAgdm9pZCBidWZmZXJlZFRpbWVDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7Ci0gICAgdm9pZCBz
ZWVrYWJsZVJhbmdlc1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3Rk
OjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwg
ZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSk7Ci0gICAgdm9pZCBhdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlv
bkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
OwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBleHRlcm5hbFBsYXli
YWNrUHJvcGVydGllc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVp
bnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLSAgICB2b2lk
IHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wpOwotICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91
YmxlIGR1cmF0aW9uKTsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpOwotICAgIHZvaWQgcmF0
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUp
OwotICAgIHZvaWQgaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90LCBT
dHJpbmcpIGNvbnN0OwotICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBtdXRlZCk7Ci0KLSAgICAvLyBNZXNzYWdlcyB0byBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyCi0gICAgdm9pZCBwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBwYXVzZSh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwot
ICAgIHZvaWQgZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZWVr
VG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOwotICAgIHZvaWQgZmFzdFNl
ZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9pZCBiZWdpblNjYW5u
aW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0Jh
Y2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBlbmRTY2FubmluZyh1aW50NjRf
dCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBj
b250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIHRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2dsZU11
dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZXRNdXRlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wpOwotCi0gICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7Ci0gICAgSGFzaE1hcDx1
aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90
IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OwotICAgIEhhc2hDb3VudGVkU2V0PHVp
bnQ2NF90PiBtX2NsaWVudENvdW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjM2YTgzMjczZWI4ZTE0
NGE2YTEwMzUwNTU3ODljMjNlMDkxMjdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICsw
LDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IHsK
LSAgICBSZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQotICAgIEN1cnJlbnRUaW1l
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhv
c3RUaW1lKQotICAgIEJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgYnVmZmVyZWRUaW1lKQotICAgIFNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRv
dWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotICAgIENh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQot
ICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKLSAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4g
b3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLSAgICBBdWRpb01lZGlhU2VsZWN0aW9u
SW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
LSAgICBMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotICAgIEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVz
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0
VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCi0gICAgV2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKLSAg
ICBEdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi0g
ICAgUGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
cGxheWJhY2tTdGFydGVkVGltZSkKLSAgICBSYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKLSAgICBNdXRlZENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIG11dGVkKTsKLSAgICBTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
V2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBDbGVhclBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyKCkKLQotICAgIEhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBj
b250ZXh0SWQsIFN0cmluZyBpZCkKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjlkMzNmOWZjMDg5M2E4MjA5N2E1
ZWVjOGY4NmY1YWE4NjUzY2ZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJXZWJQYWdlUHJv
eHkuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2lt
cG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQg
IldlYlByb2Nlc3NQcm94eS5oIgotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI3ByYWdt
YSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjphZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7Ci0gICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkp
OwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5KCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPnBsYXkobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6cGF1c2UoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAg
IG1fbWFuYWdlci0+cGF1c2UobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCi17
Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmluZyht
X2NvbnRleHRJZCk7Ci0KLSAgICBtX2lzU2NydWJiaW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZygpCi17Ci0gICAgaWYgKG1f
bWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY3J1YmJpbmcobV9jb250ZXh0SWQpOwot
Ci0gICAgbV9pc1NjcnViYmluZyA9IGZhbHNlOwotICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5l
ZWRzVXBkYXRlID0gaXNQbGF5aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21hbmFnZXIp
Ci0gICAgICAgIG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGlt
ZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1f
Y29udGV4dElkLCB0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgp
Ci17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5n
QmFja3dhcmQobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6ZW5kU2Nhbm5pbmcoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBvcHRp
b25JZCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRf
dCBvcHRpb25JZCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSgp
Ci17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnRvZ2dsZU11dGVkKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBt
X21hbmFnZXItPnRvZ2dsZU11dGVkKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1f
bWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5zZXRNdXRlZChtX2NvbnRleHRJZCwgbXV0ZWQp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheWJhY2tTdGFy
dGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCi17Ci0gICAgbV9wbGF5
YmFja1N0YXJ0ZWRUaW1lID0gcGxheWJhY2tTdGFydGVkVGltZTsKLSAgICBtX3BsYXliYWNrU3Rh
cnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGZhbHNlOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBt
X2R1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMp
Ci0gICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUg
Y3VycmVudFRpbWUpCi17Ci0gICAgbV9jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lOwotICAgIGF1
dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1l
XTsKLSAgICBpZiAobV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUpCi0gICAgICAgIHBs
YXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lKTsKLQotICAgIGZvciAoYXV0byog
Y2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdlZChj
dXJyZW50VGltZSwgYW5jaG9yVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0g
ICAgbV9idWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWU7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQg
OiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+YnVmZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJl
ZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cmF0ZUNo
YW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBtX2lzUGxh
eWluZyA9IGlzUGxheWluZzsKLSAgICBtX3BsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTsKLSAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5yYXRlQ2hh
bmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6VGltZVJhbmdl
cyYgc2Vla2FibGVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVw
ZGF0ZUludGVydmFsKQotewotICAgIG1fc2Vla2FibGVSYW5nZXMgPSBzZWVrYWJsZVJhbmdlczsK
LSAgICBtX3NlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSBsYXN0TW9kaWZpZWRU
aW1lOwotICAgIG1fbGl2ZVVwZGF0ZUludGVydmFsID0gbGl2ZVVwZGF0ZUludGVydmFsOwotICAg
IGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChzZWVrYWJsZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0
ZUludGVydmFsKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNh
blBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCi17Ci0gICAg
bV9jYW5QbGF5RmFzdFJldmVyc2UgPSBjYW5QbGF5RmFzdFJldmVyc2U7Ci0gICAgZm9yIChhdXRv
KiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1
aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX2F1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAgbV9hdWRpb01l
ZGlhU2VsZWN0ZWRJbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OwotICAgIGZvciAoYXV0
byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucywgYXVkaW9NZWRpYVNl
bGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOwotICAgIG1fbGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7Ci0KLSAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBsZWdpYmxl
TWVkaWFTZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKLXsKLSAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsK
LQotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX2xlZ2libGVNZWRpYVNl
bGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4OwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBt
X2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5n
JiBsb2NhbGl6ZWROYW1lKQotewotICAgIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgPSBlbmFi
bGVkOwotICAgIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgPSB0eXBlOwotICAgIG1fZXh0
ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUgPSBsb2NhbGl6ZWROYW1lOwotCi0gICAg
Zm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkTmFtZSk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQoYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKLXsKLSAgICBt
X3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQ7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVu
dC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQotewotICAgIG1fbXV0ZWQgPSBtdXRlZDsKLSAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5tdXRlZENoYW5n
ZWQobXV0ZWQpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkKLQotUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQotewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KHBhZ2Up
KTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQotICAgIDogbV9wYWdlKCZwYWdlKQot
ewotICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFn
ZS0+cGFnZUlEKCksICp0aGlzKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Ojp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCkKLXsKLSAgICBpZiAoIW1fcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQotewotICAgIG1fcGFnZS0+cHJvY2Vz
cygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAg
IG1fcGFnZSA9IG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFw
LnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2U+IGludGVyZmFjZTsKLSAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0
dXBsZTsKLQotICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBt
X2NvbnRleHRNYXAuY2xlYXIoKTsKLSAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwotfQotCi1X
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4g
bW9kZWwgPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29u
dGV4dElkKTsKLSAgICBSZWY8UGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+IGlu
dGVyZmFjZSA9IFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOjpjcmVhdGUobW9k
ZWwpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92
ZShpbnRlcmZhY2UpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2Rl
bEludGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOwot
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0dXJu
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dCYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17
Ci0gICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5pbnZhbGlk
YXRlKCk7Ci0gICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotfQotCi0jcHJhZ21h
IG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
V2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYg
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZW1vdmVD
bGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLQotICAgIG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOwotICAgIGVuc3VyZUludGVyZmFjZSht
X2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkuZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAg
YWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0KLSAgICBt
X3BhZ2UtPnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShjb250ZXh0SWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCk7Ci0gICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOwotICAgIG1fcGFn
ZS0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5yZXNldE1lZGlhU3Rh
dGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmN1cnJlbnRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGhvc3RUaW1lKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY3VycmVudFRpbWVDaGFu
Z2VkKGN1cnJlbnRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVy
ZWRUaW1lKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYnVmZmVyZWRUaW1lQ2hhbmdl
ZChidWZmZXJlZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6c2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9y
PHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRp
bWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi17Ci0gICAgUmVmPFRpbWVSYW5nZXM+IHRp
bWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJh
bmdlIDogcmFuZ2VzKSB7Ci0gICAgICAgIEFTU0VSVChpc2Zpbml0ZShyYW5nZS5maXJzdCkpOwot
ICAgICAgICBBU1NFUlQoaXNmaW5pdGUocmFuZ2Uuc2Vjb25kKSk7Ci0gICAgICAgIEFTU0VSVChy
YW5nZS5zZWNvbmQgPj0gcmFuZ2UuZmlyc3QpOwotICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFu
Z2UuZmlyc3QsIHJhbmdlLnNlY29uZCk7Ci0gICAgfQotCi0gICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5zZWVrYWJsZVJhbmdlc0NoYW5nZWQodGltZVJhbmdlcywgbGFzdE1vZGlmaWVkVGltZSwg
bGl2ZVVwZGF0ZUludGVydmFsKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IHZhbHVlKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuY2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5k
ZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5hdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZElu
ZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmV4dGVybmFs
UGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxl
ZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0g
ICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5
cGUgPSBzdGF0aWNfY2FzdDxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGU+KHRhcmdldFR5cGUpOwotICAgIEFTU0VSVCh0eXBlID09IFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQgfHwgdHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbDo6VGFyZ2V0VHlwZU5vbmUpOwotCi0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5leHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OndpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQp
Ci17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQoZGlzYWJsZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLXsK
LSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm11dGVkQ2hhbmdlZChtdXRlZCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpkdXJhdGlvbkNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmF0ZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCi17Ci0gICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5yYXRlQ2hhbmdlZChpc1BsYXlpbmcsIHJhdGUpOwotfQot
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpoYW5kbGVDb250cm9sbGVk
RWxlbWVudElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJpbmcgaWRlbnRpZmllcikg
Y29uc3QKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKGNvbnRleHRJZCA9PSBtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgbV9wYWdlLT5oYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVzcG9uc2UoaWRlbnRpZmllcik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0SWQpOwotICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsKLSNlbmRpZgotfQotCi0KLSNw
cmFnbWEgbWFyayBNZXNzYWdlcyB0byBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkK
LXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OlBsYXkoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQYXVzZShj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dn
bGVQbGF5U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250
ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpCZWdpblNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpFbmRTY3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQo
KSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrVG9UaW1l
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwg
dGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkZh
c3RTZWVrKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0
X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoY29udGV4dElkKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpiZWdp
blNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3
YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQotewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5k
U2Nhbm5pbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRl
eHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGNvbnRleHRJ
ZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElk
KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6VG9nZ2xlUGljdHVyZUluUGljdHVyZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnRvZ2dsZU11dGVkKHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZU11dGVkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0TXV0ZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2V0TXV0ZWQoY29udGV4dElkLCBtdXRl
ZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKQotewotICAgIGlmIChtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCht
X2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi1QbGF0
Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Ojpjb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKQotewotICAgIGlmICghbV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYg
aW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsK
LSAgICByZXR1cm4gJmludGVyZmFjZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlZTA0MGNhMDUxMTQ1M2NhNzA5MDRhNWE0ZGNkZWZlOWQ5ZWY1
MjFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykK
LXR5cGVkZWYgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgUGxhdGZv
cm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0jZWxzZQotdHlwZWRlZiBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2U7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQ
cm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKLWNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGZpbmFsCi0g
ICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+Ci0g
ICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciAgewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBjcmVhdGUoV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiBtYW5hZ2VyLCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQmIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQobWFuYWdlciwgcGxheWJhY2tTZXNzaW9uTW9kZWwsIGNvbnRleHRJZCkpOwotICAg
IH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKTsKLQotICAg
IHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi0gICAgUGxhdGZv
cm1WaWV3ICpsYXllckhvc3RWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9sYXllckhvc3RWaWV3Lmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRMYXllckhvc3RWaWV3KFJldGFpblB0cjxQbGF0Zm9ybVZpZXc+
JiYgbGF5ZXJIb3N0VmlldykgeyBtX2xheWVySG9zdFZpZXcgPSBXVEZNb3ZlKGxheWVySG9zdFZp
ZXcpOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dCYsIHVpbnQ2NF90KTsKLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0gICAg
dm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9v
bCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZpZGVv
TGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKLSAgICB2b2lkIGZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87
IH0KLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0KLQotICAgIC8vIFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyCi0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlk
RXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVy
cmlkZTsKLQotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOwot
ICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1fcGxheWJhY2tTZXNzaW9u
TW9kZWw7Ci0gICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3Jt
VmlldyAqPiBtX2xheWVySG9zdFZpZXc7Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUg
bV92aWRlb0RpbWVuc2lvbnM7Ci0gICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKLX07Ci0K
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVk
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7
Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbigpOwotICAgIGJvb2wgaGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0OwotICAgIGJvb2wgbWF5QXV0b21hdGlj
YWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGFwcGxpY2F0
aW9uRGlkQmVjb21lQWN0aXZlKCk7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLQotI2lm
IFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIGJv
b2wgaXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0OwotI2VuZGlmCi0K
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDsKLQotICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdl
UHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKLSAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwot
Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ+LCBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+PiBNb2Rl
bEludGVyZmFjZVR1cGxlOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsK
LSAgICBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIKLSAgICB2b2lkIHNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJl
Y3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOwot
ICAgIHZvaWQgc2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sKTsKLSAgICB2b2lk
IHNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYpOwotICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6Oklu
dFJlY3QgZmluYWxSZWN0KTsKLSAgICB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0gICAgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29u
dGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCk7Ci0jaWYg
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgdm9p
ZCBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwot
I2VuZGlmCi0KLSAgICAvLyBNZXNzYWdlcyB0byBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCi0g
ICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEgPSBmYWxzZSk7Ci0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCk7Ci0gICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
LSAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCBzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9h
dFJlY3QpOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KTsKLSAgICB2
b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKTsKLQotICAgIFdlYlBh
Z2VQcm94eSogbV9wYWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwotICAgIEhhc2hNYXA8dWludDY0X3QsIE1v
ZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCB7IDAgfTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1fY2xp
ZW50Q291bnRzOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyODE1ZDY3MjM4ZTlkM2FmZmNmMDFm
NGY0ZGJkNDA1MjQwODQ0Y2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAot
IyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAot
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgKFBMQVRGT1JNKElP
UykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkgewotICAgIFNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykK
LSAgICBTZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9h
dFNpemUgdmlkZW9EaW1lbnNpb25zKQotICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRf
dCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0
aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBh
bGxvd3NQaWN0dXJlSW5QaWN0dXJlKQotICAgIEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCi0gICAgRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJ
bnRSZWN0IGZpbmFsUmVjdCkKLSAgICBDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCi0gICAgUHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCi0jaWYgUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgRXhpdEZ1bGxzY3JlZW5X
aXRob3V0QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUp
Ci0jZW5kaWYKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTI5YWQ5YTE0MWQ0MTZiMWI5YmVkMmUzMzdhZTZhYWUx
ZGFlMWM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDUyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIK
LQotI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQVBJVUlDbGllbnQu
aCIKLSNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5o
IgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCi0jaW1wb3J0ICJX
ZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNz
YWdlcy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMu
aCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9NYWNoU2VuZFJpZ2h0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWVyRW51bXMuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8V2ViQ29yZS9UaW1l
UmFuZ2VzLmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotI2lmIFBMQVRG
T1JNKElPUykKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKLSNp
bXBvcnQgIlVJS2l0U1BJLmgiCi0jZW5kaWYKLQotQGludGVyZmFjZSBXS0xheWVySG9zdFZpZXcg
OiBQbGF0Zm9ybVZpZXcKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIHVpbnQzMl90IGNv
bnRleHRJRDsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLTGF5ZXJIb3N0VmlldwotCi0jaWYg
UExBVEZPUk0oSU9TKQotKyAoQ2xhc3MpbGF5ZXJDbGFzcyB7Ci0gICAgcmV0dXJuIFtDQUxheWVy
SG9zdCBjbGFzc107Ci19Ci0jZWxzZQotLSAoQ0FMYXllciAqKW1ha2VCYWNraW5nTGF5ZXIKLXsK
LSAgICByZXR1cm4gW1tbQ0FMYXllckhvc3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLX0K
LSNlbmRpZgotCi0tICh1aW50MzJfdCljb250ZXh0SUQgewotICAgIHJldHVybiBbW3NlbGYgbGF5
ZXJIb3N0XSBjb250ZXh0SWRdOwotfQotCi0tICh2b2lkKXNldENvbnRleHRJRDoodWludDMyX3Qp
Y29udGV4dElEIHsKLSAgICBbW3NlbGYgbGF5ZXJIb3N0XSBzZXRDb250ZXh0SWQ6Y29udGV4dElE
XTsKLX0KLQotLSAoQ0FMYXllckhvc3QgKilsYXllckhvc3QgewotICAgIHJldHVybiAoQ0FMYXll
ckhvc3QgKilbc2VsZiBsYXllcl07Ci19Ci0KLUBlbmQKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiAhSEFWRShB
VktJVCkKLQotUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JikKLXsKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omlu
dmFsaWRhdGUoKQotewotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25z
dAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQotewotCi19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2
ZSgpCi17Ci0KLX0KLSNlbHNlCi0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dAotCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFn
ZXIsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJhY2tTZXNzaW9uTW9kZWws
IHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICAsIG1f
cGxheWJhY2tTZXNzaW9uTW9kZWwocGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgLCBtX2NvbnRl
eHRJZChjb250ZXh0SWQpCi17Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
bGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7Ci0gICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkp
OwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEp
Ci17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yZXF1ZXN0RnVsbHNj
cmVlbk1vZGUobV9jb250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJD
b3JlOjpGbG9hdFJlY3QgZnJhbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5zZXRWaWRlb0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKLXsK
LSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJHcmF2
aXR5KG1fY29udGV4dElkLCBncmF2aXR5KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRleHRJZCwg
bW9kZSk7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojppc1Zpc2li
bGUoKSBjb25zdAotewotICAgIHJldHVybiBtX21hbmFnZXIgPyBtX21hbmFnZXItPmlzVmlzaWJs
ZSgpIDogZmFsc2U7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpk
aWRTZXR1cEZ1bGxzY3JlZW4oKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgaWYg
KG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4obV9jb250
ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhp
dEZ1bGxzY3JlZW4oKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+
ZGlkRXhpdEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQotewotICAgIGlmIChtX21h
bmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9jb250ZXh0
SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShtX2NvbnRleHRJZCk7Ci19Ci0KLSNw
cmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQotCi1SZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KHBhZ2UsIHBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQotICAg
IDogbV9wYWdlKCZwYWdlKQotICAgICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KQotewotICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKLX0KLQotV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5KCkKLXsKLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludmFsaWRh
dGUoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRh
dGUoKQotewotICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci0KLSAgICBmb3Ig
KGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8UGxh
dGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLSAgICAgICAgc3Rk
Ojp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBsZTsKLQotICAgICAgICBpbnRlcmZhY2UtPmlu
dmFsaWRhdGUoKTsKLSAgICAgICAgW21vZGVsLT5sYXllckhvc3RWaWV3KCkgcmVtb3ZlRnJvbVN1
cGVydmlld107Ci0gICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOwotICAg
IH0KLQotICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0
TWFwLnZhbHVlcygpKQotICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPnJlcXVlc3RIaWRlQW5k
RXhpdEZ1bGxzY3JlZW4oKTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMo
KSkgewotICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93Vmlk
ZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9j
b250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPm1h
eUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi1ib29sIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigp
IGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkg
ewotICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5pc1BsYXlpbmdWaWRlb0luRW5oYW5j
ZWRGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCi17Ci0gICAgZm9yIChhdXRv
JiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKLSAgICAgICAgc3RkOjpnZXQ8MT4odHVw
bGUpLT5hcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17
Ci0gICAgYXV0byYgcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS0+ZW5zdXJlTW9kZWwoY29udGV4dElkKTsKLSAgICBSZWY8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKTsKLSAgICBhdXRv
JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS0+ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgUmVmPFBsYXRmb3JtV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZTo6Y3JlYXRlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7Ci0gICAgbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsK
LQotICAgIGludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgp
KTsKLSAgICBpbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZt
b2RlbC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwp
LCBXVEZNb3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVw
bGUoKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAg
ICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1v
ZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi1QbGF0Zm9ybVdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4o
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0
SWQsIDEpOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUrKzsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAg
IEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKLQotICAgIGludCBj
bGllbnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOwotICAgIEFTU0VSVChj
bGllbnRDb3VudCA+IDApOwotICAgIGNsaWVudENvdW50LS07Ci0KLSAgICBpZiAoY2xpZW50Q291
bnQgPD0gMCkgewotICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+cmVtb3Zl
Q2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotICAgICAgICBtX2NsaWVudENvdW50cy5yZW1v
dmUoY29udGV4dElkKTsKLSAgICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJ
ZCwgY2xpZW50Q291bnQpOwotfQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRl
b0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0
aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUp
Ci17Ci0gICAgQVNTRVJUKHZpZGVvTGF5ZXJJRCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7Ci0KLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJm
YWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgYWRkQ2xpZW50
Rm9yQ29udGV4dChjb250ZXh0SWQpOwotCi0gICAgUmV0YWluUHRyPFdLTGF5ZXJIb3N0Vmlldz4g
dmlldyA9IHN0YXRpY19jYXN0PFdLTGF5ZXJIb3N0Vmlldyo+KG1vZGVsLT5sYXllckhvc3RWaWV3
KCkpOwotICAgIGlmICghdmlldykgewotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLTGF5ZXJI
b3N0VmlldyBhbGxvY10gaW5pdF0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgW3ZpZXcg
c2V0V2FudHNMYXllcjpZRVNdOwotI2VuZGlmCi0gICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3RW
aWV3KHZpZXcpOwotICAgIH0KLSAgICBbdmlldyBzZXRDb250ZXh0SUQ6dmlkZW9MYXllcklEXTsK
LSAgICBpZiAoaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yICE9IDEpIHsKLSAgICAgICAgLy8gSW52
ZXJ0IHRoZSBzY2FsZSB0cmFuc2Zvcm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxy
ZGFyOi8vcHJvYmxlbS8xODMxNjU0Mj4uCi0gICAgICAgIGZsb2F0IGludmVyc2VTY2FsZSA9IDEg
LyBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3I7Ci0gICAgICAgIFtbdmlldyBsYXllcl0gc2V0U3Vi
bGF5ZXJUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVy
c2VTY2FsZSwgMSldOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBVSVZpZXcgKnBh
cmVudFZpZXcgPSBkb3duY2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqbV9w
YWdlLT5kcmF3aW5nQXJlYSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExheWVyKCk7Ci0g
ICAgaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3RWaWV3KCksIGlu
aXRpYWxSZWN0LCBwYXJlbnRWaWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0dXJl
SW5QaWN0dXJlKTsKLSNlbHNlCi0gICAgSW50UmVjdCBpbml0aWFsV2luZG93UmVjdDsKLSAgICBt
X3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3coaW5pdGlhbFJlY3QsIGluaXRpYWxXaW5kb3dSZWN0KTsK
LSAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwg
aW5pdGlhbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSwgdmlkZW9GdWxsc2Ny
ZWVuTW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7Ci0jZW5kaWYKLSAgICBtX3BhZ2UtPnVp
Q2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCB2aWRl
b0Z1bGxzY3JlZW5Nb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBp
Y3R1cmVJblBpY3R1cmUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6c2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQotewotICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmhhc1ZpZGVvQ2hhbmdlZChoYXNWaWRlbyk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lv
bnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykK
LXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS52aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KHZpZGVvRGltZW5zaW9ucyk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8mIGlu
dGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOwotICAgIGludGVyZmFjZS5lbnRl
ckZ1bGxzY3JlZW4oKTsKLQotICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGluIGEgZ2l2
ZW4gZnVsbCBzY3JlZW4gbW9kZSBhdCBhIHRpbWU6Ci0gICAgZm9yIChhdXRvJiBjb250ZXh0UGFp
ciA6IG1fY29udGV4dE1hcCkgewotICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9IGNvbnRl
eHRQYWlyLmtleTsKLSAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJZCkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNlID0gc3Rk
OjpnZXQ8MT4oY29udGV4dFBhaXIudmFsdWUpOwotICAgICAgICBpZiAob3RoZXJJbnRlcmZhY2Ut
Pmhhc01vZGUoaW50ZXJmYWNlLm1vZGUoKSkpCi0gICAgICAgICAgICBvdGhlckludGVyZmFjZS0+
cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVjdCk7Ci0j
ZWxzZQotICAgIEludFJlY3QgZmluYWxXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+cm9vdFZpZXdU
b1dpbmRvdyhmaW5hbFJlY3QsIGZpbmFsV2luZG93UmVjdCk7Ci0gICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRm
b3JtV2luZG93KCkpOwotI2VuZGlmCi19Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4
dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
dGFyZ2V0TW9kZSkKLXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNj
cmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodGFyZ2V0TW9kZSk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVw
RnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxl
LCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCi17Ci0gICAgbV9wYWdlLT5mdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBlbnN1cmVJbnRl
cmZhY2UoY29udGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5l
UmVjdCk7Ci0jZWxzZQotICAgIEludFJlY3QgaW5saW5lV2luZG93UmVjdDsKLSAgICBtX3BhZ2Ut
PnJvb3RWaWV3VG9XaW5kb3coaW5saW5lUmVjdCwgaW5saW5lV2luZG93UmVjdCk7Ci0gICAgZW5z
dXJlSW50ZXJmYWNlKGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUs
IGlubGluZVdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7Ci0jZW5kaWYKLX0K
LQotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQotewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKGNvbnRleHRJZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRp
ZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxzY3JlZW4o
Y29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpE
aWRFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBtX3Bh
Z2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50
ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZS0+
ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgUmVmUHRy
PFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7Ci0KLSAgICBz
dGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCk7Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07Ci0gICAgW21vZGVsLT5sYXllckhv
c3RWaWV3KCkgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgbW9kZWwtPnNldExheWVySG9zdFZp
ZXcobnVsbHB0cik7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLQotICAgIGludGVyZmFjZS0+c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRl
eHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRl
b0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUp
Ci17Ci0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBt
YWNoX3BvcnRfbmFtZV90IGZlbmNlUG9ydCA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVEcmF3aW5n
QWNyb3NzUHJvY2Vzc2VzXTsKLSNlbHNlCi0gICAgICAgIE1hY2hTZW5kUmlnaHQgZmVuY2VTZW5k
UmlnaHQ7Ci0gICAgICAgIGlmIChEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IG1fcGFn
ZS0+ZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgICAgIGZlbmNlU2VuZFJpZ2h0ID0gZHJhd2luZ0Fy
ZWEtPmNyZWF0ZUZlbmNlKCk7Ci0gICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0g
ZmVuY2VTZW5kUmlnaHQubGVha1NlbmRSaWdodCgpOwotI2VuZGlmCi0KLSAgICAgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVy
RnJhbWVGZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwg
TUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZp
dHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5IGdyYXZpdHkpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElk
LCAodW5zaWduZWQpZ3Jhdml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUpCi17Ci0gICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJl
SW5QaWN0dXJlRGlkQ2hhbmdlKG1fcGFnZSwgbW9kZSAmIE1lZGlhUGxheWVyRW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChjb250
ZXh0SWQsIG1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFn
ZS0+aXNWaWV3VmlzaWJsZSgpICYmIG1fcGFnZS0+aXNJbldpbmRvdygpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2Ut
PmlzVmlld1Zpc2libGUoKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIGlz
Vmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotI2VuZGlmCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQppbmRleCA3ZjFlOTg1OTg2ZTUzNThjNDU0OGNh
NTk5M2VhYTYzZWMxYmE5YzAzLi45YWVkZTcwYWUxNzEzN2ZhYTEyM2NiNTBlOGU2Mzg0OWE1ZTIy
ZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpA
QCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiUGFnZUNs
aWVudEltcGwuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgorI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVPYmplY3RSZWdpc3RyeS5oIgogI2ltcG9ydCAi
UmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oIgpAQCAtNjIsNyArNjMsNiBAQAogI2ltcG9y
dCAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgogI2lt
cG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNz
UHJveHkuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKQEAg
LTExNzAsOCArMTE3MCw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZU1lZGlhVG91Y2hCYXIo
KQogICAgICAgICBbbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDYW5Ub2dnbGVQaWN0dXJl
SW5QaWN0dXJlOllFU107CiAgICAgfQogCi0gICAgaWYgKFBsYXRmb3JtV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKiBpbnRlcmZhY2UgPSBtX3BhZ2UtPnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIo
KS0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkpCi0gICAgICAgIFttX3BsYXliYWNrQ29udHJv
bHNNYW5hZ2VyIHNldFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzppbnRlcmZhY2VdOwor
ICAgIGlmIChQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogaW50ZXJmYWNlID0gbV9w
YWdlLT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCktPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgp
KQorICAgICAgICBbbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6aW50ZXJmYWNlXTsKIAogICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBz
ZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdl
dCgpXTsKICAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJv
bHNDb250cm9sbGVyOm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCldOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOWZiM2YyZjhiMjA3ZGVjOWM1MWVk
NzZjNTc0YWQ4NDY3MmI4YjEyNC4uYzNmZWUxZWQ3ZTYxMjMyZTdiYTBkNTZlMTc2ZmM2M2ZmZjE1
OTQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNTIs
OSArMTUyLDkgQEAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5n
UGVyZm9ybWFuY2VEYXRhLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
LmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNp
bmNsdWRlICJWaWV3U25hcHNob3RTdG9yZS5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9NYWNoU2VuZFJpZ2h0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SdW5Mb29wT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRJbmRp
Y2F0b3JXaW5kb3cuaD4KQEAgLTE4MCw3ICsxODAsNyBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCkBAIC0zOTQsOCArMzk0LDggQEAgV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJv
eHkoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCB1aW4K
ICAgICBtX2Z1bGxTY3JlZW5NYW5hZ2VyID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzLCBtX3BhZ2VDbGllbnQuZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpKTsK
ICNlbmRpZgogI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIgPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhp
cyk7Ci0gICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpjcmVhdGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOworICAg
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
Y3JlYXRlKCp0aGlzKTsKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
cik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCkBAIC02MzYsOCArNjM2LDggQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnJlYXR0YWNoVG9XZWJQcm9jZXNzKCkKICAgICBtX2Z1bGxTY3Jl
ZW5NYW5hZ2VyID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCBtX3Bh
Z2VDbGllbnQuZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpKTsKICNlbmRpZgogI2lmIFBM
QVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgbV92aWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVh
dGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOworICAgIG1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlciA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsK
KyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShBUFBMRV9QQVkpCkBAIC00MzEzLDEyICs0MzEzLDEyIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZ1bGxzY3Jl
ZW5DbGllbnQ+JiYKICNlbmRpZgogICAgIAogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZL
SVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBXZWJQYWdlUHJveHk6OnBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIoKQorUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBXZWJQYWdlUHJv
eHk6OnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQogewogICAgIHJldHVybiBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIuZ2V0KCk7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSog
V2ViUGFnZVByb3h5Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eSogV2ViUGFnZVByb3h5Ojp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAg
ICByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA4MTIyMDIzZDExYmMxYmI2NDMwZDA2MDllMGU4
YWExZmY1MTBkMTM3Li5kNzI2OTBkMjA4ZjBlMTMyN2QzYmZkMmVjYmYyYTBlZmQ3NGM2Mjc5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjAxLDkgKzIwMSw5IEBA
IGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJDb250ZXh0TWVudVByb3h5
OwogY2xhc3MgV2ViRWRpdENvbW1hbmRQcm94eTsKIGNsYXNzIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CitjbGFzcyBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJOYXZpZ2F0aW9uU3RhdGU7Ci1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViVVJMU2NoZW1l
SGFuZGxlcjsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CkBAIC0zNDMsOCArMzQzLDggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0RnVsbHNjcmVlbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGdWxs
c2NyZWVuQ2xpZW50PiYmKTsKICNlbmRpZgogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZL
SVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxheWJhY2tTZXNzaW9uTWFu
YWdlcigpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogdmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcigpOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxheWJhY2tT
ZXNzaW9uTWFuYWdlcigpOworICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogdmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkBAIC0xNjgw
LDggKzE2ODAsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBI
QVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eT4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOworICAgIFJlZlB0cjxQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IGM0M2M3NjVlNGQ3YWIzY2RiZGRlYTlmY2NhYjJk
YzViMDc1OTg3ZmEuLjMzMTJkY2FjZmVjMDUwY2I4MDlkNzhkOWUxZTRhMzUwOTZjMzI3ZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAt
NDEsMTEgKzQxLDExIEBACiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgIlVzZXJEYXRhLmgiCisjaW1wb3J0ICJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlZpZXdVcGRhdGVEaXNwYXRjaGVy
TWVzc2FnZXMuaCIKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFs
LmgiCiAjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94
eS5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTc4YzkzMzY4ZTZiYzQxNWQ4
YzgyMWViOWEyM2M5OTBkYmM0ZTBjOS4uMzk2Y2E1ZTA3MjY1MGFmNzlhMDdkMzdiMzdiMTI5YzEz
ZDliYTE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC04NzEsOCArODcxLDggQEAKIAkJMzdGQzE5NDcxODUwRkJGMjAwOENGQTQ3IC8q
IFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5NDYxODUwRkJGMjAwOENGQTQ3IC8q
IFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RkMxOTRBMTg1MTBENkEwMDhDRkE0
NyAvKiBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0ODE4NTEwRDZBMDA4Q0ZBNDcgLyog
V0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICovOyB9OwogCQkzN0ZDMTk0QjE4NTEw
RDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZDMTk0OTE4NTEwRDZBMDA4
Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi87IH07Ci0JCTNGNDE4
RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJM0Y0MThFRkIxODg3QkQ5NzAwMjc5NUZEIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNzE4ODdCRDk3MDAy
Nzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCAqLzsgfTsKKwkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkzRjQxOEVGQjE4ODdCRDk3MDAy
Nzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY3MTg4
N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovOyB9OwogCQkzRjg3QjlCRDE1ODk0MDEyMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9v
c2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
ODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuY3BwICovOyB9OwogCQkz
Rjg3QjlCRTE1ODk0MDE5MDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlCQjE1ODkzRjYzMDA5MEZG
NjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi87IH07CiAJCTNGODdCOUMwMTU4OTQwRDgwMDkwRkY2
MiAvKiBXZWJDb2xvclBpY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2VyLmgg
Ki87IH07CkBAIC0xMTA1LDkgKzExMDUsOSBAQAogCQk1MjcyRDRDOTFFNzM1RjA5MDBFQjQyOTAg
LyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTI3MkQ0QzcxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNw
YWNlTlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MjcyRDRDQTFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJENEM4MUU3MzVG
MDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tICovOyB9OwogCQk1MjhDMzdDMTE5
NUNCQjFBMDBEOEI5Q0MgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTlGMjgxMDE5NThGNDc4MDA4Q0FD
NzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OwotCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKLQkJNTJENUExQjcxQzU3
NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFCNDFDNTc0OUYyMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKKwkJNTJENUExQjAxQzU3
NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0RTAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OworCQk1MkQ1QTFCMTFD
NTc0OTYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMxQzU3NDk0RTAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKKwkJNTJENUEx
QjcxQzU3NEEwMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFCNDFDNTc0OUYyMDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKIAkJNTMwMjU4M0IxRENC
QkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkUxRENCQkQxRDAwREE4OUMy
IC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovOyB9OwogCQk1MzAyNTgzQzFEQ0JCRDIy
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5l
dHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLzsgfTsKIAkJNTMwMjU4M0QxRENCQkQyMjAwREE4OUMy
IC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlRXZlbnQuY3BwICovOyB9OwpAQCAtMTkyMCwxNCArMTkyMCwxNCBAQAogCQlDRDc4RTExNzFE
QjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTYxREI3REMwQTAwMTRBMkRFIC8q
IEFQSUZ1bGxzY3JlZW5DbGllbnQuaCAqLzsgfTsKIAkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRF
IC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0Q3OEUxMTgxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3Jl
ZW5EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDQxRjMx
QUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggKi87IH07Ci0JCUNEQTI5
QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTgxQ0JEQkY0
MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi87IH07Ci0JCUNEQTI5
QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExOTFDQkRCRjQx
MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovOyB9OwotCQlDREEyOUEy
MDFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExRTFDQkVC
NUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi87IH07Ci0J
CUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1t
ICovOyB9OwotCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCUNEQTI5QTI5MUNCRUI2
N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI1MUNCRUI2N0Ew
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKLQkJ
Q0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJQ0RBMjlBMkIxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNzFDQkVC
NjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAq
LzsgfTsKKwkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEy
OUExODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLzsgfTsK
KwkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE5MUNC
REJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi87IH07CisJCUNEQTI5
QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTFFMUNCRUI1
RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLzsgfTsKKwkJQ0RB
MjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTFGMUNC
RUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi87IH07CisJ
CUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OworCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI2MUNCRUI2
N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovOyB9OworCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQlDREMzODJGRTE3MjExNzk5MDA4QTJGQzMg
LyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGli
cmFyeS5tbSAqLzsgfTsKIAkJQ0RDMzgzMDcxNzIxMTdERDAwOEEyRkMzIC8qIENvb2tpZVN0b3Jh
Z2VTaGltTGlicmFyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJy
YXJ5LmNwcCAqLzsgfTsKIAkJQ0RDMzgzMEMxNzIxMjI4MjAwOEEyRkMzIC8qIENvb2tpZVN0b3Jh
Z2VTaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RDMzgzMEIxNzIxMjFDRTAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFy
eS5oICovOyB9OwpAQCAtMzA4OSwxMCArMzA4OSwxMCBAQAogCQkzN0ZDMTk0NjE4NTBGQkYyMDA4
Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlUHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDMTk0ODE4NTEwRDZBMDA4
Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDMTk0OTE4NTEwRDZBMDA4Q0ZB
NDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjYxODg3QkQ5NzAw
Mjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZE
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJBMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xv
ckNob29zZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29s
b3JDaG9vc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y4N0I5QkIxNTg5
M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb2xvckNob29zZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJM0Y4N0I5QkYxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMzY3LDEyICszMzY3LDEyIEBACiAJCTUyNzJCMjg5MTQwNjk4NUQw
MDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjcy
RDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Byb3RlY3Rpb25TcGFjZU5TLmg7IHBhdGggPSBtYWMv
V0tQcm90ZWN0aW9uU3BhY2VOUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjcy
RDRDODFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUHJvdGVjdGlvblNwYWNlTlMubW07IHBh
dGggPSBtYWMvV0tQcm90ZWN0aW9uU3BhY2VOUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUEx
QUIxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUFD
MUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUIyMUM1
NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBQjFDNTc0OTRFMDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFC
MzFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMg
LyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzMDI1ODJFMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJl
c291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtD
YXB0dXJlUmVzb3VyY2UuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZVJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwMjU4
MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMDI1ODMwMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5l
dHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNTQs
MTYgKzQyNTQsMTYgQEAKIAkJQ0Q3OEUxMTYxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3Jl
ZW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJRnVsbHNjcmVl
bkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDc4RTExODFEQjdFNUFE
MDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDREEwNDFGMzFBQ0UyMTA1MDA0QTEzRUMgLyogQmFja0JvYXJkU2VydmljZXNT
UEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0JvYXJkU2VydmljZXNT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAx
Q0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTFFMUNC
RUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyog
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjUxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjYxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEx
OTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTFGMUNCRUI1
RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEyNzFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDMzgyRjcxNzIxMTUw
NjAwOEEyRkMzIC8qIENGTmV0d29yay5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENGTmV0
d29yay5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DRk5ldHdv
cmsuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlDREMzODJGOTE3
MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNEQzM4MzA2MTcyMTE3OTkwMDhBMkZDMyAvKiBXZWJQcm9jZXNzU2hpbS5k
eWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYlByb2Nl
c3NTaGltLmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNTIw
MSwxNyArNTIwMSwxNyBAQAogCQkJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUFDMDI3M0UxOTY2MjJENjAwQzEy
Qjc1IC8qIFdlYlBhZ2VQcm94eUNvY29hLm1tICovLAogCQkJCTdDNDY5NENCMUE0QjUxMEEwMEFE
NTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSAqLywKLQkJCQlDREEyOUExRTFDQkVC
NUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi8sCi0JCQkJ
Q0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAorCQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKKwkJCQlDREEyOUEyMjFD
QkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
ICovLAorCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkubW0gKi8sCiAJCQkJN0NFNEQyMTUxQTQ5MTQ4NDAwQzdGMTUyIC8qIFdlYlByb2Nl
c3NQb29sQ29jb2EubW0gKi8sCiAJCQkJMUEwNEY2MTcxQTRBM0E3QTAwQTIxQjZFIC8qIFdlYlBy
b2Nlc3NQcm94eUNvY29hLm1tICovLAogCQkJCTdBQUQxNzVFMUVBNkFGMzcwMDNCMDg5NCAvKiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAqLywKIAkJCQk1MUQxMjQzMTFF
NkRFNTIxMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlckNvY29hLmggKi8sCiAJCQkJNTFE
MTI0MzIxRTZERTUyMTAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXJDb2NvYS5tbSAqLywK
LQkJCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5LmggKi8sCi0JCQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQk1MkQ1QTFBQzFDNTc0OTRF
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovLAorCQkJCTUy
RDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAq
LywKKwkJCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJMkRGQzdEQjkxQkNDQzE5NTAw
QzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggKi8sCiAJCQkJMkRGQzdEQkExQkNDQzE5NTAwQzE1NDhD
IC8qIFdlYlZpZXdJbXBsLm1tICovLAogCQkJCTFBRDAxQkNCMTkwNUQ1NDkwMEM5QzQ1RiAvKiBX
S1JlbG9hZEZyYW1lRXJyb3JSZWNvdmVyeUF0dGVtcHRlci5oICovLApAQCAtNjM4NSwxNCArNjM4
NSwxNCBAQAogCQkJCUNENDkxQjA1MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlci5jcHAgKi8sCiAJCQkJQ0Q0OTFCMDYxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q0OTFCMEExRTczMkQxMjAwMDA5MDY2IC8qIFVz
ZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCUNEQTI5QTE5MUNCREJG
NDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8sCi0JCQkJQ0RBMjlB
MUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMu
aW4gKi8sCi0JCQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubW0gKi8sCisJCQkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaCAqLywKKwkJCQlDREEyOUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKKwkJCQlDREEyOUExODFDQkRCRjQx
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLywKIAkJCQlFQ0E2ODBENzFF
NjkwREY4MDA3MzFEMjAgLyogV2ViUHJvY2Vzc0NvY29hLmggKi8sCiAJCQkJN0M2RTcwRjkxOEIy
RDRBMDAwRjI0RTJFIC8qIFdlYlByb2Nlc3NDb2NvYS5tbSAqLywKLQkJCQk1MkQ1QTFCMjFDNTc0
OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovLAotCQkJCTUyRDVB
MUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2Vz
LmluICovLAotCQkJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLm1tICovLAorCQkJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLmggKi8sCisJCQkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNTJENUExQjQxQzU3NDlG
MjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8sCiAJCQkpOwogCQkJcGF0
aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc4NjgsMTAgKzc4Njgs
MTAgQEAKIAkJCQkxQUIxRjc5MzFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5h
dG9yTWVzc2FnZXMuaCAqLywKIAkJCQkxQUIxRjc5NDFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFBQjFGNzk1
MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgg
Ki8sCi0JCQkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLywKLQkJCQlDREEyOUEy
NjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKKwkJCQlDREEyOUEyNDFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCisJCQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCUNEQTI5QTI3
MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
ICovLAogCQkJCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUEwNDNGNjgxMjUxNEQ4QjAwRkZCRkI1IC8q
IFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJCQlCQzMwNjZCQzEyNUE0NDIx
MDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCkBAIC03ODkzLDEw
ICs3ODkzLDEwIEBACiAJCQkJMUFBRjA4QjYxOTI2OUU2RDAwQjYzOTBDIC8qIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlck1lc3NhZ2VzLmggKi8sCiAJCQkJN0MzNjFENzYxOTI4MDNCRDAwMzZBNTlE
IC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywK
IAkJCQk3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHlNZXNzYWdlcy5oICovLAotCQkJCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkzRjQxOEVG
NjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgg
Ki8sCi0JCQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJM0Y0MThFRjgxODg3QkQ5NzAw
Mjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCisJ
CQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLywKKwkJCQkzRjQxOEVGNzE4ODdCRDk3MDAy
Nzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LywKKwkJCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5TWVzc2FnZXMuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gIkRlcml2ZWQgU291cmNlcyI7
CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0MjsKQEAgLTg3MzIsMTAgKzg3MzIsMTAg
QEAKIAkJCQkxQUIxRjc5OTFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4NTBGRTcxRUQ3QzM5RjAwRkI3
N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEzRTczNjExMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAot
CQkJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUNEQTI5QTI5MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTIwMUNCRUI1
RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFENTkyOUYxNjZFMDYwMDAwRTZC
RjAyIC8qIFdlYlBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NzQ0RjAxMjYz
OEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkE1MDgw
QkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg3ODksNyArODc4OSw3IEBACiAJCQkJN0MzNjFENzkxOTI4MDNCRDAwMzZBNTlE
IC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTgzRUU1NzVDMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0
aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUExQjAxQzU3NDk1QTAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRGQzdEQkIxQkNDQzE5NTAwQzE1NDhDIC8qIFdl
YlZpZXdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUNENTVBQTEyOEUyOTRGMDAxMzNDODUg
LyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTI5MjMyREY0MThCMjlENjgwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0
TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzQwLDEwICsxMDM0MCwxMCBAQAogCQkJCTFBM0U3
MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzAzMzdEREQxMjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBsYXRmb3JtVG91Y2hQ
b2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDRBMjE4ODRFNEYwMDBFRDg2REIgLyog
V2ViUGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTFB
MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjEx
Q0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBT
b3VyY2VzICovLAotCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
Q0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4g
U291cmNlcyAqLywKKwkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEy
MTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUQ1
OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBMDhGRUU0MUQ1OTNFMkEwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBv
cHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDE2LDEwICsxMDQxNiwxMCBAQAogCQkJ
CTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTczOUJCRTFCNDIwNDY2
MDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgz
RUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTNGNDE4RUY5MTg4N0JEOTcw
MDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKLQkJCQkzRjQxOEVGQjE4ODdC
RDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0Y0MThFRjkxODg3
QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNGNDE4RUZCMTg4N0JE
OTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGQzdEQkMxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZp
ZXdJbXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDExMjdBMjk4MDAwOEZGNEY0IC8q
IFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4MTYwRDAxODc2NDU1NzAw
MjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKaW5kZXggNGQyMmFmZjEyODlmNzAyZThlNTg0YTY3MjNiNWM2YWU5ZWRk
OWI4Zi4uZmVlMGQyODY3N2QwMDBhNWE3OTcwZGFkNDlhNTE5MGY0ZDI4YWRhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKQEAgLTc4LDggKzc4LDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NldHRp
bmdzLmg+CiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAzMmQ4NjZmYjhhNzFh
ZGVhYTMxMzkyNTE4NTIzODRmNzhmMWU4NzJiLi43Mjc3ODhlOGE4MmJiYzg0OGU3ODViM2RmYTRk
ODNjMTYxMGI4ZmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcApAQCAtMjE4LDEwICsyMTgsMTAgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2lu
Y2x1ZGUgIlBERlBsdWdpbi5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIK
ICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlICJXS1N0cmluZ0NGLmgiCi0jaW5jbHVkZSAi
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4KICNlbmRp
ZgogCkBAIC0zNDcxLDE3ICszNDcxLDE3IEBAIFJlbW90ZVdlYkluc3BlY3RvclVJKiBXZWJQYWdl
OjpyZW1vdGVJbnNwZWN0b3JVSSgpCiB9CiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFW
S0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIFdlYlBhZ2U6OnBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIoKQorUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgV2ViUGFnZTo6cGxheWJhY2tTZXNzaW9u
TWFuYWdlcigpCiB7CiAgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCi0gICAgICAg
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNy
ZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuICptX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXI7CiB9CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIFdlYlBhZ2U6OnZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgV2ViUGFnZTo6
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CiAgICAgaWYgKCFtX3ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmNyZWF0ZSgqdGhpcywgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpKTsKKyAg
ICAgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkpOwogICAgIHJldHVybiAqbV92
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNzcyNDVkNTA3OTgwZjc2MzFjYmMxMGIxOTViM2Fh
M2VjNGJiNTIxNi4uYmVjNDQyMzBlN2ExMGZlMjVmMDRhMWI3ZTVjOWUzY2I2OWQxMzg3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTg2LDExICsx
ODYsMTEgQEAgY2xhc3MgV2ViTm90aWZpY2F0aW9uQ2xpZW50OwogY2xhc3MgV2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXI7CiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94eTsKIGNsYXNzIFdlYlBhZ2VP
dmVybGF5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKK2NsYXNzIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI7CiBjbGFzcyBXZWJQb3B1cE1lbnU7CiBjbGFzcyBXZWJVbmRvU3RlcDsK
IGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogY2xhc3MgV2ViV2hlZWxF
dmVudDsKIGVudW0gRmluZE9wdGlvbnMgOiB1aW50MTZfdDsKIHN0cnVjdCBBc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbjsKQEAgLTI2Niw4ICsyNjYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0luc3Bl
Y3RvclBhZ2UoKSB7IHJldHVybiAhIW1faW5zcGVjdG9yVUkgfHwgISFtX3JlbW90ZUluc3BlY3Rv
clVJOyB9CiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYg
cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIm
IHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBw
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgdmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZv
aWQgc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrKGJvb2wpOwpAQCAtMTQwMCw4
ICsxNDAwLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UmVtb3RlV2ViSW5zcGVjdG9yVUk+IG1f
cmVtb3RlSW5zcGVjdG9yVUk7CiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAg
ICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBtX3ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gbV92
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGJv
b2wgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sgeyBmYWxzZSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjM2YTI4MTdiOTAyZGRhMjk2YmEzNmJiMWNlOGFjZTYyNzkwMTNm
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MTWVkaWFFbGVtZW50RW51bXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
Q0FMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXR0YWNobWVudDsKK2NsYXNzIENvbm5lY3Rpb247Citj
bGFzcyBEZWNvZGVyOworY2xhc3MgTWVzc2FnZVJlY2VpdmVyOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBOb2RlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
UGFnZTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CisKK2NsYXNzIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQgZmluYWwKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVp
bnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAg
fQorICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoKTsKKworICAg
IHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQorCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OworCisgICAg
Ly8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBm
aW5hbDsKKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgdm9pZCBkdXJh
dGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChk
b3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBmaW5hbDsKKyAgICB2b2lkIGJ1
ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRl
ZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKSBmaW5hbDsKKyAgICB2b2lk
IHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIGZpbmFsOwor
ICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMm
LCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgZmlu
YWw7CisgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgdmFsdWUpIGZpbmFs
OworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpIGZpbmFsOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7CisgICAgdm9pZCBhdWRpb01lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIGxlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBleHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKSBmaW5hbDsKKyAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
Q2hhbmdlZChib29sKSBmaW5hbDsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBmaW5hbDsK
KworICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoUGxheWJhY2tTZXNzaW9uTWFu
YWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7Cit9OworCitjbGFzcyBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uTWFu
YWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2UmKTsKKyAgICB2aXJ0
dWFsIH5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworCisgICAgdm9pZCBz
ZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmKTsK
KyAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICB1aW50NjRfdCBj
b250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYpOworCitw
cm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisKKyAgICBleHBs
aWNpdCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2UmKTsKKworICAgIHR5cGVkZWYgc3Rk
Ojp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+
LCBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViQ29yZTo6UGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisK
KyAgICAvLyBJbnRlcmZhY2UgdG8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAorICAg
IHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkdXJh
dGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUpOworICAgIHZvaWQgY3VycmVu
dFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3Vi
bGUgYW5jaG9yVGltZSk7CisgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1l
KTsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlp
bmcsIGZsb2F0IHBsYXliYWNrUmF0ZSk7CisgICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxh
c3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2Fu
UGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOwor
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
OworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCk7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9p
ZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sKTsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wp
OworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKKyAg
ICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9p
ZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50
NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3
YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQo
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgaGFuZGxlQ29udHJv
bGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZU11
dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXRNdXRlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgbXV0ZWQpOworCisgICAgV2ViUGFnZSogbV9wYWdlOworICAgIEhhc2hNYXA8
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCosIHVpbnQ2NF90PiBtX21lZGlhRWxlbWVudHM7Cisg
ICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwor
ICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAgIEhhc2hD
b3VudGVkU2V0PHVpbnQ2NF90PiBtX2NsaWVudENvdW50czsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNz
YWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZTU4ZGM5ODQ3Y2VkYzkyMjliN2EzZGUyMzIxN2M0N2ZlY2Nm
MzE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKK21lc3NhZ2Vz
IC0+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgeworICAgIFBsYXkodWludDY0X3QgY29udGV4dElk
KQorICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBUb2dnbGVQbGF5U3RhdGUodWlu
dDY0X3QgY29udGV4dElkKQorICAgIEJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkK
KyAgICBFbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQorICAgIFNlZWtUb1RpbWUodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKKyAgICBGYXN0U2Vlayh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICBCZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQor
ICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZWxlY3RBdWRpb01lZGlh
T3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCisgICAgU2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCisgICAg
SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQorICAg
IFRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQorICAgIFRvZ2dsZU11
dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgbXV0ZWQpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE0MWUz
OGY1NDQ1M2RiMTUyYjMxZDJhYmUxZjRjYmIwNjAzOGJhYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCkBA
IC0wLDAgKzEsNDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2lt
cG9ydCAiQXR0YWNobWVudC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgor
I2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisj
aW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5n
cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Vz
ZXJHZXN0dXJlSW5kaWNhdG9yLmg+CisjaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB1aW50
NjRfdCBuZXh0Q29udGV4dElkKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY29udGV4dElkID0g
MDsKKyAgICByZXR1cm4gKytjb250ZXh0SWQ7Cit9CisKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQKKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIp
CisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisKK1BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KCkKK3sKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUo
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cmVzZXRNZWRpYVN0
YXRlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmIChtX21hbmFn
ZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZHVyYXRpb25DaGFuZ2VkKG1fY29udGV4dElkLCBkdXJh
dGlvbik7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVu
dFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5jdXJyZW50VGltZUNoYW5nZWQo
bV9jb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZm
ZXJlZFRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5idWZm
ZXJlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBidWZmZXJlZFRpbWUpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9t
YW5hZ2VyLT5yYXRlQ2hhbmdlZChtX2NvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3Rh
cnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQo
bV9jb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpUaW1lUmFuZ2VzJiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2
ZVVwZGF0ZUludGVydmFsKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKG1fY29udGV4dElkLCByYW5nZXMsIGxhc3RNb2RpZmll
ZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIHZhbHVlKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+Y2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZChtX2NvbnRleHRJZCwgdmFsdWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAg
ICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0
SWQsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5leHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFt
ZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCit7CisgICAgaWYgKG1f
bWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQobV9jb250ZXh0SWQsIGRpc2FibGVkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPm11dGVkQ2hhbmdlZChtX2NvbnRleHRJZCwg
bXV0ZWQpOworfQorCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisKK1Jl
ZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUo
V2ViUGFnZSYgcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKHBhZ2UpKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQorICAgIDogbV9wYWdlKCZwYWdlKQoreworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgp
LCAqdGhpcyk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXI6On5QbGF5YmFja1Nlc3Npb25N
YW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygp
KSB7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9k
ZWw7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRl
cmZhY2U7CisgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CisgICAg
ICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisgICAgICAgIG1vZGVsLT5zZXRN
ZWRpYUVsZW1lbnQobnVsbHB0cik7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7
CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV9tZWRpYUVsZW1lbnRz
LmNsZWFyKCk7CisgICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKKworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
KworUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbCA9
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIG1vZGVs
LT5hZGRDbGllbnQoKmludGVyZmFjZSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdU
Rk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1
cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgp
KTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworICAgIHJl
dHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitXZWJDb3JlOjpQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9k
ZWwodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGlu
dGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgUmVm
UHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IG1vZGVsLT5tZWRpYUVsZW1lbnQo
KTsKKyAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgIG1vZGVsLT5yZW1v
dmVDbGllbnQoKmludGVyZmFjZSk7CisgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CisgICAg
bV9tZWRpYUVsZW1lbnRzLnJlbW92ZShtZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIG1fY29udGV4
dE1hcC5yZW1vdmUoY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX2NsaWVu
dENvdW50cy5hZGQoY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBBU1NF
UlQobV9jbGllbnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7CisgICAgaWYgKG1fY2xpZW50
Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQorICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJ
ZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRy
b2xzTWFuYWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCit7Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gZm91bmRJdGVyYXRvciA9IG1fbWVkaWFFbGVtZW50
cy5maW5kKCZtZWRpYUVsZW1lbnQpOworICAgIGlmIChmb3VuZEl0ZXJhdG9yICE9IG1fbWVkaWFF
bGVtZW50cy5lbmQoKSkgeworICAgICAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBmb3VuZEl0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNv
bnRleHRJZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9jb250cm9sc01h
bmFnZXJDb250ZXh0SWQpCisgICAgICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0
SWQgPSBjb250ZXh0SWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X21lZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29u
dGV4dElkKCk7IH0pOworICAgICAgICBhdXRvIGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CisgICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAg
ICAgICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQp
OworICAgICAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsKKyAgICAg
ICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7
CisgICAgfQorCisgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRl
eHRJZCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OlNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQobV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQoreworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAg
ICAgICByZXR1cm47CisKKyAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkKTsKKyAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNsZWFy
UGxheWJhY2tDb250cm9sc01hbmFnZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisjZW5kaWYKK30K
KwordWludDY0X3QgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y29udGV4dElkRm9yTWVkaWFFbGVt
ZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKK3sKKyAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsg
cmV0dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7CisgICAgdWludDY0X3QgY29udGV4dElkID0gYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE1l
ZGlhRWxlbWVudCgmbWVkaWFFbGVtZW50KTsKKyAgICByZXR1cm4gY29udGV4dElkOworfQorCisj
cHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmR1cmF0aW9uQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RHVyYXRpb25DaGFuZ2VkKGNv
bnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDdXJyZW50VGltZUNoYW5n
ZWQoY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSksIG1fcGFnZS0+cGFnZUlEKCkp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJ1ZmZlcmVkVGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpCdWZmZXJlZFRpbWVD
aGFuZ2VkKGNvbnRleHRJZCwgYnVmZmVyZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UGxheWJh
Y2tTdGFydGVkVGltZUNoYW5nZWQoY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1lKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmF0ZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpSYXRlQ2hhbmdlZChjb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vl
a2FibGVSYW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGlt
ZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZl
VXBkYXRlSW50ZXJ2YWwpCit7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+
IHJhbmdlc1ZlY3RvcjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5s
ZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5nZXMucmFuZ2Vz
KCkuc3RhcnQoaSkudG9Eb3VibGUoKTsKKyAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMu
cmFuZ2VzKCkuZW5kKGkpLnRvRG91YmxlKCk7CisgICAgICAgIHJhbmdlc1ZlY3Rvci5hcHBlbmQo
eyBzdGFydCwgZW5kIH0pOworICAgIH0KKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6U2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKGNvbnRl
eHRJZCwgV1RGTW92ZShyYW5nZXNWZWN0b3IpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRl
SW50ZXJ2YWwpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCB2YWx1ZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjb250ZXh0SWQsIHZhbHVlKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0
aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5w
YWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5
YmFja0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcg
bG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2Vk
KGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRhcmdldFR5cGUpLCBs
b2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQo
KSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0
ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK3sKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TXV0
ZWRDaGFuZ2VkKGNvbnRleHRJZCwgbXV0ZWQpKTsKK30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2Vz
IGZyb20gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OgorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnBsYXkodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkucGxheSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBh
dXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnBhdXNlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnRvZ2dsZVBsYXlTdGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJl
Z2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGlj
YXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmVuZFNjcnViYmluZygpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sK
KyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWtUb1RpbWUodGltZSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZhc3RTZWVrKHRp
bWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3
YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjYW5uaW5nKCk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRf
dCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBlbnN1cmVNb2RlbChjb250ZXh0SWQpLm1lZGlhRWxl
bWVudCgpOworICAgIGlmIChlbGVtZW50KQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJl
c3BvbnNlKGNvbnRleHRJZCwgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSkpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3Qg
Y29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGljdHVy
ZUluUGljdHVyZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZU11
dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnRvZ2dsZU11dGVkKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQoreworICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkuc2V0TXV0ZWQobXV0ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4ZDNjMjQ5
MjU1MTJiYTMzOGRiMDljMmMxMmY3NWM3NTI5MjNjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCkBAIC0w
LDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiAoUExBVEZPUk0o
SU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlh
RWxlbWVudEVudW1zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBdHRhY2htZW50Owor
Y2xhc3MgQ29ubmVjdGlvbjsKK2NsYXNzIERlY29kZXI7CitjbGFzcyBNZXNzYWdlUmVjZWl2ZXI7
Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIE5vZGU7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllckhvc3RpbmdDb250ZXh0Owor
Y2xhc3MgV2ViUGFnZTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7Citj
bGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAorICAgIDogcHVibGlj
IFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4KKyAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCht
YW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIg
PSBudWxscHRyOyB9CisKKyAgICBMYXllckhvc3RpbmdDb250ZXh0KiBsYXllckhvc3RpbmdDb250
ZXh0KCkgeyByZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0LmdldCgpOyB9CisgICAgdm9pZCBz
ZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0
PiYmKTsKKworICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzQW5pbWF0
aW5nOyB9CisgICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29sIGZsYWcpIHsgbV9pc0FuaW1hdGlu
ZyA9IGZsYWc7IH0KKworICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1
cm4gbV90YXJnZXRJc0Z1bGxzY3JlZW47IH0KKyAgICB2b2lkIHNldFRhcmdldElzRnVsbHNjcmVl
bihib29sIGZsYWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSBmbGFnOyB9CisKKyAgICBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgZnVsbHNjcmVl
bk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5Nb2RlOyB9CisgICAgdm9pZCBzZXRG
dWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSkgeyBtX2Z1bGxzY3JlZW5Nb2RlID0gbW9kZTsgfQorCisgICAgYm9vbCBp
c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbHNjcmVlbjsgfQorICAgIHZvaWQg
c2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX2lzRnVsbHNjcmVlbiA9IGZsYWc7IH0KKwor
cHJpdmF0ZToKKyAgICAvLyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIHZvaWQgaGFz
VmlkZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKKworICAgIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQoVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYsIHVpbnQ2NF90
IGNvbnRleHRJZCk7CisKKyAgICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7Cisg
ICAgdWludDY0X3QgbV9jb250ZXh0SWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGlu
Z0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKKyAgICBib29sIG1faXNBbmltYXRpbmcg
eyBmYWxzZSB9OworICAgIGJvb2wgbV90YXJnZXRJc0Z1bGxzY3JlZW4geyBmYWxzZSB9OworICAg
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX2Z1
bGxzY3JlZW5Nb2RlIHsgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSB9OworICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4geyBmYWxzZSB9OworfTsK
KworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdl
JiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIoKTsKKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICAKKyAgICB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJy
aWRlOworCisgICAgLy8gSW50ZXJmYWNlIHRvIENocm9tZUNsaWVudAorICAgIGJvb2wgc3VwcG9y
dHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlKSBjb25zdDsKKyAgICB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlk
ZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZXhpdFZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Jik7CisgICAg
dm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlKTsKKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0OworCisgICAgZXhwbGljaXQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcihXZWJQYWdlJiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOworCisgICAgdHlwZWRlZiBz
dGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4sIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZh
Y2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElk
KTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsK
KworICAgIC8vIEludGVyZmFjZSB0byBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Cisg
ICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVv
KTsKKyAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5CisgICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWlu
dDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpOworICAgIHZvaWQgZGlkU2V0dXBG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNl
UG9ydCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4
dElkLCB1bnNpZ25lZCBncmF2aXR5KTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWlu
dDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpOworICAgIAorICAgIFdlYlBhZ2Uq
IG1fcGFnZTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOworICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCosIHVpbnQ2
NF90PiBtX3ZpZGVvRWxlbWVudHM7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZh
Y2VUdXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkIHsgMCB9OworICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7
Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29h
L1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWM0YjU2ODk1
NTllZTc1ZDk5NDE2ZTgwNGM3ZmNmNjk3YmIwMjUxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2Vz
LmluCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorbWVzc2FnZXMgLT4gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlciB7CisgICAgUmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCisgICAgRGlk
U2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRFeGl0RnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICBEaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgU2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKKyAgICBTZXRWaWRl
b0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQor
ICAgIEZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5N
b2RlKQorICAgIEZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgaXNQYWdlVmlzaWJsZSkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMTJiZDI1MDRkYzkzZmE4MTIzMTczY2E5MjgzNzFiOTMwOTM4OWQxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubW0KQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKKworI2lmIChQTEFURk9STShJ
T1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJBdHRhY2htZW50LmgiCisjaW1wb3J0ICJMb2dn
aW5nLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisjaW1wb3J0ICJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
KyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9F
bGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tp
bmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlkZW8uaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UmVuZGVyVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBJbnRSZWN0
IGlubGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBlbGVt
ZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Cisg
ICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJl
cikKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHJlY3QgPSByZW5kZXJlci0+dmlkZW9C
b3goKTsKKyAgICByZWN0Lm1vdmVCeShyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3Qo
KS5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKS0+Y29u
dGVudHNUb1Jvb3RWaWV3KHJlY3QpOworfQorCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFu
YWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAg
ICwgbV9jb250ZXh0SWQoY29udGV4dElkKQoreworfQorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpCit7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4
dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4mJiBjb250ZXh0KQoreworICAg
IG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdURk1vdmUoY29udGV4dCk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlk
ZW8pCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5oYXNWaWRlb0No
YW5nZWQobV9jb250ZXh0SWQsIGhhc1ZpZGVvKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYg
dmlkZW9EaW1lbnNpb25zKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKTsK
K30KKworI3ByYWdtYSBtYXJrIC0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCitSZWY8VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcj4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2Um
IHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlLCBw
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKSk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAgICAsIG1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlcihwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQoreworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAq
dGhpcyk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5WaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7
CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZh
Y2U7CisgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CisKKyAgICAg
ICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbW9kZWwtPnJlbW92
ZUNsaWVudCgqaW50ZXJmYWNlKTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsK
KyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX3ZpZGVvRWxlbWVudHMu
Y2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOworICAgIAorICAgIGlmIChtX3Bh
Z2UpCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpp
bnZhbGlkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlID0gbnVsbHB0cjsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZh
Y2VUdXBsZSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50PiBtb2RlbCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250
ZXh0SWQpOworICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+YWRkQ2xpZW50Rm9yQ29udGV4
dChjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExh
eWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7Cisg
ICAgbW9kZWwtPmFkZENsaWVudCgqaW50ZXJmYWNlKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2Vf
dHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFj
ZVR1cGxlKCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7
CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYkNvcmU6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpl
bnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDww
PihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dCYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZSht
b2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisK
KyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPnJlbW92ZUNsaWVudEZvckNvbnRleHQoY29u
dGV4dElkKTsKKworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBt
b2RlbC0+dmlkZW9FbGVtZW50KCk7CisgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRy
KTsKKyAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOworICAgIGludGVyZmFjZS0+
aW52YWxpZGF0ZSgpOworICAgIG1fdmlkZW9FbGVtZW50cy5yZW1vdmUodmlkZW9FbGVtZW50Lmdl
dCgpKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElk
LCAxKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKys7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVt
b3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgQVNTRVJUKG1f
Y2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOworCisgICAgaW50IGNsaWVudENvdW50
ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7CisgICAgQVNTRVJUKGNsaWVudENvdW50
ID4gMCk7CisgICAgY2xpZW50Q291bnQtLTsKKworICAgIGlmIChjbGllbnRDb3VudCA8PSAwKSB7
CisgICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpOworICAgICAgICByZW1v
dmVDb250ZXh0KGNvbnRleHRJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Ns
aWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7Cit9CisKKyNwcmFnbWEgbWFy
ayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50OgorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAoreworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgcmV0dXJuIFNldHRpbmdzOjphdktpdEVuYWJs
ZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSAmJiBzdXBwb3J0c1BpY3R1cmVJblBp
Y3R1cmUoKTsKKyNlbmRpZgorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxl
bWVudCwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7
CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVu
dCglcCkiLCB0aGlzKTsKKworICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fcGxheWJhY2tTZXNz
aW9uTWFuYWdlci0+Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KHZpZGVvRWxlbWVudCk7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3ZpZGVvRWxlbWVudHMuYWRkKCZ2aWRlb0VsZW1lbnQsIGNvbnRl
eHRJZCk7CisgICAgVU5VU0VEX1BBUkFNKGFkZFJlc3VsdCk7CisgICAgQVNTRVJUKGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPT0gY29udGV4dElkKTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJm
YWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgYWRkQ2xpZW50
Rm9yQ29udGV4dChjb250ZXh0SWQpOworICAgIGlmICghaW50ZXJmYWNlLT5sYXllckhvc3RpbmdD
b250ZXh0KCkpCisgICAgICAgIGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXll
ckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOworCisg
ICAgYXV0byB2aWRlb1JlY3QgPSBpbmxpbmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCk7CisgICAg
RmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lk
dGgoKSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKKworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBvbGRNb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgp
OworICAgIGludGVyZmFjZS0+c2V0VGFyZ2V0SXNGdWxsc2NyZWVuKHRydWUpOworICAgIGludGVy
ZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7CisgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVu
dCgmdmlkZW9FbGVtZW50KTsKKyAgICBpZiAob2xkTW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKQorICAgICAgICBtb2RlbC0+c2V0VmlkZW9MYXll
ckZyYW1lKHZpZGVvTGF5ZXJGcmFtZSk7CisKKyAgICBpZiAoaW50ZXJmYWNlLT5pc0FuaW1hdGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyh0cnVl
KTsKKworICAgIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSA9IHZpZGVvRWxlbWVudC53ZWJr
aXRTdXBwb3J0c1ByZXNlbnRhdGlvbk1vZGUoSFRNTFZpZGVvRWxlbWVudDo6VmlkZW9QcmVzZW50
YXRpb25Nb2RlOjpQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICAKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElE
KGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPmNvbnRleHRJRCgp
LCB2aWRlb1JlY3QsIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgaW50ZXJmYWNlLT5mdWxs
c2NyZWVuTW9kZSgpLCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZv
clZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCit7
CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCVwKSIsIHRoaXMpOworICAgIEFTU0VSVChtX3BhZ2Up
OworICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOwor
CisgICAgdWludDY0X3QgY29udGV4dElkID0gbV92aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVt
ZW50KTsKKyAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsK
KworICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYg
KGludGVyZmFjZS5pc0FuaW1hdGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnRlcmZh
Y2Uuc2V0SXNBbmltYXRpbmcodHJ1ZSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCwgaW5saW5l
VmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRB
bmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkK
K3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRl
b0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKCVwKSIsIHRoaXMpOworCisjaWYgUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisgICAgQVNTRVJU
KG1fcGFnZSk7CisgICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlucygmdmlkZW9FbGVt
ZW50KSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2
aWRlb0VsZW1lbnQpOworICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7CisK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9k
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlkZW9FbGVt
ZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0TW9kZSk7CisjZW5kaWYKK30KKworI3ByYWdt
YSBtYXJrIEludGVyZmFjZSB0byBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OgorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVv
KGNvbnRleHRJZCwgaGFzVmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgaWYgKG1fcGFn
ZSkKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OlNldFZpZGVvRGltZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyksIG1f
cGFnZS0+cGFnZUlEKCkpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRo
TWVkaWEpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5yZXF1ZXN0RnVsbHNjcmVlbk1v
ZGUobW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3Jl
ZW5Nb2RlKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4oJXAs
ICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7CisKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBQbGF0
Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworI2lmbmRlZiBOREVCVUcK
KyAgICBbdmlkZW9MYXllciBzZXROYW1lOkAiV2ViIHZpZGVvIGZ1bGxzY3JlZW4gbWFuYWdlciBs
YXllciJdOworI2VuZGlmCisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJh
bnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKworICAgIFt2aWRlb0xheWVyIHNldFBv
c2l0aW9uOkNHUG9pbnRNYWtlKDAsIDApXTsKKyAgICBbdmlkZW9MYXllciBzZXRCYWNrZ3JvdW5k
Q29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQpXTsKKworICAg
IC8vIFNldCBhIHNjYWxlIGZhY3RvciBoZXJlIHRvIG1ha2UgY29udmVydFJlY3Q6dG9MYXllcjpu
aWwgdGFrZSBzY2FsZSBmYWN0b3IgaW50byBhY2NvdW50LiA8cmRhcjovL3Byb2JsZW0vMTgzMTY1
NDI+LgorICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9yIGlzIGludmVydGVkIGluIHRoZSBob3N0aW5n
IHByb2Nlc3MuCisgICAgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yID0gbV9wYWdlLT5kZXZpY2VT
Y2FsZUZhY3RvcigpOworICAgIFt2aWRlb0xheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNE
TWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3RvciwgaG9zdGluZ1NjYWxlRmFjdG9yLCAxKV07CisK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAg
c3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldFJvb3RM
YXllcih2aWRlb0xheWVyKTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIAorICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcih2aWRlb0xheWVyLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7CisgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKKyAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5t
X3BhZ2UpCisgICAgICAgICAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRU
aGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgCisgICAg
W0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKyAgICAKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbigl
cCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9
IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPnNl
dElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxz
ZSk7CisKKyAgICBpZiAoaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1v
ZGVsLT52aWRlb0VsZW1lbnQoKTsKKyAgICBpZiAoIXZpZGVvRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSBy
ZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9FbGVtZW50XSB7CisgICAg
ICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5leGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQpOworICAg
IH0pOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQp
OworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwor
ICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICAKKyAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhl
bihbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7CisgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlz
LCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKKyAgICAgICAgICAgIG1vZGVsLT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVy
ZmFjZV0geworICAgICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0geworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5z
ZXRSb290TGF5ZXIobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2Ut
PnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBw
cm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xl
YW51cEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7CisKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9k
ZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisg
ICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisgICAgaW50ZXJmYWNlLT5zZXRJ
c0Z1bGxzY3JlZW4oZmFsc2UpOworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOworICAgIGJvb2wg
dGFyZ2V0SXNGdWxsc2NyZWVuID0gaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKTsKKwor
ICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOworICAgIFJlZlB0cjxIVE1M
VmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7CisKKyAg
ICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4
dElkKTsKKworICAgIGlmICghdmlkZW9FbGVtZW50IHx8ICF0YXJnZXRJc0Z1bGxzY3JlZW4pCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1lbnQsIG1vZGVdIHsKKyAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQsIG1vZGUpOworICAg
IH0pOworfQorICAgIAordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVy
R3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQoreworICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdyYXZpdHkoKFZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7Cit9CisgICAgCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byYgbW9kZWwgPSBlbnN1cmVNb2RlbChjb250ZXh0SWQpOworCisg
ICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQorICAgICAgICBtb2RlbC52aWRlb0VsZW1lbnQoKS0+c2Ny
b2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2UpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
Y29udGV4dElkLCB0cnVlLCBpbmxpbmVWaWRlb0ZyYW1lKCptb2RlbC52aWRlb0VsZW1lbnQoKSkp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKyAgICAKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZl
bmNlZCglcCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJm
YWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpZiAoc3Rk
Ojppc25hbihib3VuZHMueCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy55KCkpIHx8IHN0ZDo6aXNu
YW4oYm91bmRzLndpZHRoKCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLmhlaWdodCgpKSkgeworICAg
ICAgICBhdXRvIHZpZGVvUmVjdCA9IGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLT52aWRlb0VsZW1l
bnQoKSk7CisgICAgICAgIGJvdW5kcyA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgo
KSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKKyAgICB9CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24g
YmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOworICAg
IGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKKyAgICAgICAgaW50ZXJmYWNl
LT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgpKTsK
KyAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7CisgICAgbWFjaF9wb3J0X2Rl
YWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7CisgICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2Ev
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzUzY2IxNjk4YmRiMTU1Zjk2Njk4MTExZjA1MTVmMjM4ODdmNWRhMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9FdmVudExpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50RW51
bXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9X
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewot
Y2xhc3MgQXR0YWNobWVudDsKLWNsYXNzIENvbm5lY3Rpb247Ci1jbGFzcyBEZWNvZGVyOwotY2xh
c3MgTWVzc2FnZVJlY2VpdmVyOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBOb2Rl
OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQgZmluYWwKLSAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIs
IHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQo
KTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi1w
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgdm9pZCByZXNl
dE1lZGlhU3RhdGUoKSBmaW5hbDsKLQotICAgIC8vIFdlYlBsYXliYWNrTW9kZWxDbGllbnQKLSAg
ICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOwotICAgIHZvaWQgY3VycmVudFRp
bWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIGZpbmFsOwot
ICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIGZpbmFsOwotICAgIHZvaWQgcGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpIGZpbmFs
OwotICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkgZmluYWw7Ci0gICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6
VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKSBmaW5hbDsKLSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2
YWx1ZSkgZmluYWw7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKLSAgICB2b2lkIGF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQg
bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2
b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJp
bmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOwotICAgIHZvaWQgd2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIGZpbmFsOwotICAgIHZvaWQgbXV0ZWRDaGFuZ2Vk
KGJvb2wpIGZpbmFsOwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKLQotICAgIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2NvbnRl
eHRJZDsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyPiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIoKTsKLQotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJikgZmluYWw7Ci0KLSAgICB2b2lkIHNldFVwUGxheWJhY2tDb250cm9sc01h
bmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYpOwotICAgIHZvaWQgY2xlYXJQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlcigpOwotICAgIHVpbnQ2NF90IGNvbnRleHRJZEZvck1lZGlhRWxlbWVu
dChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7Ci0KLXByb3RlY3RlZDoKLSAgICBmcmllbmQg
Y2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLSAgICBmcmllbmQgY2xh
c3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKLQotICAgIGV4cGxpY2l0IFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0
cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4sIFJlZlB0cjxX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsK
LSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4
dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsK
LSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLQot
ICAgIC8vIEludGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ci0g
ICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGR1
cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSk7Ci0gICAgdm9pZCBjdXJy
ZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRv
dWJsZSBhbmNob3JUaW1lKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRl
ZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRp
bWUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAgdm9pZCBj
YW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSk7
Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFdlYkNv
cmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLSAg
ICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCk7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eQotICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcGF1c2Uo
dWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsK
LSAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2Vl
a1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKLSAgICB2b2lkIGZhc3RT
ZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOwotICAgIHZvaWQgYmVnaW5TY2Fu
bmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdC
YWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZW5kU2Nhbm5pbmcodWludDY0
X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qg
Y29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFP
cHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBoYW5k
bGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQg
dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNldE11dGVkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7Ci0KLSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAg
SGFzaE1hcDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiwgdWludDY0X3Q+IG1fbWVkaWFFbGVt
ZW50czsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRl
eHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0g
ICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTY2
NmE3MTU0Y2M0YTk0NGQwNGVjYTg2Y2IzMDMwMDZiZDc3OGExLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAg
LTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lm
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgewotICAg
IFBsYXkodWludDY0X3QgY29udGV4dElkKQotICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkK
LSAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQotICAgIEJlZ2luU2NydWJi
aW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBFbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKQotICAgIFNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLSAg
ICBGYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQotICAgIEJlZ2luU2Nh
bm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBCZWdpblNjYW5uaW5nQmFja3dh
cmQodWludDY0X3QgY29udGV4dElkKQotICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpCi0gICAgU2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3QgaW5kZXgpCi0gICAgSGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3Qo
dWludDY0X3QgY29udGV4dElkKQotICAgIFRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3Qg
Y29udGV4dElkKQotICAgIFRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBTZXRN
dXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi19Ci0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NWEyN2U0OGIyYTQy
ODI5ZmI0NDIyNGMxNzRkOWIyMzgzNTViNWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIkF0dGFjaG1lbnQu
aCIKLSNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAiV2ViUGFnZS5o
IgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0
ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2Vi
UHJvY2Vzcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9F
dmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9Vc2VyR2VzdHVyZUlu
ZGljYXRvci5oPgotI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdWludDY0X3QgbmV4dENv
bnRleHRJZCgpCi17Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnRleHRJZCA9IDA7Ci0gICAgcmV0
dXJuICsrY29udGV4dElkOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6Oldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2Vy
KQotICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotewotfQotCi1XZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0Ojp+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCgp
Ci17Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmVzZXRN
ZWRpYVN0YXRlKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnJl
c2V0TWVkaWFTdGF0ZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAg
ICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmR1cmF0aW9uQ2hhbmdlZChtX2Nv
bnRleHRJZCwgZHVyYXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBh
bmNob3JUaW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+Y3Vy
cmVudFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1l
Q2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAg
ICAgIG1fbWFuYWdlci0+YnVmZmVyZWRUaW1lQ2hhbmdlZChtX2NvbnRleHRJZCwgYnVmZmVyZWRU
aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpyYXRl
Q2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIGlmICht
X21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cmF0ZUNoYW5nZWQobV9jb250ZXh0SWQsIGlz
UGxheWluZywgcGxheWJhY2tSYXRlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tT
dGFydGVkVGltZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnBs
YXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1l
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpzZWVrYWJs
ZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgcmFuZ2VzLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChtX2Nv
bnRleHRJZCwgcmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNhblBsYXlGYXN0
UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQobV9jb250ZXh0SWQsIHZhbHVl
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBv
cHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5h
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAg
ICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlv
bkluZGV4Q2hhbmdlZChtX2NvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQo
Ym9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKQotewotICAg
IGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5n
ZWQobV9jb250ZXh0SWQsIGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OndpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQotewotICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgIG1fbWFuYWdlci0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFu
Z2VkKG1fY29udGV4dElkLCBkaXNhYmxlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1f
bWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5tdXRlZENoYW5nZWQobV9jb250ZXh0SWQsIG11
dGVkKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgotCi1S
ZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcihwYWdlKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFn
ZSgmcGFnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCi17Ci0gICAgZm9yIChhdXRvJiB0dXBs
ZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZSht
b2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotICAgICAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCpp
bnRlcmZhY2UpOwotICAgICAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOwotCi0g
ICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIG1fY29udGV4dE1h
cC5jbGVhcigpOwotICAgIG1fbWVkaWFFbGVtZW50cy5jbGVhcigpOwotICAgIG1fY2xpZW50Q291
bnRzLmNsZWFyKCk7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3Jl
YXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWwgPSBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAgICBtb2RlbC0+YWRk
Q2xpZW50KCppbnRlcmZhY2UpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3Zl
KG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUo
KSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBy
ZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViQ29yZTo6V2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVu
c3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+
KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi1XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0JiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4o
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKLSAg
ICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwot
ICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKTsKLQotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtZWRpYUVsZW1lbnQg
PSBtb2RlbC0+bWVkaWFFbGVtZW50KCk7Ci0gICAgbW9kZWwtPnNldE1lZGlhRWxlbWVudChudWxs
cHRyKTsKLSAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAgIGludGVyZmFj
ZS0+aW52YWxpZGF0ZSgpOwotICAgIG1fbWVkaWFFbGVtZW50cy5yZW1vdmUobWVkaWFFbGVtZW50
LmdldCgpKTsKLSAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNv
bnRleHRJZCkpOwotICAgIGlmIChtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKSkKLSAg
ICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBhdXRv
IGZvdW5kSXRlcmF0b3IgPSBtX21lZGlhRWxlbWVudHMuZmluZCgmbWVkaWFFbGVtZW50KTsKLSAg
ICBpZiAoZm91bmRJdGVyYXRvciAhPSBtX21lZGlhRWxlbWVudHMuZW5kKCkpIHsKLSAgICAgICAg
dWludDY0X3QgY29udGV4dElkID0gZm91bmRJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmICht
X2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9PSBjb250ZXh0SWQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICAg
ICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0g
ICAgICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4dElkOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1lbnRzLmVuc3VyZSgmbWVk
aWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9KTsKLSAgICAgICAgYXV0
byBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBpZiAobV9j
b250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgICAgICByZW1vdmVDbGllbnRGb3JDb250
ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICAgICAgbV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7Ci0gICAgICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
c2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOwotICAgIH0KLQotICAgIGFkZENsaWVudEZv
ckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZXRVcFBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyV2l0aElEKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpj
bGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAg
aWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAg
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAwOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpDbGVhclBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotI2VuZGlmCi19Ci0KLXVpbnQ2NF90IFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBt
X21lZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29u
dGV4dElkKCk7IH0pOwotICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRNZWRpYUVsZW1lbnQoJm1l
ZGlhRWxlbWVudCk7Ci0gICAgcmV0dXJuIGNvbnRleHRJZDsKLX0KLQotI3ByYWdtYSBtYXJrIElu
dGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OgotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0
SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkR1cmF0aW9uQ2hhbmdlZChj
b250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKLXsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q3VycmVudFRp
bWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRp
bWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
QnVmZmVyZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXliYWNrU3Rh
cnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRl
ZFRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OlBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgcGxheWJh
Y2tTdGFydGVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1Bs
YXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmF0ZUNoYW5nZWQoY29udGV4dElkLCBp
c1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBs
YXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewotICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewotICAgICAgICBkb3Vi
bGUgc3RhcnQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLnN0YXJ0KGkpLnRvRG91YmxlKCk7Ci0gICAg
ICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLnJhbmdlcygpLmVuZChpKS50b0RvdWJsZSgpOwot
ICAgICAgICByYW5nZXNWZWN0b3IuYXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsKLSAgICB9Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNl
ZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZChjb250ZXh0SWQsIFdURk1vdmUocmFuZ2VzVmVjdG9y
KSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKSwgbV9wYWdlLT5wYWdlSUQo
KSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZl
cnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi17Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQoY29udGV4dElkLCB2YWx1ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVk
SW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxv
Y2FsaXplZERldmljZU5hbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdl
ZChjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0YXJnZXRUeXBlKSwg
bG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250
ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQotewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpXaXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQoY29udGV4dElkLCBkaXNhYmxlZCkpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok11dGVkQ2hhbmdlZChjb250ZXh0SWQsIG11dGVkKSk7Ci19
Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eToKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXkoKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wYXVzZSgpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0
SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQbGF5U3RhdGUoKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNj
cnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjcnVi
YmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5lbmRTY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpz
ZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi17Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9UaW1lKHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRp
bWUpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mYXN0U2Vlayh0aW1lKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdp
blNjYW5uaW5nRm9yd2FyZCgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY2FubmluZygpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWlu
dDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGlj
YXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBj
b250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBlbGVtZW50ID0gZW5zdXJlTW9kZWwoY29udGV4dElk
KS5tZWRpYUVsZW1lbnQoKTsKLSAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkhhbmRsZUNvbnRyb2xs
ZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQsIGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCkp
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQaWN0dXJlSW5Q
aWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVNdXRlZCgpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkK
LXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE11dGVkKG11dGVkKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5YTAwZjExYWVhNDQ0Zjk2
ODUxMzViOTk3MGNjYTJkOGFlNzMyOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0j
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3Rl
bmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50RW51bXMuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIEF0dGFjaG1lbnQ7Ci1jbGFzcyBDb25uZWN0aW9uOwot
Y2xhc3MgRGVjb2RlcjsKLWNsYXNzIE1lc3NhZ2VSZWNlaXZlcjsKLX0KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgTm9kZTsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIExheWVySG9zdGluZ0NvbnRleHQ7Ci1jbGFzcyBXZWJQYWdlOwotY2xh
c3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDsKLWNsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI7Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwotCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ci0gICAgOiBwdWJsaWMgUmVmQ291
bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PgotICAgICwgcHVibGljIFdl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGNyZWF0ZShXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKSB7
IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotICAgIExheWVySG9zdGluZ0NvbnRleHQqIGxheWVy
SG9zdGluZ0NvbnRleHQoKSB7IHJldHVybiBtX2xheWVySG9zdGluZ0NvbnRleHQuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9z
dGluZ0NvbnRleHQ+JiYpOwotCi0gICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNBbmltYXRpbmc7IH0KLSAgICB2b2lkIHNldElzQW5pbWF0aW5nKGJvb2wgZmxhZykgeyBt
X2lzQW5pbWF0aW5nID0gZmxhZzsgfQotCi0gICAgYm9vbCB0YXJnZXRJc0Z1bGxzY3JlZW4oKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldElzRnVsbHNjcmVlbjsgfQotICAgIHZvaWQgc2V0VGFyZ2V0
SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZsYWc7IH0K
LQotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBmdWxsc2NyZWVuTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGU7IH0KLSAg
ICB2b2lkIHNldEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSB7IG1fZnVsbHNjcmVlbk1vZGUgPSBtb2RlOyB9Ci0K
LSAgICBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1faXNGdWxsc2NyZWVuOyB9
Ci0gICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1faXNGdWxsc2NyZWVuID0g
ZmxhZzsgfQotCi1wcml2YXRlOgotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
Ci0gICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2aWRl
b0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOwot
Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKLQotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0Owot
ICAgIGJvb2wgbV9pc0FuaW1hdGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3RhcmdldElzRnVs
bHNjcmVlbiB7IGZhbHNlIH07Ci0gICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1fZnVsbHNjcmVlbk1vZGUgeyBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07Ci0gICAgYm9vbCBtX2lzRnVs
bHNjcmVlbiB7IGZhbHNlIH07Ci19OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFdlYlBhZ2UmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyJik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwotICAgIAot
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIAotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJbnRl
cmZhY2UgdG8gQ2hyb21lQ2xpZW50Ci0gICAgYm9vbCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0
OwotICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVt
ZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmKTsKLSAgICB2b2lkIGV4aXRWaWRlb0Z1bGxz
Y3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmLCBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ7Ci0KLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2Um
LCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8
UmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiwgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1
cGxlOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
OwotCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQKLSAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFz
VmlkZW8pOwotICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKLSAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVu
TW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSk7Ci0gICAgdm9pZCBk
aWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZEV4aXRG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkaWRFbnRlckZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWlu
dDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1l
bnQgZmVuY2VQb3J0KTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRf
dCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpOwotICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lu
bGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSk7Ci0gICAgCi0gICAg
V2ViUGFnZSogbV9wYWdlOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50KiwgdWludDY0X3Q+IG1fdmlkZW9FbGVtZW50czsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBN
b2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2Ns
aWVudENvdW50czsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29h
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1OWMyNWFhZTdiMDE1ZTMwMTNkOWExYjE1MDdi
NjEwYTJmYmNhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0j
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
LSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUo
QVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQotbWVzc2FnZXMgLT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciB7Ci0gICAgUmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wg
ZmluaXNoZWRXaXRoTWVkaWEpCi0gICAgRGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLSAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRGlk
RW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBEaWRDbGVhbnVwRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgU2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2ht
ZW50IGZlbmNlUG9ydCkKLSAgICBTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29u
dGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQotICAgIEZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotICAgIEZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKLX0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBh
NDBmZDcyZDFkMDVjY2RkNjM1ZDkwYWFhZmY0M2M4YzEzNDM2My4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDQ4MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCi0KLSNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFW
S0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKLQotI2ltcG9ydCAiQXR0YWNobWVudC5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9y
dCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0ICJXZWJQYWdlLmgiCi0jaW1wb3J0
ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzLmgiCi0j
aW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0IDxRdWFydHpD
b3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVu
dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZGVvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRl
clZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
VGltZVJhbmdlcy5oPgotI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgSW50UmVjdCBpbmxp
bmVWaWRlb0ZyYW1lKEhUTUxWaWRlb0VsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgZWxlbWVudC5k
b2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGF1
dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byByZWN0ID0gcmVuZGVyZXItPnZpZGVvQm94KCk7
Ci0gICAgcmVjdC5tb3ZlQnkocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkubG9j
YXRpb24oKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRz
VG9Sb290VmlldyhyZWN0KTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dAotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdl
cikKLSAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQo
KQotewotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExh
eWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYg
Y29udGV4dCkKLXsKLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6Omhhc1ZpZGVv
Q2hhbmdlZChib29sIGhhc1ZpZGVvKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+aGFzVmlkZW9DaGFuZ2VkKG1fY29udGV4dElkLCBoYXNWaWRlbyk7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hh
bmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV9jb250ZXh0
SWQsIHZpZGVvRGltZW5zaW9ucyk7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIKLQotUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdl
cikpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImIHBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIpCi0gICAgOiBtX3BhZ2UoJnBhZ2UpCi0gICAgLCBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIocGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLXsKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOwot
fQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cigpCi17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewot
ICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVs
OwotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotCi0g
ICAgICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7Ci0gICAgICAgIG1vZGVsLT5y
ZW1vdmVDbGllbnQoKmludGVyZmFjZSk7Ci0KLSAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRl
KCk7Ci0gICAgfQotCi0gICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7Ci0gICAgbV92aWRlb0VsZW1l
bnRzLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKLSAgICAKLSAgICBpZiAo
bV9wYWdlKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6aW52YWxpZGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRl
TW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKLSAgICBtX3BsYXliYWNrU2Vz
c2lvbk1hbmFnZXItPmFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIGludGVy
ZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVG
b3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOwotICAgIG1vZGVsLT5hZGRDbGllbnQoKmludGVy
ZmFjZSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZN
b3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbElu
dGVyZmFjZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2Nv
bnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKLSAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWlu
dDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxB
bmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50
NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUo
bW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwot
Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5yZW1vdmVDbGllbnRGb3JDb250ZXh0KGNv
bnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0g
bW9kZWwtPnZpZGVvRWxlbWVudCgpOwotICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0
cik7Ci0gICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLSAgICBpbnRlcmZhY2Ut
PmludmFsaWRhdGUoKTsKLSAgICBtX3ZpZGVvRWxlbWVudHMucmVtb3ZlKHZpZGVvRWxlbWVudC5n
ZXQoKSk7Ci0gICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNvbnRl
eHRJZCwgMSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIEFT
U0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKLQotICAgIGludCBjbGll
bnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChjb250ZXh0SWQpOwotICAgIEFTU0VSVChjbGll
bnRDb3VudCA+IDApOwotICAgIGNsaWVudENvdW50LS07Ci0KLSAgICBpZiAoY2xpZW50Q291bnQg
PD0gMCkgewotICAgICAgICBtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKTsKLSAgICAg
ICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJZCwgY2xpZW50Q291bnQpOwotfQotCi0jcHJh
Z21hIG1hcmsgSW50ZXJmYWNlIHRvIENocm9tZUNsaWVudDoKLQotYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKLXsKLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIHJldHVybiBTZXR0aW5nczo6
YXZLaXRFbmFibGVkKCk7Ci0jZWxzZQotICAgIHJldHVybiBtb2RlID09IEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUgJiYgc3VwcG9ydHNQ
aWN0dXJlSW5QaWN0dXJlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVt
ZW50JiB2aWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKQotewotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVChtb2RlICE9IEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3Jl
ZW5Gb3JWaWRlb0VsZW1lbnQoJXApIiwgdGhpcyk7Ci0KLSAgICB1aW50NjRfdCBjb250ZXh0SWQg
PSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNvbnRleHRJZEZvck1lZGlhRWxlbWVudCh2aWRl
b0VsZW1lbnQpOwotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92aWRlb0VsZW1lbnRzLmFkZCgmdmlk
ZW9FbGVtZW50LCBjb250ZXh0SWQpOwotICAgIFVOVVNFRF9QQVJBTShhZGRSZXN1bHQpOwotICAg
IEFTU0VSVChhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID09IGNvbnRleHRJZCk7Ci0KLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAg
c3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpOwotICAgIGFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLSAgICBpZiAoIWlu
dGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKQotICAgICAgICBpbnRlcmZhY2UtPnNldExh
eWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxI
b3N0aW5nUHJvY2VzcygpKTsKLQotICAgIGF1dG8gdmlkZW9SZWN0ID0gaW5saW5lVmlkZW9GcmFt
ZSh2aWRlb0VsZW1lbnQpOwotICAgIEZsb2F0UmVjdCB2aWRlb0xheWVyRnJhbWUgPSBGbG9hdFJl
Y3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZpZGVvUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgb2xkTW9kZSA9IGludGVy
ZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsKLSAgICBpbnRlcmZhY2UtPnNldFRhcmdldElzRnVsbHNj
cmVlbih0cnVlKTsKLSAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOwotICAg
IG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQoJnZpZGVvRWxlbWVudCk7Ci0gICAgaWYgKG9sZE1vZGUg
PT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSkKLSAgICAg
ICAgbW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZSh2aWRlb0xheWVyRnJhbWUpOwotCi0gICAgaWYg
KGludGVyZmFjZS0+aXNBbmltYXRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludGVyZmFj
ZS0+c2V0SXNBbmltYXRpbmcodHJ1ZSk7Ci0KLSAgICBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1
cmUgPSB2aWRlb0VsZW1lbnQud2Via2l0U3VwcG9ydHNQcmVzZW50YXRpb25Nb2RlKEhUTUxWaWRl
b0VsZW1lbnQ6OlZpZGVvUHJlc2VudGF0aW9uTW9kZTo6UGljdHVyZUluUGljdHVyZSk7Ci0gICAg
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChjb250ZXh0SWQsIGludGVyZmFjZS0+bGF5ZXJIb3N0
aW5nQ29udGV4dCgpLT5jb250ZXh0SUQoKSwgdmlkZW9SZWN0LCBtX3BhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKSwgYWxsb3dzUGljdHVyZUluUGlj
dHVyZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZp
ZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgl
cCkiLCB0aGlzKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLSAgICBBU1NFUlQobV92aWRlb0VsZW1l
bnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKLQotICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9
IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZpZGVvRWxlbWVudCk7Ci0gICAgYXV0byYgaW50ZXJmYWNl
ID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0
SXNGdWxsc2NyZWVuKGZhbHNlKTsKLQotICAgIGlmIChpbnRlcmZhY2UuaXNBbmltYXRpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50ZXJmYWNlLnNldElzQW5pbWF0aW5nKHRydWUpOwot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQsIGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50
KSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCi17Ci0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2Rl
V2l0aG91dEFuaW1hdGlvbiglcCkiLCB0aGlzKTsKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFT
U0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOwotCi0gICAgdWlu
dDY0X3QgY29udGV4dElkID0gbV92aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKLSAg
ICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGlu
dGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotCi0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVu
V2l0aG91dEFuaW1hdGlvblRvTW9kZShjb250ZXh0SWQsIHRhcmdldE1vZGUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZpZGVvRWxlbWVudCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRhcmdldE1vZGUpOwotI2VuZGlmCi19Ci0KLSNwcmFnbWEgbWFyayBJbnRlcmZh
Y2UgdG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDoKLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpoYXNWaWRlb0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIGhhc1ZpZGVvKQotewotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRIYXNWaWRlbyhjb250
ZXh0SWQsIGhhc1ZpZGVvKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAgIGlmIChtX3BhZ2Up
Ci0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoY29udGV4dElkLCB2aWRlb0RpbWVuc2lvbnMpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OgotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlz
aGVkV2l0aE1lZGlhKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmVxdWVzdEZ1bGxz
Y3JlZW5Nb2RlKG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlk
ZW9GdWxsc2NyZWVuTW9kZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0
dXBGdWxsc2NyZWVuKCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQpOwotCi0gICAgQVNTRVJUKG1f
cGFnZSk7Ci0gICAgUGxhdGZvcm1MYXllciogdmlkZW9MYXllciA9IFtDQUxheWVyIGxheWVyXTsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgW3ZpZGVvTGF5ZXIgc2V0TmFtZTpAIldlYiB2aWRlbyBmdWxs
c2NyZWVuIG1hbmFnZXIgbGF5ZXIiXTsKLSNlbmRpZgotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVn
aW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBb
dmlkZW9MYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgwLCAwKV07Ci0gICAgW3ZpZGVvTGF5
ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5z
cGFyZW50KV07Ci0KLSAgICAvLyBTZXQgYSBzY2FsZSBmYWN0b3IgaGVyZSB0byBtYWtlIGNvbnZl
cnRSZWN0OnRvTGF5ZXI6bmlsIHRha2Ugc2NhbGUgZmFjdG9yIGludG8gYWNjb3VudC4gPHJkYXI6
Ly9wcm9ibGVtLzE4MzE2NTQyPi4KLSAgICAvLyBUaGlzIHNjYWxlIGZhY3RvciBpcyBpbnZlcnRl
ZCBpbiB0aGUgaG9zdGluZyBwcm9jZXNzLgotICAgIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciA9
IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBbdmlkZW9MYXllciBzZXRUcmFuc2Zv
cm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0b3IsIGhvc3RpbmdTY2Fs
ZUZhY3RvciwgMSldOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0
aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIodmlkZW9MYXllcik7Ci0KLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAKLSAgICBt
b2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9MYXllciwgW3Byb3RlY3RlZFRoaXMs
IHRoaXMsIGNvbnRleHRJZF0gewotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7Ci0gICAgICAg
ICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1bGxz
Y3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAg
ICAgIH0pOwotICAgIH0pOwotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0g
ICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJ
ZCk7Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRl
cmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxz
ZSk7Ci0gICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotCi0gICAgaWYgKGlu
dGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJl
ZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50
KCk7Ci0gICAgaWYgKCF2aWRlb0VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIGV4
aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1cmluZyBh
biBhbmltYXRpb24uCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3Rl
Y3RlZFRoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudF0gewotICAgICAgICBpZiAocHJvdGVj
dGVkVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZXhpdFZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50KTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRFeGl0RnVsbHNjcmVlbiglcCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKLQotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAg
ICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNv
bnRleHRJZCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3Rl
ZFRoaXModGhpcyk7Ci0gICAgCi0gICAgbW9kZWwtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRo
ZW4oW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0gewotICAgICAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhp
cywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVsXSB7Ci0gICAgICAgICAgICBtb2RlbC0+c2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRl
cmZhY2VdIHsKLSAgICAgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+
c2V0Um9vdExheWVyKG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNl
LT5zZXRMYXllckhvc3RpbmdDb250ZXh0KG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElk
KSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0gICAgCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQpOwotCi0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwot
ICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcoZmFsc2UpOwotICAg
IGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1v
ZGUoKTsKLSAgICBib29sIHRhcmdldElzRnVsbHNjcmVlbiA9IGludGVyZmFjZS0+dGFyZ2V0SXNG
dWxsc2NyZWVuKCk7Ci0KLSAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsK
LSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0gbW9kZWwtPnZpZGVv
RWxlbWVudCgpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICByZW1vdmVDbGllbnRG
b3JDb250ZXh0KGNvbnRleHRJZCk7Ci0KLSAgICBpZiAoIXZpZGVvRWxlbWVudCB8fCAhdGFyZ2V0
SXNGdWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9FbGVtZW50LCBt
b2RlXSB7Ci0gICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9F
bGVtZW50LCBtb2RlKTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5z
aWduZWQgZ3Jhdml0eSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldFZpZGVvTGF5
ZXJHcmF2aXR5KChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KWdyYXZpdHkp
OwotfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCi17
Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIG1vZGVsID0g
ZW5zdXJlTW9kZWwoY29udGV4dElkKTsKLQotICAgIGlmICghaXNQYWdlVmlzaWJsZSkKLSAgICAg
ICAgbW9kZWwudmlkZW9FbGVtZW50KCktPnNjcm9sbEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNl
KTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6UHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGNvbnRleHRJZCwgdHJ1ZSwgaW5saW5lVmlk
ZW9GcmFtZSgqbW9kZWwudmlkZW9FbGVtZW50KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0g
ICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZl
bmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6
QXR0YWNobWVudCBmZW5jZVBvcnQpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoJXAsICV4KSIsIHRoaXMs
IGNvbnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oYm91bmRz
LngoKSkgfHwgc3RkOjppc25hbihib3VuZHMueSgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy53aWR0
aCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy5oZWlnaHQoKSkpIHsKLSAgICAgICAgYXV0byB2aWRl
b1JlY3QgPSBpbmxpbmVWaWRlb0ZyYW1lKCptb2RlbC0+dmlkZW9FbGVtZW50KCkpOwotICAgICAg
ICBib3VuZHMgPSBGbG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZpZGVvUmVjdC5o
ZWlnaHQoKSk7Ci0gICAgfQotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjowXTsKLSAgICBpZiAoaW50ZXJmYWNl
LT5sYXllckhvc3RpbmdDb250ZXh0KCkpCi0gICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5n
Q29udGV4dCgpLT5zZXRGZW5jZVBvcnQoZmVuY2VQb3J0LnBvcnQoKSk7Ci0gICAgbW9kZWwtPnNl
dFZpZGVvTGF5ZXJGcmFtZShib3VuZHMpOwotICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hf
dGFza19zZWxmKCksIGZlbmNlUG9ydC5wb3J0KCkpOwotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1p
dF07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9T
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDI0MzM1YWNh
NTZmZjg0OTFiNWExMzIxNjJhN2Q5NDFjMTFkMDg1MTkuLmZlYWNjNjVlZTBjYmZmYTcwNzIwMDgz
MzI5NjhiOGNiOGU4YmE1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KQEAgLTMxNiw4ICszMTYsOCBAQAogCiAKICNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oPgogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKQEAg
LTkyNjUsMTEgKzkyNjUsMTEgQEAgLSAodm9pZClfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ckZvck1lZGlhRWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAg
IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lv
bk1vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOwogICAg
IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbC0+c2V0TWVkaWFFbGVtZW50KCZtZWRpYUVs
ZW1lbnQpOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQot
ICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoKl9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2Rl
bCk7CisgICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKTsKIAogICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaCBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAppbmRleCBhNzhiMDkwZTA3YmU0MzYxOTZh
Njk1Y2ExMjg3ZTg3OGQyNjY2MWNjLi5iZGVkZjc3M2RkZmRlMDY2ZmE1MmUxNzU2Y2I2ODIyMjc0
NmNmNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXdEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0
YS5oCkBAIC01NCw4ICs1NCw4IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBUZXh0SW5kaWNhdG9yV2lu
ZG93OwogY2xhc3MgVmFsaWRhdGlvbkJ1YmJsZTsKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OworY2xh
c3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ7CiAjZW5kaWYKIH0KIApAQCAtMzM4LDggKzMzOCw4IEBAIHByaXZhdGU6
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKQotICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudD4gcGxheWJhY2tTZXNzaW9uTW9kZWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworICAg
IFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJh
Y2tTZXNzaW9uTW9kZWw7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYz4gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwogI2VuZGlmCiAgICAgCiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWV3RGF0YS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlld0RhdGEubW0KaW5kZXggNzc5NzM2YTE2YWZmNjBlM2ZhNWEwYWM3ZWEzNjQwNmRjMzY0
ZjJlNC4uZjkzMGZhOTZjODg1YmJmZjc0MDRmMDcyMzU5Njc1OTU1ZmM0YjgzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCkBAIC01MSw4ICs1
MSw4IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CiAj
ZW5kaWYKIAogQk9PTCBhcHBsaWNhdGlvbklzVGVybWluYXRpbmcgPSBOTzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316609</attachid>
            <date>2017-07-27 20:51:47 -0700</date>
            <delta_ts>2017-07-27 22:45:21 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-174437-20170727205146.patch</filename>
            <type>text/plain</type>
            <size>693974</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5OTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU1MWM1NmFjMDQ3ZmY4
YTIyNGFiZWY2YzI5MzUyYWUwZTljMTI5Zi4uZDU3ZjMyMWU0Y2QzMDU0NWU5ZjNmNjM3NTE4NGEw
ZjVkOWZmZjk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE3LTA3LTIxICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgV2ViIHByZWZp
eCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNzaW9uIGNsYXNzZXMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0MzcK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVz
dHMgYmVjYXVzZSBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgUmVtb3ZlIHJlZHVuZGFu
dCBXZWItIHByZWZpeCBmcm9tIGNsYXNzZXMgaW4gV2ViQ29yZSBuYW1lc3BhY2UuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmguCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2U6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1BsYXliYWNrU2Vzc2lvbk1vZGVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oLgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uTW9kZWw6On5QbGF5YmFja1Nlc3Npb25Nb2RlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDo6flBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmguCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9W
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOjp+VmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1vZGVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuTW9kZWw6On5WaWRlb0Z1bGxzY3JlZW5Nb2RlbCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nv
Y29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0uCisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0uCisgICAg
ICAgICogcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJB
VlBsYXllckNvbnRyb2xsZXIubW06CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmguCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbTogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKwogMjAxNy0wNy0yNyAgQWFyb24gQ2h1
ICA8YWFyb25fY2h1QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogVm9pY2VPdmVyIHNpbGVudCBv
ciBza2lwcGluZyBvdmVyIHRpbWUgdmFsdWVzIG9uIG1lZGlhIHBsYXllci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
YjA1OGRmM2JlMTI5ODMxMTVlMDJlZjM4ZjE4YmUzNmRmYzkzODk3Ni4uZThmMmYzYzgwMjZhYWEy
ZTA4YTdiYjY2M2E5MjQ5N2FkNTU3ZWQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAx
Ny0wNy0yMSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVt
b3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4gYW5kIFdlYlBsYXliYWNrU2Vz
c2lvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc0NDM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAg
ICAgUmVtb3ZlIHJlZHVuZGFudCBXZWItIHByZWZpeCBmcm9tIGNsYXNzZXMgaW4gV2ViS2l0IG5h
bWVzcGFjZS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmguCisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW06IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubW0uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVNZWRp
YVRvdWNoQmFyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6bV93ZWFrUHRyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAg
ICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dmlkZW9G
dWxsc2NyZWVuTWFuYWdlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4uCisgICAgICAg
ICogV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOiBBZGRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLmguCisgICAgICAgIChXZWJLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ6OmNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4uCisgICAgICAgICog
V2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
bW0uCisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1tOiBSZW1vdmVkLgorCiAyMDE3LTA3LTI3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBQYXJ0IDIgb2Y6IFJlbmFtZSBEYXRhYmFzZVByb2Nlc3MgdG8gU3Rv
cmFnZVByb2Nlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYWFlZGU4OTM3MjNh
NTIwYjgyZjAyYWIzODk3ZWY2OTU4MjlmN2Q0ZS4uOGVjYWY3NWMzYjM3ZDAxOTI0NDE3NGRmNmU2
MmRiMDc0ZTAwNDFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
IEBACisyMDE3LTA3LTIxICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW1vdmUgV2ViIHByZWZpeCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxh
eWJhY2tTZXNzaW9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzQ0MzcKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
KworICAgICAgICBSZW1vdmUgcmVkdW5kYW50IFdlYi0gcHJlZml4IGZyb20gY2xhc3NlcyBpbiBX
ZWJLaXQgbmFtZXNwYWNlLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAg
ICAoLVtXZWJWaWV3IF9zZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyRm9yTWVkaWFFbGVtZW50
Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEuaDoKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlZpZXdEYXRhLm1tOgorCiAyMDE3LTA3LTI2ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlbW92ZSBXRUJfVElNSU5HIGZlYXR1cmUgZmxhZwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJlNDYw
MGRlYTMwMWZhNzMwOWE2NWZmYzEyNzZiYjVkYTdlMTY2MjguLjk3ZDdkMjM5ODIwYmU4ZDMyY2Vk
ZjI5NzQ3NmU2MjczNzNhNmNmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2ODMsOCArMTY4Myw4IEBACiAJCTNGODAyMDM2
MUU5RTQ3QzMwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODAyMDMxMUU5RTM4MUQwMERF
QzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmNwcCAqLzsgfTsKIAkJM0Y4MDIwMzcxRTlF
NDdDNTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjgwMjAzNDFFOUUzODFEMDBE
RUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKIAkJM0Y4MDIw
MzgxRTlFNDdDOTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODAyMDMzMUU5
RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi87IH07
Ci0JCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5tbSAqLzsgfTsKLQkJM0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW0gKi87IH07CisJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJM0ZGMUZBNjYxRTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0YzQkI1ODIxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwICov
OyB9OwogCQkzRkY4MTNBNzFEQkE4NjQwMDA5QkYwMDEgLyogUG9pbnRlckxvY2tDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0
RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZGRkY5QTgxNTlEOUE1NTAw
MjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkZGRjlBNjE1OUQ5QTU1MDAyMEJCRDUgLyogV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlLmNwcCAqLzsgfTsKQEAgLTI0NjMsMTEgKzI0NjMsMTEgQEAKIAkJ
NTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjEx
NzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLzsgfTsKIAkJNTFGQjY3REIxQUU2QjgyQjAwRDA2QzVB
IC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250
ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi87IH07CiAJCTUxRkI2N0RDMUFFNkI4MkYwMEQw
NkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENv
bnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMubW0gKi87IH07CisJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tICovOyB9OwogCQk1MjY3MjRGMzFDQjJGRUFEMDA3NTk3
NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovOyB9OwogCQk1MkIwRDRCRTFDNTdGRDFF
MDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJC
MEQ0QzAxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRC
RjFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkIwRDRD
MjFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdG
RjkxMDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJCMEQ0QzAxQzU3RkQ2
NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRjFDNTdGRDY2MDA3N0NF
NTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMg
LyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJCNkM5QzIxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJCNkM5QkQxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24u
Y3BwICovOyB9OwogCQk1MkI2QzlDMzE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29s
bGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCNkM5QkUxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsg
fTsKIAkJNTJCNkM5QzUxNUUzRjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCNkM5QzAx
NUUzRjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwpAQCAtMjQ3
NSw5ICsyNDc1LDkgQEAKIAkJNTJDQ0E5RTIxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkNDQTlFMDE1RTNGNjJDMDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0
aW9uLmNwcCAqLzsgfTsKIAkJNTJDQ0E5RTMxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJDQ0E5RTExNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlv
bi5oICovOyB9OwogCQk1MkQ1QTE4RjFDNTQ1OTIzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TGF5ZXJNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFu
YWdlci5tbSAqLzsgfTsKLQkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MkQ1
QTFBODFDNTc0OEEzMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVB
MUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUy
RDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
RDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbSAqLzsgfTsKKwkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkQ1QTFBODFD
NTc0OEEzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE1MUM1NzQ4
ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyRDVBMUE5MUM1NzQ4
QTkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE2MUM1NzQ4ODkw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLzsgfTsKIAkJ
NTJFMkNBRkMxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0
RiAvKiBNZWRpYVByb2R1Y2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTJGMTA4NjUxNjJCNkRBNDAwOUFDODFFIC8qIE1peGVkQ29udGVudENo
ZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJGMTA4NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovOyB9
OwogCQk1MkYxMDg2NjE2MkI2REE4MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjMxNjJC
NkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjE2OSwxNSArNjE2OSwxNSBAQAogCQlD
REEwN0ZCRTE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQkMxOEUwQTE2QTAw
NDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREEwN0ZDMTE4RTBBMjJCMDA0Njk5RkEgLyogU3lz
dGVtU2xlZXBMaXN0ZW5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTA3RkJGMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3Rl
bmVyTWFjLm1tICovOyB9OwogCQlDREEwN0ZDMjE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xl
ZXBMaXN0ZW5lck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMDdGQzAxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMu
aCAqLzsgfTsKLQkJQ0RBMjlBMDkxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNE
QTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEExQ0JEOUE3
NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEMxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9OwotCQlDREEy
OUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5
QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNE
QTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEx
NDFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICov
OyB9OwotCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RB
MjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lm1tICovOyB9OworCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlB
MEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwQTFDQkQ5QTc0MDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87IH07CisJCUNEQTI5QTBGMUNCRDlDRkUwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi87IH07CisJCUNEQTI5QTE3MUNCREE1NkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQubW0gKi87IH07CiAJCUNEQTI5QTMxMUNCRjc0REEwMDkwMUNDRiAv
KiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRDFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJD
b250cm9sbGVyLm1tICovOyB9OwotCQlDREEyOUEzMjFDQzAxQTk1MDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNEQTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0RBNzk4MjQxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE3OTgyMzE3MEEy
NTgzMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmNwcCAqLzsgfTsKIAkJQ0RBNzk4MjcxNzBBMjc5
MTAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTc5ODI1MTcwQTI3OTAwMEQ0NUM1NSAvKiBBdWRpb1Nl
c3Npb25JT1MubW0gKi87IH07CiAJCUNEQTc5ODJBMTcwQTNEMDAwMEQ0NUM1NSAvKiBBdWRpb1Nl
c3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTc5ODIxMTcwQTIyREMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTI5Myw4ICs5MjkzLDggQEAKIAkJ
M0Y4MDIwMzIxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjgwMjAzMzFFOUUzODFEMDBERUM2MUQgLyog
Q29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1
ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZC
QzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUw
MDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QTcxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1Zp
ZXdwb3J0UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QUIxNTlE
OUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxODYsMTIgKzEwMTg2LDEyIEBACiAJCTUxRkI1NTAz
MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNDbG9zZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFGQjY3RDkxQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHls
ZVNoZWV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRF
eHRlbnNpb25TdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFG
QjY3REExQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgw
MiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjIxQ0IyRkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJl
c2VudGF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMEQ0QkYxQzU3
RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyQjZDOUJEMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI2QzlC
RTE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjZDOUJGMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1l
ZEZsb3dDb2xsZWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01OYW1lZEZsb3dD
b2xsZWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjAxLDkgKzEw
MjAxLDkgQEAKIAkJNTJDQ0E5RTExNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29s
bGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEQxQzU0
NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEUxQzU0NTkwMzAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUE1
MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBNjFD
NTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
NUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE1MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQcm9kdWNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4
ZWRDb250ZW50Q2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNaXhlZENvbnRlbnRDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJGMTA4NjMxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWl4ZWRDb250ZW50Q2hlY2tlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2NzEsMTYgKzE0NjcxLDE2IEBACiAJCUNEQTA3RkJD
MThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVNsZWVwTGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0RBMDdGQkYxOEUwQTIyQjAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlz
dGVuZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeXN0
ZW1TbGVlcExpc3RlbmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEw
N0ZDMDE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEQxQ0JE
OUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE0MUNCREE1
NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTE1MUNCREE1NkMw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5
QTJDMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQVZQbGF5ZXJDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5QTJEMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJBVlBs
YXllckNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJBVlBsYXllckNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEy
RjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlB
MkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTJGMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUg
LyogQXVkaW9TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREE3OTgyMzE3MEEyNTgzMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2Vz
c2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTc5ODI1MTcwQTI3OTAw
MEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBBdWRpb1Nlc3Npb25JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTA1NywxNCArMTkwNTcsMTQgQEAKIAkJCQlFMUEzMTYyQzEzNEJDMzJEMDA3QzlB
NEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tICovLAogCQkJCUNENTg5NkUwMUNE
MkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oICovLAogCQkJCUNE
NTg5NkRGMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSAq
LywKLQkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLmggKi8sCi0JCQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLywKKwkJCQlDREEyOUExNTFDQkRBNTZDMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmggKi8sCisJCQkJQ0RBMjlBMTQxQ0JE
QTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLywKIAkJCQlD
RDgyMDMwNjEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
ICovLAogCQkJCUNEODIwMzA3MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tICovLAogCQkJCUNEODIwMzA4MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8sCiAJCQkJQ0Q4MjAzMDkxMzk1QUI2
QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8s
Ci0JCQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5oICovLAotCQkJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8sCisJCQkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUz
IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovLAorCQkJCTUyMTMxRTVBMUM0RjE1
NjEwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8sCiAJCQkJQ0Q4
MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovLAogCQkJCUNE
ODIwMzBGMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gKi8sCiAJCQkJ
OTM4MEY0NzcwOUExMUFDQzAwMUZEQjM0IC8qIFdpZGdldE1hYy5tbSAqLywKQEAgLTIxMDY1LDE0
ICsyMTA2NSwxNCBAQAogCQkJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5t
bSAqLywKIAkJCQlGNDgyMjMwRjFFMzg2OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFz
dGVib2FyZC5oICovLAogCQkJCUY0ODIyMzBFMUUzODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJv
dmlkZXJQYXN0ZWJvYXJkLm1tICovLAotCQkJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovLAotCQkJCUNEQTI5QTJGMUNCRjcz
RkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLywKKwkJ
CQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaCAqLywKKwkJCQlDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJMUY4NzU2QjExRTIyQkVFRjAwNDJDNDBEIC8qIFdl
YlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oICovLAogCQkJCTFGODc1NkIwMUUyMkJFRUYw
MDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0gKi8sCiAJCQkJM0Y0
MkIzMUIxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktp
dC5oICovLAogCQkJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQVZLaXQubW0gKi8sCi0JCQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8sCi0JCQkJM0ZCQzRBRjExODk4
ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovLAor
CQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oICovLAorCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyog
V2lkZ2V0SU9TLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBpb3M7CkBAIC0yMTExOSwxNCArMjEx
MTksMTQgQEAKIAkJCQlDREM5NzlGMzFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJyb3JF
eHRyYXMuaCAqLywKIAkJCQlDREM5NzlGMjFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJy
b3JFeHRyYXMubW0gKi8sCiAJCQkJNURGRUJBQjYxODU5MkI2RDAwQzc1QkVCIC8qIFdlYktpdEF2
YWlsYWJpbGl0eS5oICovLAotCQkJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLywKLQkJCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCAqLywKLQkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKLQkJCQlD
REEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi8sCi0JCQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLmggKi8sCi0JCQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggKi8sCi0JCQkJNTJENUExQTUxQzU3NDg4OTAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCi0JCQkJ
NTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50Lm1tICovLAorCQkJCUNEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UuaCAqLywKKwkJCQlDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCAqLywKKwkJCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKKwkJCQlDREEyOUEwQzFDQkQ5
Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJ
CQkJNTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmggKi8sCisJCQkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1vZGVsLmggKi8sCisJCQkJNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCisJCQkJNTJENUExQTYxQzU3NDg4OTAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDAwMCwxMSArMzAw
MDAsMTEgQEAKIAkJCQkwNzA5RDc5MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBMzE2MkQxMzRCQzMyRDAwN0M5QTRG
IC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1
ODk2RTIxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEzMjFDQzAxQTk1MDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMEYx
Q0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEzMjFDQzAxQTk1MDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTBCMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMEYxQ0JEOUNGRTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQ0FGMzQ4MTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQ0FGMzQ4MzBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMUIwRDdFMkI4MjAwN0MzOTgz
IC8qIFdlYlNjcmlwdE9iamVjdFByb3RvY29sLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDIxLDE0
ICszMDAyMSwxNCBAQAogCQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUyQjBENEMwMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJCMEQ0QzAxQzU3RkQ2
NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRDgyMDMwQTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0Y0MkIzMUQxODgxMTkxQjAwMjc4QUFDIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q4MjAzMEMxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFBODFDNTc0OEEz
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdD
RTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTJENUExQTcxQzU3NDg5RDAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MkQ1QTFBODFDNTc0OEEzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIw
MDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEz
RUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBC
Njk4MDE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAt
MzM3MDAsOSArMzM3MDAsOSBAQAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTMxNjJFMTM0
QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlDRDU4OTZFMTFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTBFMUNC
RDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFDQUYzNDgyMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmpl
Y3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk5N0FBQkQxQTE0RkEwOUQ1MDA3NDU3QUUgLyogV2Vi
U29ja2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QUFCRDFEMTRGQTA5RDUwMDc0NTdBRSAv
KiBXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM3MTgsOSArMzM3MTgs
OSBAQAogCQkJCUNEODIwMzBCMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJM0Y0MkIzMUUxODgxMTkxQjAwMjc4QUFD
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUNEODIwMzBEMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZF
RTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNTIxMzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUyMTMxRTVCMUM0RjE1NzYwMDMzRjgwMiAvKiBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFB
OTFDNTc0OEE5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQlGMTIxNzFGNTE2QThDRUQyMDAwMDUzQ0EgLyogV2ViVlRURWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RDIxQTgwMjEzRUNFNURGMDBCQjcwNjQgLyog
V2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIxMEI2OTgxMTQwQzE3NDAwMEJD
MUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBjNTZjN2FhOGVhNDdmM2MwMDUzYTc3Y2Qy
OGEwMzk5MTkwMTc2OTUyLi4xNmU2YzNhNDRjMTQ1Mzg5OWRhODFhZTE5OWRjZDRkMmFkNDVjZmEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTExNyw3ICsx
MTcsNyBAQAogCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmgi
CisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKQEAgLTE1Niw3ICsxNTYsNyBAQAog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlmCiAKICNkZWZp
bmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoZG9jdW1l
bnQoKS5wYWdlKCkgJiYgZG9jdW1lbnQoKS5wYWdlKCktPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dl
ZCgpLCBNZWRpYSwgIiVwIC0gSFRNTE1lZGlhRWxlbWVudDo6IiBmbXQsIHRoaXMsICMjX19WQV9B
UkdTX18pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAppbmRleCBlYTE0
OWU4OGI3Y2U2MjVlZTNhOTgwZDZlMWVjYTM4ZTM5MmE1NGJlLi5kNmFlZmRmYzRkNjhiNDlmMTQ5
Y2U1MmNjYmE3NjBlOTI5MDA2ZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKICNp
ZiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDEwNWVm
NmRiMzI3MGYzMTViNzc1Yzc0MmYzNTE1Y2UwMTg2NzA1ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBT
dHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGltZVJhbmdlczsKKwor
Y2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVk
aWFTdGF0ZSgpID0gMDsKK307CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTg3NDQxNTc0NjlhMmE3YjJlNzYzOWUxZjlhM2FlNzE0ZGYyODY0MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vz
c2lvbk1vZGVsLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRpbWVSYW5nZXM7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudDsKK3N0cnVjdCBNZWRpYVNlbGVjdGlvbk9wdGlvbjsKKworY2xhc3MgUGxheWJhY2tTZXNz
aW9uTW9kZWwgeworcHVibGljOgorICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVsKCkg
eyB9OworICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGll
bnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwYXVzZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxheVN0YXRl
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjcnViYmluZygpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5kU2NydWJiaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1l
KGRvdWJsZSB0aW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1l
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGVuZFNjYW5uaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKHVpbnQ2NF90IGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2li
bGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0b2dn
bGVQaWN0dXJlSW5QaWN0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVNdXRlZCgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCkgPSAwOworCisgICAgZW51bSBF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVOb25lLCBUYXJnZXRUeXBlQWly
UGxheSwgVGFyZ2V0VHlwZVRWT3V0IH07CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBwbGF5YmFja1N0
YXJ0ZWRUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNQbGF5aW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1NjcnViYmluZygp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFJlZjxUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9ucygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVpbnQ2NF90IGF1ZGlvTWVkaWFT
ZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRlcm5hbFBsYXliYWNr
TG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgd2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
TXV0ZWQoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQoKSB7
IH07CisgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIC8qIGN1cnJlbnRUaW1lICovLCBk
b3VibGUgLyogYW5jaG9yVGltZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIGJ1ZmZlcmVkVGlt
ZUNoYW5nZWQoZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxheWJhY2tTdGFydGVkVGlt
ZUNoYW5nZWQoZG91YmxlIC8qIHBsYXliYWNrU3RhcnRlZFRpbWUgKi8pIHsgfQorICAgIHZpcnR1
YWwgdm9pZCByYXRlQ2hhbmdlZChib29sIC8qIGlzUGxheWluZyAqLywgZmxvYXQgLyogcGxheWJh
Y2tSYXRlICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNv
bnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgLyogbGFzdE1vZGlmaWVkICovLCBkb3VibGUgLyogbGl2
ZUludGVydmFsICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZChib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlvbnMg
Ki8sIHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiAvKiBvcHRpb25zICovLCB1aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4ICov
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgLyogZW5hYmxlZCAqLywgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUg
Ki8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQoYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSB7IH0K
K307CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgwN2M0ZjZjYTk4N2JlYTdlYTUzOWEyMWE0YmVhMWNmNTdiZDg5
YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNs
dWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1RyYWNrOworY2xhc3MgSFRNTE1lZGlhRWxlbWVu
dDsKK2NsYXNzIFRleHRUcmFjazsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKwor
Y2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgUGxh
eWJhY2tTZXNzaW9uTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQoKSk7CisgICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRN
ZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBXZWJDb3JlOjpFdmVudCYpIGZpbmFsOworICAgIHZvaWQgdXBkYXRlRm9yRXZl
bnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7CisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEV2ZW50TGlzdGVuZXImIHJocykgY29uc3QgZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KKworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXkoKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHBhdXNlKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2lu
U2NydWJiaW5nKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmco
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kU2Nhbm5pbmcoKSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVp
bnQ2NF90IGluZGV4KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBpY3R1
cmVJblBpY3R1cmUoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU11dGVk
KCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsK
KworICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBjdXJyZW50
VGltZSgpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGlzUGxheWluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNTY3J1YmJp
bmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGZsb2F0IHBsYXliYWNrUmF0
ZSgpIGNvbnN0IGZpbmFsOworICAgIFJlZjxUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNv
bnN0IGZpbmFsOworICAgIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1l
KCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgZmluYWw7CisgICAgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNv
bnN0IGZpbmFsOworICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3Qg
ZmluYWw7CisgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWw7CisgICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2Vs
ZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJs
ZWQoKSBjb25zdCBmaW5hbDsKKyAgICBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBleHRlcm5hbFBs
YXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgd2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTXV0ZWQo
KSBjb25zdCBmaW5hbDsKKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9ncmVz
c0V2ZW50VGltZXJGaXJlZCgpOworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNT
dHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21pY1N0cmlu
ZyYgZXZlbnROYW1lQWxsKCk7CisKKyAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRp
YUVsZW1lbnQ7CisgICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0
PFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIFZlY3RvcjxSZWZQ
dHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudTsKKyAgICBWZWN0b3I8UmVmUHRy
PEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVudTsKKworICAgIGRvdWJsZSBwbGF5YmFj
a1N0YXJ0ZWRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnMoKTsKKyAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYy
OWM4MDAyMDY5N2FjMzI0YjNjYzgzMjZkYzYyOTY5ZWZjYzI2NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Lm1tCkBAIC0wLDAgKzEsNTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCisK
KyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCisKKyNpbXBvcnQgIkF1ZGlvVHJhY2tMaXN0LmgiCisjaW1wb3J0ICJF
dmVudC5oIgorI2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgorI2ltcG9ydCAiRXZlbnROYW1lcy5o
IgorI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
KyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCisjaW1w
b3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAi
UGFnZUdyb3VwLmgiCisjaW1wb3J0ICJUZXh0VHJhY2tMaXN0LmgiCisjaW1wb3J0ICJUaW1lUmFu
Z2VzLmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KKyNpbXBvcnQgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRM
aXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCit7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojp+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKQorewor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1l
bnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQoreworICAgIGlmIChtX21lZGlhRWxl
bWVudCA9PSBtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX21lZGlh
RWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1l
IDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7CisgICAgICAgIG1fbWVk
aWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+dGV4
dFRyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAq
dGhpcywgZmFsc2UpOworICAgIH0KKyAgICBtX2lzTGlzdGVuaW5nID0gZmFsc2U7CisKKyAgICBp
ZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZXNldFBsYXliYWNr
U2Vzc2lvblN0YXRlKCk7CisKKyAgICBtX21lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudDsKKwor
ICAgIGlmIChtX21lZGlhRWxlbWVudCkgeworICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6
IG9ic2VydmVkRXZlbnROYW1lcygpKQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmFkZEV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX21lZGlhRWxl
bWVudC0+YXVkaW9UcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VF
dmVudCwgKnRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3Mo
KS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNl
KTsKKyAgICAgICAgbV9pc0xpc3RlbmluZyA9IHRydWU7CisgICAgfQorCisgICAgdXBkYXRlRm9y
RXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdlYkNvcmU6OkV2ZW50JiBldmVudCkKK3sKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZl
bnQudHlwZSgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit7
CisgICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJv
b2wgYWxsID0gZXZlbnROYW1lID09IGV2ZW50TmFtZUFsbCgpOworCisgICAgaWYgKGFsbAorICAg
ICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpIHsK
KyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gdGhpcy0+ZHVyYXRpb24oKTsKKyAgICAgICAgZm9y
IChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25D
aGFuZ2VkKGR1cmF0aW9uKTsKKyAgICAgICAgLy8gVGhlc2UgaXMgbm8gc3RhbmRhcmQgZXZlbnQg
Zm9yIG1pbkZhc3RSZXZlcnNlUmF0ZUNoYW5nZTsgZHVyYXRpb24gY2hhbmdlIGlzIGEgcmVhc29u
YWJsZSBwcm94eSBmb3IgaXQuCisgICAgICAgIC8vIEl0IGhhcHBlbnMgZXZlcnkgdGltZSBhIG5l
dyBpdGVtIGJlY29tZXMgcmVhZHkgdG8gcGxheS4KKyAgICAgICAgYm9vbCBjYW5QbGF5RmFzdFJl
dmVyc2UgPSB0aGlzLT5jYW5QbGF5RmFzdFJldmVyc2UoKTsKKyAgICAgICAgZm9yIChhdXRvIGNs
aWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZChjYW5QbGF5RmFzdFJldmVyc2UpOworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAg
ICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZl
bnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5aW5nRXZlbnQpIHsKKyAgICAgICAgZm9yIChhdXRv
IGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+cGxheWJhY2tTdGFydGVk
VGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGltZSgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxs
CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVudAorICAgICAg
ICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBsYXlFdmVudAorICAgICAgICB8fCBldmVu
dE5hbWUgPT0gZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCkgeworICAgICAgICBib29sIGlz
UGxheWluZyA9IHRoaXMtPmlzUGxheWluZygpOworICAgICAgICBmbG9hdCBwbGF5YmFja1JhdGUg
PSB0aGlzLT5wbGF5YmFja1JhdGUoKTsKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xp
ZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFj
a1JhdGUpOworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2
ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQpIHsKKyAgICAgICAgYXV0byBjdXJyZW50VGltZSA9
IHRoaXMtPmN1cnJlbnRUaW1lKCk7CisgICAgICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKKyAgICAgICAgZm9yIChhdXRvIGNs
aWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2Vk
KGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKKyAgICB9CisKKyAgICBpZiAoYWxsCisgICAgICAg
IHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCkgeworICAgICAgICBh
dXRvIGJ1ZmZlcmVkVGltZSA9IHRoaXMtPmJ1ZmZlcmVkVGltZSgpOworICAgICAgICBhdXRvIHNl
ZWthYmxlUmFuZ2VzID0gdGhpcy0+c2Vla2FibGVSYW5nZXMoKTsKKyAgICAgICAgYXV0byBzZWVr
YWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lID0gdGhpcy0+c2Vla2FibGVUaW1lUmFuZ2Vz
TGFzdE1vZGlmaWVkVGltZSgpOworICAgICAgICBhdXRvIGxpdmVVcGRhdGVJbnRlcnZhbCA9IHRo
aXMtPmxpdmVVcGRhdGVJbnRlcnZhbCgpOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9j
bGllbnRzKSB7CisgICAgICAgICAgICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVy
ZWRUaW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWth
YmxlUmFuZ2VzLCBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRl
SW50ZXJ2YWwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBl
dmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQKKyAgICAgICAgfHwgZXZlbnRO
YW1lID09IGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2ZW50KQorICAgICAgICB1cGRhdGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKTsKKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hh
bmdlZEV2ZW50KSB7CisgICAgICAgIGJvb2wgZW5hYmxlZCA9IGV4dGVybmFsUGxheWJhY2tFbmFi
bGVkKCk7CisgICAgICAgIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBl
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2
aWNlTmFtZSA9IGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCk7CisKKyAgICAg
ICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCA9IHRoaXMtPndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKCk7CisKKyAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xp
ZW50cykgeworICAgICAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFi
bGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICAgICAgICAgIGNsaWVu
dC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIGRvbid0IGNhbGwg
dXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkgaW4gdGhlIGFsbCBjYXNlLCBzaW5jZQorICAg
IC8vIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpbGwgYWxzbyB1cGRhdGUgdGhlIHNl
bGVjdGlvbiBpbmRpY2VzLgorICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmNoYW5n
ZUV2ZW50KQorICAgICAgICB1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKTsKKworICAgIGlm
IChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VF
dmVudCkgeworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAg
ICAgY2xpZW50LT5tdXRlZENoYW5nZWQoaXNNdXRlZCgpKTsKKyAgICB9Cit9Cit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xp
ZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxheSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJp
bmcoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmVuZFNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAg
ICBtX21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUo
dGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmZhc3RT
ZWVrKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9t
ZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit7CisgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNv
bnRyb2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQoreworICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFD
b250cm9sbGVySW50ZXJmYWNlOjpCYWNrd2FyZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjYW5uaW5nKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY2FubmluZygpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVp
bnQ2NF90IHNlbGVjdGVkQXVkaW9JbmRleCkKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG1fYXVkaW9U
cmFja3NGb3JNZW51LnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9hdWRpb1RyYWNr
c0Zvck1lbnVbaV0tPnNldEVuYWJsZWQoaSA9PSBzZWxlY3RlZEF1ZGlvSW5kZXgpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFP
cHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2s7CisgICAgaWYgKGluZGV4IDwg
bV9sZWdpYmxlVHJhY2tzRm9yTWVudS5zaXplKCkpCisgICAgICAgIHRleHRUcmFjayA9IG1fbGVn
aWJsZVRyYWNrc0Zvck1lbnVbc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCldLmdldCgpOworICAg
IGVsc2UKKyAgICAgICAgdGV4dFRyYWNrID0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0o
KTsKKworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2sp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0
dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQtPmZ1bGxzY3JlZW5Nb2Rl
KCkgPT0gTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1
cmUpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgIGVsc2UK
KyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVudGVyRnVsbHNjcmVlbihNZWRpYVBsYXllckVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnRvZ2dsZU11dGVkKCkKK3sKKyAgICBzZXRNdXRl
ZCghaXNNdXRlZCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRNdXRlZChtdXRlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpCit7
CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBh
Z2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKyAgICBhdXRvJiB0ZXh0VHJhY2tz
ID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKTsKKyAgICBpZiAodGV4dFRyYWNrcy5sZW5n
dGgoKSkKKyAgICAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNl
cy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZ0ZXh0VHJhY2tzKTsKKyAgICBlbHNlCisgICAgICAg
IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuY2xlYXIoKTsKKworICAgIGF1dG8mIGF1ZGlvVHJhY2tz
ID0gbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCk7CisgICAgaWYgKGF1ZGlvVHJhY2tzLmxl
bmd0aCgpID4gMSkKKyAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVy
ZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSgmYXVkaW9UcmFja3MpOworICAgIGVsc2UKKyAg
ICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUuY2xlYXIoKTsKKworICAgIGF1dG8gYXVkaW9PcHRp
b25zID0gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKKyAgICBhdXRvIGF1ZGlvSW5kZXgg
PSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpOworICAgIGF1dG8gbGVnaWJsZU9wdGlvbnMgPSBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7CisgICAgYXV0byBsZWdpYmxlSW5kZXggPSBs
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCk7CisKKyAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9j
bGllbnRzKSB7CisgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGF1ZGlvT3B0aW9ucywgYXVkaW9JbmRleCk7CisgICAgICAgIGNsaWVudC0+bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobGVnaWJsZU9wdGlvbnMsIGxlZ2libGVJbmRleCk7
CisgICAgfQorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRh
dGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKQoreworICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlv
TWVkaWFTZWxlY3RlZEluZGV4KCk7CisgICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVk
aWFTZWxlY3RlZEluZGV4KCk7CisKKyAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7
CisgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChhdWRpb0lu
ZGV4KTsKKyAgICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
bGVnaWJsZUluZGV4KTsKKyAgICB9Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6cGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQtPnBsYXliYWNrU3RhcnRlZFRpbWUoKTsKK30KKworY29uc3QgVmVjdG9yPEF0b21pY1N0cmlu
Zz4mIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMo
KQoreworICAgIC8vIEZJWE1FKDE1NzQ1Mik6IFJlbW92ZSB0aGUgcmlnaHQtaGFuZCBjb25zdHJ1
Y3RvciBub3RhdGlvbiBvbmNlIE5ldmVyRGVzdHJveWVkIHN1cHBvcnRzIGluaXRpYWxpemVyX2xp
c3RzLgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gbmFt
ZXMgPSBWZWN0b3I8QXRvbWljU3RyaW5nPih7CisgICAgICAgIGV2ZW50TmFtZXMoKS5kdXJhdGlv
bmNoYW5nZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucGF1c2VFdmVudCwKKyAgICAgICAg
ZXZlbnROYW1lcygpLnBsYXlFdmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VF
dmVudCwKKyAgICAgICAgZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwKKyAgICAgICAgZXZl
bnROYW1lcygpLnByb2dyZXNzRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2
ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwKKyAgICAgICAgZXZl
bnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkud2Via2l0
Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCwKKyAgICB9KTsKKyAg
ICByZXR1cm4gbmFtZXMuZ2V0KCk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGV2ZW50TmFtZUFsbCgiYWxsRXZlbnRzIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIGV2ZW50TmFtZUFs
bDsKK30KKworZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlv
bigpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVkaWFF
bGVtZW50LT5kdXJhdGlvbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKK30KKworZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjdXJy
ZW50VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVs
ZW1lbnQtPmN1cnJlbnRUaW1lKCkgOiAwOworfQorCitkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVk
aWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1heEJ1ZmZlcmVkVGltZSgpIDogMDsKK30KKwor
Ym9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNQbGF5aW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyAhbV9tZWRpYUVsZW1lbnQtPnBhdXNlZCgp
IDogZmFsc2U7Cit9CisKK2Zsb2F0IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpw
bGF5YmFja1JhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVk
aWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSA6IDA7Cit9CisKK1JlZjxUaW1lUmFuZ2VzPiBQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVSYW5nZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpIDog
VGltZVJhbmdlczo6Y3JlYXRlKCk7Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnNlZWthYmxlVGlt
ZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7Cit9CisKK2RvdWJsZSBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bGl2ZVVwZGF0ZUludGVydmFs
KCkgOiAwOworfQorICAgIAorYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQg
PyBtX21lZGlhRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAgOiBmYWxzZTsKK30K
KworVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAoreworICAgIFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9PcHRpb25zOworCisgICAgaWYgKCFtX21lZGlh
RWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICBy
ZXR1cm4gYXVkaW9PcHRpb25zOworCisgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9t
ZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNl
cygpOworCisgICAgYXVkaW9PcHRpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9hdWRpb1Ry
YWNrc0Zvck1lbnUuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBtX2F1ZGlv
VHJhY2tzRm9yTWVudSkKKyAgICAgICAgYXVkaW9PcHRpb25zLnVuY2hlY2tlZEFwcGVuZChjYXB0
aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayhhdWRpb1RyYWNrLmdl
dCgpKSk7CisKKyAgICByZXR1cm4gYXVkaW9PcHRpb25zOworfQorCit1aW50NjRfdCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX2F1ZGlvVHJhY2tzRm9y
TWVudS5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKG1fYXVkaW9UcmFja3NGb3JNZW51
W2luZGV4XS0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworfQorCitWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVPcHRpb25zOworCisgICAgaWYgKCFtX21lZGlhRWxl
bWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1
cm4gbGVnaWJsZU9wdGlvbnM7CisKKyAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21l
ZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2Vz
KCk7CisKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9yTWVudSkKKyAg
ICAgICAgbGVnaWJsZU9wdGlvbnMuYXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVj
dGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKSk7CisKKyAgICByZXR1cm4gbGVnaWJsZU9w
dGlvbnM7Cit9CisKK3VpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojps
ZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKK3sKKyAgICB1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgIHVpbnQ2
NF90IG9mZkluZGV4ID0gMDsKKyAgICBib29sIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IGZhbHNl
OworCisgICAgYXV0byBob3N0ID0gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWVk
aWFDb250cm9sc0hvc3QoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWhvc3QpCisgICAgICAgIHJl
dHVybiBzZWxlY3RlZEluZGV4OworCisgICAgQXRvbWljU3RyaW5nIGRpc3BsYXlNb2RlID0gaG9z
dC0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7CisgICAgVGV4dFRyYWNrKiBvZmZJdGVtID0gaG9zdC0+
Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gaG9z
dC0+Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5zaXplKCk7IGluZGV4KyspIHsKKyAg
ICAgICAgYXV0byYgdHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W2luZGV4XTsKKyAgICAg
ICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCisgICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4Owor
CisgICAgICAgIGlmICh0cmFjayA9PSBhdXRvbWF0aWNJdGVtICYmIGRpc3BsYXlNb2RlID09IE1l
ZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVj
dGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlzcGxheU1vZGUgIT0gTWVkaWFDb250cm9s
c0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSAmJiB0cmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6
TW9kZTo6U2hvd2luZykgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAg
ICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChvZmZJdGVtICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1v
ZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpCisgICAgICAgIHNl
bGVjdGVkSW5kZXggPSBvZmZJbmRleDsKKworICAgIHJldHVybiBzZWxlY3RlZEluZGV4OworfQor
Citib29sIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNr
RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFF
bGVtZW50LT53ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7Cit9CisKK1Bs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25z
dAoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5tZWRpYUNv
bnRyb2xzSG9zdCgpKQorICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7CisKKyAgICBzd2l0
Y2ggKG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZVR5
cGUoKSkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7CisgICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6
RGV2aWNlVHlwZTo6Tm9uZToKKyAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOworICAgIGNh
c2UgTWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6OkFpcnBsYXk6CisgICAgICAgIHJldHVy
biBUYXJnZXRUeXBlQWlyUGxheTsKKyAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VU
eXBlOjpUdm91dDoKKyAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVUVk91dDsKKyAgICB9Cit9CisK
K1N0cmluZyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFj
a0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdAoreworICAgIGlmIChtX21lZGlhRWxlbWVudCAm
JiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKKyAgICAgICAgcmV0dXJuIG1f
bWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlO
YW1lKCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlh
U2Vzc2lvbigpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7
Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tdXRl
ZCgpIDogZmFsc2U7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jNWMxNWIxMTk4NzIxMTNmNDgwYzk4MzFhYmE4NjhkOGVmZWIwOTY4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYW51
cEZ1bGxzY3JlZW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSgpID0gMDsKK307CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFj
ODQ5ZmMyMGRhMGNiNDJiZDkyNzYxN2YxNDE4ZjliNzczMGMyNzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxh
eWJhY2tTZXNzaW9uTW9kZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudDsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWwgewor
cHVibGljOgorICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsKCkgeyB9OworICAgIHZp
cnR1YWwgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYp
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEg
PSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRS
ZWN0KSA9IDA7CisgICAgZW51bSBWaWRlb0dyYXZpdHkgeyBWaWRlb0dyYXZpdHlSZXNpemUsIFZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCB9Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dyYXZpdHkpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzVmlz
aWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3QgPSAwOworfTsK
KworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgflZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGhh
c1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpZGVvRGltZW5zaW9u
c0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAwOworfTsKKworV0VCQ09SRV9FWFBPUlQgYm9v
bCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKKyAgICAKK30KKworI2VuZGlmCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwNzM3NDg2YTQ0ZmU5OTU0ZDc1
Y2E1ZjkxYTljZTYyYzQxNDg5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCkBAIC0wLDAg
KzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRF
bnVtcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEF1ZGlvVHJhY2s7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50OworY2xhc3MgVGV4dFRyYWNr
OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CisKK2NsYXNzIFZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IDogcHVibGljIFZpZGVvRnVsbHNjcmVlbk1vZGVs
LCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkpOwor
ICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9FbGVtZW50KEhU
TUxWaWRlb0VsZW1lbnQqKTsKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX3ZpZGVvRWxlbWVudC5nZXQoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciosIFdURjo6RnVuY3Rp
b248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyID0gW10geyB9KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHdhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIgPSBbXSB7IH0pOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdl
YkNvcmU6OkV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29u
c3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRM
aXN0ZW5lciYgcmhzKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBX
ZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQorCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlk
ZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwg
Ym9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVy
cmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09S
RV9FWFBPUlQgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNWaWRl
bygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0KKworCitwcm90ZWN0ZWQ6
CisgICAgV0VCQ09SRV9FWFBPUlQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHNldEhhc1ZpZGVvKGJvb2wpOworICAgIHZvaWQgc2V0Vmlk
ZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYpOworCisgICAgc3RhdGljIGNvbnN0IFZlY3Rv
cjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOworICAgIGNvbnN0IFdU
Rjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKKworICAgIFJlZlB0cjxIVE1MVmlkZW9F
bGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92
aWRlb0Z1bGxzY3JlZW5MYXllcjsKKyAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9Owor
ICAgIEhhc2hTZXQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAg
Ym9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKKyAgICBGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lv
bnM7CisgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKKyAgICBWZWN0b3I8UmVmUHRyPFRleHRU
cmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7CisgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1Ry
YWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7Cit9OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyZWQyMTM1OGNlNjNmZTNlZmJm
OTBkODUwY2Y0ZTE1YzkyZjY0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpAQCAtMCww
ICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorI2ltcG9ydCAiVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKKworI2ltcG9ydCAiRE9NV2luZG93LmgiCisjaW1w
b3J0ICJIaXN0b3J5LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnRy
b2xzSG9zdC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCIK
KyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9F
dmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1RleHRUcmFja0xpc3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGlt
ZVJhbmdlcy5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYv
U29mdExpbmtpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1ZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgp
CisgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBl
KQoreworfQorCitWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6flZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKK3sKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxl
bWVudCkKK3sKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPnZp
ZGVvRnVsbHNjcmVlbkxheWVyKCkpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcihudWxscHRyKTsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX2lz
TGlzdGVuaW5nKSB7CisgICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVu
dE5hbWVzKCkpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7CisgICAgfQorICAgIG1faXNMaXN0ZW5pbmcgPSBm
YWxzZTsKKworICAgIG1fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCisgICAgaWYgKG1f
dmlkZW9FbGVtZW50KSB7CisgICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRF
dmVudE5hbWVzKCkpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5l
cihldmVudE5hbWUsICp0aGlzLCBmYWxzZSk7CisgICAgICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVl
OworICAgIH0KKworICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudE5hbWVBbGwoKSk7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXZWJDb3JlOjpFdmVudCYgZXZlbnQpCit7Cisg
ICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYgZXZlbnROYW1lKQoreworICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnRO
YW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVzKCkucmVzaXplRXZlbnQpIHsKKyAgICAgICAgc2V0SGFzVmlkZW8obV92aWRlb0VsZW1lbnQp
OworICAgICAgICBzZXRWaWRlb0RpbWVuc2lvbnMobV92aWRlb0VsZW1lbnQgPyBGbG9hdFNpemUo
bV92aWRlb0VsZW1lbnQtPnZpZGVvV2lkdGgoKSwgbV92aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0
KCkpIDogRmxvYXRTaXplKCkpOworICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciogdmlk
ZW9MYXllciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1f
dmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLCAw
KV07CisjZWxzZQorICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNH
UG9pbnRNYWtlKDAuNSwgMC41KV07CisjZW5kaWYKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXll
ciBzZXRCb3VuZHM6bV92aWRlb0ZyYW1lXTsKKyAgICAKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50
KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRlb0Z1
bGxzY3JlZW5MYXllci5nZXQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp3YWl0Rm9yUHJlcGFyZWRGb3JJ
bmxpbmVUaGVuKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIGlmICghbV92aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdmlkZW9FbGVtZW50LT53YWl0Rm9yUHJl
cGFyZWRGb3JJbmxpbmVUaGVuKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZp
bmlzaGVkV2l0aE1lZGlhKQoreworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxl
bWVudC0+ZnVsbHNjcmVlbk1vZGUoKSAhPSBtb2RlKQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgZmlu
aXNoZWRXaXRoTWVkaWEgJiYgbW9kZSA9PSBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlTm9uZSkgeworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuaXNN
ZWRpYURvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChET01XaW5kb3cqIHdpbmRvdyA9IG1f
dmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLmRvbVdpbmRvdygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKEhpc3RvcnkqIGhpc3RvcnkgPSB3aW5kb3ctPmhpc3RvcnkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaGlzdG9yeS0+YmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVy
RnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7CisgICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBb
bV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3VuZHM6Q0dSZWN0KHJlY3QpXTsKKyAgICBpZiAo
bV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5GcmFtZShyZWN0KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eSBncmF2aXR5KQoreworICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5
ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jhdml0
eSA9PSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAgICAgICB2
aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgIGVsc2Ug
aWYgKGdyYXZpdHkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFz
cGVjdCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgICAgICB2aWRlb0dyYXZpdHkgPSBN
ZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAgICBlbHNlCisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIG1fdmlkZW9FbGVtZW50LT5zZXRW
aWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Cit9CisKK2NvbnN0IFZlY3RvcjxB
dG9taWNTdHJpbmc+JiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2ZWRF
dmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgYXV0byBuYW1lcyA9IG1ha2VOZXZlckRl
c3Ryb3llZChWZWN0b3I8QXRvbWljU3RyaW5nPiB7IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCB9
KTsKKyAgICByZXR1cm4gbmFtZXM7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc0V2ZW50TmFtZUFsbCA9ICJhbGxFdmVudHMiOwor
ICAgIHJldHVybiBzRXZlbnROYW1lQWxsOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCit7CisgICAgaWYgKG1f
dmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjphZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVu
dCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9j
bGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQp
Cit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGll
bnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fdmlkZW9FbGVt
ZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmlzVmlzaWJsZSgp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpzZXRIYXNWaWRlbyhib29sIGhhc1ZpZGVvKQoreworICAgIGlmIChoYXNWaWRl
byA9PSBtX2hhc1ZpZGVvKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hhc1ZpZGVvID0gaGFz
VmlkZW87CisKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xp
ZW50LT5oYXNWaWRlb0NoYW5nZWQobV9oYXNWaWRlbyk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUm
IHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAobV92aWRlb0RpbWVuc2lvbnMgPT0gdmlkZW9E
aW1lbnNpb25zKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZGVvRGltZW5zaW9ucyA9IHZp
ZGVvRGltZW5zaW9uczsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAg
ICAgICBjbGllbnQtPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQobV92aWRlb0RpbWVuc2lvbnMpOwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDMwOWU3OTc0NGI0OTg5YTNhN2I5MzU3MGFhZWI3ZTgyZWIwN2U5MzAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3Mg
U3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRpbWVSYW5nZXM7Ci0K
LWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNldE1lZGlhU3RhdGUoKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmQ1M2YwZjc3Njkz
Nzc1YWQ0ODYxYzIyMzA0YWM5MzgwMDljODIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGltZVJhbmdlczsKLWNsYXNzIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Owotc3RydWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9u
OwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGFkZENs
aWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGJlZ2luU2NydWJiaW5nKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJpbmco
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90
IGluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZU11dGVkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRNdXRlZChib29sKSA9IDA7Ci0KLSAgICBlbnVtIEV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHsgVGFyZ2V0VHlwZU5vbmUsIFRhcmdldFR5cGVBaXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQg
fTsKLQotICAgIHZpcnR1YWwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBk
b3VibGUgY3VycmVudFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgYnVmZmVy
ZWRUaW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVmPFRpbWVS
YW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZG91YmxlIHNl
ZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB1aW50NjRfdCBsZWdp
YmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBleHRl
cm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNdXRlZCgpIGNvbnN0ID0gMDsKLX07
Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCgpIHsgfTsKLSAgICB2aXJ0dWFs
IHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnJl
bnRUaW1lQ2hhbmdlZChkb3VibGUgLyogY3VycmVudFRpbWUgKi8sIGRvdWJsZSAvKiBhbmNob3JU
aW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUg
LyogcGxheWJhY2tTdGFydGVkVGltZSAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJhdGVDaGFu
Z2VkKGJvb2wgLyogaXNQbGF5aW5nICovLCBmbG9hdCAvKiBwbGF5YmFja1JhdGUgKi8pIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYs
IGRvdWJsZSAvKiBsYXN0TW9kaWZpZWQgKi8sIGRvdWJsZSAvKiBsaXZlSW50ZXJ2YWwgKi8pIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyog
c2VsZWN0ZWRJbmRleCAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8q
IG9wdGlvbnMgKi8sIHVpbnQ2NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBl
bmFibGVkICovLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUsIGNvbnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIHsgfQotfTsKLQotfQotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyODQ2OTQ2NDk2YTlhYzQ5NTk1MWJkZjFj
ODE3ZGNlYmI3NWVkMjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNs
dWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1RyYWNrOwotY2xhc3MgSFRNTE1lZGlhRWxl
bWVudDsKLWNsYXNzIFRleHRUcmFjazsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQgZmluYWwgOiBw
dWJsaWMgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKSk7Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwotICAg
IEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFF
bGVtZW50LmdldCgpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUV2ZW50KFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXZWJDb3JlOjpFdmVudCYpIGZpbmFsOwot
ICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7Ci0g
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykgY29uc3QgZmluYWwg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMp
ID09ICZyaHM7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVD
bGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHBsYXkoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhdXNlKCkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5k
U2Nhbm5pbmcoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU11dGVkKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKLQotICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0
IGZpbmFsOwotICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJs
ZSBidWZmZXJlZFRpbWUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzUGxheWluZygpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIGZsb2F0IHBsYXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFsOwotICAgIFJlZjxUaW1l
UmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBzZWVrYWJs
ZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGxp
dmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgY2FuUGxheUZhc3RSZXZl
cnNlKCkgY29uc3QgZmluYWw7Ci0gICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIHVpbnQ2NF90IGF1ZGlv
TWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7Ci0gICAgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWw7Ci0g
ICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsOwotICAg
IGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdCBmaW5hbDsKLSAgICBFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZp
bmFsOwotICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25z
dCBmaW5hbDsKLSAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5hbDsKLQotcHJvdGVjdGVkOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCk7
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCgpOwotICAgIHN0
YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMo
KTsKLSAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBS
ZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgYm9vbCBtX2lzTGlz
dGVuaW5nIHsgZmFsc2UgfTsKLSAgICBIYXNoU2V0PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50Kj4gbV9jbGllbnRzOwotICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxl
VHJhY2tzRm9yTWVudTsKLSAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJh
Y2tzRm9yTWVudTsKLQotICAgIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3Q7Ci0g
ICAgdm9pZCB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKLSAgICB2b2lkIHVwZGF0ZU1l
ZGlhU2VsZWN0aW9uSW5kaWNlcygpOwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1
YWRkNDliYTZiZDc0OTJhZGEwMjdlNzMyZDYzMmU2NzJiNmExYTUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgotCi0jaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQotCi0jaW1wb3J0ICJBdWRpb1RyYWNrTGlzdC5oIgotI2ltcG9ydCAiRXZlbnQuaCIK
LSNpbXBvcnQgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbXBvcnQgIkV2ZW50TmFtZXMuaCIKLSNpbXBv
cnQgIkhUTUxFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0
ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgotI2ltcG9ydCAiTWVk
aWFTZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlBhZ2VHcm91
cC5oIgotI2ltcG9ydCAiVGV4dFRyYWNrTGlzdC5oIgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgot
I2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpCi0gICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlz
dGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQotewotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6fldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkK
LXsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVk
aWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAgICBpZiAobV9t
ZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3IgKGF1dG8mIGV2
ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgICAg
ICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPnRleHRUcmFja3MoKS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VF
dmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwot
Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVzZXRQ
bGF5YmFja1Nlc3Npb25TdGF0ZSgpOwotCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1l
bnQ7Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpIHsKLSAgICAgICAgZm9yIChhdXRvJiBldmVu
dE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9t
ZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCkuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
Y2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT50ZXh0
VHJhY2tzKCkuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlz
LCBmYWxzZSk7Ci0gICAgICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwotICAgIH0KLQotICAgIHVw
ZGF0ZUZvckV2ZW50TmFtZShldmVudE5hbWVBbGwoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBXZWJDb3JlOjpFdmVudCYgZXZlbnQpCi17Ci0gICAgdXBkYXRlRm9yRXZl
bnROYW1lKGV2ZW50LnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
ZXZlbnROYW1lKQotewotICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVBbGwoKTsKLQotICAg
IGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNo
YW5nZUV2ZW50KSB7Ci0gICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IHRoaXMtPmR1cmF0aW9uKCk7
Ci0gICAgICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGll
bnQtPmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7Ci0gICAgICAgIC8vIFRoZXNlIGlzIG5vIHN0
YW5kYXJkIGV2ZW50IGZvciBtaW5GYXN0UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9uIGNoYW5n
ZSBpcyBhIHJlYXNvbmFibGUgcHJveHkgZm9yIGl0LgotICAgICAgICAvLyBJdCBoYXBwZW5zIGV2
ZXJ5IHRpbWUgYSBuZXcgaXRlbSBiZWNvbWVzIHJlYWR5IHRvIHBsYXkuCi0gICAgICAgIGJvb2wg
Y2FuUGxheUZhc3RSZXZlcnNlID0gdGhpcy0+Y2FuUGxheUZhc3RSZXZlcnNlKCk7Ci0gICAgICAg
IGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKLSAgICB9Ci0KLSAgICBp
ZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheUV2ZW50Ci0g
ICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheWluZ0V2ZW50KSB7Ci0gICAg
ICAgIGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPnBs
YXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHBsYXliYWNrU3RhcnRlZFRpbWUoKSk7Ci0gICAgfQot
Ci0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNl
RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKLSAg
ICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQpIHsKLSAg
ICAgICAgYm9vbCBpc1BsYXlpbmcgPSB0aGlzLT5pc1BsYXlpbmcoKTsKLSAgICAgICAgZmxvYXQg
cGxheWJhY2tSYXRlID0gdGhpcy0+cGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIGZvciAoYXV0byBj
bGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxh
eWluZywgcGxheWJhY2tSYXRlKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7Ci0gICAgICAgIGF1dG8g
Y3VycmVudFRpbWUgPSB0aGlzLT5jdXJyZW50VGltZSgpOwotICAgICAgICBhdXRvIGFuY2hvclRp
bWUgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07Ci0gICAgICAg
IGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgICAgICBjbGllbnQtPmN1cnJl
bnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Ci0gICAgfQotCi0gICAgaWYg
KGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQp
IHsKLSAgICAgICAgYXV0byBidWZmZXJlZFRpbWUgPSB0aGlzLT5idWZmZXJlZFRpbWUoKTsKLSAg
ICAgICAgYXV0byBzZWVrYWJsZVJhbmdlcyA9IHRoaXMtPnNlZWthYmxlUmFuZ2VzKCk7Ci0gICAg
ICAgIGF1dG8gc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IHRoaXMtPnNlZWth
YmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKTsKLSAgICAgICAgYXV0byBsaXZlVXBkYXRl
SW50ZXJ2YWwgPSB0aGlzLT5saXZlVXBkYXRlSW50ZXJ2YWwoKTsKLSAgICAgICAgZm9yIChhdXRv
IGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICAgICAgY2xpZW50LT5idWZmZXJlZFRpbWVD
aGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Ci0gICAgICAgICAgICBjbGllbnQtPnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChzZWVrYWJsZVJhbmdlcywgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGlt
ZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChhbGwK
LSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50Ci0gICAg
ICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCkKLSAgICAg
ICAgdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAg
IHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0
aXN3aXJlbGVzc2NoYW5nZWRFdmVudCkgewotICAgICAgICBib29sIGVuYWJsZWQgPSBleHRlcm5h
bFBsYXliYWNrRW5hYmxlZCgpOwotICAgICAgICBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0
YXJnZXRUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKTsKLSAgICAgICAgU3RyaW5n
IGxvY2FsaXplZERldmljZU5hbWUgPSBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFt
ZSgpOwotCi0gICAgICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgPSB0aGlz
LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpOwotCi0gICAgICAgIGZvciAoYXV0byBj
bGllbnQgOiBtX2NsaWVudHMpIHsKLSAgICAgICAgICAgIGNsaWVudC0+ZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoZW5hYmxlZCwgdGFyZ2V0VHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAg
ICAgICAgICBjbGllbnQtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBX
ZSBkb24ndCBjYWxsIHVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpIGluIHRoZSBhbGwgY2Fz
ZSwgc2luY2UKLSAgICAvLyB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSB3aWxsIGFsc28g
dXBkYXRlIHRoZSBzZWxlY3Rpb24gaW5kaWNlcy4KLSAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50
TmFtZXMoKS5jaGFuZ2VFdmVudCkKLSAgICAgICAgdXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2Vz
KCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCku
dm9sdW1lY2hhbmdlRXZlbnQpIHsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50
cykKLSAgICAgICAgICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKGlzTXV0ZWQoKSk7Ci0gICAgfQot
fQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YWRkQ2xpZW50KFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2Ns
aWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnJlbW92ZUNsaWVu
dChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVCht
X2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVu
dCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXko
KQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBs
YXkoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGF1
c2UoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnBhdXNlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OnRvZ2dsZVBsYXlTdGF0ZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBt
X21lZGlhRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjcnViYmluZygpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY3J1YmJp
bmcoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PmVuZFNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21lZGlhRWxlbWVu
dCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUg
dGltZSkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50
LT5mYXN0U2Vlayh0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVu
dCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVy
SW50ZXJmYWNlOjpGb3J3YXJkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKLXsKLSAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJv
bGxlckludGVyZmFjZTo6QmFja3dhcmQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50
KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1
aW50NjRfdCBzZWxlY3RlZEF1ZGlvSW5kZXgpCi17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBtX2F1ZGlv
VHJhY2tzRm9yTWVudS5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fYXVkaW9UcmFj
a3NGb3JNZW51W2ldLT5zZXRFbmFibGVkKGkgPT0gc2VsZWN0ZWRBdWRpb0luZGV4KTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFRleHRUcmFjayogdGV4dFRyYWNrOwotICAgIGlmIChpbmRl
eCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBt
X2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsK
LSAgICBlbHNlCi0gICAgICAgIHRleHRUcmFjayA9IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJ
dGVtKCk7Ci0KLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRy
YWNrKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9n
Z2xlUGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50LT5mdWxsc2Ny
ZWVuTW9kZSgpID09IE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJl
SW5QaWN0dXJlKQotICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbnRlckZ1bGxzY3JlZW4oTWVkaWFQbGF5
ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVNdXRlZCgpCi17Ci0g
ICAgc2V0TXV0ZWQoIWlzTXV0ZWQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1fbWVkaWFF
bGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0TXV0ZWQobXV0ZWQpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVu
dC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0gICAg
YXV0byYgdGV4dFRyYWNrcyA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYg
KHRleHRUcmFja3MubGVuZ3RoKCkpCi0gICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUgPSBj
YXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSgmdGV4dFRyYWNrcyk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2xlZ2libGVUcmFja3NGb3JNZW51LmNsZWFyKCk7Ci0KLSAgICBh
dXRvJiBhdWRpb1RyYWNrcyA9IG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpOwotICAgIGlm
IChhdWRpb1RyYWNrcy5sZW5ndGgoKSA+IDEpCi0gICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51
ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoJmF1ZGlvVHJhY2tz
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYXVkaW9UcmFja3NGb3JNZW51LmNsZWFyKCk7Ci0KLSAg
ICBhdXRvIGF1ZGlvT3B0aW9ucyA9IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCk7Ci0gICAg
YXV0byBhdWRpb0luZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKLSAgICBhdXRvIGxl
Z2libGVPcHRpb25zID0gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOwotICAgIGF1dG8g
bGVnaWJsZUluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpOwotCi0gICAgZm9yIChh
dXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChhdWRpb09wdGlvbnMsIGF1ZGlvSW5kZXgpOwotICAgICAgICBj
bGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGxlZ2libGVPcHRpb25z
LCBsZWdpYmxlSW5kZXgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCkKLXsKLSAgICBhdXRv
IGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpOwotICAgIGF1dG8gbGVnaWJs
ZUluZGV4ID0gbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpOwotCi0gICAgZm9yIChhdXRvIGNs
aWVudCA6IG1fY2xpZW50cykgewotICAgICAgICBjbGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQoYXVkaW9JbmRleCk7Ci0gICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uSW5kZXhDaGFuZ2VkKGxlZ2libGVJbmRleCk7Ci0gICAgfQotfQotCi1kb3VibGUgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrU3RhcnRlZFRpbWUoKSBj
b25zdAotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCk7Ci19Ci0KLWNv
bnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICAvLyBGSVhNRSgxNTc0NTIpOiBSZW1v
dmUgdGhlIHJpZ2h0LWhhbmQgY29uc3RydWN0b3Igbm90YXRpb24gb25jZSBOZXZlckRlc3Ryb3ll
ZCBzdXBwb3J0cyBpbml0aWFsaXplcl9saXN0cy4KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VmVjdG9yPEF0b21pY1N0cmluZz4+IG5hbWVzID0gVmVjdG9yPEF0b21pY1N0cmluZz4oewotICAg
ICAgICBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwKLSAgICAgICAgZXZlbnROYW1l
cygpLnBhdXNlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQsCi0gICAgICAg
IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS50aW1l
dXBkYXRlRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LAotICAgICAg
ICBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnJlbW92
ZXRyYWNrRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCwKLSAg
ICAgICAgZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3Nj
aGFuZ2VkRXZlbnQsCi0gICAgfSk7Ci0gICAgcmV0dXJuIG5hbWVzLmdldCgpOwotfQotCi1jb25z
dCBBdG9taWNTdHJpbmcmICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXZl
bnROYW1lQWxsKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBl
dmVudE5hbWVBbGwoImFsbEV2ZW50cyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgIHJldHVybiBldmVudE5hbWVBbGw7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmICghbV9t
ZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dC0+c3VwcG9ydHNTZWVraW5nKCkgPyBtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSA6IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3VycmVudFRpbWUoKSBjb25zdAotewotICAg
IHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpIDog
MDsKLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpidWZm
ZXJlZFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFF
bGVtZW50LT5tYXhCdWZmZXJlZFRpbWUoKSA6IDA7Ci19Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzUGxheWluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
bWVkaWFFbGVtZW50ID8gIW1fbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA6IGZhbHNlOwotfQotCi1m
bG9hdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6cGxheWJhY2tSYXRlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+cGxh
eWJhY2tSYXRlKCkgOiAwOwotfQotCi1SZWY8VGltZVJhbmdlcz4gV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+c2Vla2FibGUoKSA6IFRpbWVSYW5nZXM6
OmNyZWF0ZSgpOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZVRpbWVSYW5nZXNM
YXN0TW9kaWZpZWRUaW1lKCkgOiAwOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPmxpdmVVcGRhdGVJbnRlcnZhbCgpIDog
MDsKLX0KLSAgICAKLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNh
blBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8g
bV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0ZSgpIDwgMC4wIDogZmFsc2U7Ci19Ci0K
LVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKLXsKLSAgICBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvT3B0aW9uczsKLQotICAgIGlmICghbV9tZWRp
YUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAg
cmV0dXJuIGF1ZGlvT3B0aW9uczsKLQotICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1f
bWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5j
ZXMoKTsKLQotICAgIGF1ZGlvT3B0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYXVkaW9U
cmFja3NGb3JNZW51LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDogbV9hdWRp
b1RyYWNrc0Zvck1lbnUpCi0gICAgICAgIGF1ZGlvT3B0aW9ucy51bmNoZWNrZWRBcHBlbmQoY2Fw
dGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soYXVkaW9UcmFjay5n
ZXQoKSkpOwotCi0gICAgcmV0dXJuIGF1ZGlvT3B0aW9uczsKLX0KLQotdWludDY0X3QgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkg
Y29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9hdWRpb1RyYWNr
c0Zvck1lbnUuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChtX2F1ZGlvVHJhY2tzRm9y
TWVudVtpbmRleF0tPmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9
Ci0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKLX0KLQot
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0Ci17Ci0gICAgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlT3B0aW9uczsKLQotICAgIGlmICghbV9t
ZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOwotCi0gICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2Vz
ID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVm
ZXJlbmNlcygpOwotCi0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUpCi0gICAgICAgIGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVk
aWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGxl
Z2libGVPcHRpb25zOwotfQotCi11aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Ci17Ci0gICAgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsK
LSAgICB1aW50NjRfdCBvZmZJbmRleCA9IDA7Ci0gICAgYm9vbCB0cmFja01lbnVJdGVtU2VsZWN0
ZWQgPSBmYWxzZTsKLQotICAgIGF1dG8gaG9zdCA9IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVs
ZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkgOiBudWxscHRyOwotCi0gICAgaWYgKCFob3N0KQot
ICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleDsKLQotICAgIEF0b21pY1N0cmluZyBkaXNwbGF5
TW9kZSA9IGhvc3QtPmNhcHRpb25EaXNwbGF5TW9kZSgpOwotICAgIFRleHRUcmFjayogb2ZmSXRl
bSA9IGhvc3QtPmNhcHRpb25NZW51T2ZmSXRlbSgpOwotICAgIFRleHRUcmFjayogYXV0b21hdGlj
SXRlbSA9IGhvc3QtPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOwotCi0gICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRl
eCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRl
eF07Ci0gICAgICAgIGlmICh0cmFjayA9PSBvZmZJdGVtKQotICAgICAgICAgICAgb2ZmSW5kZXgg
PSBpbmRleDsKLQotICAgICAgICBpZiAodHJhY2sgPT0gYXV0b21hdGljSXRlbSAmJiBkaXNwbGF5
TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpKSB7Ci0gICAgICAg
ICAgICBzZWxlY3RlZEluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICB0cmFja01lbnVJdGVtU2Vs
ZWN0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1l
ZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBU
ZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBp
bmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAob2ZmSXRlbSAmJiAhdHJhY2tNZW51SXRlbVNlbGVjdGVkICYm
IGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0Ojpmb3JjZWRPbmx5S2V5d29yZCgpKQot
ICAgICAgICBzZWxlY3RlZEluZGV4ID0gb2ZmSW5kZXg7Ci0KLSAgICByZXR1cm4gc2VsZWN0ZWRJ
bmRleDsKLX0KLQotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0
ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dCAmJiBtX21lZGlhRWxlbWVudC0+d2Via2l0Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVz
cygpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21l
ZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5
cGVOb25lOwotCi0gICAgc3dpdGNoIChtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3Qo
KS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCkpIHsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwotICAgIGNhc2Ug
TWVkaWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6Ok5vbmU6Ci0gICAgICAgIHJldHVybiBUYXJn
ZXRUeXBlTm9uZTsKLSAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpBaXJw
bGF5OgotICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZUFpclBsYXk7Ci0gICAgY2FzZSBNZWRpYUNv
bnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6VHZvdXQ6Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBl
VFZPdXQ7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QKLXsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0
KCkpCi0gICAgICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+
ZXh0ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZSgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwot
fQotCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp3aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50
ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYVNlc3Npb24oKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCgqbV9tZWRpYUVsZW1lbnQpOwotfQotCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Ojppc011dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVs
ZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bXV0ZWQoKSA6IGZhbHNlOwotfQotCi19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZmMzJiNDM5MzVkMmIyODFkODE2M2ZiMTc2NThhMWM3Y2U0NGEzNmYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIHsg
fTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4
aXRGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVl
bigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkg
PSAwOwotfTsKLQotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGE1MjcwMmRiODZiNTkyNjQ5MjJhZWI0MDFjZGIyMjIxOWQ5ZmRlNDcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaAorKysgL2Rldi9udWxs
CkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAi
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudDsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDbGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCYpPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGdWxs
c2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJv
b2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSA9IDA7Ci0gICAgZW51bSBWaWRlb0dyYXZpdHkgeyBW
aWRlb0dyYXZpdHlSZXNpemUsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgVmlkZW9HcmF2aXR5
UmVzaXplQXNwZWN0RmlsbCB9OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0
eShWaWRlb0dyYXZpdHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgPSAwOwotCi0g
ICAgdmlydHVhbCBib29sIGlzVmlzaWJsZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0
U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1Zp
ZGVvKCkgY29uc3QgPSAwOwotfTsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgPSAw
OwotfTsKLQotV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsK
LSAgICAKLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTBmYjE3MDkxOWZkMTg3ZjIwMGY2ODli
NzIyYTVlZGFhNWQ2YzEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIK
LSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBBdWRpb1RyYWNr
OwotY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKLWNsYXNzIFRleHRUcmFjazsKLWNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVi
bGljIEV2ZW50TGlzdGVuZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpKTsK
LSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRWxlbWVu
dChIVE1MVmlkZW9FbGVtZW50Kik7Ci0gICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0VsZW1lbnQuZ2V0KCk7IH0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtdIHsgfSk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB3YWl0Rm9yUHJlcGFyZWRGb3JJbmxpbmVUaGVuKFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyID0gW10geyB9KTsKLSAgICAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBXZWJDb3JlOjpFdmVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlRm9yRXZlbnROYW1l
KGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2
ZW50TGlzdGVuZXImIHJocykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikg
b3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDbGllbnQoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jh
dml0eSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmdWxsc2NyZWVuTW9kZUNo
YW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3ZpZGVvRGltZW5zaW9uczsgfQotICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9Ci0KLQot
cHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRIYXNWaWRlbyhib29sKTsKLSAg
ICB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyhjb25zdCBGbG9hdFNpemUmKTsKLQotICAgIHN0YXRp
YyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsK
LSAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBSZWZQ
dHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRm
b3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5n
IHsgZmFsc2UgfTsKLSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4g
bV9jbGllbnRzOwotICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07Ci0gICAgRmxvYXRTaXpl
IG1fdmlkZW9EaW1lbnNpb25zOwotICAgIEZsb2F0UmVjdCBtX3ZpZGVvRnJhbWU7Ci0gICAgVmVj
dG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51OwotICAgIFZlY3Rv
cjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51OwotfTsKLQotfQotCi0j
ZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjBiZjQ3YzBjNGRlNjVmZWNjNDVmYzVmZjc0NTc2ODViMGM1
NWM1Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
IgotCi0jaW1wb3J0ICJET01XaW5kb3cuaCIKLSNpbXBvcnQgIkhpc3RvcnkuaCIKLSNpbXBvcnQg
IkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9D
b3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2lt
cG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9F
bGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4
dFRyYWNrTGlzdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKLSAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi17Ci19Ci0KLVdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQoKQotewotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQot
ewotICAgIGlmIChtX3ZpZGVvRWxlbWVudCA9PSB2aWRlb0VsZW1lbnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+dmlkZW9GdWxs
c2NyZWVuTGF5ZXIoKSkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKG51bGxwdHIpOwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1faXNMaXN0ZW5p
bmcpIHsKLSAgICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMo
KSkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZSwgKnRoaXMsIGZhbHNlKTsKLSAgICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwot
Ci0gICAgbV92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7Ci0KLSAgICBpZiAobV92aWRlb0Vs
ZW1lbnQpIHsKLSAgICAgICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFt
ZXMoKSkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50
TmFtZSwgKnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9pc0xpc3RlbmluZyA9IHRydWU7Ci0gICAg
fQotCi0gICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50JiBldmVudCkKLXsKLSAgICB1
cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQudHlwZSgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRv
bWljU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVBbGwoKTsKLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5yZXNpemVFdmVudCkgewotICAgICAgICBzZXRIYXNWaWRlbyhtX3ZpZGVvRWxlbWVudCk7
Ci0gICAgICAgIHNldFZpZGVvRGltZW5zaW9ucyhtX3ZpZGVvRWxlbWVudCA/IEZsb2F0U2l6ZSht
X3ZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCBtX3ZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQo
KSkgOiBGbG9hdFNpemUoKSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2
aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXllciA9PSB2aWRlb0xheWVyKSB7Ci0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
bV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IHZpZGVvTGF5ZXI7Ci0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAs
IDApXTsKLSNlbHNlCi0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6
Q0dQb2ludE1ha2UoMC41LCAwLjUpXTsKLSNlbmRpZgotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxh
eWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVdOwotICAgIAotICAgIGlmICghbV92aWRlb0VsZW1l
bnQpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVv
RnVsbHNjcmVlbkxheWVyLmdldCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OndhaXRGb3JQcmVwYXJl
ZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92aWRlb0VsZW1lbnQtPndhaXRG
b3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RnVsbHNj
cmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUs
IGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1f
dmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpICE9IG1vZGUpCi0gICAgICAgIG1fdmlkZW9F
bGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKLQotICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCAmJiBmaW5pc2hlZFdpdGhNZWRpYSAmJiBtb2RlID09IE1lZGlhUGxheWVyRW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVOb25lKSB7Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudC0+ZG9jdW1l
bnQoKS5pc01lZGlhRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKERPTVdpbmRvdyogd2lu
ZG93ID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuZG9tV2luZG93KCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoSGlzdG9yeSogaGlzdG9yeSA9IHdpbmRvdy0+aGlzdG9yeSgpKQotICAgICAg
ICAgICAgICAgICAgICBoaXN0b3J5LT5iYWNrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNl
dFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKLXsKLSAgICBtX3ZpZGVvRnJhbWUgPSBy
ZWN0OwotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczpDR1JlY3QocmVjdCld
OwotICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZp
ZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCi17Ci0gICAgTWVkaWFQbGF5ZXI6OlZpZGVvR3Jh
dml0eSB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
OwotICAgIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZp
dHlSZXNpemUpCi0gICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZp
dHlSZXNpemU7Ci0gICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRp
YVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGVsc2UgaWYgKGdyYXZpdHkg
PT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwp
Ci0gICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVB
c3BlY3RGaWxsOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
Ci0gICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkodmlkZW9HcmF2
aXR5KTsKLX0KLQotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQotewotICAgIHN0YXRpYyBj
b25zdCBhdXRvIG5hbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxBdG9taWNTdHJpbmc+
IHsgZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50IH0pOwotICAgIHJldHVybiBuYW1lczsKLX0KLQot
Y29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
ZXZlbnROYW1lQWxsKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7Ci0gICAgcmV0dXJuIHNFdmVudE5hbWVBbGw7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
dmlkZW9GdWxsc2NyZWVuTW9kZSkKLXsKLSAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAg
IG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9k
ZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENs
aWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQotewotICAgIEFTU0VS
VCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMuYWRkKCZjbGll
bnQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZW1v
dmVDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBB
U1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMucmVtb3Zl
KCZjbGllbnQpOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
Ojppc1Zpc2libGUoKSBjb25zdAotewotICAgIGlmICghbV92aWRlb0VsZW1lbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gbV92aWRlb0VsZW1lbnQtPmRv
Y3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gcGFnZS0+aXNWaXNpYmxlKCk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OnNldEhhc1ZpZGVvKGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgaWYgKGhhc1ZpZGVvID09
IG1faGFzVmlkZW8pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFzVmlkZW8gPSBoYXNWaWRl
bzsKLQotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQt
Pmhhc1ZpZGVvQ2hhbmdlZChtX2hhc1ZpZGVvKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYg
dmlkZW9EaW1lbnNpb25zKQotewotICAgIGlmIChtX3ZpZGVvRGltZW5zaW9ucyA9PSB2aWRlb0Rp
bWVuc2lvbnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlkZW9EaW1lbnNpb25zID0gdmlk
ZW9EaW1lbnNpb25zOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAg
ICAgIGNsaWVudC0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX3ZpZGVvRGltZW5zaW9ucyk7Ci19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmNkN2I0YmNmMTRi
Yzc0YTY1MjUyMDhjYmYzMTJjZTYyNWQzNjExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKQEAgLTAs
MCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUg
IlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1v
ZGVsLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1
ZGUgPG9iamMvb2JqYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBX
ZWJBVlBsYXllckNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7
CitPQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFVJV2luZG93OworT0JK
Q19DTEFTUyBVSVZpZXc7CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgUGxheWJhY2tTZXNzaW9u
TW9kZWw7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25DaGFuZ2VPYnNlcnZlcjsKKworY2xhc3Mg
V0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQKKyAgICA6IHB1Ymxp
YyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudAorICAgICwgcHVibGljIFJlZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ+IHsKKworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dChtb2RlbCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdCgpOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7IH0KKworICAgIC8vIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRNZWRpYVN0
YXRlKCkgb3ZlcnJpZGU7CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRU
aW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBv
dmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChj
b25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBk
YXRlSW50ZXJ2YWwpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2FuUGxheUZh
c3RSZXZlcnNlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0
ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFt
ZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBtdXRlZENoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5
ZXJDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdChQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOworCisgICAgUmV0YWluUHRyPFdlYkFWUGxh
eWVyQ29udHJvbGxlcj4gbV9wbGF5ZXJDb250cm9sbGVyOworICAgIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0ciB9OworfTsKKworfQorCisjZW5k
aWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1YmE5MDVhNzAxOTQ5NjU3
NzMxN2IxMGQ1MzAwMjdmYzFjNTE1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KQEAgLTAsMCAr
MSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKyNpZiBIQVZFKEFWS0lUKQorCisjaW1w
b3J0ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFTZWxl
Y3Rpb25PcHRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW1wb3J0
ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJXZWJBVlBsYXllckNvbnRyb2xsZXIuaCIKKyNpbXBv
cnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JL
X09QVElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVl
VGltaW5nKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25Nb2Rl
bCYgbW9kZWwpCisgICAgOiBtX3BsYXllckNvbnRyb2xsZXIoYWRvcHROUyhbW1dlYkFWUGxheWVy
Q29udHJvbGxlciBhbGxvY10gaW5pdF0pKQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgm
bW9kZWwpCit7CisgICAgbW9kZWwuYWRkQ2xpZW50KCp0aGlzKTsKKyAgICBbbV9wbGF5ZXJDb250
cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTp0aGlzXTsKKyAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldERlbGVnYXRlOiZtb2RlbF07CisKKyAgICBkdXJhdGlvbkNoYW5nZWQobW9k
ZWwuZHVyYXRpb24oKSk7CisgICAgY3VycmVudFRpbWVDaGFuZ2VkKG1vZGVsLmN1cnJlbnRUaW1l
KCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSk7CisgICAgYnVm
ZmVyZWRUaW1lQ2hhbmdlZChtb2RlbC5idWZmZXJlZFRpbWUoKSk7CisgICAgcmF0ZUNoYW5nZWQo
bW9kZWwuaXNQbGF5aW5nKCksIG1vZGVsLnBsYXliYWNrUmF0ZSgpKTsKKyAgICBzZWVrYWJsZVJh
bmdlc0NoYW5nZWQobW9kZWwuc2Vla2FibGVSYW5nZXMoKSwgbW9kZWwuc2Vla2FibGVUaW1lUmFu
Z2VzTGFzdE1vZGlmaWVkVGltZSgpLCBtb2RlbC5saXZlVXBkYXRlSW50ZXJ2YWwoKSk7CisgICAg
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtb2RlbC5jYW5QbGF5RmFzdFJldmVyc2UoKSk7Cisg
ICAgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKCksIG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkpOworICAgIGxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSwgbW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpKTsKKyAgICBl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtb2RlbC5leHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpLCBt
b2RlbC5leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNr
TG9jYWxpemVkRGV2aWNlTmFtZSgpKTsKKyAgICB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQobW9kZWwud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSk7Cit9CisKK1Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQoKQoreworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlOm51bGxwdHJdOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RXh0ZXJuYWxQbGF5YmFj
a0FjdGl2ZTpmYWxzZV07CisKKyAgICBpbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCit7CisgICAgW21fcGxheWVy
Q29udHJvbGxlciByZXNldE1lZGlhU3RhdGVdOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQoreworICAgIFdl
YkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxl
ci5nZXQoKTsKKworICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRp
b247CisgICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9
IGR1cmF0aW9uOworCisgICAgLy8gRklYTUU6IHdlIHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9u
IHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCisgICAgcGxheWVyQ29udHJvbGxlci5jYW5QbGF5ID0g
WUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGF1c2UgPSBZRVM7CisgICAgcGxheWVyQ29u
dHJvbGxlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmhh
c0VuYWJsZWRBdWRpbyA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblNlZWsgPSBZRVM7
CisgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNS
ZWFkeVRvUGxheTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3Vy
cmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7
CisgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xs
ZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOworICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9
IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJy
ZW50VGltZQorICAgICAgICBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07
CisKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFRpbWluZzp0aW1pbmddOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSBidWZmZXJlZFRpbWUpCit7CisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250
cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworICAgIGRvdWJsZSBkdXJhdGlvbiA9
IHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uOworICAgIGRvdWJsZSBub3JtYWxpemVk
QnVmZmVyZWRUaW1lOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIG5vcm1hbGl6ZWRCdWZm
ZXJlZFRpbWUgPSAwOworICAgIGVsc2UKKyAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9
IGJ1ZmZlcmVkVGltZSAvIGR1cmF0aW9uOworICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGlt
ZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFsaXplZEJ1ZmZlcmVkVGltZSldOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywg
ZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UmF0ZTpp
c1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0
aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRl
cnZhbCkKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHNlZWthYmxlUmFuZ2VzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJs
ZSBzdGFydCA9IHRpbWVSYW5nZXMuc3RhcnQoaSkucmVsZWFzZVJldHVyblZhbHVlKCk7CisgICAg
ICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLmVuZChpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsK
KworICAgICAgICBDTVRpbWVSYW5nZSByYW5nZSA9IENNVGltZVJhbmdlTWFrZShDTVRpbWVNYWtl
V2l0aFNlY29uZHMoc3RhcnQsIDEwMDApLCBDTVRpbWVNYWtlV2l0aFNlY29uZHMoZW5kLXN0YXJ0
LCAxMDAwKSk7CisgICAgICAgIFtzZWVrYWJsZVJhbmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFs
dWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKKyAgICB9CisKKyAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldFNlZWthYmxlVGltZVJhbmdlczpzZWVrYWJsZVJhbmdlcy5nZXQoKV07CisgICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lOiBs
YXN0TW9kaWZpZWRUaW1lXTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExpdmVVcGRhdGVJ
bnRlcnZhbDpsaXZlVXBkYXRlSW50ZXJ2YWxdOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RS
ZXZlcnNlKQoreworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNh
blBsYXlGYXN0UmV2ZXJzZV07Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+
IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiBvcHRpb25zKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25z
LnNpemUoKV0pOworICAgIGZvciAoYXV0byYgb3B0aW9uIDogb3B0aW9ucykgeworICAgICAgICBS
ZXRhaW5QdHI8V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhb
W1dlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3dlYk9w
dGlvbiBzZXRMb2NhbGl6ZWREaXNwbGF5TmFtZTpvcHRpb24uZGlzcGxheU5hbWVdOworICAgICAg
ICBbd2ViT3B0aW9ucyBhZGRPYmplY3Q6d2ViT3B0aW9uLmdldCgpXTsKKyAgICB9CisgICAgcmV0
dXJuIHdlYk9wdGlvbnM7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6
OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9u
cyhvcHRpb25zKTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOworICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dl
Yk9wdGlvbnMgY291bnRdKQorICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRB
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGlj
X2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
Y29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMg
PSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CisgICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOworICAg
IGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAgICAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9w
dGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4
KV1dOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERl
dmljZU5hbWUpCit7CisgICAgQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGUg
ZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNr
VHlwZU5vbmU7CisgICAgaWYgKHRhcmdldFR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRh
cmdldFR5cGVBaXJQbGF5KQorICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVy
Q29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlQWlyUGxheTsKKyAgICBlbHNlIGlmICh0YXJn
ZXRUeXBlID09IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQpCisgICAgICAg
IGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFj
a1R5cGVUVk91dDsKKworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxl
ciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVy
bmFsUGxheWJhY2tBaXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2FsaXplZERldmljZU5h
bWU7CisgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4dGVybmFs
UGxheWJhY2tUeXBlOworICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2
ZSA9IGVuYWJsZWQ7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6Ondp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQoreworICAg
IFttX3BsYXllckNvbnRyb2xsZXIgc2V0QWxsb3dzRXh0ZXJuYWxQbGF5YmFjazohZGlzYWJsZWRd
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjptdXRlZENoYW5nZWQo
Ym9vbCBtdXRlZCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldE11dGVkOm11dGVkXTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCit7
CisgICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQorICAgICAgICByZXR1cm47CisKKyAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm51bGxwdHJdOworICAgIG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbCA9IG51bGxwdHI7Cit9CisKK30KKworI2VuZGlmIC8vIEhBVkUoQVZLSVQpCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjc3
MTAzYzM0MTFhOTMwOWM4ZmM1MjQ5MzY1YmYwNTg1MTQ2NWI5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
LmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVk
ZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnRFbnVtcy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVk
ZSA8b2JqYy9vYmpjLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK09CSkNfQ0xBU1MgQVZQbGF5
ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xB
U1MgVUlXaW5kb3c7CitPQkpDX0NMQVNTIFVJVmlldzsKK09CSkNfQ0xBU1MgQ0FMYXllcjsKK09C
SkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9sbGVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllckxh
eWVyVmlldzsKK09CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJMYXllcjsKK09CSkNfQ0xBU1MgV2ViQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlOworCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0
cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEZs
b2F0U2l6ZTsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsOworY2xhc3MgVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI7CisgICAgCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdCBmaW5hbAorICAgIDogcHVibGljIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAs
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4geworCitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Jik7CisgICAgdmlydHVh
bCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBw
bGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9CisKKyAgICAvLyBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJv
b2wpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChi
b29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiwgY29uc3Qg
SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyAqLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3Qm
IGZpbmFsUmVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxs
c2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNj
cmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KTsKKworICAg
IGVudW0gY2xhc3MgRXhpdEZ1bGxTY3JlZW5SZWFzb24geworICAgICAgICBEb25lQnV0dG9uVGFw
cGVkLAorICAgICAgICBGdWxsU2NyZWVuQnV0dG9uVGFwcGVkLAorICAgICAgICBQaW5jaEdlc3R1
cmVIYW5kbGVkLAorICAgICAgICBSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQsCisgICAg
ICAgIFBpY3R1cmVJblBpY3R1cmVTdGFydGVkCisgICAgfTsKKworICAgIFZpZGVvRnVsbHNjcmVl
bk1vZGVsKiBtb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0K
KyAgICBib29sIHNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihFeGl0RnVsbFNjcmVlblJl
YXNvbik7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBib29sIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmVQbGF5YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBs
YXliYWNrOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1Zp
ZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0OworICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKFdURjo6RnVuY3Rpb248dm9pZChib29sKT4mJiBjYWxsYmFjayk7CisgICAgYm9v
bCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0OworICAgIHZvaWQgYXBwbGlj
YXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKKworICAgIHZvaWQgd2lsbFN0YXJ0UGljdHVyZUluUGlj
dHVyZSgpOworICAgIHZvaWQgZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBm
YWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOworICAgIHZvaWQgd2lsbFN0b3BQaWN0dXJl
SW5QaWN0dXJlKCk7CisgICAgdm9pZCBkaWRTdG9wUGljdHVyZUluUGljdHVyZSgpOworICAgIHZv
aWQgcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKHZv
aWQgKF4pKEJPT0wpKTsKKworICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBt
X21vZGUgJiBtb2RlOyB9CisgICAgYm9vbCBpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBtb2RlOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdChQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYpOworICAgIHZvaWQgYmVnaW5T
ZXNzaW9uKCk7CisgICAgdm9pZCBlbnRlclBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGVu
dGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7CisgICAgdm9pZCB3YXRjaGRvZ1RpbWVyRmlyZWQoKTsK
KyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdDsKKwor
ICAgIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2U7CisgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZT4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlOworICAgIFJldGFpblB0cjxBVlBsYXll
clZpZXdDb250cm9sbGVyPiBtX3BsYXllclZpZXdDb250cm9sbGVyOworICAgIFZpZGVvRnVsbHNj
cmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0ciB9OworICAgIFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7IG51
bGxwdHIgfTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgd2hlbiBmdWxsc2NyZWVuIGlz
IHByZXNlbnRlZCBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KKyAgICBSZXRhaW5QdHI8VUlXaW5kb3c+
IG1fd2luZG93OworICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiBtX3ZpZXdDb250cm9s
bGVyOworICAgIFJldGFpblB0cjxVSVZpZXc+IG1fcGFyZW50VmlldzsKKyAgICBSZXRhaW5QdHI8
VUlXaW5kb3c+IG1fcGFyZW50V2luZG93OworICAgIFJldGFpblB0cjxXZWJBVlBsYXllckxheWVy
Vmlldz4gbV9wbGF5ZXJMYXllclZpZXc7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1fbW9kZSB7IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZU5vbmUgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+IG1fcHJlcGFy
ZVRvSW5saW5lQ2FsbGJhY2s7CisgICAgUnVuTG9vcDo6VGltZXI8VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IG1fd2F0Y2hkb2dUaW1lcjsKKyAgICBib29sIG1fYWxsb3dzUGljdHVyZUlu
UGljdHVyZVBsYXliYWNrIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZXhpdFJlcXVlc3RlZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2V4aXRDb21wbGV0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9l
bnRlclJlcXVlc3RlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5X
aGVuU3RvcHBpbmdQaVAgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRSZXR1cm5Ub0Z1bGxz
Y3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3VuZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Jlc3Rv
cmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCB7IGZhbHNlIH07CisKKyAgICB2
b2lkIGRvRW50ZXJGdWxsc2NyZWVuKCk7Cit9OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjkzMjBmZGUxZWVjYjAwZDI5ZGJlZTI1Yjk4NDkyNjVj
YWQyODIxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9W
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpAQCAtMCwwICsxLDEwNDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0LmgiCisKKyNpZiBIQVZFKEFWS0lUKQorCisjaW1wb3J0ICJBVktpdFNQSS5o
IgorI2ltcG9ydCAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJSdW50aW1l
QXBwbGljYXRpb25DaGVja3MuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIlZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5N
b2RlbC5oIgorI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+Cisj
aW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2ltcG9ydCA8b2JqYy9tZXNzYWdlLmg+CisjaW1wb3J0
IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gU29mdC1saW5raW5nIGhlYWRlcnMgbXVzdCBiZSBp
bmNsdWRlZCBsYXN0IHNpbmNlIHRoZXkgI2RlZmluZSBmdW5jdGlvbnMsIGNvbnN0YW50cywgZXRj
LgorI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SSyhB
VkZvdW5kYXRpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVy
KQorU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJl
c2l6ZSwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5
ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfQ09OU1RB
TlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCwgTlNT
dHJpbmcgKikKKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKK1NPRlRfTElO
S19DTEFTU19PUFRJT05BTChBVktpdCwgQVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlcikKK1NP
RlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcikKK1NP
RlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgX19BVlBsYXllckxheWVyVmlldykKKworU09G
VF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlBcHBsaWNh
dGlvbikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlTY3JlZW4pCitTT0ZUX0xJTktfQ0xBU1Mo
VUlLaXQsIFVJV2luZG93KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVZpZXcpCitTT0ZUX0xJ
TktfQ0xBU1MoVUlLaXQsIFVJVmlld0NvbnRyb2xsZXIpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQs
IFVJQ29sb3IpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlLaXQsIFVJVGV4dEVmZmVjdHNCZW5lYXRo
U3RhdHVzQmFyV2luZG93TGV2ZWwsIFVJV2luZG93TGV2ZWwpCisKK3N0YXRpYyBVSUNvbG9yICpj
bGVhclVJQ29sb3IoKQoreworICAgIHJldHVybiAoVUlDb2xvciAqKVtnZXRVSUNvbG9yQ2xhc3Mo
KSBjbGVhckNvbG9yXTsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBjb25zdCBjaGFy
KiBib29sU3RyaW5nKGJvb2wgdmFsKQoreworICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFs
c2UiOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGRlZmF1bHRXYXRjaGRvZ1Rp
bWVySW50ZXJ2YWwgeyAxX3MgfTsKKworQGNsYXNzIFdlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb247
CisKK0BpbnRlcmZhY2UgV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIDogTlNPYmpl
Y3QgPEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZV9XZWJLaXRPbmx5PiB7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsK
K30KK0Bwcm9wZXJ0eSAoYXNzaWduKSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVs
bHNjcmVlbkludGVyZmFjZTsKKy0gKEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVy
Vmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciBzaG91bGRFeGl0RnVsbFNjcmVl
bldpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbily
ZWFzb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBVlBsYXllclZpZXdDb250cm9sbGVy
RGVsZWdhdGUKKy0gKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50
ZXJmYWNlCit7CisgICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNlLmdldCgpOworfQorCist
ICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBm
dWxsc2NyZWVuSW50ZXJmYWNlOworfQorCistICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2ls
bFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZp
ZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsK
KyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUo
KTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0YXJ0UGljdHVyZUluUGlj
dHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3Jl
ZW5JbnRlcmZhY2UtPmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBs
YXllclZpZXdDb250cm9sbGVyRmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVy
Vmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciB3aXRoRXJyb3I6KE5TRXJyb3Ig
KillcnJvcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAg
VU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmZhaWxl
ZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRy
b2xsZXJXaWxsU3RvcFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilw
bGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJv
bGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT53aWxsU3RvcFBpY3R1cmVJblBp
Y3R1cmUoKTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0b3BQaWN0dXJl
SW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIK
K3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYuZnVs
bHNjcmVlbkludGVyZmFjZS0+ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworc3RhdGlj
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiBjb252
ZXJ0VG9FeGl0RnVsbFNjcmVlblJlYXNvbihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxT
Y3JlZW5SZWFzb24gcmVhc29uKQoreworICAgIHN3aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBB
VlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25Eb25lQnV0dG9uVGFwcGVk
OgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxs
U2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkOworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uRnVsbFNjcmVlbkJ1dHRvblRhcHBlZDoKKyAgICAg
ICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJl
YXNvbjo6RnVsbFNjcmVlbkJ1dHRvblRhcHBlZDsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRy
b2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpY3R1cmVJblBpY3R1cmVTdGFydGVkOgorICAgICAg
ICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVh
c29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRy
b2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblBpbmNoR2VzdHVyZUhhbmRsZWQ6CisgICAgICAgIHJl
dHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246
OlBpbmNoR2VzdHVyZUhhbmRsZWQ7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhp
dEZ1bGxTY3JlZW5SZWFzb25SZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ6CisgICAgICAg
IHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFz
b246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZDsKKyAgICB9Cit9CisKKy0gKEJPT0wp
cGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3
Q29udHJvbGxlciBzaG91bGRFeGl0RnVsbFNjcmVlbldpdGhSZWFzb246KEFWUGxheWVyVmlld0Nv
bnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbilyZWFzb24KK3sKKyAgICBVTlVTRURfUEFSQU0o
cGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHJldHVybiBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZh
Y2UtPnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihjb252ZXJ0VG9FeGl0RnVsbFNjcmVl
blJlYXNvbihyZWFzb24pKTsKK30KKworLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHJlc3RvcmVVc2VySW50
ZXJmYWNlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKEJPT0wgcmVzdG9yZWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgVU5VU0VEX1BBUkFN
KHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPnBy
ZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0
aW9uSGFuZGxlcik7Cit9CitAZW5kCisKK0BpbnRlcmZhY2UgV2ViQVZQbGF5ZXJMYXllciA6IENB
TGF5ZXIKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIE5TU3RyaW5nICp2aWRlb0dyYXZp
dHk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzUmVhZHlGb3JEaXNwbGF5KSBCT09M
IHJlYWR5Rm9yRGlzcGxheTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOworQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgQVZQbGF5ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyOwor
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgQ0FMYXllciAqdmlkZW9TdWJsYXllcjsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBudWxsYWJsZSkgTlNEaWN0aW9uYXJ5ICpwaXhlbEJ1
ZmZlckF0dHJpYnV0ZXM7CitAcHJvcGVydHkgQ0dTaXplIHZpZGVvRGltZW5zaW9uczsKK0Bwcm9w
ZXJ0eSBDR1JlY3QgbW9kZWxWaWRlb0xheWVyRnJhbWU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJBVlBsYXllckxheWVyIHsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IF9mdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNv
bnRyb2xsZXI+IF9hdlBsYXllckNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IF92
aWRlb1N1YmxheWVyOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX3ZpZGVvR3Jhdml0eTsKK30K
KworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAg
IGlmIChzZWxmKSB7CisgICAgICAgIFtzZWxmIHNldE1hc2tzVG9Cb3VuZHM6WUVTXTsKKyAgICAg
ICAgX3ZpZGVvR3Jhdml0eSA9IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKTsK
KyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtO
U09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07CisgICAgW19waXhlbEJ1
ZmZlckF0dHJpYnV0ZXMgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQoreworICAg
IHJldHVybiBfZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKTsKK30KKworLSAodm9pZClzZXRGdWxs
c2NyZWVuSW50ZXJmYWNlOihWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVl
bkludGVyZmFjZQoreworICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVy
ZmFjZTsKK30KKworLSAoQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcgorewor
ICAgIHJldHVybiAoQVZQbGF5ZXJDb250cm9sbGVyICopX2F2UGxheWVyQ29udHJvbGxlci5nZXQo
KTsKK30KKworLSAodm9pZClzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIg
KilwbGF5ZXJDb250cm9sbGVyCit7CisgICAgQVNTRVJUKCFwbGF5ZXJDb250cm9sbGVyIHx8IFtw
bGF5ZXJDb250cm9sbGVyIGlzS2luZE9mQ2xhc3M6W1dlYkFWUGxheWVyQ29udHJvbGxlciBjbGFz
c11dKTsKKyAgICBfYXZQbGF5ZXJDb250cm9sbGVyID0gKFdlYkFWUGxheWVyQ29udHJvbGxlciAq
KXBsYXllckNvbnRyb2xsZXI7Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9TdWJsYXllcjooQ0FMYXll
ciAqKXZpZGVvU3VibGF5ZXIKK3sKKyAgICBfdmlkZW9TdWJsYXllciA9IHZpZGVvU3VibGF5ZXI7
Cit9CisKKy0gKENBTGF5ZXIqKXZpZGVvU3VibGF5ZXIKK3sKKyAgICByZXR1cm4gX3ZpZGVvU3Vi
bGF5ZXIuZ2V0KCk7Cit9CisKKy0gKHZvaWQpbGF5b3V0U3VibGF5ZXJzCit7CisgICAgaWYgKFtf
dmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBzZWxmKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIVtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgW192aWRlb1N1YmxheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKENHUmVjdEdldE1p
ZFgoc2VsZi5ib3VuZHMpLCBDR1JlY3RHZXRNaWRZKHNlbGYuYm91bmRzKSldOworCisgICAgaWYg
KHNlbGYudmlkZW9EaW1lbnNpb25zLmhlaWdodCA8PSAwIHx8IHNlbGYudmlkZW9EaW1lbnNpb25z
LndpZHRoIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBzb3VyY2VWaWRl
b0ZyYW1lOworICAgIEZsb2F0UmVjdCB0YXJnZXRWaWRlb0ZyYW1lOworICAgIGZsb2F0IHZpZGVv
QXNwZWN0UmF0aW8gPSBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCAvIHNlbGYudmlkZW9EaW1l
bnNpb25zLmhlaWdodDsKKyAgICAKKyAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNp
emUoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKSB7CisgICAgICAgIHNvdXJj
ZVZpZGVvRnJhbWUgPSBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lOworICAgICAgICB0YXJnZXRW
aWRlb0ZyYW1lID0gc2VsZi5ib3VuZHM7CisgICAgfSBlbHNlIGlmIChbZ2V0QVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0p
IHsKKyAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlv
SW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsK
KyAgICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5z
aWRlUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisgICAgfSBlbHNlIGlmIChb
Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwoKSBpc0VxdWFsVG9TdHJpbmc6
c2VsZi52aWRlb0dyYXZpdHldKSB7CisgICAgICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBzbWFsbGVz
dFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYubW9k
ZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lID0g
Q0dSZWN0TWFrZSgwLCAwLCBzb3VyY2VWaWRlb0ZyYW1lLndpZHRoKCksIHNvdXJjZVZpZGVvRnJh
bWUuaGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVs
KCkpOworICAgICAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXll
ckZyYW1lKHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICB0YXJnZXRWaWRlb0Zy
YW1lID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJh
dGlvLCBzZWxmLmJvdW5kcyk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworCisgICAgVUlWaWV3ICp2aWV3ID0gKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxl
Z2F0ZV07CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zv
cm1NYWtlU2NhbGUodGFyZ2V0VmlkZW9GcmFtZS53aWR0aCgpIC8gc291cmNlVmlkZW9GcmFtZS53
aWR0aCgpLCB0YXJnZXRWaWRlb0ZyYW1lLmhlaWdodCgpIC8gc291cmNlVmlkZW9GcmFtZS5oZWln
aHQoKSk7CisgICAgW3ZpZXcgc2V0VHJhbnNmb3JtOnRyYW5zZm9ybV07CisgICAgCisgICAgTlNU
aW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSBbQ0FUcmFuc2FjdGlvbiBhbmltYXRpb25E
dXJhdGlvbl07CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
XiB7CisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhU
YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07
CisKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRz
KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OmFuaW1hdGlvbkR1cmF0aW9uICsgMC4xXTsKKyAg
ICB9KTsKK30KKworLSAodm9pZClyZXNvbHZlQm91bmRzCit7CisgICAgW05TT2JqZWN0IGNhbmNl
bFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rv
cihyZXNvbHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKKyAgICBpZiAoIVtfYXZQbGF5ZXJDb250cm9s
bGVyIGRlbGVnYXRlXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChbX3ZpZGVvU3Vi
bGF5ZXIgc3VwZXJsYXllcl0gIT0gc2VsZikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlm
IChDR1JlY3RFcXVhbFRvUmVjdChzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lLCBbc2VsZiBib3Vu
ZHNdKSAmJiBDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHkoWyhVSVZpZXcgKilbX3ZpZGVvU3Vi
bGF5ZXIgZGVsZWdhdGVdIHRyYW5zZm9ybV0pKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
W0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1
cmF0aW9uOjBdOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Cisg
ICAgCisgICAgaWYgKCFDR1JlY3RFcXVhbFRvUmVjdChzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1l
LCBbc2VsZiBib3VuZHNdKSkgeworICAgICAgICBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lID0g
W3NlbGYgYm91bmRzXTsKKyAgICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2Rl
bCgpKTsKKyAgICAgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVvTGF5
ZXJGcmFtZShzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKKyAgICB9CisgICAgWyhVSVZpZXcg
KilbX3ZpZGVvU3VibGF5ZXIgZGVsZWdhdGVdIHNldFRyYW5zZm9ybTpDR0FmZmluZVRyYW5zZm9y
bUlkZW50aXR5XTsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2
b2lkKXNldFZpZGVvR3Jhdml0eTooTlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKK3sKKyAgICBfdmlk
ZW9HcmF2aXR5ID0gdmlkZW9HcmF2aXR5OworICAgIAorICAgIGlmICghW19hdlBsYXllckNvbnRy
b2xsZXIgZGVsZWdhdGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OworICAgIGlmICh2aWRlb0dyYXZp
dHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpKQorICAgICAgICBncmF2aXR5ID0g
V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKKyAgICBp
ZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSkK
KyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3Q7CisgICAgZWxzZSBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5
ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkpCisgICAgICAgIGdyYXZpdHkgPSBXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIEFTU0VS
VChfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7CisgICAgX2Z1bGxzY3JlZW5JbnRlcmZh
Y2UtPm1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KGdyYXZpdHkpOworfQorCistIChOU1N0
cmluZyAqKXZpZGVvR3Jhdml0eQoreworICAgIHJldHVybiBfdmlkZW9HcmF2aXR5LmdldCgpOwor
fQorCistIChDR1JlY3QpdmlkZW9SZWN0Cit7CisgICAgaWYgKHNlbGYudmlkZW9EaW1lbnNpb25z
LndpZHRoIDw9IDAgfHwgc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0IDw9IDApCisgICAgICAg
IHJldHVybiBzZWxmLmJvdW5kczsKKyAgICAKKyAgICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0g
c2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7
CisKKyAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSBpc0VxdWFs
VG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKQorICAgICAgICByZXR1cm4gbGFyZ2VzdFJlY3RX
aXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsK
KyAgICBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVh
bFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKKyAgICAgICAgcmV0dXJuIHNtYWxsZXN0UmVj
dFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMp
OworCisgICAgcmV0dXJuIHNlbGYuYm91bmRzOworfQorCisrIChOU1NldCAqKWtleVBhdGhzRm9y
VmFsdWVzQWZmZWN0aW5nVmlkZW9SZWN0Cit7CisgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2Jq
ZWN0czpAInZpZGVvRGltZW5zaW9ucyIsIEAidmlkZW9HcmF2aXR5IiwgbmlsXTsKK30KKworQGVu
ZAorCitAaW50ZXJmYWNlIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyA6IFVJ
VmlldworQGVuZAorCitzdGF0aWMgQ2xhc3MgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKK3sKKyAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5
ZXIgY2xhc3NdOworfQorCitzdGF0aWMgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3ICphbGxvY1dlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld0luc3RhbmNlKCkK
K3sKKyAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKKyAg
ICAgICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdldFVJVmlld0NsYXNzKCks
ICJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciLCAwKTsKKyAgICAgICAgb2Jq
Y19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7CisgICAgICAgIENsYXNzIG1ldGFDbGFzcyA9
IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXci
KTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1ldGFDbGFzcywgQHNlbGVjdG9yKGxheWVyQ2xh
c3MpLCAoSU1QKVdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld19sYXllckNsYXNz
LCAiQEA6Iik7CisgICAgfSk7CisgICAgCisgICAgcmV0dXJuIChXZWJBVlBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXcgKilbdGhlQ2xhc3MgYWxsb2NdOworfQorCitAaW50ZXJmYWNlIFdl
YkFWUGxheWVyTGF5ZXJWaWV3IDogX19BVlBsYXllckxheWVyVmlldworQHByb3BlcnR5IChyZXRh
aW4pIFVJVmlldyogdmlkZW9WaWV3OworQGVuZAorCitzdGF0aWMgQ2xhc3MgV2ViQVZQbGF5ZXJM
YXllclZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQoreworICAgIHJldHVybiBbV2ViQVZQbGF5ZXJM
YXllciBjbGFzc107Cit9CisKK3N0YXRpYyBBVlBsYXllckNvbnRyb2xsZXIgKldlYkFWUGxheWVy
TGF5ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBfX0FWUGxh
eWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllciA9IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIg
KndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllciBwbGF5
ZXJMYXllcl07CisgICAgcmV0dXJuIFt3ZWJBVlBsYXllckxheWVyIHBsYXllckNvbnRyb2xsZXJd
OworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zZXRQbGF5ZXJDb250cm9s
bGVyKGlkIGFTZWxmLCBTRUwsIEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcikK
K3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAg
ICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIg
KilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBbd2ViQVZQbGF5ZXJMYXllciBz
ZXRQbGF5ZXJDb250cm9sbGVyOiBwbGF5ZXJDb250cm9sbGVyXTsKK30KKworc3RhdGljIFVJVmll
dyAqV2ViQVZQbGF5ZXJMYXllclZpZXdfdmlkZW9WaWV3KGlkIGFTZWxmLCBTRUwpCit7CisgICAg
X19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsKKyAgICBXZWJBVlBsYXll
ckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5
ZXIgcGxheWVyTGF5ZXJdOworICAgIENBTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbd2ViQVZQbGF5ZXJM
YXllciB2aWRlb1N1YmxheWVyXTsKKyAgICBpZiAoIXZpZGVvTGF5ZXIgfHwgIXZpZGVvTGF5ZXIu
ZGVsZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKFtbdmlkZW9MYXllciBk
ZWxlZ2F0ZV0gaXNLaW5kT2ZDbGFzczpnZXRVSVZpZXdDbGFzcygpXSk7CisgICAgcmV0dXJuIChV
SVZpZXcgKilbdmlkZW9MYXllciBkZWxlZ2F0ZV07Cit9CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxh
eWVyTGF5ZXJWaWV3X3NldFZpZGVvVmlldyhpZCBhU2VsZiwgU0VMLCBVSVZpZXcgKnZpZGVvVmll
dykKK3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsK
KyAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5
ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKyAgICBbd2ViQVZQbGF5ZXJMYXll
ciBzZXRWaWRlb1N1YmxheWVyOlt2aWRlb1ZpZXcgbGF5ZXJdXTsKK30KKworc3RhdGljIHZvaWQg
V2ViQVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBsYXllckxheWVyVmll
dyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVy
VmlldyAqKVtwbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld107
CisKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVy
ICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAgV2ViQVZQbGF5ZXJMYXllciAq
cGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKKyAg
ICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNp
emVBc3BlY3QoKV07CisgICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvU3VibGF5ZXI6cGxheWVy
TGF5ZXIudmlkZW9TdWJsYXllcl07CisgICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGltZW5z
aW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOworICAgIFtwaXBQbGF5ZXJMYXllciBz
ZXRWaWRlb0dyYXZpdHk6cGxheWVyTGF5ZXIudmlkZW9HcmF2aXR5XTsKKyAgICBbcGlwUGxheWVy
TGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6cGxheWVyTGF5ZXIubW9kZWxWaWRlb0xheWVy
RnJhbWVdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRQbGF5ZXJDb250cm9sbGVyOnBsYXllckxh
eWVyLnBsYXllckNvbnRyb2xsZXJdOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRGdWxsc2NyZWVu
SW50ZXJmYWNlOnBsYXllckxheWVyLmZ1bGxzY3JlZW5JbnRlcmZhY2VdOworICAgIFtwaXBWaWV3
IGFkZFN1YnZpZXc6cGxheWVyTGF5ZXJWaWV3LnZpZGVvVmlld107Cit9CisKK3N0YXRpYyB2b2lk
IFdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKK3sKKyAgICBXZWJBVlBsYXllckxheWVyVmll
dyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAgaWYgKFVJVmlldyAqdmlkZW9WaWV3ID0g
cGxheWVyTGF5ZXJWaWV3LnZpZGVvVmlldykKKyAgICAgICAgW3BsYXllckxheWVyVmlldyBhZGRT
dWJ2aWV3OnZpZGVvVmlld107CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3ICpwaXBWaWV3ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVtw
bGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld107CisgICAgV2Vi
QVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJM
YXllclZpZXcgcGxheWVyTGF5ZXJdOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxh
eWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07CisgICAgW3BsYXllckxh
eWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBpcFBsYXllckxheWVyLm1vZGVsVmlkZW9MYXll
ckZyYW1lXTsKK30KKworc3RhdGljIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmll
dyAqV2ViQVZQbGF5ZXJMYXllclZpZXdfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhp
ZCBhU2VsZiwgU0VMKQoreworICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZp
ZXcgPSBhU2VsZjsKKyAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBp
cFZpZXcgPSBbcGxheWVyTGF5ZXJWaWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXciXTsKKyAgICBpZiAoIXBpcFZpZXcpIHsKKyAgICAgICAgcGlwVmlldyA9
IFthbGxvY1dlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld0luc3RhbmNlKCkgaW5p
dFdpdGhGcmFtZTpDR1JlY3RaZXJvXTsKKyAgICAgICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1
ZTpwaXBWaWV3IGZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Cisg
ICAgfQorICAgIHJldHVybiBwaXBWaWV3OworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxh
eWVyVmlld19kZWFsbG9jKGlkIGFTZWxmLCBTRUwpCit7CisgICAgV2ViQVZQbGF5ZXJMYXllclZp
ZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFJldGFpblB0cjxXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXc+IHBpcFZpZXcgPSBhZG9wdE5TKFtwbGF5ZXJMYXllclZp
ZXcgdmFsdWVGb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdKTsKKyAg
ICBbcGxheWVyTGF5ZXJWaWV3IHNldFZhbHVlOm5pbCBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVy
ZVBsYXllckxheWVyVmlldyJdOworICAgIG9iamNfc3VwZXIgc3VwZXJDbGFzcyB7IHBsYXllckxh
eWVyVmlldywgZ2V0X19BVlBsYXllckxheWVyVmlld0NsYXNzKCkgfTsKKyAgICBhdXRvIHN1cGVy
X2RlYWxsb2MgPSByZWludGVycHJldF9jYXN0PHZvaWQoKikob2JqY19zdXBlciosIFNFTCk+KG9i
amNfbXNnU2VuZFN1cGVyKTsKKyAgICBzdXBlcl9kZWFsbG9jKCZzdXBlckNsYXNzLCBAc2VsZWN0
b3IoZGVhbGxvYykpOworfQorCisjcHJhZ21hIG1hcmsgLSBNZXRob2RzCisKK3N0YXRpYyBXZWJB
VlBsYXllckxheWVyVmlldyAqYWxsb2NXZWJBVlBsYXllckxheWVyVmlld0luc3RhbmNlKCkKK3sK
KyAgICBzdGF0aWMgQ2xhc3MgdGhlQ2xhc3MgPSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29u
Y2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeIHsKKyAgICAg
ICAgdGhlQ2xhc3MgPSBvYmpjX2FsbG9jYXRlQ2xhc3NQYWlyKGdldF9fQVZQbGF5ZXJMYXllclZp
ZXdDbGFzcygpLCAiV2ViQVZQbGF5ZXJMYXllclZpZXciLCAwKTsKKyAgICAgICAgY2xhc3NfYWRk
TWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYyksIChJTVApV2ViQVZQbGF5ZXJMYXll
clZpZXdfZGVhbGxvYywgInZAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3Ms
IEBzZWxlY3RvcihzZXRQbGF5ZXJDb250cm9sbGVyOiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZp
ZXdfc2V0UGxheWVyQ29udHJvbGxlciwgInZAOkAiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9k
KHRoZUNsYXNzLCBAc2VsZWN0b3IocGxheWVyQ29udHJvbGxlciksIChJTVApV2ViQVZQbGF5ZXJM
YXllclZpZXdfcGxheWVyQ29udHJvbGxlciwgIkBAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRo
b2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzZXRWaWRlb1ZpZXc6KSwgKElNUClXZWJBVlBsYXllckxh
eWVyVmlld19zZXRWaWRlb1ZpZXcsICJ2QDpAIik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0
aGVDbGFzcywgQHNlbGVjdG9yKHZpZGVvVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdf
dmlkZW9WaWV3LCAiQEA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNl
bGVjdG9yKHN0YXJ0Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldywgInZAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2Qo
dGhlQ2xhc3MsIEBzZWxlY3RvcihzdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVv
VG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAidkA6Iik7CisgICAgICAgIGNsYXNz
X2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXcsICJAQDoiKTsKKyAgICAgICAgCisgICAgICAgIGNsYXNzX2FkZEl2YXIodGhlQ2xh
c3MsICJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyIsIHNpemVvZihXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKiksIGxvZzIoc2l6ZW9mKFdlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyAqKSksICJAIik7CisgICAgICAgIAorICAgICAgICBvYmpj
X3JlZ2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsKKyAgICAgICAgQ2xhc3MgbWV0YUNsYXNzID0g
b2JqY19nZXRNZXRhQ2xhc3MoIldlYkFWUGxheWVyTGF5ZXJWaWV3Iik7CisgICAgICAgIGNsYXNz
X2FkZE1ldGhvZChtZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClXZWJBVlBs
YXllckxheWVyVmlld19sYXllckNsYXNzLCAiQEA6Iik7CisgICAgfSk7CisgICAgcmV0dXJuIChX
ZWJBVlBsYXllckxheWVyVmlldyAqKVt0aGVDbGFzcyBhbGxvY107Cit9CisKK1JlZjxWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNy
ZWF0ZShQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlKQoreworICAgIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNl
ID0gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChwbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UpKTsKKyAgICBbaW50ZXJmYWNlLT5tX3BsYXllclZpZXdDb250cm9sbGVy
RGVsZWdhdGUgc2V0RnVsbHNjcmVlbkludGVyZmFjZTppbnRlcmZhY2UucHRyKCldOworICAgIHJl
dHVybiBpbnRlcmZhY2U7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYg
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAgIDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAgICwgbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ckRlbGVnYXRlKGFkb3B0TlMoW1tXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgYWxs
b2NdIGluaXRdKSkKKyAgICAsIG1fd2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKQorewor
fQorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6flZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0KCkKK3sKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xs
ZXIgPSB0aGlzLT5wbGF5ZXJDb250cm9sbGVyKCk7CisgICAgaWYgKHBsYXllckNvbnRyb2xsZXIg
JiYgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlKQorICAgICAgICBleHRl
cm5hbFBsYXliYWNrQ2hhbmdlZChmYWxzZSwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5
cGVOb25lLCAiIik7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Cit9CisKK1dlYkFWUGxh
eWVyQ29udHJvbGxlciAqVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBsYXllckNvbnRy
b2xsZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+
cGxheWVyQ29udHJvbGxlcigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbChWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwp
Cit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsID0gbW9kZWw7CisKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAg
ICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKKworICAgIGhhc1Zp
ZGVvQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bC0+aGFzVmlkZW8oKSA6IGZhbHNlKTsKKyAgICB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwgPyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT52aWRlb0RpbWVuc2lv
bnMoKSA6IEZsb2F0U2l6ZSgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
ID0gb2JzZXJ2ZXI7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Omhh
c1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQoreworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkg
c2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsKKyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNl
dEhhc1ZpZGVvOmhhc1ZpZGVvXTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5z
aW9ucykKK3sKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXll
ckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKworICAgIFtwbGF5ZXJM
YXllciBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKKyAgICBbcGxheWVyQ29u
dHJvbGxlcigpIHNldENvbnRlbnREaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107CisgICAgW21f
cGxheWVyTGF5ZXJWaWV3IHNldE5lZWRzTGF5b3V0XTsKKworICAgIFdlYkFWUGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXcgKilbbV9wbGF5ZXJMYXllclZpZXcgcGljdHVyZUluUGljdHVyZVBsYXllckxh
eWVyVmlld107CisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQ
bGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKKyAgICBbcGlwUGxheWVyTGF5ZXIgc2V0Vmlk
ZW9EaW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVvRGltZW5zaW9uc107CisgICAgW3BpcFZpZXcg
c2V0TmVlZHNMYXlvdXRdOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBb
bV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOmVuYWJsZWRdOworfQorCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCit7Cisg
ICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6YXBwbGlj
YXRpb25EaWRCZWNvbWVBY3RpdmUoJXApIiwgdGhpcyk7CisgICAgaWYgKG1fc2hvdWxkUmV0dXJu
VG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgJiYgbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5pc1Zpc2libGUoKSkgeworICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBhcmUgYm90aCBpbiBQaVAgYW5kIGluIEZ1bGxz
Y3JlZW4gKGkuZS4sIHZpYSBhdXRvLVBpUCksIGFuZCB3ZSBkaWQgbm90IHN0b3AgZnVsbHNjcmVl
biB1cG9uIHJldHVybmluZywgaXQgbXVzdCBiZQorICAgIC8vIGJlY2F1c2UgdGhlIG9yaWdpbmF0
aW5nIHZpZXcgaXMgbm90IHZpc2libGUsIHNvIGhpZGUgdGhlIGZ1bGxzY3JlZW4gd2luZG93Lgor
ICAgIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0
dXJlSW5QaWN0dXJlKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3Rl
ZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgW21fd2luZG93IHNl
dEhpZGRlbjpZRVNdOworICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IHNldEhpZGRlbjpZRVNdOworICAgICAgICB9XTsKKyAgICB9Cit9CisKK0BpbnRlcmZhY2UgVUlX
aW5kb3cgKCkKKy0gKEJPT0wpX2lzSG9zdGVkSW5Bbm90aGVyUHJvY2VzczsKK0BlbmQKKworQGlu
dGVyZmFjZSBVSVZpZXdDb250cm9sbGVyICgpCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
LCBzZXR0ZXI9X3NldElnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczopIEJPT0wgX2lnbm9y
ZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczsKK0BlbmQKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKFVJVmlldyYgdmlkZW9WaWV3LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBhbGxvd3NQaWN0
dXJlSW5QaWN0dXJlUGxheWJhY2spCit7CisgICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgTE9HKEZ1bGxzY3JlZW4s
ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRo
aXMpOworCisgICAgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgPSBhbGxvd3NQaWN0
dXJlSW5QaWN0dXJlUGxheWJhY2s7CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAg
W0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBib29sIGlzSW5QaWN0
dXJlSW5QaWN0dXJlTW9kZSA9IGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgbV9tb2RlID0gbW9kZTsKKyAgICBt
X3BhcmVudFZpZXcgPSBwYXJlbnRWaWV3OworICAgIG1fcGFyZW50V2luZG93ID0gcGFyZW50Vmll
dy53aW5kb3c7CisKKyAgICBpZiAoIVtbcGFyZW50VmlldyB3aW5kb3ddIF9pc0hvc3RlZEluQW5v
dGhlclByb2Nlc3NdKSB7CisgICAgICAgIGlmICghbV93aW5kb3cpCisgICAgICAgICAgICBtX3dp
bmRvdyA9IGFkb3B0TlMoW2FsbG9jVUlXaW5kb3dJbnN0YW5jZSgpIGluaXRXaXRoRnJhbWU6W1tn
ZXRVSVNjcmVlbkNsYXNzKCkgbWFpblNjcmVlbl0gYm91bmRzXV0pOworICAgICAgICBbbV93aW5k
b3cgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKyAgICAgICAgaWYgKCFtX3Zp
ZXdDb250cm9sbGVyKQorICAgICAgICAgICAgbV92aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2Fs
bG9jVUlWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdF0pOworICAgICAgICBbW21fdmlld0Nv
bnRyb2xsZXIgdmlld10gc2V0RnJhbWU6W21fd2luZG93IGJvdW5kc11dOworICAgICAgICBbbV92
aWV3Q29udHJvbGxlciBfc2V0SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOllFU107Cisg
ICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bV92aWV3Q29udHJvbGxlci5n
ZXQoKV07CisgICAgICAgIFttX3dpbmRvdyBzZXRXaW5kb3dMZXZlbDpnZXRVSVRleHRFZmZlY3Rz
QmVuZWF0aFN0YXR1c0JhcldpbmRvd0xldmVsKCkgKyAxXTsKKyAgICAgICAgW21fd2luZG93IG1h
a2VLZXlBbmRWaXNpYmxlXTsKKyAgICB9CisKKyAgICBpZiAoIW1fcGxheWVyTGF5ZXJWaWV3KQor
ICAgICAgICBtX3BsYXllckxheWVyVmlldyA9IGFkb3B0TlMoW2FsbG9jV2ViQVZQbGF5ZXJMYXll
clZpZXdJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVu
OltwbGF5ZXJDb250cm9sbGVyKCkgaXNFeHRlcm5hbFBsYXliYWNrQWN0aXZlXV07CisgICAgW21f
cGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisKKyAg
ICBpZiAoIWlzSW5QaWN0dXJlSW5QaWN0dXJlTW9kZSkgeworICAgICAgICBbbV9wbGF5ZXJMYXll
clZpZXcgc2V0VmlkZW9WaWV3OiZ2aWRlb1ZpZXddOworICAgICAgICBbbV9wbGF5ZXJMYXllclZp
ZXcgYWRkU3VidmlldzomdmlkZW9WaWV3XTsKKyAgICB9CisKKyAgICBXZWJBVlBsYXllckxheWVy
ICpwbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBs
YXllckxheWVyXTsKKworICAgIFtwbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxSZWN0LmhlaWdodCgp
KV07CisgICAgW3BsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczpbcGxheWVyQ29udHJvbGxl
cigpIGNvbnRlbnREaW1lbnNpb25zXV07CisgICAgcGxheWVyTGF5ZXIuZnVsbHNjcmVlbkludGVy
ZmFjZSA9IHRoaXM7CisKKyAgICBpZiAoIW1fcGxheWVyVmlld0NvbnRyb2xsZXIpCisgICAgICAg
IG1fcGxheWVyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY0FWUGxheWVyVmlld0NvbnRy
b2xsZXJJbnN0YW5jZSgpIGluaXRXaXRoUGxheWVyTGF5ZXJWaWV3Om1fcGxheWVyTGF5ZXJWaWV3
LmdldCgpXSk7CisKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNr
Q29udHJvbHM6Tk9dOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFBsYXllckNvbnRy
b2xsZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIoKV07CisgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRl
bGVnYXRlLmdldCgpXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRBbGxvd3NQaWN0
dXJlSW5QaWN0dXJlUGxheWJhY2s6bV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2tdOwor
CisgICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlUG9zc2libGU6bV9h
bGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2tdOworCisgICAgaWYgKG1fdmlld0NvbnRyb2xs
ZXIpIHsKKyAgICAgICAgW21fdmlld0NvbnRyb2xsZXIgYWRkQ2hpbGRWaWV3Q29udHJvbGxlcjpt
X3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVy
IHZpZXddIGFkZFN1YnZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld11dOworICAgIH0g
ZWxzZQorICAgICAgICBbcGFyZW50VmlldyBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddXTsKKworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0g
W3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5pdGlhbFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKyAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jl
c2l6aW5nRmxleGlibGVCb3R0b21NYXJnaW4gfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVJp
Z2h0TWFyZ2luKV07CisKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0TmVl
ZHNMYXlvdXRdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5l
ZWRlZF07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlz
XSB7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKKyAgICB9
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisKKyAgICBtX2V4aXRDb21wbGV0ZWQg
PSBmYWxzZTsKKyAgICBtX2V4aXRSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICBtX2VudGVyUmVxdWVz
dGVkID0gdHJ1ZTsKKworICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKKyAgICAgICAgZW50ZXJQaWN0dXJl
SW5QaWN0dXJlKCk7CisgICAgZWxzZSBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5T
dGFuZGFyZCgpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVy
ZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIAorICAgIGlmIChbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVQb3NzaWJsZV0pCisgICAgICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0YXJ0UGljdHVyZUluUGljdHVyZV07CisgICAgZWxz
ZQorICAgICAgICBmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpCit7
CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50
ZXJGdWxsc2NyZWVuU3RhbmRhcmQoJXApIiwgdGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworCisgICAgaWYgKFttX3Bs
YXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZUFjdGl2ZV0pIHsKKyAgICAgICAg
Ly8gTk9URTogVGhlIGZ1bGxzY3JlZW4gbW9kZSB3aWxsIGJlIHJlc3RvcmVkIGluIHByZXBhcmVG
b3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcigpLgorICAgICAgICBt
X3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IHRydWU7CisgICAgICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNj
cmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbdGhpcywgcHJvdGVjdGVkVGhpc10g
KEJPT0wgc3VjY2VlZGVkLCBOU0Vycm9yKikgeworICAgICAgICBVTlVTRURfUEFSQU0oc3VjY2Vl
ZGVkKTsKKyAgICAgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXApIC0gc3VjY2VlZGVkKCVz
KSIsIHRoaXMsIGJvb2xTdHJpbmcoc3VjY2VlZGVkKSk7CisgICAgICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworCisgICAgICAgIGlmICht
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKKyAgICB9XTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgZmluYWxSZWN0KQoreworICAgIG1fd2F0Y2hkb2dUaW1lci5zdG9wKCk7CisKKyAg
ICBtX2V4aXRSZXF1ZXN0ZWQgPSB0cnVlOworICAgIGlmIChtX2V4aXRDb21wbGV0ZWQpIHsKKyAg
ICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKKyAgICAKKyAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJl
Y3Q6ZmluYWxSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdXBlcnZp
ZXddOworCisgICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJM
YXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAgaWYgKFtwbGF5ZXJM
YXllciB2aWRlb0dyYXZpdHldICE9IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Qo
KSkKKyAgICAgICAgW3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpnZXRBVkxheWVyVmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0KCldOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKSB7CisgICAgICAgIG1fc2hv
dWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7CisgICAgICAgIFtt
X3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
dG9wUGljdHVyZUluUGljdHVyZV07CisgICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSB8IEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgeworICAgICAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6
Tk8gY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9y
KikgeworICAgICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46
Tk9dOworICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBp
Y3R1cmVdOworICAgICAgICB9XTsKKyAgICB9IGVsc2UgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKKyAgICAgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBj
b21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7
CisgICAgICAgICAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOworCisgICAgICAgICAgICBbQ0FU
cmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxl
QWN0aW9uczpZRVNdOworICAgICAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91
bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKyAgICAgICAg
ICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSgpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAg
ICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH1dOworICAgIH07Cit9CisKK0BpbnRlcmZhY2Ug
VUlBcHBsaWNhdGlvbiAoKQorLSAodm9pZClfc2V0U3RhdHVzQmFyT3JpZW50YXRpb246KFVJSW50
ZXJmYWNlT3JpZW50YXRpb24pbzsKK0BlbmQKKworQGludGVyZmFjZSBVSVdpbmRvdyAoKQorLSAo
VUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZhY2VPcmllbnRhdGlvbjsKK0BlbmQKKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQorewor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFu
dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOworICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICBb
bV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0Nv
bnRyb2xsZXI6bmlsXTsKKyAgICAgICAgaWYgKG1fcGFyZW50V2luZG93KQorICAgICAgICAgICAg
W1tnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBzaGFyZWRBcHBsaWNhdGlvbl0gX3NldFN0YXR1c0Jh
ck9yaWVudGF0aW9uOlttX3BhcmVudFdpbmRvdyBpbnRlcmZhY2VPcmllbnRhdGlvbl1dOworICAg
IH0KKyAgICAKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwor
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFBsYXllckNvbnRyb2xsZXI6bmlsXTsKKyAg
ICAKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVQaWN0dXJlSW5QaWN0dXJlKSkKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
c3RvcFBpY3R1cmVJblBpY3R1cmVdOworICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKKyAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpb
XSAoQk9PTCwgTlNFcnJvciAqKSB7IH1dOworICAgIAorICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBpZiAobV92aWV3Q29udHJvbGxl
cikKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdD
b250cm9sbGVyXTsKKyAgICAKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgcmVtb3ZlRnJvbVN1cGVy
dmlld107CisgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXdd
OworCisgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBuaWw7CisgICAgbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciA9IG5pbDsKKyAgICBtX3dpbmRvdyA9IG5pbDsKKyAgICBtX3BhcmVudFZpZXcgPSBuaWw7
CisgICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7CisgICAgCisgICAgaWYgKG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xl
YW51cEZ1bGxzY3JlZW4oKTsKKworICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSBmYWxzZTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCit7CisgICAg
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciA9IG5pbDsKKyAgICAKKyAgICBjbGVhbnVwRnVsbHNjcmVlbigpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVu
KCkKK3sKKyAgICBpZiAoIW1fZW50ZXJSZXF1ZXN0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVQaWN0dXJlSW5QaWN0dXJlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIExPRyhGdWxs
c2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisKKyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107
CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOworCisg
ICAgaWYgKHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgJiYgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCAm
JiAhbV9leGl0UmVxdWVzdGVkKSB7CisgICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBh
dXNlKCk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVu
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCit7
CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJl
cGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmlu
Zyh2aXNpYmxlKSk7CisgICAgaWYgKG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spIHsKKyAgICAg
ICAgCisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFy
ZW50VmlldyBjb252ZXJ0UmVjdDppbmxpbmVSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XS5zdXBlcnZpZXddOworCisgICAgICAgIFdURjo6RnVuY3Rpb248dm9pZChib29s
KT4gY2FsbGJhY2sgPSBXVEZNb3ZlKG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spOworICAgICAg
ICBjYWxsYmFjayh2aXNpYmxlKTsKKyAgICB9Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gW3BsYXllckNvbnRyb2xsZXIoKSBpc1BsYXlpbmddICYmIG1f
bW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFy
ZCAmJiBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFdURjo6RnVuY3Rp
b248dm9pZChib29sKT4mJiBjYWxsYmFjaykKK3sKKyAgICBtX3ByZXBhcmVUb0lubGluZUNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZnVsbHNjcmVlbk1heVJl
dHVyblRvSW5saW5lKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoJXAp
IiwgdGhpcyk7CisgICAgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNj
cmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBp
Y3R1cmUoJXApIiwgdGhpcyk7CisgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVu
dGVyaW5nRm9yZWdyb3VuZCA9IFttX3BsYXllclZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1
cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF07CisgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CisKKyAgICBpZiAobV9tb2Rl
ICYgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHsK
KyAgICAgICAgaWYgKCFbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2Fz
U3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdKSB7CisgICAgICAgICAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBj
b21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7
CisgICAgICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgICAgICAgICAg
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKKyAgICAg
ICAgICAgIH1dOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgW21fd2luZG93IHNl
dEhpZGRlbjpZRVNdOworICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0
SGlkZGVuOllFU107CisgICAgfQorCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVu
KCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3Rh
cnRQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0
aGlzKTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJv
bHM6WUVTXTsKKworICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9leGl0Q29t
cGxldGVkID0gdHJ1ZTsKKworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAg
ICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwor
CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBtX3Nob3VsZFJldHVy
blRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCA9IGZhbHNlOworICAgIG1fc2hvdWxkUmV0dXJu
VG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxzZTsKKworICAgIExPRyhG
dWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVy
ZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2Ny
ZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3ApCisgICAgICAgIHJldHVybjsKKworICAgIFttX3dp
bmRvdyBzZXRIaWRkZW46Tk9dOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBz
ZXRIaWRkZW46Tk9dOworCisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKK30KKwordm9pZCBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKQoreworICAg
IExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BQ
aWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB8fCBtX3Jlc3RvcmluZ0Z1
bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkgeworICAgICAgICAvLyBBU1NVTVBUSU9O
OiB3ZSBhcmUgZXhpdGluZyBwaXAgYmVjYXVzZSB3ZSBhcmUgZW50ZXJpbmcgZnVsbHNjcmVlbgor
ICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNl
dFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKworICAgIFttX3BsYXllckxheWVyVmlldyBzZXRC
YWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworCisgICAgY2xl
YXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJ
blBpY3R1cmUpOworICAgIAorICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAg
ICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJl
SW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRs
ZXIpKEJPT0wgcmVzdG9yZWQpKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21w
bGV0aW9uSGFuZGxlciglcCkiLCB0aGlzKTsKKyAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxz
Y3JlZW5XaGVuU3RvcHBpbmdQaVAgfHwgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVu
dGVyaW5nRm9yZWdyb3VuZCkgeworICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldo
ZW5TdG9wcGluZ1BpUCA9IGZhbHNlOworICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gZmFsc2U7CisgICAgICAgIG1fcmVzdG9yaW5nRnVs
bHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wID0gdHJ1ZTsKKworICAgICAgICBbbV93aW5k
b3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IHNldEhpZGRlbjpOT107CisKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJG
dWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCBzdWNjZXNzLCBO
U0Vycm9yKikgeworICAgICAgICAgICAgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUlu
UGljdHVyZVN0b3AgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoc3VjY2Vzcyk7CisgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZEVudGVyRnVsbHNjcmVlbigpOworICAgICAgICB9XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICBSZXRhaW5QdHI8aWQ+IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyID0gYWRv
cHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZShbcHJvdGVjdGVkVGhpcywgc3Ryb25nQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgcmVz
dG9yZWQpICB7CisgICAgICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFu
ZGxlciBsYW1iZGEoJXApIC0gcmVzdG9yZWQoJXMpIiwgcHJvdGVjdGVkVGhpcy5nZXQoKSwgYm9v
bFN0cmluZyhyZXN0b3JlZCkpOworICAgICAgICB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJP
T0wgcmVzdG9yZWQpID0gc3Ryb25nQ29tcGxldGlvbkhhbmRsZXIuZ2V0KCk7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHJlc3RvcmVkKTsKKyAgICB9KTsKK30KKworYm9vbCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCit7
CisgICAgaWYgKCFtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChyZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1
cmVTdGFydGVkKSB7CisgICAgICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0dXJl
SW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0
b3BwaW5nUGlQID0gaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVTdGFuZGFyZCk7CisgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChwbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIChyZWFzb24gPT0gRXhpdEZ1
bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2Ny
ZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQpKQorICAgICAgICBwbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOworICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVOb25lLCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVC
dXR0b25UYXBwZWQpOworCisgICAgaWYgKCFtX3dhdGNoZG9nVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV93YXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChkZWZhdWx0V2F0Y2hkb2dUaW1lcklu
dGVydmFsKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworTk9fUkVUVVJOX0RVRV9UT19BU1NF
UlQgdm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVk
KCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoJXApIC0gbm8gZXhpdCBmdWxsc2NyZWVuIHJlc3BvbnNlIGlu
ICVnczsgZm9yY2luZyBmdWxsc2NyZWVuIGhpZGRlbi4iLCB0aGlzLCBkZWZhdWx0V2F0Y2hkb2dU
aW1lckludGVydmFsLnZhbHVlKCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFtt
X3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmll
d10gc2V0SGlkZGVuOllFU107Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5l
d01vZGUgPSBtX21vZGUgfCBtb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bmV3TW9kZSA9IG1fbW9kZSAmIH5tb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKKyNlbmRpZiAvLyBIQVZFKEFWS0lUKQorCitib29s
IFdlYkNvcmU6OnN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCit7CisjaWYgUExBVEZPUk0oSU9T
KSAmJiBIQVZFKEFWS0lUKQorICAgIHJldHVybiBbZ2V0QVZQaWN0dXJlSW5QaWN0dXJlQ29udHJv
bGxlckNsYXNzKCkgaXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydGVkXTsKKyNlbHNlCisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgKaW5k
ZXggZTVjZmYxMmJiYWZhZTY5MTE4MzEyN2JmMjgwZmE5M2NlOTBmMjUxMi4uMWIxMGZiYTBkNDIx
OWYwOTFmNzNiOGM3OTcwNjA0YmI1ZDIwYzBlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIuaApAQCAtMjgsOCArMjgsOCBAQAog
I2ltcG9ydCAiQVZLaXRTUEkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ7CiB9CiAKIEBpbnRlcmZhY2UgV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiA6
IE5TT2JqZWN0CkBAIC00NCw4ICs0NCw4IEBAIGNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OwogfQogCiBAcHJvcGVydHkgKHJldGFpbikgQVZQbGF5ZXJDb250cm9sbGVyKiBw
bGF5ZXJDb250cm9sbGVyUHJveHk7Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwqIGRlbGVnYXRlOwotQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6
OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2U7CitAcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWwqIGRl
bGVnYXRlOworQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAKIEBwcm9wZXJ0eSAocmVhZG9u
bHkpIEJPT0wgY2FuU2NhbkZvcndhcmQ7CiBAcHJvcGVydHkgQk9PTCBjYW5TY2FuQmFja3dhcmQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250
cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJv
bGxlci5tbQppbmRleCA2YmZjNWNhMWFhMjZiMjNlNWU4YTQ3YTJmNjhjMjI4N2YzMThhYTAxLi44
NTAzMDZhYzE1ZWQwYTE4YmM4ZjE3YjRmMmI3YTY0YzEwZGVkMzIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIubW0KQEAgLTMx
LDkgKzMxLDkgQEAKIAogI2ltcG9ydCAiQVZLaXRTUEkuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIK
KyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMzdk
NGU1NjMxODkxMDEwYWE4YTdiYTVkYjk2OTgxNjJjMjdjZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlICJFdmVudExpc3Rl
bmVyLmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5j
bHVkZSA8b2JqYy9vYmpjLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1PQkpDX0NMQVNT
IFdlYkFWUGxheWVyQ29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxl
cjsKLU9CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgVUlXaW5kb3c7Ci1P
QkpDX0NMQVNTIFVJVmlldzsKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkNoYW5nZU9ic2VydmVyOwotCi1j
bGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdAotICAg
IDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgICwgcHVibGljIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gewotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsJiBtb2RlbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1vZGVsKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
fldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCk7Ci0gICAgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5
YmFja1Nlc3Npb25Nb2RlbDsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKLQot
ICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNo
YW5nZWQoZG91YmxlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFu
Z2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMm
LCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgb3Zl
cnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2Vk
KGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkg
b3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdl
ZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZChib29sKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdl
ZChib29sKSBvdmVycmlkZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlKCk7Ci0KLSAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIo
KSBjb25zdCB7IHJldHVybiBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7IH0KLQotcHJvdGVjdGVk
OgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0KLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250
cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwq
IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxscHRyIH07Ci19OwotCi19Ci0KLSNlbmRpZgot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDI3ZDE2ZGIxZWY0ZGRmYTNlZmIwNTNlZTBmODUwYjk1OWJmZTJiMzcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMjEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLQotI2lmIFBMQVRGT1JNKElPUykKLSNpZiBIQVZFKEFW
S0lUKQotCi0jaW1wb3J0ICJBVktpdFNQSS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9y
dCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBv
cnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwuaCIKLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZU
X0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFM
KEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi0gICAgOiBtX3BsYXllckNvbnRyb2xs
ZXIoYWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF0pKQotICAgICwg
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCi17Ci0gICAgbW9kZWwuYWRkQ2xpZW50KCp0
aGlzKTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZTp0aGlzXTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOiZtb2RlbF07Ci0K
LSAgICBkdXJhdGlvbkNoYW5nZWQobW9kZWwuZHVyYXRpb24oKSk7Ci0gICAgY3VycmVudFRpbWVD
aGFuZ2VkKG1vZGVsLmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSk7Ci0gICAgYnVmZmVyZWRUaW1lQ2hhbmdlZChtb2RlbC5idWZmZXJlZFRp
bWUoKSk7Ci0gICAgcmF0ZUNoYW5nZWQobW9kZWwuaXNQbGF5aW5nKCksIG1vZGVsLnBsYXliYWNr
UmF0ZSgpKTsKLSAgICBzZWVrYWJsZVJhbmdlc0NoYW5nZWQobW9kZWwuc2Vla2FibGVSYW5nZXMo
KSwgbW9kZWwuc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpLCBtb2RlbC5saXZl
VXBkYXRlSW50ZXJ2YWwoKSk7Ci0gICAgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtb2RlbC5j
YW5QbGF5RmFzdFJldmVyc2UoKSk7Ci0gICAgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCksIG1vZGVsLmF1ZGlvTWVkaWFT
ZWxlY3RlZEluZGV4KCkpOwotICAgIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KG1vZGVsLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwubGVnaWJsZU1lZGlh
U2VsZWN0ZWRJbmRleCgpKTsKLSAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtb2RlbC5leHRl
cm5hbFBsYXliYWNrRW5hYmxlZCgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgp
LCBtb2RlbC5leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpKTsKLSAgICB3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQobW9kZWwud2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKQotewotICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOm51bGxwdHJdOwotICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0RXh0ZXJuYWxQbGF5YmFja0FjdGl2ZTpmYWxzZV07Ci0KLSAgICBpbnZh
bGlkYXRlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJl
c2V0TWVkaWFTdGF0ZSgpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciByZXNldE1lZGlhU3Rh
dGVdOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlv
bkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQotewotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciog
cGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKLQotICAgIHBsYXll
ckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgcGxheWVyQ29udHJv
bGxlci5jb250ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOwotCi0gICAgLy8g
RklYTUU6IHdlIHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVh
ZHkuCi0gICAgcGxheWVyQ29udHJvbGxlci5jYW5QbGF5ID0gWUVTOwotICAgIHBsYXllckNvbnRy
b2xsZXIuY2FuUGF1c2UgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5
YmFjayA9IFlFUzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsK
LSAgICBwbGF5ZXJDb250cm9sbGVyLmNhblNlZWsgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxl
ci5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCi17Ci0gICAgTlNUaW1lSW50ZXJ2
YWwgYW5jaG9yVGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBh
bmNob3JUaW1lOwotICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5n
Q2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQotICAgICAgICBh
bmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0KLSAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldFRpbWluZzp0aW1pbmddOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUp
Ci17Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5
ZXJDb250cm9sbGVyLmdldCgpOwotICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xs
ZXIuY29udGVudER1cmF0aW9uOwotICAgIGRvdWJsZSBub3JtYWxpemVkQnVmZmVyZWRUaW1lOwot
ICAgIGlmICghZHVyYXRpb24pCi0gICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOwot
ICAgIGVsc2UKLSAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZSAv
IGR1cmF0aW9uOwotICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAs
IEAobm9ybWFsaXplZEJ1ZmZlcmVkVGltZSldOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJh
Y2tSYXRlKQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBw
bGF5YmFja1JhdGUgOiAwLl07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2Vz
LCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsK
LSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHNlZWthYmxlUmFuZ2VzID0gYWRvcHROUyhb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGRvdWJsZSBzdGFydCA9
IHRpbWVSYW5nZXMuc3RhcnQoaSkucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGRvdWJs
ZSBlbmQgPSB0aW1lUmFuZ2VzLmVuZChpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLQotICAgICAg
ICBDTVRpbWVSYW5nZSByYW5nZSA9IENNVGltZVJhbmdlTWFrZShDTVRpbWVNYWtlV2l0aFNlY29u
ZHMoc3RhcnQsIDEwMDApLCBDTVRpbWVNYWtlV2l0aFNlY29uZHMoZW5kLXN0YXJ0LCAxMDAwKSk7
Ci0gICAgICAgIFtzZWVrYWJsZVJhbmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01U
aW1lUmFuZ2U6cmFuZ2VdXTsKLSAgICB9Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNl
ZWthYmxlVGltZVJhbmdlczpzZWVrYWJsZVJhbmdlcy5nZXQoKV07Ci0gICAgW21fcGxheWVyQ29u
dHJvbGxlciBzZXRTZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lOiBsYXN0TW9kaWZp
ZWRUaW1lXTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExpdmVVcGRhdGVJbnRlcnZhbDps
aXZlVXBkYXRlSW50ZXJ2YWxdOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNl
KQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlG
YXN0UmV2ZXJzZV07Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlh
U2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zKQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUo
KV0pOwotICAgIGZvciAoYXV0byYgb3B0aW9uIDogb3B0aW9ucykgewotICAgICAgICBSZXRhaW5Q
dHI8V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFW
TWVkaWFTZWxlY3Rpb25PcHRpb24gYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3dlYk9wdGlvbiBz
ZXRMb2NhbGl6ZWREaXNwbGF5TmFtZTpvcHRpb24uZGlzcGxheU5hbWVdOwotICAgICAgICBbd2Vi
T3B0aW9ucyBhZGRPYmplY3Q6d2ViT3B0aW9uLmdldCgpXTsKLSAgICB9Ci0gICAgcmV0dXJuIHdl
Yk9wdGlvbnM7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhv
cHRpb25zKTsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9w
dGlvbnMgY291bnRdKQotICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nh
c3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
Y29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMg
PSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAg
IGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQotICAgICAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9w
dGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4
KV1dOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpleHRlcm5h
bFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2Fs
aXplZERldmljZU5hbWUpCi17Ci0gICAgQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFj
a1R5cGUgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBs
YXliYWNrVHlwZU5vbmU7Ci0gICAgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5KQotICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9
IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlQWlyUGxheTsKLSAgICBlbHNl
IGlmICh0YXJnZXRUeXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZP
dXQpCi0gICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0
ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKLQotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxh
eWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKLSAgICBwbGF5ZXJDb250
cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBaXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2Fs
aXplZERldmljZU5hbWU7Ci0gICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlw
ZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOwotICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQ
bGF5YmFja0FjdGl2ZSA9IGVuYWJsZWQ7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRp
c2FibGVkKQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0QWxsb3dzRXh0ZXJuYWxQbGF5
YmFjazohZGlzYWJsZWRdOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldE11dGVkOm11dGVkXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm51
bGxwdHJdOwotICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7
Ci0gICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIEhBVkUoQVZLSVQpCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktp
dC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQVZLaXQubW0KaW5kZXggZWJjOWE2NzY2NDFjOTc5YWI3ODNhMGRlMWNkNTEwZTRlZjk4
M2QxNi4uMjY4NGRkZGIyZmYyOTE3N2FkOTRiNzdlZTAyYTQxNzc2ZTJkNzVkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCkBAIC0zMSwxMyArMzEsMTMgQEAKIAogI2ltcG9ydCAi
TG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKKyNpbXBvcnQgIlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5oIgogI2ltcG9ydCAiUXVhcnR6Q29yZVNQSS5oIgogI2ltcG9ydCAi
VGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCi0jaW1w
b3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBv
cnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCiAjaW1wb3J0IDxRdWFydHpD
b3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMgSW50UmVjdCBl
bGVtZW50UmVjdEluV2luZG93KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKICAgICBy
ZXR1cm4gdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyZW5kZXJlci0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKSk7CiB9CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ7CiAKIEBp
bnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAoZGVsZWdhdGUpCi0tKHZvaWQp
ZGlkRmluaXNoRnVsbHNjcmVlbjooV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQq
KWNvbnRleHQ7CistKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjooVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQqKWNvbnRleHQ7CiBAZW5kCiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0IGZpbmFsCi0gICAgOiBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsCi0gICAgLCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAg
LCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCi0gICAgLCBwcml2YXRl
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0IGZpbmFsCisgICAgOiBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisg
ICAgLCBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwcml2YXRlIFZp
ZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisgICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lv
bk1vZGVsCisgICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHsKIAogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQpOwogICAgIH0K
IAogICAgIHZvaWQgc2V0Q29udHJvbGxlcihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiBj
b250cm9sbGVyKSB7IG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KQEAgLTExOSwyMiArMTE5
LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCgpIHsgfQorICAgIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0KCkgeyB9CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcgorICAgIC8vIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCiAgICAg
dm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEVudGVyRnVs
bHNjcmVlbigpIG92ZXJyaWRlIHsgfQogICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQKICAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIHZp
ZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAKLSAgICAv
LyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAotICAgIHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICAvLyBQbGF5YmFja1Nl
c3Npb25Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHBsYXkoKSBvdmVycmlkZTsKICAgICB2b2lkIHBh
dXNlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKQEAg
LTE3MCw3ICsxNzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9nZ2xlTXV0ZWQoKSBvdmVycmlk
ZTsKICAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwogCi0gICAgLy8gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAogICAg
IHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CkBAIC0x
NzksMzkgKzE3OSwzOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKICAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNl
TmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVu
YWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwg
Y29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKICAgICB2b2lkIHdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2
b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsCi0gICAgdm9pZCBhZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGll
bnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAg
dm9pZCBhZGRDbGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlbW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRl
OwogICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVy
cmlkZTsKICAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZp
ZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKICAgICB2b2lkIGZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpIG92ZXJyaWRlOwogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlOwogICAgIEZsb2F0U2l6ZSB2aWRlb0RpbWVu
c2lvbnMoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIEhhc2hTZXQ8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX3BsYXli
YWNrQ2xpZW50czsKLSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4g
bV9mdWxsc2NyZWVuQ2xpZW50czsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IG1faW50ZXJmYWNlOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudD4gbV9mdWxsc2NyZWVuTW9kZWw7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtX3BsYXliYWNrTW9kZWw7CisgICAgSGFzaFNldDxQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fcGxheWJhY2tDbGllbnRzOworICAgIEhhc2hT
ZXQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2Z1bGxzY3JlZW5DbGllbnRzOworICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtX2Z1bGxzY3JlZW5Nb2Rl
bDsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1fcGxheWJh
Y2tNb2RlbDsKICAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAg
ICAgUmV0YWluUHRyPFVJVmlldz4gbV92aWRlb0Z1bGxzY3JlZW5WaWV3OwogICAgIFJldGFpblB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyPiBtX2NvbnRyb2xsZXI7CiB9OwogCi0jcHJh
Z21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyNwcmFnbWEgbWFyayBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gdmlkZW9GdWxsc2NyZWVuTGF5
ZXIgPSBbbV92aWRlb0Z1bGxzY3JlZW5WaWV3IGxheWVyXTsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgdmlkZW9GdWxsc2NyZWVu
TGF5ZXJdIHsKICAgICAgICAgW3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJhY2tncm91bmRDb2xv
cjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudCldOwogICAgICAgICBt
X2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9GdWxsc2NyZWVu
TGF5ZXIuZ2V0KCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CkBAIC0yMjIsMTAgKzIyMiwxMCBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxz
Y3JlZW4oKQogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRo
aXMsIHRoaXNdIHsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKG5pbCwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7
CkBAIC0yMzUsMTUgKzIzNSwxNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0cik7Ci0gICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKG51bGxwdHIpOworICAgIG1faW50ZXJmYWNlLT5zZXRW
aWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxscHRyKTsKKyAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIobnVsbHB0cik7CiAgICAgbV9pbnRlcmZhY2UgPSBudWxs
cHRyOwogICAgIG1fdmlkZW9GdWxsc2NyZWVuVmlldyA9IG5pbDsKIAotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAg
IG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwogICAgICAg
ICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwpAQCAtMjU2LDEw
ICsyNTYsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlk
Q2xlYW51cEZ1bGxzY3JlZW4oKQogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBJbnRS
ZWN0IGNsaWVudFJlY3QgPSBlbGVtZW50UmVjdEluV2luZG93KG1fdmlkZW9FbGVtZW50LmdldCgp
KTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3By
b3RlY3RlZFRoaXMsIHRoaXMsIGNsaWVudFJlY3RdIHsKQEAgLTI2OCwxMiArMjY4LDEyIEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZSgpCiAgICAgfSk7CiB9CiAKLSNwcmFnbWEgbWFyayBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENsaWVudAorI3ByYWdtYSBtYXJrIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdl
ZChkb3VibGUgZHVyYXRpb24pCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogewogICAgIGlmIChXZWJUaHJlYWRJ
c0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGR1
cmF0aW9uXSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kdXJhdGlvbkNoYW5nZWQoZHVy
YXRpb24pOwogICAgICAgICB9KTsKQEAgLTI4NCwxMCArMjg0LDEwIEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRp
b24pCiAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2Vk
KGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRU
aW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkp
IHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjdXJyZW50VGltZSwg
YW5jaG9yVGltZV0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y3VycmVudFRpbWVDaGFu
Z2VkKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKICAgICAgICAgfSk7CkBAIC0yOTgsMTAgKzI5
OCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50
VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLAogICAgICAgICBjbGllbnQtPmN1cnJlbnRU
aW1lQ2hhbmdlZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1
ZmZlcmVkVGltZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZl
cmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKIHsKICAgICBpZiAoV2ViVGhyZWFk
SXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBi
dWZmZXJlZFRpbWVdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmJ1ZmZlcmVkVGltZUNo
YW5nZWQoYnVmZmVyZWRUaW1lKTsKICAgICAgICAgfSk7CkBAIC0zMTIsMTAgKzMxMiwxMCBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFu
Z2VkKGRvdWJsZSBidWZmZXJlZFRpbQogICAgICAgICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5n
ZWQoYnVmZmVyZWRUaW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wg
aXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3Vy
cmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgaXNQbGF5
aW5nLCBwbGF5YmFja1JhdGVdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnJhdGVDaGFu
Z2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKICAgICAgICAgfSk7CkBAIC0zMjYsMTAgKzMy
NiwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hh
bmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheQogICAgICAgICBjbGllbnQtPnJhdGVDaGFu
Z2VkKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBo
YXNWaWRlbykKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBoYXNWaWRlb10gewogICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+aGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKICAgICAgICAgfSk7CkBAIC0z
NDAsMTAgKzM0MCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKICAgICAgICAgY2xpZW50LT5oYXNWaWRl
b0NoYW5nZWQoaGFzVmlkZW8pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9E
aW1lbnNpb25zKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9E
aW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAg
ICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBS
ZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtw
cm90ZWN0ZWRUaGlzLCB2aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnNdIHsKICAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNp
b25zKTsKICAgICAgICAgfSk7CkBAIC0zNTQsMTAgKzM1NCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZs
b2F0U2l6ZQogICAgICAgICBjbGllbnQtPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1l
bnNpb25zKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJs
ZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0
IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUg
bGl2ZVVwZGF0ZUludGVydmFsKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewot
ICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHBsYXRmb3JtVGltZVJhbmdl
cyA9IHRpbWVSYW5nZXMucmFuZ2VzKCksIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRl
cnZhbF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2Vla2FibGVSYW5nZXNDaGFuZ2Vk
KFRpbWVSYW5nZXM6OmNyZWF0ZShwbGF0Zm9ybVRpbWVSYW5nZXMpLCBsYXN0TW9kaWZpZWRUaW1l
LCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwogICAgICAgICB9KTsKQEAgLTM2OCwxMCArMzY4LDEwIEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzCiAgICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXND
aGFuZ2VkKHRpbWVSYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlG
YXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wg
Y2FuUGxheUZhc3RSZXZlcnNlKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewot
ICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGNhblBsYXlGYXN0UmV2ZXJz
ZV0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZChjYW5QbGF5RmFzdFJldmVyc2UpOwogICAgICAgICB9KTsKQEAgLTM5MSwxMCArMzkxLDEwIEBA
IHN0YXRpYyBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGlzb2xhdGVkQ29weShjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpCiAgICAgcmV0dXJuIG9wdGlvbnNDb3B5OwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0
b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3Byb3RlY3RlZFRoaXMsIG9wdGlvbnMgPSBpc29sYXRlZENvcHkob3B0aW9ucyksIHNl
bGVjdGVkSW5kZXhdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKICAgICAgICAgfSk7
CkBAIC00MDUsMTAgKzQwNSwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29ucwogICAgICAgICBj
bGllbnQtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3Rl
ZEluZGV4KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgb3B0aW9ucyA9IGlzb2xh
dGVkQ29weShvcHRpb25zKSwgc2VsZWN0ZWRJbmRleF0gewogICAgICAgICAgICAgcHJvdGVjdGVk
VGhpcy0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0
ZWRJbmRleCk7CiAgICAgICAgIH0pOwpAQCAtNDE5LDcgKzQxOSw3IEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvCiAgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKIHsKICAgICBpZiAoV2ViVGhyZWFk
SXNDdXJyZW50KCkpIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCB0aGlzLCBlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1l
ID0gbG9jYWxpemVkRGV2aWNlTmFtZS5pc29sYXRlZENvcHkoKV0gewpAQCAtNDMzLDEwICs0MzMs
MTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLAogICAgICAgICBjbGllbnQtPmV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChi
b29sIGRpc2FibGVkKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGRpc2FibGVkXSB7CiAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlz
YWJsZWQpOwogICAgICAgICB9KTsKQEAgLTQ0NywxMCArNDQ3LDEwIEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
Q2hhbmdlZChiCiAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRD
aGFuZ2VkKGRpc2FibGVkKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKIHsKICAgICBpZiAoV2Vi
VGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCBtdXRlZF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bXV0ZWRDaGFuZ2VkKG11
dGVkKTsKICAgICAgICAgfSk7CkBAIC00NjEsMzQgKzQ2MSwzNCBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKICAgICAg
ICAgY2xpZW50LT5tdXRlZENoYW5nZWQobXV0ZWQpOwogfQogCi0jcHJhZ21hIG1hcmsgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwKKyNwcmFnbWEgbWFyayBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQoV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xp
ZW50KQogewogICAgIEFTU0VSVCghbV9mdWxsc2NyZWVuQ2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7CiAgICAgbV9mdWxsc2NyZWVuQ2xpZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGll
bnQpCiB7CiAgICAgQVNTRVJUKG1fZnVsbHNjcmVlbkNsaWVudHMuY29udGFpbnMoJmNsaWVudCkp
OwogICAgIG1fZnVsbHNjcmVlbkNsaWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmlu
aXNoZWRXaXRoTWVkaWEpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpy
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3Rl
Y3RlZFRoaXMsIHRoaXMsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhXSB7CiAgICAgICAgIGlmICht
X2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0
RnVsbHNjcmVlbk1vZGUobW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwogICAgIH0pOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUoRmxvYXRSZWN0IGZyYW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFJldGFpblB0cjxDQUxheWVy
PiB2aWRlb0Z1bGxzY3JlZW5MYXllciA9IFttX3ZpZGVvRnVsbHNjcmVlblZpZXcgbGF5ZXJdOwog
ICAgIAogICAgIFt2aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTpbdmlk
ZW9GdWxsc2NyZWVuTGF5ZXIgdHJhbnNmb3JtXV07CkBAIC01MDgsMTA1ICs1MDgsMTA1IEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFt
ZShGbG9hdFJlY3QgZnJhbWUpCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9k
ZWw6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRo
aXMsIHRoaXMsIHZpZGVvR3Jhdml0eV0gewogICAgICAgICBpZiAobV9mdWxsc2NyZWVuTW9kZWwp
CiAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkodmlk
ZW9HcmF2aXR5KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlz
LCBtb2RlXSB7CiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1f
ZnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobW9kZSk7CiAgICAgfSk7CiB9
CiAKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzVmlzaWJsZSgp
IGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUo
KSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Z1bGxz
Y3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVlbk1vZGVsLT5pc1Zpc2libGUoKSA6IGZhbHNlOwogfQog
Ci1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlbygpIGNv
bnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlbygpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVl
bk1vZGVsID8gbV9mdWxsc2NyZWVuTW9kZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZTsKIH0KIAotYm9v
bCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNNdXRlZCgpIGNvbnN0Citi
b29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8g
bV9wbGF5YmFja01vZGVsLT5pc011dGVkKCkgOiBmYWxzZTsKIH0KIAotRmxvYXRTaXplIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMoKSBjb25zdAor
RmxvYXRTaXplIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Z1
bGxzY3JlZW5Nb2RlbCA/IG1fZnVsbHNjcmVlbk1vZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6IEZs
b2F0U2l6ZSgpOwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAor
I3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uTW9kZWwKIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JiBjbGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojph
ZGRDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NF
UlQoIW1fcGxheWJhY2tDbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX3BsYXliYWNr
Q2xpZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYg
Y2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xp
ZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1f
cGxheWJhY2tDbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX3BsYXliYWNrQ2xpZW50
cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnBsYXkoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
cGxheSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYg
KG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+cGxheSgpOwog
ICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpw
YXVzZSgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJh
Y2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+cGF1c2UoKTsKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxh
eVN0YXRlKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZVBs
YXlTdGF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAg
aWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+dG9nZ2xl
UGxheVN0YXRlKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnRvZ2dsZU11dGVkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnRvZ2dsZU11dGVkKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhp
c10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFj
a01vZGVsLT50b2dnbGVNdXRlZCgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZChib29sIG11dGVkKQordm9pZCBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMgPSBt
YWtlUmVmUHRyKHRoaXMpLCB0aGlzLCBtdXRlZF0gewpAQCAtNjE1LDE1MSArNjE1LDE1MSBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZChib29sIG11
dGVkKQogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpiZWdpblNjcnViYmluZygpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpiZWdpblNjcnViYmluZygpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNd
IHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tN
b2RlbC0+YmVnaW5TY3J1YmJpbmcoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZygpCiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3Rl
Y3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAg
ICAgIG1fcGxheWJhY2tNb2RlbC0+ZW5kU2NydWJiaW5nKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRp
bWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKGRv
dWJsZSB0aW1lKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB0aW1lXSB7CiAg
ICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwt
PnNlZWtUb1RpbWUodGltZSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRS
dW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMsIHRpbWVdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tN
b2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZmFzdFNlZWsodGltZSk7CiAgICAg
fSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhp
c10gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFj
a01vZGVsLT5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3
YXJkKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAo
bV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjYW5u
aW5nQmFja3dhcmQoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0
aGlzXSB7CiAgICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXli
YWNrTW9kZWwtPmVuZFNjYW5uaW5nKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qg
aW5kZXgpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRp
b01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlz
LCB0aGlzLCBpbmRleF0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAg
ICAgbV9wbGF5YmFja01vZGVsLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0
TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4
KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBpbmRleF0gewogICAgICAgICBp
ZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOwogICAgIH0pOwogfQogCi1kb3VibGUgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKCkgY29uc3QKK2RvdWJsZSBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb24oKSBjb25zdAogewogICAgIEFT
U0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXli
YWNrTW9kZWwtPmR1cmF0aW9uKCkgOiAwOwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmN1cnJlbnRUaW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWUoKSBjb25zdAogewogICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNr
TW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwOwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJh
Y2tNb2RlbC0+YnVmZmVyZWRUaW1lKCkgOiAwOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojppc1BsYXlpbmcoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6aXNQbGF5aW5nKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVs
LT5pc1BsYXlpbmcoKSA6IGZhbHNlOwogfQogCi1mbG9hdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6cGxheWJhY2tSYXRlKCkgY29uc3QKK2Zsb2F0IFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5YmFja1JhdGUoKSBjb25zdAogewogICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9k
ZWwtPnBsYXliYWNrUmF0ZSgpIDogMDsKIH0KIAotUmVmPFRpbWVSYW5nZXM+IFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CitSZWY8VGlt
ZVJhbmdlcz4gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2Vz
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5
YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5zZWVrYWJsZVJhbmdlcygpIDogVGltZVJhbmdl
czo6Y3JlYXRlKCk7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0Citkb3VibGUg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RN
b2RpZmllZFRpbWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJl
dHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPnNlZWthYmxlVGltZVJhbmdl
c0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKK2RvdWJsZSBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVs
ID8gbV9wbGF5YmFja01vZGVsLT5saXZlVXBkYXRlSW50ZXJ2YWwoKSA6IDA7CiB9CiAKLWJvb2wg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgp
IGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFz
dFJldmVyc2UoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVy
biBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmNhblBsYXlGYXN0UmV2ZXJzZSgp
IDogZmFsc2U7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29u
c3QKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICBpZiAobV9wbGF5YmFja01vZGVsKQpAQCAtNzY3LDEzICs3
NjcsMTMgQEAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGUKICAgICByZXR1cm4geyB9OwogfQogCi11
aW50NjRfdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNl
bGVjdGVkSW5kZXgoKSBjb25zdAordWludDY0X3QgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVs
LT5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIDogLTE7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgaWYgKG1f
cGxheWJhY2tNb2RlbCkKQEAgLTc4MSwzMSArNzgxLDMxIEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRp
YVNlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdWludDY0X3QgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAordWludDY0
X3QgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVk
SW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBt
X3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGVkSW5k
ZXgoKSA6IC0xOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxh
eWJhY2tNb2RlbC0+ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSA6IGZhbHNlOwogfQogCi1XZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkg
Y29uc3QKK1BsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3Bs
YXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
KCkgOiBUYXJnZXRUeXBlTm9uZTsKIH0KIAotU3RyaW5nIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0
CitTdHJpbmcgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJh
Y2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5leHRlcm5h
bFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIDogU3RyaW5nKCk7CiB9CiAKLWJvb2wgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKCkgY29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6Ondp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT53
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIDogdHJ1ZTsKQEAgLTgxMywxNiArODEzLDE2
IEBAIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKIAogI3ByYWdtYSBtYXJrIE90aGVyCiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVsbHNjcmVlbihIVE1M
VmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIFVJVmlldyAqdmlldywgSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9F
bGVtZW50LCBVSVZpZXcgKnZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgUmV0YWlu
UHRyPFVJVmlldz4gdmlld1JlZiA9IHZpZXc7CiAgICAgbV92aWRlb0VsZW1lbnQgPSAmdmlkZW9F
bGVtZW50OwotICAgIG1fcGxheWJhY2tNb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICBtX3BsYXliYWNrTW9kZWwgPSBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7CiAgICAgbV9wbGF5YmFja01vZGVsLT5hZGRD
bGllbnQoKnRoaXMpOwogICAgIG1fcGxheWJhY2tNb2RlbC0+c2V0TWVkaWFFbGVtZW50KG1fdmlk
ZW9FbGVtZW50LmdldCgpKTsKIAotICAgIG1fZnVsbHNjcmVlbk1vZGVsID0gV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOworICAgIG1fZnVsbHNjcmVlbk1vZGVs
ID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOwogICAgIG1fZnVs
bHNjcmVlbk1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5z
ZXRWaWRlb0VsZW1lbnQobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwogCkBAIC04MzIsMTUgKzgzMiwx
NSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxz
Y3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZQogICAgIEZsb2F0UmVjdCB2aWRlb0xheWVyRnJh
bWUgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB2aWRlb0VsZW1lbnRDbGllbnRSZWN0LnNpemUo
KSk7CiAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZSh2aWRlb0xheWVy
RnJhbWUpOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgdmlkZW9FbGVtZW50
Q2xpZW50UmVjdCwgdmlld1JlZiwgbW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZV0gewogICAg
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKIAotICAgICAgICBSZWY8V2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQ+IHNlc3Npb25JbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdDo6Y3JlYXRlKCp0aGlzKTsKLSAgICAgICAgbV9pbnRlcmZhY2UgPSBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKHNlc3Npb25JbnRlcmZhY2UuZ2V0
KCkpOwotICAgICAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIodGhpcyk7Ci0gICAgICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbCh0aGlzKTsKLSAgICAgICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKHRoaXMpOworICAgICAgICBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQ+IHNlc3Npb25JbnRlcmZhY2UgPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6
Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UgPSBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6Y3JlYXRlKHNlc3Npb25JbnRlcmZhY2UuZ2V0KCkpOworICAgICAgICBtX2lu
dGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CisgICAgICAg
IG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKKyAgICAgICAgbV9p
bnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOwogCiAgICAg
ICAgIG1fdmlkZW9GdWxsc2NyZWVuVmlldyA9IGFkb3B0TlMoW2FsbG9jVUlWaWV3SW5zdGFuY2Uo
KSBpbml0XSk7CiAgICAgICAgIApAQCAtODQ4LDI1ICs4NDgsMjUgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1l
bnQmIHZpZGUKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJl
bnQoKSB8fCBpc01haW5UaHJlYWQoKSk7CiAgICAgSW50UmVjdCBjbGllbnRSZWN0ID0gZWxlbWVu
dFJlY3RJbldpbmRvdyhtX3ZpZGVvRWxlbWVudC5nZXQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcywgdGhpcywgY2xpZW50UmVjdF0gewogICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKICAgICAgICAgbV9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKGNsaWVudFJlY3QpOwogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1
ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOwogICAgIG1faW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKCk7CiB9CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
IHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IF9jb250
ZXh0OworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gX2NvbnRl
eHQ7CiAgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IF92aWRlb0VsZW1lbnQ7CiB9CiAKQEAg
LTg5MSw3ICs4OTEsNyBAQCAtIChIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIC0gKHZv
aWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2aWV3IG1vZGU6KEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSltb2RlCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBfY29udGV4dCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpjcmVhdGUoKTsKKyAgICBfY29udGV4dCA9IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpjcmVhdGUoKTsKICAgICBfY29udGV4dC0+c2V0Q29udHJvbGxlcihzZWxmKTsKICAgICBf
Y29udGV4dC0+c2V0VXBGdWxsc2NyZWVuKCpfdmlkZW9FbGVtZW50LmdldCgpLCB2aWV3LCBtb2Rl
KTsKIH0KQEAgLTkwOSw3ICs5MDksNyBAQCAtICh2b2lkKXJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxz
Y3JlZW4KICAgICAgICAgX2NvbnRleHQtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsK
IH0KIAotLSAodm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dCopY29udGV4dAorLSAodm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dAogewogICAgIEFTU0VSVChXZWJU
aHJlYWRJc0N1cnJlbnQoKSk7CiAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0ID09
IF9jb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDRhYzcwNDdhYjcyY2IzNGRmNjE4YzY0ZTA2NjMyOTI1YjZkZTc4ZGUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNp
bmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1z
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aCIKLSNpbmNsdWRlIDxvYmpjL29iamMuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotT0JKQ19D
TEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBVSVZpZXdDb250cm9sbGVy
OwotT0JKQ19DTEFTUyBVSVdpbmRvdzsKLU9CSkNfQ0xBU1MgVUlWaWV3OwotT0JKQ19DTEFTUyBD
QUxheWVyOwotT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFdl
YkFWUGxheWVyTGF5ZXJWaWV3OwotT0JKQ19DTEFTUyBXZWJBVlBsYXllckxheWVyOwotT0JKQ19D
TEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7Ci0KLW5hbWVzcGFjZSBXVEYg
ewotY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0
OwotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw7Ci1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKLSAgICAKLWNsYXNzIFdFQkNPUkVf
RVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IGZpbmFsCi0gICAgOiBwdWJs
aWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudAotICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKik7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KLQotICAgIC8vIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5n
ZWQoYm9vbCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnND
aGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDbGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFs
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihVSVZp
ZXcmLCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJl
UGxheWJhY2spOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3Jl
ZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29u
c3QgSW50UmVjdCYgZmluYWxSZWN0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
Y2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHByZXBh
cmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJl
Y3QpOwotCi0gICAgZW51bSBjbGFzcyBFeGl0RnVsbFNjcmVlblJlYXNvbiB7Ci0gICAgICAgIERv
bmVCdXR0b25UYXBwZWQsCi0gICAgICAgIEZ1bGxTY3JlZW5CdXR0b25UYXBwZWQsCi0gICAgICAg
IFBpbmNoR2VzdHVyZUhhbmRsZWQsCi0gICAgICAgIFJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNl
aXZlZCwKLSAgICAgICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQKLSAgICB9OwotCi0gICAgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbDsgfQotICAgIGJvb2wgc2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKEV4
aXRGdWxsU2NyZWVuUmVhc29uKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIGJvb2wgYWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NQaWN0
dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIG1heUF1dG9t
YXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxi
YWNrKTsKLSAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3Q7Ci0g
ICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwotCi0gICAgdm9pZCB3aWxsU3Rh
cnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUo
KTsKLSAgICB2b2lkIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCB3
aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIGRpZFN0b3BQaWN0dXJlSW5QaWN0
dXJlKCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxl
dGlvbkhhbmRsZXIodm9pZCAoXikoQk9PTCkpOwotCi0gICAgdm9pZCBzZXRNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBjbGVhck1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICBib29sIGhh
c01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7IH0KLSAgICBib29sIGlzTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9t
b2RlID09IG1vZGU7IH0KLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Jik7Ci0gICAgdm9pZCBiZWdpblNlc3Npb24oKTsKLSAgICB2b2lkIGVudGVyUGljdHVyZUluUGlj
dHVyZSgpOwotICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKLSAgICB2b2lkIHdh
dGNoZG9nVGltZXJGaXJlZCgpOwotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29u
dHJvbGxlcigpIGNvbnN0OwotCi0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7
Ci0gICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0NvbnRy
b2xsZXI7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwgeyBudWxscHRyIH07Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OwotCi0gICAgLy8gVGhlc2UgYXJl
IG9ubHkgdXNlZCB3aGVuIGZ1bGxzY3JlZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2lu
ZG93LgotICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV93aW5kb3c7Ci0gICAgUmV0YWluUHRyPFVJ
Vmlld0NvbnRyb2xsZXI+IG1fdmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFVJVmlldz4g
bV9wYXJlbnRWaWV3OwotICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV9wYXJlbnRXaW5kb3c7Ci0g
ICAgUmV0YWluUHRyPFdlYkFWUGxheWVyTGF5ZXJWaWV3PiBtX3BsYXllckxheWVyVmlldzsKLSAg
ICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OwotICAgIFdURjo6
RnVuY3Rpb248dm9pZChib29sKT4gbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjazsKLSAgICBSdW5M
b29wOjpUaW1lcjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV93YXRjaGRvZ1Rp
bWVyOwotICAgIGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZXhpdENv
bXBsZXRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2VudGVyUmVxdWVzdGVkIHsgZmFsc2UgfTsK
LSAgICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyB0cnVlIH07Ci0gICAg
Ym9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3Jv
dW5kIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJ
blBpY3R1cmVTdG9wIHsgZmFsc2UgfTsKLQotICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4oKTsK
LX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1Y2UzYjczYjBiMmUyNGQ4YzdhMWQ1NTZhZjQwMGE0
ZTNjMTk2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oIgotCi0jaWYgSEFWRShBVktJVCkKLQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNp
bXBvcnQgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0
ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNp
bXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIK
LSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KLSNpbXBv
cnQgPG9iamMvbWVzc2FnZS5oPgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFNv
ZnQtbGlua2luZyBoZWFkZXJzIG11c3QgYmUgaW5jbHVkZWQgbGFzdCBzaW5jZSB0aGV5ICNkZWZp
bmUgZnVuY3Rpb25zLCBjb25zdGFudHMsIGV0Yy4KLSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5r
LmgiCi0KLVNPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQotU09GVF9MSU5LX0NMQVNT
KEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikKLVNPRlRfTElOS19DT05TVEFOVChBVkZvdW5k
YXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktf
Q09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBO
U1N0cmluZyAqKQotU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwsIE5TU3RyaW5nICopCi0KLVNPRlRfTElOS19GUkFNRVdP
UktfT1BUSU9OQUwoQVZLaXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGlj
dHVyZUluUGljdHVyZUNvbnRyb2xsZXIpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQs
IEFWUGxheWVyVmlld0NvbnRyb2xsZXIpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQs
IF9fQVZQbGF5ZXJMYXllclZpZXcpCi0KLVNPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCi1TT0ZU
X0xJTktfQ0xBU1MoVUlLaXQsIFVJQXBwbGljYXRpb24pCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQs
IFVJU2NyZWVuKQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVdpbmRvdykKLVNPRlRfTElOS19D
TEFTUyhVSUtpdCwgVUlWaWV3KQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVZpZXdDb250cm9s
bGVyKQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUNvbG9yKQotU09GVF9MSU5LX0NPTlNUQU5U
KFVJS2l0LCBVSVRleHRFZmZlY3RzQmVuZWF0aFN0YXR1c0JhcldpbmRvd0xldmVsLCBVSVdpbmRv
d0xldmVsKQotCi1zdGF0aWMgVUlDb2xvciAqY2xlYXJVSUNvbG9yKCkKLXsKLSAgICByZXR1cm4g
KFVJQ29sb3IgKilbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl07Ci19Ci0KLSNpZiAhTE9H
X0RJU0FCTEVECi1zdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAg
ICByZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgY29u
c3QgU2Vjb25kcyBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsIHsgMV9zIH07Ci0KLUBjbGFz
cyBXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uOwotCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxBVlBsYXllclZpZXdDb250cm9sbGVyRGVs
ZWdhdGVfV2ViS2l0T25seT4gewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci19Ci1AcHJvcGVydHkgKGFzc2lnbikgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci0tIChC
T09MKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVy
Vmlld0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZp
ZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVhc29uOwotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlCi0tIChXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIHJldHVy
biBfZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRGdWxsc2NyZWVu
SW50ZXJmYWNlOihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbklu
dGVyZmFjZQotewotICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFj
ZTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdGFydFBpY3R1cmVJblBp
Y3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewot
ICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2Ny
ZWVuSW50ZXJmYWNlLT53aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQp
cGxheWVyVmlld0NvbnRyb2xsZXJEaWRTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmll
d0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShw
bGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRT
dGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxl
ckZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICop
cGxheWVyVmlld0NvbnRyb2xsZXIgd2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBV
TlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIFVOVVNFRF9QQVJBTShlcnJv
cik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5mYWlsZWRUb1N0YXJ0UGljdHVyZUlu
UGljdHVyZSgpOwotfQotCi0tICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0b3BQaWN0
dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xs
ZXIKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYu
ZnVsbHNjcmVlbkludGVyZmFjZS0+d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0g
KHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJEaWRTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5
ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2Ut
PmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLXN0YXRpYyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gY29udmVydFRvRXhpdEZ1bGxT
Y3JlZW5SZWFzb24oQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uIHJl
YXNvbikKLXsKLSAgICBzd2l0Y2ggKHJlYXNvbikgewotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uRG9uZUJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0
dXJuIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNv
bjo6RG9uZUJ1dHRvblRhcHBlZDsKLSAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0
RnVsbFNjcmVlblJlYXNvbkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ6Ci0gICAgICAgIHJldHVybiBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkZ1
bGxTY3JlZW5CdXR0b25UYXBwZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhp
dEZ1bGxTY3JlZW5SZWFzb25QaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDoKLSAgICAgICAgcmV0dXJu
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6
UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVy
RXhpdEZ1bGxTY3JlZW5SZWFzb25QaW5jaEdlc3R1cmVIYW5kbGVkOgotICAgICAgICByZXR1cm4g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQ
aW5jaEdlc3R1cmVIYW5kbGVkOwotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRG
dWxsU2NyZWVuUmVhc29uUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkOgotICAgICAgICBy
ZXR1cm4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVh
c29uOjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ7Ci0gICAgfQotfQotCi0tIChCT09M
KXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmll
d0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdD
b250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVhc29uCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICByZXR1cm4gc2VsZi5mdWxsc2NyZWVuSW50ZXJm
YWNlLT5zaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oY29udmVydFRvRXhpdEZ1bGxTY3Jl
ZW5SZWFzb24ocmVhc29uKSk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFW
UGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciByZXN0b3JlVXNlcklu
dGVyZmFjZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShCT09MIHJlc3RvcmVkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFVOVVNFRF9QQVJB
TShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5w
cmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxl
dGlvbkhhbmRsZXIpOwotfQotQGVuZAotCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXIgOiBD
QUxheWVyCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBOU1N0cmluZyAqdmlkZW9HcmF2
aXR5OwotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1JlYWR5Rm9yRGlzcGxheSkgQk9P
TCByZWFkeUZvckRpc3BsYXk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZXRhaW4pIEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxl
cjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIENBTGF5ZXIgKnZpZGVvU3VibGF5ZXI7
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgbnVsbGFibGUpIE5TRGljdGlvbmFyeSAqcGl4
ZWxCdWZmZXJBdHRyaWJ1dGVzOwotQHByb3BlcnR5IENHU2l6ZSB2aWRlb0RpbWVuc2lvbnM7Ci1A
cHJvcGVydHkgQ0dSZWN0IG1vZGVsVmlkZW9MYXllckZyYW1lOwotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gV2ViQVZQbGF5ZXJMYXllciB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQ
bGF5ZXJDb250cm9sbGVyPiBfYXZQbGF5ZXJDb250cm9sbGVyOwotICAgIFJldGFpblB0cjxDQUxh
eWVyPiBfdmlkZW9TdWJsYXllcjsKLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF92aWRlb0dyYXZp
dHk7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKLSAgICBpZiAoc2VsZikgewotICAgICAgICBbc2VsZiBzZXRNYXNrc1RvQm91bmRzOllFU107
Ci0gICAgICAgIF92aWRlb0dyYXZpdHkgPSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsK
LSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwotICAgIFtf
cGl4ZWxCdWZmZXJBdHRyaWJ1dGVzIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotLSAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZh
Y2UKLXsKLSAgICByZXR1cm4gX2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCk7Ci19Ci0KLS0gKHZv
aWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1
bGxzY3JlZW5JbnRlcmZhY2U7Ci19Ci0KLS0gKEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNv
bnRyb2xsZXIKLXsKLSAgICByZXR1cm4gKEFWUGxheWVyQ29udHJvbGxlciAqKV9hdlBsYXllckNv
bnRyb2xsZXIuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5
ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcgotewotICAgIEFTU0VSVCghcGxheWVyQ29u
dHJvbGxlciB8fCBbcGxheWVyQ29udHJvbGxlciBpc0tpbmRPZkNsYXNzOltXZWJBVlBsYXllckNv
bnRyb2xsZXIgY2xhc3NdXSk7Ci0gICAgX2F2UGxheWVyQ29udHJvbGxlciA9IChXZWJBVlBsYXll
ckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyOwotfQotCi0tICh2b2lkKXNldFZpZGVvU3Vi
bGF5ZXI6KENBTGF5ZXIgKil2aWRlb1N1YmxheWVyCi17Ci0gICAgX3ZpZGVvU3VibGF5ZXIgPSB2
aWRlb1N1YmxheWVyOwotfQotCi0tIChDQUxheWVyKil2aWRlb1N1YmxheWVyCi17Ci0gICAgcmV0
dXJuIF92aWRlb1N1YmxheWVyLmdldCgpOwotfQotCi0tICh2b2lkKWxheW91dFN1YmxheWVycwot
ewotICAgIGlmIChbX3ZpZGVvU3VibGF5ZXIgc3VwZXJsYXllcl0gIT0gc2VsZikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFtfdmlkZW9TdWJsYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFr
ZShDR1JlY3RHZXRNaWRYKHNlbGYuYm91bmRzKSwgQ0dSZWN0R2V0TWlkWShzZWxmLmJvdW5kcykp
XTsKLQotICAgIGlmIChzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQgPD0gMCB8fCBzZWxmLnZp
ZGVvRGltZW5zaW9ucy53aWR0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJl
Y3Qgc291cmNlVmlkZW9GcmFtZTsKLSAgICBGbG9hdFJlY3QgdGFyZ2V0VmlkZW9GcmFtZTsKLSAg
ICBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBz
ZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQ7Ci0gICAgCi0gICAgaWYgKFtnZXRBVkxheWVyVmlk
ZW9HcmF2aXR5UmVzaXplKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgewot
ICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZTsKLSAg
ICAgICAgdGFyZ2V0VmlkZW9GcmFtZSA9IHNlbGYuYm91bmRzOwotICAgIH0gZWxzZSBpZiAoW2dl
dEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52
aWRlb0dyYXZpdHldKSB7Ci0gICAgICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdp
dGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVv
TGF5ZXJGcmFtZSk7Ci0gICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhB
c3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOwotICAg
IH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNF
cXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgewotICAgICAgICBzb3VyY2VWaWRlb0Zy
YW1lID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJh
dGlvLCBzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVv
TGF5ZXJGcmFtZSA9IENHUmVjdE1ha2UoMCwgMCwgc291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCBz
b3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKLSAgICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50
ZXJmYWNlLT5tb2RlbCgpKTsKLSAgICAgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkt
PnNldFZpZGVvTGF5ZXJGcmFtZShzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAg
dGFyZ2V0VmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3Qo
dmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIFVJVmlldyAqdmlldyA9IChVSVZpZXcgKilbX3ZpZGVv
U3VibGF5ZXIgZGVsZWdhdGVdOwotICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHRhcmdldFZpZGVvRnJhbWUud2lkdGgoKSAvIHNvdXJj
ZVZpZGVvRnJhbWUud2lkdGgoKSwgdGFyZ2V0VmlkZW9GcmFtZS5oZWlnaHQoKSAvIHNvdXJjZVZp
ZGVvRnJhbWUuaGVpZ2h0KCkpOwotICAgIFt2aWV3IHNldFRyYW5zZm9ybTp0cmFuc2Zvcm1dOwot
ICAgIAotICAgIE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gW0NBVHJhbnNhY3Rp
b24gYW5pbWF0aW9uRHVyYXRpb25dOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF4gewotICAgICAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3Jt
UmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMp
IG9iamVjdDpuaWxdOwotCi0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Io
cmVzb2x2ZUJvdW5kcykgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTphbmltYXRpb25EdXJhdGlv
biArIDAuMV07Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpcmVzb2x2ZUJvdW5kcwotewotICAgIFtO
U09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07Ci0gICAgaWYgKCFbX2F2
UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBp
ZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5ZXJdICE9IHNlbGYpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBpZiAoQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFt
ZSwgW3NlbGYgYm91bmRzXSkgJiYgQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KFsoVUlWaWV3
ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXSB0cmFuc2Zvcm1dKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBz
ZXRBbmltYXRpb25EdXJhdGlvbjowXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0
aW9uczpZRVNdOwotICAgIAotICAgIGlmICghQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZp
ZGVvTGF5ZXJGcmFtZSwgW3NlbGYgYm91bmRzXSkpIHsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVv
TGF5ZXJGcmFtZSA9IFtzZWxmIGJvdW5kc107Ci0gICAgICAgIEFTU0VSVChfZnVsbHNjcmVlbklu
dGVyZmFjZS0+bW9kZWwoKSk7Ci0gICAgICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgp
LT5zZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgfQot
ICAgIFsoVUlWaWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXSBzZXRUcmFuc2Zvcm06Q0dB
ZmZpbmVUcmFuc2Zvcm1JZGVudGl0eV07Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0
XTsKLX0KLQotLSAodm9pZClzZXRWaWRlb0dyYXZpdHk6KE5TU3RyaW5nICopdmlkZW9HcmF2aXR5
Ci17Ci0gICAgX3ZpZGVvR3Jhdml0eSA9IHZpZGVvR3Jhdml0eTsKLSAgICAKLSAgICBpZiAoIVtf
YXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5ID0gV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsK
LSAgICBpZiAodmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSkK
LSAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemU7Ci0gICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0KCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGVsc2UgaWYg
KHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgp
KQotICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAKLSAgICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVs
KCkpOwotICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jh
dml0eShncmF2aXR5KTsKLX0KLQotLSAoTlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKLXsKLSAgICBy
ZXR1cm4gX3ZpZGVvR3Jhdml0eS5nZXQoKTsKLX0KLQotLSAoQ0dSZWN0KXZpZGVvUmVjdAotewot
ICAgIGlmIChzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8PSAwIHx8IHNlbGYudmlkZW9EaW1l
bnNpb25zLmhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm4gc2VsZi5ib3VuZHM7Ci0gICAgCi0g
ICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIC8g
c2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0OwotCi0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0KCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkK
LSAgICAgICAgcmV0dXJuIGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRl
b0FzcGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7Ci0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2
aXR5UmVzaXplQXNwZWN0RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0p
Ci0gICAgICAgIHJldHVybiBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZp
ZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKLQotICAgIHJldHVybiBzZWxmLmJvdW5kczsK
LX0KLQotKyAoTlNTZXQgKilrZXlQYXRoc0ZvclZhbHVlc0FmZmVjdGluZ1ZpZGVvUmVjdAotewot
ICAgIHJldHVybiBbTlNTZXQgc2V0V2l0aE9iamVjdHM6QCJ2aWRlb0RpbWVuc2lvbnMiLCBAInZp
ZGVvR3Jhdml0eSIsIG5pbF07Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcgOiBVSVZpZXcKLUBlbmQKLQotc3RhdGljIENsYXNzIFdl
YkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlld19sYXllckNsYXNzKGlkLCBTRUwpCi17
Ci0gICAgcmV0dXJuIFtXZWJBVlBsYXllckxheWVyIGNsYXNzXTsKLX0KLQotc3RhdGljIFdlYkFW
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqYWxsb2NXZWJBVlBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXdJbnN0YW5jZSgpCi17Ci0gICAgc3RhdGljIENsYXNzIHRoZUNsYXNz
ID0gbmlsOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3Bh
dGNoX29uY2UoJm9uY2VUb2tlbiwgXiB7Ci0gICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0
ZUNsYXNzUGFpcihnZXRVSVZpZXdDbGFzcygpLCAiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3IiwgMCk7Ci0gICAgICAgIG9iamNfcmVnaXN0ZXJDbGFzc1BhaXIodGhlQ2xhc3Mp
OwotICAgICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFDbGFzcygiV2ViQVZQaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCht
ZXRhQ2xhc3MsIEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOwotICAgIH0pOwotICAgIAotICAg
IHJldHVybiAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW3RoZUNsYXNz
IGFsbG9jXTsKLX0KLQotQGludGVyZmFjZSBXZWJBVlBsYXllckxheWVyVmlldyA6IF9fQVZQbGF5
ZXJMYXllclZpZXcKLUBwcm9wZXJ0eSAocmV0YWluKSBVSVZpZXcqIHZpZGVvVmlldzsKLUBlbmQK
LQotc3RhdGljIENsYXNzIFdlYkFWUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkK
LXsKLSAgICByZXR1cm4gW1dlYkFWUGxheWVyTGF5ZXIgY2xhc3NdOwotfQotCi1zdGF0aWMgQVZQ
bGF5ZXJDb250cm9sbGVyICpXZWJBVlBsYXllckxheWVyVmlld19wbGF5ZXJDb250cm9sbGVyKGlk
IGFTZWxmLCBTRUwpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBh
U2VsZjsKLSAgICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxh
eWVyTGF5ZXIgKilbcGxheWVyTGF5ZXIgcGxheWVyTGF5ZXJdOwotICAgIHJldHVybiBbd2ViQVZQ
bGF5ZXJMYXllciBwbGF5ZXJDb250cm9sbGVyXTsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5
ZXJMYXllclZpZXdfc2V0UGxheWVyQ29udHJvbGxlcihpZCBhU2VsZiwgU0VMLCBBVlBsYXllckNv
bnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAq
cGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5
ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXll
cl07Ci0gICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0UGxheWVyQ29udHJvbGxlcjogcGxheWVyQ29u
dHJvbGxlcl07Ci19Ci0KLXN0YXRpYyBVSVZpZXcgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVv
VmlldyhpZCBhU2VsZiwgU0VMKQotewotICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxh
eWVyID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChX
ZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyIHBsYXllckxheWVyXTsKLSAgICBDQUxheWVy
KiB2aWRlb0xheWVyID0gW3dlYkFWUGxheWVyTGF5ZXIgdmlkZW9TdWJsYXllcl07Ci0gICAgaWYg
KCF2aWRlb0xheWVyIHx8ICF2aWRlb0xheWVyLmRlbGVnYXRlKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChbW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdIGlzS2luZE9mQ2xhc3M6Z2V0VUlW
aWV3Q2xhc3MoKV0pOwotICAgIHJldHVybiAoVUlWaWV3ICopW3ZpZGVvTGF5ZXIgZGVsZWdhdGVd
OwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zZXRWaWRlb1ZpZXcoaWQg
YVNlbGYsIFNFTCwgVUlWaWV3ICp2aWRlb1ZpZXcpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmll
dyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQ
bGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJM
YXllcl07Ci0gICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0VmlkZW9TdWJsYXllcjpbdmlkZW9WaWV3
IGxheWVyXV07Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0YXJ0Um91
dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwp
Ci17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwot
ICAgIFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJB
VlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwotCi0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxh
eWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5
ZXJdOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVy
TGF5ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAgW3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0
eTpnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCldOwotICAgIFtwaXBQbGF5ZXJM
YXllciBzZXRWaWRlb1N1YmxheWVyOnBsYXllckxheWVyLnZpZGVvU3VibGF5ZXJdOwotICAgIFtw
aXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNp
b25zXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OnBsYXllckxheWVyLnZp
ZGVvR3Jhdml0eV07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1l
OnBsYXllckxheWVyLm1vZGVsVmlkZW9MYXllckZyYW1lXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIg
c2V0UGxheWVyQ29udHJvbGxlcjpwbGF5ZXJMYXllci5wbGF5ZXJDb250cm9sbGVyXTsKLSAgICBb
cGlwUGxheWVyTGF5ZXIgc2V0RnVsbHNjcmVlbkludGVyZmFjZTpwbGF5ZXJMYXllci5mdWxsc2Ny
ZWVuSW50ZXJmYWNlXTsKLSAgICBbcGlwVmlldyBhZGRTdWJ2aWV3OnBsYXllckxheWVyVmlldy52
aWRlb1ZpZXddOwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91
dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwp
Ci17Ci0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwot
ICAgIGlmIChVSVZpZXcgKnZpZGVvVmlldyA9IHBsYXllckxheWVyVmlldy52aWRlb1ZpZXcpCi0g
ICAgICAgIFtwbGF5ZXJMYXllclZpZXcgYWRkU3Vidmlldzp2aWRlb1ZpZXddOwotICAgIFdlYkFW
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXddOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0g
KFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBX
ZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3Bp
cFZpZXcgbGF5ZXJdOwotICAgIFtwbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpw
aXBQbGF5ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJGcmFtZV07Ci19Ci0KLXN0YXRpYyBXZWJBVlBp
Y3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBXZWJBVlBs
YXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gW3BsYXllckxheWVyVmlldyB2YWx1
ZUZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Ci0gICAgaWYgKCFw
aXBWaWV3KSB7Ci0gICAgICAgIHBpcFZpZXcgPSBbYWxsb2NXZWJBVlBpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXdJbnN0YW5jZSgpIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVyb107Ci0gICAg
ICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0VmFsdWU6cGlwVmlldyBmb3JLZXk6QCJfcGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyJdOwotICAgIH0KLSAgICByZXR1cm4gcGlwVmlldzsKLX0K
LQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYyhpZCBhU2VsZiwgU0VM
KQotewotICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsK
LSAgICBSZXRhaW5QdHI8V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3PiBwaXBW
aWV3ID0gYWRvcHROUyhbcGxheWVyTGF5ZXJWaWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXciXSk7Ci0gICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1ZTpu
aWwgZm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKLSAgICBvYmpj
X3N1cGVyIHN1cGVyQ2xhc3MgeyBwbGF5ZXJMYXllclZpZXcsIGdldF9fQVZQbGF5ZXJMYXllclZp
ZXdDbGFzcygpIH07Ci0gICAgYXV0byBzdXBlcl9kZWFsbG9jID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKCopKG9iamNfc3VwZXIqLCBTRUwpPihvYmpjX21zZ1NlbmRTdXBlcik7Ci0gICAgc3VwZXJf
ZGVhbGxvYygmc3VwZXJDbGFzcywgQHNlbGVjdG9yKGRlYWxsb2MpKTsKLX0KLQotI3ByYWdtYSBt
YXJrIC0gTWV0aG9kcwotCi1zdGF0aWMgV2ViQVZQbGF5ZXJMYXllclZpZXcgKmFsbG9jV2ViQVZQ
bGF5ZXJMYXllclZpZXdJbnN0YW5jZSgpCi17Ci0gICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0g
bmlsOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3BhdGNo
X29uY2UoJm9uY2VUb2tlbiwgXiB7Ci0gICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNs
YXNzUGFpcihnZXRfX0FWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSwgIldlYkFWUGxheWVyTGF5ZXJW
aWV3IiwgMCk7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKGRl
YWxsb2MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MsICJ2QDoiKTsKLSAgICAg
ICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0UGxheWVyQ29udHJvbGxl
cjopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIsICJ2QDpA
Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBsYXllckNv
bnRyb2xsZXIpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIsICJA
QDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0Vmlk
ZW9WaWV3OiksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3LCAidkA6QCIp
OwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcih2aWRlb1ZpZXcp
LCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldywgIkBAOiIpOwotICAgICAgICBj
bGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzdGFydFJvdXRpbmdWaWRlb1RvUGlj
dHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdf
c3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcsICJ2QDoi
KTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc3RvcFJvdXRp
bmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5
ZXJMYXllclZpZXdfc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVy
VmlldywgInZAOiIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rv
cihwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVy
Vmlld19waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAiQEA6Iik7Ci0gICAgICAgIAot
ICAgICAgICBjbGFzc19hZGRJdmFyKHRoZUNsYXNzLCAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXciLCBzaXplb2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICop
LCBsb2cyKHNpemVvZihXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKikpLCAi
QCIpOwotICAgICAgICAKLSAgICAgICAgb2JqY19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7
Ci0gICAgICAgIENsYXNzIG1ldGFDbGFzcyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBsYXll
ckxheWVyVmlldyIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QobWV0YUNsYXNzLCBAc2VsZWN0
b3IobGF5ZXJDbGFzcyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBA
OiIpOwotICAgIH0pOwotICAgIHJldHVybiAoV2ViQVZQbGF5ZXJMYXllclZpZXcgKilbdGhlQ2xh
c3MgYWxsb2NdOwotfQotCi1SZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLXsKLSAgICBSZWY8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KSk7Ci0gICAgW2ludGVyZmFjZS0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIHNldEZ1
bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJmYWNlLnB0cigpXTsKLSAgICByZXR1cm4gaW50ZXJmYWNl
OwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICAsIG1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZShhZG9wdE5TKFtbV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBp
bml0XSkpCi0gICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCkKLXsKLX0K
LQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdCgpCi17Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250
cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxlcigpOwotICAgIGlmIChwbGF5ZXJDb250cm9s
bGVyICYmIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSkKLSAgICAgICAg
ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZmFsc2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpU
YXJnZXRUeXBlTm9uZSwgIiIpOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotfQotCi1X
ZWJBVlBsYXllckNvbnRyb2xsZXIgKldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpw
bGF5ZXJDb250cm9sbGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UtPnBsYXllckNvbnRyb2xsZXIoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwqIG1vZGVsKQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQot
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotCi0g
ICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG1vZGVsOwotCi0gICAgaWYgKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgq
dGhpcyk7Ci0KLSAgICBoYXNWaWRlb0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZSk7Ci0gICAgdmlkZW9EaW1l
bnNpb25zQ2hhbmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbC0+dmlkZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKLXsKLSAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRl
bykKLXsKLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRl
b107Ci0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNWaWRlbzpoYXNWaWRlb107Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnZpZGVvRGltZW5zaW9uc0No
YW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgV2ViQVZQbGF5
ZXJMYXllciAqcGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVy
VmlldyBwbGF5ZXJMYXllcl07Ci0KLSAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25z
OnZpZGVvRGltZW5zaW9uc107Ci0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRDb250ZW50RGlt
ZW5zaW9uczp2aWRlb0RpbWVuc2lvbnNdOwotICAgIFttX3BsYXllckxheWVyVmlldyBzZXROZWVk
c0xheW91dF07Ci0KLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBp
cFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW21fcGxheWVy
TGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwotICAgIFdlYkFWUGxh
eWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBs
YXllcl07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXll
ci52aWRlb0RpbWVuc2lvbnNdOwotICAgIFtwaXBWaWV3IHNldE5lZWRzTGF5b3V0XTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3
IHNldEhpZGRlbjplbmFibGVkXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQotewotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVj
b21lQWN0aXZlKCVwKSIsIHRoaXMpOwotICAgIGlmIChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+aXNWaXNpYmxlKCkpIHsKLSAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gSWYgd2UgYXJlIGJvdGggaW4gUGlQIGFuZCBpbiBGdWxsc2NyZWVuIChpLmUu
LCB2aWEgYXV0by1QaVApLCBhbmQgd2UgZGlkIG5vdCBzdG9wIGZ1bGxzY3JlZW4gdXBvbiByZXR1
cm5pbmcsIGl0IG11c3QgYmUKLSAgICAvLyBiZWNhdXNlIHRoZSBvcmlnaW5hdGluZyB2aWV3IGlz
IG5vdCB2aXNpYmxlLCBzbyBoaWRlIHRoZSBmdWxsc2NyZWVuIHdpbmRvdy4KLSAgICBpZiAoaXNN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIHwg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0
RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0
aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46
WUVTXTsKLSAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRk
ZW46WUVTXTsKLSAgICAgICAgfV07Ci0gICAgfQotfQotCi1AaW50ZXJmYWNlIFVJV2luZG93ICgp
Ci0tIChCT09MKV9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3M7Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
VUlWaWV3Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgc2V0dGVy
PV9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6KSBCT09MIF9pZ25vcmVBcHBTdXBw
b3J0ZWRPcmllbnRhdGlvbnM7Ci1AZW5kCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmlldywgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUlu
UGljdHVyZVBsYXliYWNrKQotewotICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIExPRyhGdWxsc2NyZWVuLCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlz
KTsKLQotICAgIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrID0gYWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtD
QVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgYm9vbCBpc0luUGljdHVy
ZUluUGljdHVyZU1vZGUgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIG1fbW9kZSA9IG1vZGU7Ci0gICAgbV9w
YXJlbnRWaWV3ID0gcGFyZW50VmlldzsKLSAgICBtX3BhcmVudFdpbmRvdyA9IHBhcmVudFZpZXcu
d2luZG93OwotCi0gICAgaWYgKCFbW3BhcmVudFZpZXcgd2luZG93XSBfaXNIb3N0ZWRJbkFub3Ro
ZXJQcm9jZXNzXSkgewotICAgICAgICBpZiAoIW1fd2luZG93KQotICAgICAgICAgICAgbV93aW5k
b3cgPSBhZG9wdE5TKFthbGxvY1VJV2luZG93SW5zdGFuY2UoKSBpbml0V2l0aEZyYW1lOltbZ2V0
VUlTY3JlZW5DbGFzcygpIG1haW5TY3JlZW5dIGJvdW5kc11dKTsKLSAgICAgICAgW21fd2luZG93
IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAgIGlmICghbV92aWV3
Q29udHJvbGxlcikKLSAgICAgICAgICAgIG1fdmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxv
Y1VJVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICAgICAgW1ttX3ZpZXdDb250
cm9sbGVyIHZpZXddIHNldEZyYW1lOlttX3dpbmRvdyBib3VuZHNdXTsKLSAgICAgICAgW21fdmll
d0NvbnRyb2xsZXIgX3NldElnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczpZRVNdOwotICAg
ICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm1fdmlld0NvbnRyb2xsZXIuZ2V0
KCldOwotICAgICAgICBbbV93aW5kb3cgc2V0V2luZG93TGV2ZWw6Z2V0VUlUZXh0RWZmZWN0c0Jl
bmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCgpICsgMV07Ci0gICAgICAgIFttX3dpbmRvdyBtYWtl
S2V5QW5kVmlzaWJsZV07Ci0gICAgfQotCi0gICAgaWYgKCFtX3BsYXllckxheWVyVmlldykKLSAg
ICAgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBhZG9wdE5TKFthbGxvY1dlYkFWUGxheWVyTGF5ZXJW
aWV3SW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEhpZGRlbjpb
cGxheWVyQ29udHJvbGxlcigpIGlzRXh0ZXJuYWxQbGF5YmFja0FjdGl2ZV1dOwotICAgIFttX3Bs
YXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotCi0gICAg
aWYgKCFpc0luUGljdHVyZUluUGljdHVyZU1vZGUpIHsKLSAgICAgICAgW21fcGxheWVyTGF5ZXJW
aWV3IHNldFZpZGVvVmlldzomdmlkZW9WaWV3XTsKLSAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3
IGFkZFN1YnZpZXc6JnZpZGVvVmlld107Ci0gICAgfQotCi0gICAgV2ViQVZQbGF5ZXJMYXllciAq
cGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5
ZXJMYXllcl07Ci0KLSAgICBbcGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0aWFsUmVjdC5oZWlnaHQoKSld
OwotICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6W3BsYXllckNvbnRyb2xsZXIo
KSBjb250ZW50RGltZW5zaW9uc11dOwotICAgIHBsYXllckxheWVyLmZ1bGxzY3JlZW5JbnRlcmZh
Y2UgPSB0aGlzOwotCi0gICAgaWYgKCFtX3BsYXllclZpZXdDb250cm9sbGVyKQotICAgICAgICBt
X3BsYXllclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NBVlBsYXllclZpZXdDb250cm9s
bGVySW5zdGFuY2UoKSBpbml0V2l0aFBsYXllckxheWVyVmlldzptX3BsYXllckxheWVyVmlldy5n
ZXQoKV0pOwotCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0Nv
bnRyb2xzOk5PXTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9s
bGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyKCldOwotICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZS5nZXQoKV07Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0QWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrXTsKLQot
ICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0UGljdHVyZUluUGljdHVyZVBvc3NpYmxlOm1fYWxs
b3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrXTsKLQotICAgIGlmIChtX3ZpZXdDb250cm9sbGVy
KSB7Ci0gICAgICAgIFttX3ZpZXdDb250cm9sbGVyIGFkZENoaWxkVmlld0NvbnRyb2xsZXI6bV9w
bGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2
aWV3XSBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKLSAgICB9IGVs
c2UKLSAgICAgICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XV07Ci0KLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFtw
YXJlbnRWaWV3IGNvbnZlcnRSZWN0OmluaXRpYWxSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOwotCi0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVy
IHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgW1ttX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNp
emluZ0ZsZXhpYmxlQm90dG9tTWFyZ2luIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVSaWdo
dE1hcmdpbildOwotCi0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldE5lZWRz
TGF5b3V0XTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVk
ZWRdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhp
c10gewotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAg
ICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVs
bHNjcmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgbV9leGl0Q29t
cGxldGVkID0gZmFsc2U7Ci0gICAgbV9leGl0UmVxdWVzdGVkID0gZmFsc2U7Ci0gICAgbV9lbnRl
clJlcXVlc3RlZCA9IHRydWU7Ci0KLSAgICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgIGVudGVy
UGljdHVyZUluUGljdHVyZSgpOwotICAgIGVsc2UgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkKLSAgICAgICAgZW50ZXJGdWxs
c2NyZWVuU3RhbmRhcmQoKTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1
cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICAK
LSAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlUG9zc2li
bGVdKQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdGFydFBpY3R1cmVJblBpY3R1
cmVdOwotICAgIGVsc2UKLSAgICAgICAgZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuU3RhbmRhcmQoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCVwKSIsIHRoaXMpOwotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKLQotICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1
cmVBY3RpdmVdKSB7Ci0gICAgICAgIC8vIE5PVEU6IFRoZSBmdWxsc2NyZWVuIG1vZGUgd2lsbCBi
ZSByZXN0b3JlZCBpbiBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlv
bkhhbmRsZXIoKS4KLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBp
bmdQaVAgPSB0cnVlOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVy
ZUluUGljdHVyZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6
W3RoaXMsIHByb3RlY3RlZFRoaXNdIChCT09MIHN1Y2NlZWRlZCwgTlNFcnJvciopIHsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKHN1Y2NlZWRlZCk7Ci0gICAgICAgIExPRyhGdWxsc2NyZWVuLCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkIC0g
bGFtYmRhKCVwKSAtIHN1Y2NlZWRlZCglcykiLCB0aGlzLCBib29sU3RyaW5nKHN1Y2NlZWRlZCkp
OwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJv
bHM6WUVTXTsKLQotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAg
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7
Ci0gICAgfV07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4
aXRGdWxsc2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsUmVjdCkKLXsKLSAgICBt
X3dhdGNoZG9nVGltZXIuc3RvcCgpOwotCi0gICAgbV9leGl0UmVxdWVzdGVkID0gdHJ1ZTsKLSAg
ICBpZiAobV9leGl0Q29tcGxldGVkKSB7Ci0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0
RnVsbHNjcmVlbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVu
KCVwKSIsIHRoaXMpOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJh
Y2tDb250cm9sczpOT107Ci0gICAgCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10u
ZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmZpbmFsUmVjdCB0b1ZpZXc6W21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKLQotICAgIFdlYkFWUGxheWVyTGF5
ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcg
cGxheWVyTGF5ZXJdOwotICAgIGlmIChbcGxheWVyTGF5ZXIgdmlkZW9HcmF2aXR5XSAhPSBnZXRB
VkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCi0gICAgICAgIFtwbGF5ZXJMYXllciBz
ZXRWaWRlb0dyYXZpdHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpXTsKLSAg
ICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVkZWRdOwotCi0gICAg
aWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0
dXJlSW5QaWN0dXJlKSkgewotICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5T
dG9wcGluZ1BpUCA9IGZhbHNlOwotICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAg
IH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVBpY3R1cmVJblBpY3R1cmUgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVTdGFuZGFyZCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltw
cm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIGNsZWFy
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7
Ci0gICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgICAgIFttX3Bs
YXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICAgICAgfV07Ci0g
ICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3By
b3RlY3RlZFRoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAgICAgbV9leGl0
Q29tcGxldGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwot
ICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICAg
ICAgICAgIFttX3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9y
KCldOwotICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tn
cm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotCi0gICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgICAgICBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9XTsKLSAgICB9OwotfQotCi1AaW50ZXJmYWNlIFVJQXBwbGljYXRpb24gKCkKLS0g
KHZvaWQpX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOihVSUludGVyZmFjZU9yaWVudGF0aW9uKW87
Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlXaW5kb3cgKCkKLS0gKFVJSW50ZXJmYWNlT3JpZW50YXRp
b24paW50ZXJmYWNlT3JpZW50YXRpb247Ci1AZW5kCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0coRnVsbHNjcmVl
biwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigl
cCkiLCB0aGlzKTsKLSAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgW21fd2luZG93IHNldEhp
ZGRlbjpZRVNdOwotICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm5pbF07
Ci0gICAgICAgIGlmIChtX3BhcmVudFdpbmRvdykKLSAgICAgICAgICAgIFtbZ2V0VUlBcHBsaWNh
dGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjpb
bV9wYXJlbnRXaW5kb3cgaW50ZXJmYWNlT3JpZW50YXRpb25dXTsKLSAgICB9Ci0gICAgCi0gICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOm5pbF07Ci0gICAgCi0gICAgaWYgKGhh
c01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUlu
UGljdHVyZSkpCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5Q
aWN0dXJlXTsKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVTdGFuZGFyZCkpCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4
aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W10gKEJPT0wsIE5TRXJy
b3IgKikgeyB9XTsKLSAgICAKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gcmVt
b3ZlRnJvbVN1cGVydmlld107Ci0gICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCi0gICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHJlbW92ZUZyb21QYXJlbnRWaWV3Q29udHJvbGxlcl07Ci0g
ICAgCi0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgIFtb
bV92aWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLQotICAgIG1fcGxh
eWVyTGF5ZXJWaWV3ID0gbmlsOwotICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0g
ICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgbV9wYXJlbnRWaWV3ID0gbmlsOwotICAgIG1fcGFyZW50
V2luZG93ID0gbmlsOwotICAgIAotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikK
LSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVu
KCk7Ci0KLSAgICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQotewotICAgIG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwgPSBuaWw7Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7
Ci0gICAgCi0gICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0g
ICAgaWYgKCFtX2VudGVyUmVxdWVzdGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYg
KGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxs
c2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLQotICAgIGlm
ICh3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYg
IW1fZXhpdFJlcXVlc3RlZCkgewotICAgICAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5w
YXVzZSgpOwotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVl
bk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0g
ICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJl
ZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0
KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCkgLSB2aXNpYmxlKCVzKSIsIHRoaXMsIGJv
b2xTdHJpbmcodmlzaWJsZSkpOwotICAgIGlmIChtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7
Ci0gICAgICAgIAotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9
IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6W21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKLQotICAgICAgICBXVEY6OkZ1bmN0aW9uPHZv
aWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGTW92ZShtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKTsK
LSAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7Ci0gICAgfQotfQotCi1ib29sIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUlu
UGljdHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFtwbGF5ZXJDb250cm9sbGVyKCkgaXNQbGF5
aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlU3RhbmRhcmQgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZShXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCi17Ci0gICAgbV9wcmVwYXJl
VG9JbmxpbmVDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQ
aWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVy
ZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIG1fc2hvdWxk
UmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91
bmRdOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9s
czpZRVNdOwotCi0gICAgaWYgKG1fbW9kZSAmIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB7Ci0gICAgICAgIGlmICghW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXSkg
ewotICAgICAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
ZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRo
aXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAgICAgICAgIFttX3dpbmRvdyBz
ZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
dmlld10gc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAgICB9XTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgW1ttX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotICAgIH0KLQotICAgIGlm
IChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpCi17Ci0g
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFp
bGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0gICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0KLSAgICBpZiAoaGFz
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICBp
ZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLQotICAgIGlmIChtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNj
cmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGlj
dHVyZUluUGljdHVyZSgpCi17Ci0gICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3Rv
cHBpbmdQaVAgPSBmYWxzZTsKLSAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50
ZXJpbmdGb3JlZ3JvdW5kID0gZmFsc2U7Ci0KLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwg
dGhpcyk7Ci0gICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlU3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBp
Y3R1cmVTdG9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5P
XTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKLQot
ICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVl
biwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGlj
dHVyZSglcCkiLCB0aGlzKTsKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9y
UGljdHVyZUluUGljdHVyZVN0b3ApIHsKLSAgICAgICAgLy8gQVNTVU1QVElPTjogd2UgYXJlIGV4
aXRpbmcgcGlwIGJlY2F1c2Ugd2UgYXJlIGVudGVyaW5nIGZ1bGxzY3JlZW4KLSAgICAgICAgY2xl
YXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJ
blBpY3R1cmUpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXli
YWNrQ29udHJvbHM6WUVTXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZXhpdENv
bXBsZXRlZCA9IHRydWU7Ci0KLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENv
bG9yOmNsZWFyVUlDb2xvcigpXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10g
c2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLQotICAgIGNsZWFyTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsK
LSAgICAKLSAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVy
ZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09M
IHJlc3RvcmVkKSkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlv
bkhhbmRsZXIoJXApIiwgdGhpcyk7Ci0gICAgaWYgKG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVu
V2hlblN0b3BwaW5nUGlQIHx8IG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmlu
Z0ZvcmVncm91bmQpIHsKLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3Rv
cHBpbmdQaVAgPSBmYWxzZTsKLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRl
ckVudGVyaW5nRm9yZWdyb3VuZCA9IGZhbHNlOwotICAgICAgICBtX3Jlc3RvcmluZ0Z1bGxzY3Jl
ZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IHRydWU7Ci0KLSAgICAgICAgW21fd2luZG93IHNl
dEhpZGRlbjpOT107Ci0gICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRI
aWRkZW46Tk9dOwotCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNj
cmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wgc3VjY2VzcywgTlNFcnJv
ciopIHsKLSAgICAgICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1
cmVTdG9wID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHN1Y2Nlc3MpOwotICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQotICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRl
ckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7Ci0gICAgUmV0YWluUHRyPGlkPiBzdHJvbmdDb21wbGV0aW9uSGFuZGxlciA9IGFkb3B0
TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLSAgICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUoW3Byb3RlY3RlZFRoaXMsIHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyXShib29sIHJlc3Rv
cmVkKSAgewotICAgICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhh
bmRsZXIgbGFtYmRhKCVwKSAtIHJlc3RvcmVkKCVzKSIsIHByb3RlY3RlZFRoaXMuZ2V0KCksIGJv
b2xTdHJpbmcocmVzdG9yZWQpKTsKLSAgICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShC
T09MIHJlc3RvcmVkKSA9IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyLmdldCgpOwotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihyZXN0b3JlZCk7Ci0gICAgfSk7Ci19Ci0KLWJvb2wgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVh
c29uKQotewotICAgIGlmICghbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJl
SW5QaWN0dXJlU3RhcnRlZCkgewotICAgICAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
cGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVl
bldoZW5TdG9wcGluZ1BpUCA9IGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAod2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiAocmVhc29u
ID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkIHx8IHJlYXNvbiA9PSBF
eGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkKSkKLSAg
ICAgICAgd2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKLSAgICAKLSAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVu
UmVhc29uOjpEb25lQnV0dG9uVGFwcGVkKTsKLQotICAgIGlmICghbV93YXRjaGRvZ1RpbWVyLmlz
QWN0aXZlKCkpCi0gICAgICAgIG1fd2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3QoZGVmYXVsdFdh
dGNoZG9nVGltZXJJbnRlcnZhbCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU5PX1JFVFVS
Tl9EVUVfVE9fQVNTRVJUIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Ondh
dGNoZG9nVGltZXJGaXJlZCgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCVwKSAtIG5vIGV4aXQgZnVs
bHNjcmVlbiByZXNwb25zZSBpbiAlZ3M7IGZvcmNpbmcgZnVsbHNjcmVlbiBoaWRkZW4uIiwgdGhp
cywgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbC52YWx1ZSgpKTsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgW1ttX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2RlIHwgbW9kZTsKLSAgICBpZiAobV9t
b2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbW9kZSA9IG5ld01vZGU7
Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgJiB+bW9kZTsKLSAgICBp
ZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbW9kZSA9IG5l
d01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21vZGUpOwotfQotCi0jZW5k
aWYgLy8gSEFWRShBVktJVCkKLQotYm9vbCBXZWJDb3JlOjpzdXBwb3J0c1BpY3R1cmVJblBpY3R1
cmUoKQotewotI2lmIFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkKLSAgICByZXR1cm4gW2dl
dEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJDbGFzcygpIGlzUGljdHVyZUluUGljdHVyZVN1
cHBvcnRlZF07Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0jZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViODEyZGE2ZDZh
MmFjZDBiYjY1Y2ZhZDQ5NjEwOThlYWM0NmJlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgKQEAgLTAs
MCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKworI2luY2x1ZGUgIkhU
TUxNZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK09CSkNfQ0xBU1MgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXI7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBQbGF5YmFja1Nl
c3Npb25Nb2RlbDsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjIGZpbmFsCisgICAgOiBwdWJsaWMgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAg
LCBwdWJsaWMgUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBSZWZDb3Vu
dGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uTW9k
ZWwmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoKTsKKyAgICBQ
bGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVy
biBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOyB9CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIGZpbmFsIHsg
fQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKmN1cnJlbnRUaW1lKi8sIGRvdWJsZSAv
KmFuY2hvclRpbWUqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdl
ZChib29sIC8qaXNQbGF5aW5nKi8sIGZsb2F0IC8qcGxheWJhY2tSYXRlKi8pIGZpbmFsOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5n
ZXMmLCBkb3VibGUgLypsYXN0TW9kaWZpZWRUaW1lKi8sIGRvdWJsZSAvKmxpdmVVcGRhdGVJbnRl
cnZhbCovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKm9w
dGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4Ki8pIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0
ZWRJbmRleCovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1ZGlvTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgLyogZW5h
YmxlZCAqLywgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
LCBjb25zdCBTdHJpbmcmIC8qIGxvY2FsaXplZERldmljZU5hbWUgKi8pIGZpbmFsOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBlbnN1cmVDb250cm9sc01hbmFnZXIoKTsKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbGF5QmFja0NvbnRyb2xz
TWFuYWdlcihXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsK
KyNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJpbmcoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpOworCitwcml2YXRlOgorICAgIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOworICAgIFBsYXli
YWNrU2Vzc2lvbk1vZGVsKiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsIHsgbnVsbHB0ciB9OworI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciAqbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciAgeyBudWxscHRyIH07CisK
KyAgICB2b2lkIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJsZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQ
bGF5aW5nKTsKKyNlbmRpZgorCit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYm
IEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU5ZWYyMjMwNjlhOWNlZTlmMTEyNTEzYmJmZWYwYjEyYzY3YjI0ZTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLm1tCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgorCisj
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisKKyNp
bXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0ICJNZWRpYVNl
bGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgiCisjaW1w
b3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2lt
cG9ydCAiV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlv
bi9BVlRpbWUuaD4KKworI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5L
X0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktp
dCwgQVZWYWx1ZVRpbWluZykKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQor
eworICAgIGF1dG8gaW50ZXJmYWNlID0gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMobW9kZWwpKTsKKyAgICBtb2RlbC5hZGRDbGllbnQoaW50ZXJmYWNlKTsKKyAgICBy
ZXR1cm4gaW50ZXJmYWNlOworfQorCitQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyhQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCisgICAg
OiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKK3sKK30KKworUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjp+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCkKK3sKKyAgICBpbnZh
bGlkYXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlv
bkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09O
VFJPTFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNN
YW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKworICAgIGNvbnRyb2xzTWFuYWdl
ci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKworICAgIC8vIEZJWE1FOiBXZSB0YWtlIHRo
aXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LCBidXQgdGhhdCBpcyBu
b3QgbmVjZXNzYXJpbHkgdHJ1ZS4KKyAgICBjb250cm9sc01hbmFnZXIuaGFzRW5hYmxlZEF1ZGlv
ID0gWUVTOworICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFibGVkVmlkZW8gPSBZRVM7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShkdXJhdGlvbik7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRp
bWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5h
Z2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICB1cGRhdGVQbGF5YmFja0NvbnRy
b2xzTWFuYWdlclRpbWluZyhjdXJyZW50VGltZSwgYW5jaG9yVGltZSwgY29udHJvbHNNYW5hZ2Vy
LnJhdGUsIGNvbnRyb2xzTWFuYWdlci5wbGF5aW5nKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGN1cnJlbnRUaW1lKTsKKyAgICBVTlVTRURfUEFSQU0oYW5jaG9yVGltZSk7CisjZW5kaWYKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9s
c01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworICAgIFtjb250cm9sc01hbmFn
ZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07CisgICAgW2NvbnRyb2xz
TWFuYWdlciBzZXRQbGF5aW5nOmlzUGxheWluZ107CisgICAgdXBkYXRlUGxheWJhY2tDb250cm9s
c01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tTZXNzaW9u
TW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5
c3RlbVVwdGltZV0sIHBsYXliYWNrUmF0ZSwgaXNQbGF5aW5nKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGlzUGxheWluZyk7CisgICAgVU5VU0VEX1BBUkFNKHBsYXliYWNrUmF0ZSk7CisjZW5k
aWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2NydWJiaW5n
KCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgdXBk
YXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/
IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0lu
Zm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0sIDAsIGZhbHNlKTsKKyNlbmRpZgorICAgIHBs
YXliYWNrU2Vzc2lvbk1vZGVsKCktPmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbmRTY3J1YmJpbmcoKQoreworICAgIHBsYXliYWNrU2Vz
c2lvbk1vZGVsKCktPmVuZFNjcnViYmluZygpOworfQorCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQorc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gdGlt
ZVJhbmdlc1RvQXJyYXkoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykKK3sKKyAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJhbmdlQXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFu
Z2VzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgUGxhdGZvcm1UaW1lUmFuZ2VzJiBy
YW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdlcygpOworICAgICAgICBDTVRpbWVSYW5nZSByYW5nZSA9
IENNVGltZVJhbmdlTWFrZSh0b0NNVGltZShyYW5nZXMuc3RhcnQoaSkpLCB0b0NNVGltZShyYW5n
ZXMuZW5kKGkpKSk7CisgICAgICAgIFtyYW5nZUFycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1
ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOworICAgIH0KKworICAgIHJldHVybiByYW5nZUFycmF5
OworfQorI2VuZGlmCisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZWVrYWJs
ZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlLCBkb3Vi
bGUpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtw
bGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFNlZWthYmxlVGltZVJhbmdlczp0aW1lUmFuZ2Vz
VG9BcnJheSh0aW1lUmFuZ2VzKS5nZXQoKV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0aW1l
UmFuZ2VzKTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisjaWYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0NvbnRyb2xz
TWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm9wdGlvbnMgd2l0aFNlbGVj
dGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5k
ZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rp
b25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBbcGxheUJhY2tDb250cm9sc01h
bmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOm9wdGlvbnMgd2l0aFNlbGVj
dGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5k
ZXgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRp
b01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7Cisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4
XTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOworI2VuZGlmCit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BM
QVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkg
c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXg6c2VsZWN0ZWRJbmRleF07CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4KTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVk
LCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0
IFN0cmluZyYpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQor
ICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldENhblRvZ2dsZVBpY3R1cmVJblBpY3R1
cmU6IWVuYWJsZWRdOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQorewor
ICAgIGlmICghbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICBtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Cisj
ZW5kaWYKK30KKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKwor
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKQoreworICAgIHJldHVybiBtX3BsYXliYWNrQ29udHJv
bHNNYW5hZ2VyOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxh
eUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIp
Cit7CisgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciA9IG1hbmFnZXI7CisKKyAgICBpZiAo
IW1hbmFnZXIgfHwgIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbbWFuYWdlciByYXRlXSA/IE5B
TiA6IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKKyAgICBtYW5h
Z2VyLnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNo
b3JWYWx1ZTptX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIGFuY2hvclRpbWVT
dGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBtX3Bs
YXliYWNrU2Vzc2lvbk1vZGVsLT5kdXJhdGlvbigpOworICAgIG1hbmFnZXIuY29udGVudER1cmF0
aW9uID0gZHVyYXRpb247CisgICAgbWFuYWdlci5oYXNFbmFibGVkQXVkaW8gPSBkdXJhdGlvbiA+
IDA7CisgICAgbWFuYWdlci5oYXNFbmFibGVkVmlkZW8gPSBkdXJhdGlvbiA+IDA7CisgICAgbWFu
YWdlci5yYXRlID0gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+aXNQbGF5aW5nKCkgPyBtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsLT5wbGF5YmFja1JhdGUoKSA6IDAuOworICAgIG1hbmFnZXIuc2Vla2Fi
bGVUaW1lUmFuZ2VzID0gdGltZVJhbmdlc1RvQXJyYXkobV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+
c2Vla2FibGVSYW5nZXMoKSkuZ2V0KCk7CisgICAgbWFuYWdlci5jYW5Ub2dnbGVQbGF5YmFjayA9
IFlFUzsKKyAgICBtYW5hZ2VyLnBsYXlpbmcgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1Bs
YXlpbmcoKTsKKyAgICBbbWFuYWdlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczptX3Bs
YXliYWNrU2Vzc2lvbk1vZGVsLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxl
Y3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwt
PmF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsKKyAgICBbbWFuYWdlciBzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnMoKSB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUs
IGRvdWJsZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKQoreworICAgIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyICptYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAg
ICBpZiAoIW1hbmFnZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsICptb2RlbCA9IHBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgaWYgKCFtb2RlbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIGVmZmVjdGl2ZUFuY2hvclRpbWUgPSBwbGF5YmFj
a1JhdGUgPyBhbmNob3JUaW1lIDogTkFOOworICAgIGRvdWJsZSBlZmZlY3RpdmVQbGF5YmFja1Jh
dGUgPSBwbGF5YmFja1JhdGU7CisgICAgaWYgKCFpc1BsYXlpbmcKKyAgICAgICAgfHwgbW9kZWwt
PmlzU2NydWJiaW5nKCkKKyAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA+IDAgJiYgbW9kZWwtPnBs
YXliYWNrU3RhcnRlZFRpbWUoKSA+PSBjdXJyZW50VGltZSkKKyAgICAgICAgfHwgKG1hbmFnZXIu
cmF0ZSA8IDAgJiYgbW9kZWwtPnBsYXliYWNrU3RhcnRlZFRpbWUoKSA8PSBjdXJyZW50VGltZSkp
CisgICAgICAgIGVmZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IDA7CisKKyAgICBtYW5hZ2VyLnRpbWlu
ZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpj
dXJyZW50VGltZSBhbmNob3JUaW1lU3RhbXA6ZWZmZWN0aXZlQW5jaG9yVGltZSByYXRlOmVmZmVj
dGl2ZVBsYXliYWNrUmF0ZV07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFj
NzRiODQ4ZmFmOWIyOTBlZWY4NmE3MjkwMmI2MzBkZGRiZWMxOGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQorCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1z
LmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCisjaW5jbHVkZSAi
UGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIE5TV2luZG93
OworT0JKQ19DTEFTUyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xhc3Mg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXI7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYworICAgIDogcHVibGljIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwcml2
YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHsKKworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMocGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKSk7CisgICAgfQorICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYygpOworICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2aWRlb0Z1bGxzY3JlZW5Nb2RlbCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KKyAgICBQbGF5YmFja1Nl
c3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9GdWxsc2NyZWVuTW9k
ZWwqKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogdmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cjsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIoVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKKworICAgIC8vIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByYXRlQ2hhbmdlZChi
b29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgIGVuYWJsZWQsIFBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5n
JiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKworICAgIC8vIFZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9v
bCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXR1
cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRp
YWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dp
bmRvdyAqcGFyZW50V2luZG93KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2Ny
ZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4o
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKKyAgICB2b2lkIHJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKSB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGlu
ZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIGJv
b2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJldHVy
biBtX21vZGUgPT0gbW9kZTsgfQorICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgY2xlYXJNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisKKyAgICBib29sIGlzUGxheWluZ1Zp
ZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKKworICAgIGJvb2wgbWF5QXV0b21hdGlj
YWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKSB7IH0KKworICAgIFdFQkNPUkVf
RVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKnZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMoKTsKKworcHJpdmF0ZToKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJik7CisgICAgUmVmPFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYz4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgVmlkZW9G
dWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07CisgICAg
VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
IHsgbnVsbHB0ciB9OworICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtX21vZGUgeyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVO
b25lIH07CisgICAgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM+
IG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQzsKK307CisKK30KKworI2VuZGlmCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxNDBlMzljYmFkYTE0ZWVjMDliZDkyMDQx
YjdlYjQ4OWYyNGY2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCkBAIC0wLDAgKzEsNTczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCIKKworI2lmIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQorCisjaW1wb3J0
ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiSW50UmVjdC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgor
I2ltcG9ydCAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgiCisjaW1wb3J0ICJQSVBTUEkuaCIKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgorI2ltcG9ydCAiVGltZVJhbmdl
cy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQg
IlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorCisjaW1wb3J0ICJDb3Jl
TWVkaWFTb2Z0TGluay5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQor
U09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQorCitTT0ZUX0xJ
TktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoUElQKQorU09GVF9MSU5LX0NMQVNTX09QVElP
TkFMKFBJUCwgUElQVmlld0NvbnRyb2xsZXIpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitAY2xhc3MgV2ViVmlkZW9WaWV3Q29udGFpbmVyOworCitAcHJvdG9jb2wgV2ViVmlkZW9WaWV3
Q29udGFpbmVyRGVsZWdhdGUgPE5TT2JqZWN0PgorCistICh2b2lkKWJvdW5kc0RpZENoYW5nZUZv
clZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29u
dGFpbmVyOworLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6
KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5lcjsKKworQGVuZAorCitA
aW50ZXJmYWNlIFdlYlZpZGVvVmlld0NvbnRhaW5lciA6IE5TVmlldyB7CisgICAgaWQgPFdlYlZp
ZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiBfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7Cit9
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlkIDxXZWJWaWRlb1ZpZXdDb250YWlu
ZXJEZWxlZ2F0ZT4gdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdlYlZpZGVvVmlld0NvbnRhaW5lcgorCitAc3ludGhlc2l6ZSB2aWRlb1ZpZXdD
b250YWluZXJEZWxlZ2F0ZT1fdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU7CisKKy0gKHZvaWQp
cmVzaXplV2l0aE9sZFN1cGVydmlld1NpemU6KE5TU2l6ZSlvbGRCb3VuZHNTaXplCit7CisgICAg
W3N1cGVyIHJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXplOm9sZEJvdW5kc1NpemVdOworCisgICAg
W192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBib3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdD
b250YWluZXI6c2VsZl07Cit9CisKKy0gKHZvaWQpdmlld0RpZE1vdmVUb1N1cGVydmlldworewor
ICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3XTsKKworICAgIFtfdmlkZW9WaWV3Q29u
dGFpbmVyRGVsZWdhdGUgc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNl
bGZdOworfQorCitAZW5kCisKK2VudW0gY2xhc3MgUElQU3RhdGUgeworICAgIE5vdEluUElQLAor
ICAgIEluUElQLAorICAgIEV4aXRpbmdQSVAKK307CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjT2JqQyA6IE5TT2JqZWN0IDxQSVBWaWV3Q29udHJvbGxlckRlbGVn
YXRlLCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4geworICAgIFdlYkNvcmU6OlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYyogX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsKKyAg
ICBOU1NpemUgX3ZpZGVvRGltZW5zaW9uczsKKyAgICBSZXRhaW5QdHI8UElQVmlld0NvbnRyb2xs
ZXI+IF9waXBWaWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8TlNWaWV3Q29udHJvbGxlcj4g
X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFdlYlZpZGVvVmll
d0NvbnRhaW5lcj4gX3ZpZGVvVmlld0NvbnRhaW5lcjsKKyAgICBQSVBTdGF0ZSBfcGlwU3RhdGU7
CisgICAgUmV0YWluUHRyPE5TV2luZG93PiBfcmV0dXJuaW5nV2luZG93OworICAgIE5TUmVjdCBf
cmV0dXJuaW5nUmVjdDsKKyAgICBCT09MIF9wbGF5aW5nOworICAgIEJPT0wgX2RpZFJlcXVlc3RF
eGl0aW5nUElQOworICAgIEJPT0wgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJD
b3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqKXZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzsKKy0gKHZvaWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZTsKKy0gKHZvaWQpaW52YWxp
ZGF0ZTsKKworLy8gVHJhY2tpbmcgdmlkZW8gcGxheWJhY2sgc3RhdGUKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljKSBOU1NpemUgdmlkZW9EaW1lbnNpb25zOworQHByb3BlcnR5IChub25hdG9taWMsIGdl
dHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWluZzsKKy0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihC
T09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6KGZsb2F0KXBsYXliYWNrUmF0ZTsKKworLy8g
SGFuZGxpbmcgUElQIHRyYW5zaXRpb25zCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IEJPT0wgZGlkUmVxdWVzdEV4aXRpbmdQSVA7CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVy
PWlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSBCT09MIGV4aXRpbmdUb1N0YW5kYXJkRnVs
bHNjcmVlbjsKKworLSAodm9pZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNWaWV3ICopdmlkZW9W
aWV3IHdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsK
Ky0gKHZvaWQpZW50ZXJQSVA7CistICh2b2lkKWV4aXRQSVA7CistICh2b2lkKWV4aXRQSVBBbmlt
YXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2Jq
QworCitAc3ludGhlc2l6ZSBwbGF5aW5nPV9wbGF5aW5nOworQHN5bnRoZXNpemUgdmlkZW9EaW1l
bnNpb25zPV92aWRlb0RpbWVuc2lvbnM7CitAc3ludGhlc2l6ZSBkaWRSZXF1ZXN0RXhpdGluZ1BJ
UD1fZGlkUmVxdWVzdEV4aXRpbmdQSVA7CitAc3ludGhlc2l6ZSBleGl0aW5nVG9TdGFuZGFyZEZ1
bGxzY3JlZW49X2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjsKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOihXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMqKXZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYworeworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyA9IHZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzsK
KyAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlCit7CisgICAgW19waXBWaWV3
Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIF9waXBWaWV3Q29udHJvbGxlciA9IG5p
bDsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBb
X3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZTpuaWxdOwor
ICAgIF92aWRlb1ZpZXdDb250YWluZXIgPSBuaWw7CisgICAgX3ZpZGVvVmlld0NvbnRhaW5lckNv
bnRyb2xsZXIgPSBuaWw7CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Ok5vdEluUElQOworICAg
IF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IE5POworICAgIF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxz
Y3JlZW4gPSBOTzsKKyAgICBfcmV0dXJuaW5nV2luZG93ID0gbmlsOworICAgIF9yZXR1cm5pbmdS
ZWN0ID0gTlNaZXJvUmVjdDsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgW3NlbGYg
aW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07CisgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYyA9IG51bGxwdHI7CisgICAgX3ZpZGVvRGltZW5zaW9ucyA9IE5TWmVyb1NpemU7Cit9CisK
Ky0gKHZvaWQpdXBkYXRlSXNQbGF5aW5nOihCT09MKWlzUGxheWluZyBuZXdQbGF5YmFja1JhdGU6
KGZsb2F0KXBsYXliYWNrUmF0ZQoreworICAgIF9wbGF5aW5nID0gaXNQbGF5aW5nICYmIHBsYXli
YWNrUmF0ZTsKKworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107
Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9EaW1lbnNpb25zOihOU1NpemUpdmlkZW9EaW1lbnNpb25z
Cit7CisgICAgX3ZpZGVvRGltZW5zaW9ucyA9IHZpZGVvRGltZW5zaW9uczsKKworICAgIFtfcGlw
Vmlld0NvbnRyb2xsZXIgc2V0QXNwZWN0UmF0aW86X3ZpZGVvRGltZW5zaW9uc107Cit9CisKKy0g
KHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6
KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBBU1NFUlQo
IV9waXBWaWV3Q29udHJvbGxlcik7CisgICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyQ29u
dHJvbGxlcik7CisgICAgQVNTRVJUKCFfdmlkZW9WaWV3Q29udGFpbmVyKTsKKworICAgIF9waXBW
aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jUElQVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgp
IGluaXRdKTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOnNlbGZdOworICAg
IFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0VXNlckNhblJlc2l6ZTpZRVNdOworICAgIFtfcGlwVmll
d0NvbnRyb2xsZXIgc2V0UGxheWluZzpfcGxheWluZ107CisgICAgW3NlbGYgc2V0VmlkZW9EaW1l
bnNpb25zOk5TRXF1YWxTaXplcyhfdmlkZW9EaW1lbnNpb25zLCBOU1plcm9TaXplKSA/IGZyYW1l
LnNpemUgOiBfdmlkZW9EaW1lbnNpb25zXTsKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5N
b2RlbCgpKQorICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6
VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCk7CisKKyAgICBfdmlkZW9WaWV3Q29udGFpbmVy
ID0gYWRvcHROUyhbW1dlYlZpZGVvVmlld0NvbnRhaW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpm
cmFtZV0pOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRl
bGVnYXRlOnNlbGZdOworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIGFkZFN1YnZpZXc6dmlkZW9W
aWV3XTsKKyAgICB2aWRlb1ZpZXcuZnJhbWUgPSBbX3ZpZGVvVmlld0NvbnRhaW5lciBib3VuZHNd
OworICAgIHZpZGVvVmlldy5hdXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwg
TlNWaWV3SGVpZ2h0U2l6YWJsZTsKKworICAgIF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVy
ID0gYWRvcHROUyhbW05TVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbX3ZpZGVv
Vmlld0NvbnRhaW5lckNvbnRyb2xsZXIgc2V0VmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdldCgp
XTsKKyAgICBbd2luZG93LmNvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3ZpZGVvVmlld0NvbnRhaW5l
ci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93QWJvdmUgcmVsYXRpdmVUbzpuaWxdOworfQorCist
ICh2b2lkKWVudGVyUElQCit7CisgICAgaWYgKF9waXBTdGF0ZSA9PSBQSVBTdGF0ZTo6SW5QSVAp
CisgICAgICAgIHJldHVybjsKKworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciB2
aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dD
b2xvckJsYWNrKTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxl
ckFzUGljdHVyZUluUGljdHVyZTpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07
CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6OkluUElQOworfQorCistICh2b2lkKWV4aXRQSVAK
K3sKKyAgICBpZiAoX3BpcFN0YXRlICE9IFBJUFN0YXRlOjpJblBJUCB8fCAhX3BpcFZpZXdDb250
cm9sbGVyIHx8ICFfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgX2RpZFJlcXVlc3RFeGl0aW5nUElQID0gWUVTOworICAgIFtfdmlkZW9WaWV3Q29u
dGFpbmVyQ29udHJvbGxlciB2aWV3XS5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0
Q29uc3RhbnRDb2xvcihrQ0dDb2xvckNsZWFyKTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIGRp
c21pc3NWaWV3Q29udHJvbGxlcjpfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlci5nZXQoKV07
CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6OkV4aXRpbmdQSVA7Cit9CisKKy0gKHZvaWQpZXhp
dFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJlY3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2lu
ZG93Cit7CisgICAgX3JldHVybmluZ1dpbmRvdyA9IHdpbmRvdzsKKyAgICBfcmV0dXJuaW5nUmVj
dCA9IHJlY3Q7CisgICAgCisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFJl
Y3Q6cmVjdF07CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRSZXBsYWNlbWVudFdpbmRvdzp3
aW5kb3ddOworCisgICAgW3NlbGYgZXhpdFBJUF07Cit9CisKKy8vIFdlYlZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlCisKKy0gKHZvaWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFp
bmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXIKK3sKKyAgICBp
ZiAoIV92aWRlb1ZpZXdDb250YWluZXIgfHwgIV9waXBWaWV3Q29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUX1VOVVNFRCh2aWRlb1ZpZXdDb250YWluZXIsIHZpZGVvVmll
d0NvbnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsKKworICAgIGlmIChfdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVv
RnVsbHNjcmVlbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMt
PnZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0Nv
bnRhaW5lciBib3VuZHNdKTsKK30KKworLSAodm9pZClzdXBlcnZpZXdEaWRDaGFuZ2VGb3JWaWRl
b1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRhaW5l
cgoreworICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5lciB8fCAhX3BpcFZpZXdDb250cm9sbGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQodmlkZW9WaWV3Q29udGFpbmVyID09IF92
aWRlb1ZpZXdDb250YWluZXIpOworCisgICAgaWYgKCFbdmlkZW9WaWV3Q29udGFpbmVyIGlzRGVz
Y2VuZGFudE9mOltfcGlwVmlld0NvbnRyb2xsZXIgdmlld11dKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBPbmNlIHRoZSB2aWV3IGlzIG1vdmVkIGludG8gdGhlIHBpcCB2aWV3LCBtYWtlIHN1
cmUgaXQgcmVzaXplcyB3aXRoIHRoZSBwaXAgdmlldy4KKyAgICB2aWRlb1ZpZXdDb250YWluZXIu
ZnJhbWUgPSBbdmlkZW9WaWV3Q29udGFpbmVyIHN1cGVydmlld10uYm91bmRzOworICAgIHZpZGVv
Vmlld0NvbnRhaW5lci5hdXRvcmVzaXppbmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNW
aWV3SGVpZ2h0U2l6YWJsZTsKK30KKworLy8gUElQVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQorCist
IChCT09MKXBpcFNob3VsZENsb3NlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFT
U0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmICgh
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyB8fCAhX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy0+dmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJuIFlF
UzsKKworICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKKyAgICBfdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpLT5mdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKKworICAgIHJldHVybiBOTzsKK30KKworLSAodm9pZClw
aXBEaWRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CisKKyAgICBpZiAoX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1
bGxzY3JlZW5Nb2RlbCgpICYmIF92aWRlb1ZpZXdDb250YWluZXIgJiYgX3JldHVybmluZ1dpbmRv
dyAmJiAhTlNFcXVhbFJlY3RzKF9yZXR1cm5pbmdSZWN0LCBOU1plcm9SZWN0KSkgeworICAgICAg
ICBbTlNBbmltYXRpb25Db250ZXh0IHJ1bkFuaW1hdGlvbkdyb3VwOl4oTlNBbmltYXRpb25Db250
ZXh0ICpjb250ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0LmFsbG93c0ltcGxpY2l0QW5pbWF0
aW9uID0gTk87CisgICAgICAgICAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRGcmFtZTpfcmV0
dXJuaW5nUmVjdF07CisgICAgICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52
aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoW192aWRlb1ZpZXdDb250
YWluZXIgYm91bmRzXSk7CisgICAgICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKKworICAgICAgICAgICAgW1tf
cmV0dXJuaW5nV2luZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWlu
ZXIuZ2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsKKyAgICAg
ICAgfSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIH0KKworICAgIGlmIChfdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjKSB7CisgICAgICAgIGlmICghc2VsZi5pc0V4aXRpbmdUb1N0YW5k
YXJkRnVsbHNjcmVlbikgeworICAgICAgICAgICAgaWYgKFZpZGVvRnVsbHNjcmVlbk1vZGVsKiB2
aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVv
RnVsbHNjcmVlbk1vZGVsKCkpIHsKKyAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5Nb2Rl
bC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZU5vbmUpOworICAgICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5z
ZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIF92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKworICAgICAgICBpZiAoVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIGZ1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IF92aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkp
CisgICAgICAgICAgICBmdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVu
KCk7CisgICAgfQorfQorCistICh2b2lkKXBpcEFjdGlvblBsYXk6KFBJUFZpZXdDb250cm9sbGVy
ICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xs
ZXIpOworCisgICAgaWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxheSgp
OworfQorCistICh2b2lkKXBpcEFjdGlvblBhdXNlOihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAor
eworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKKwor
ICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjICYmIF92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIF92aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7Cit9CisK
Ky0gKHZvaWQpcGlwQWN0aW9uU3RvcDooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7CisKKyAgICBpZiAo
IV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBfdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAgICAgICBwbGF5
YmFja1Nlc3Npb25Nb2RlbC0+cGF1c2UoKTsKKworICAgIC8vIEZJWE1FIDI1MDk2MTcwOiBTaG91
bGQgYW5pbWF0ZSBvbmx5IGlmIHRoZSBwYWdlIHdpdGggdGhlIHZpZGVvIGlzIHVub2JzY3VyZWQu
IEZvciBub3csIGFsd2F5cyBjbG9zZSB3aXRob3V0IGFuaW1hdGlvbi4KKyAgICBbc2VsZiBleGl0
UElQXTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAgIDogbV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQoreworICAgIEFTU0VS
VChtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSk7Cisg
ICAgYXV0byBtb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Np
b25Nb2RlbCgpOworICAgIG1vZGVsLT5hZGRDbGllbnQoKnRoaXMpOworICAgIFt2aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOm1vZGVsLT5pc1BsYXlpbmcoKSBu
ZXdQbGF5YmFja1JhdGU6bW9kZWwtPnBsYXliYWNrUmF0ZSgpXTsKK30KKworVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKCkKK3sKKyAgICBp
ZiAobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisg
ICAgICAgIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgp
LT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0VmlkZW9GdWxsc2NyZWVuTW9k
ZWwoVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKQoreworICAgIGlmIChtX3ZpZGVvRnVsbHNj
cmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQo
KnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKKyAgICBpZiAobV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+YWRk
Q2xpZW50KCp0aGlzKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNl
dFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKiBvYnNlcnZlcikKK3sKKyAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2Vy
dmVyOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0TW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8
IG1vZGU7CisgICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX21vZGUgPSBuZXdNb2RlOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2Rl
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFyTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSAm
IH5tb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAg
ICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9k
ZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZChi
b29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIFt2aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDKCkgdXBkYXRlSXNQbGF5aW5nOmlzUGxheWluZyBuZXdQbGF5YmFja1Jh
dGU6cGxheWJhY2tSYXRlXTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpCit7CisgICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UtPmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWNPYmpDICpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMoKQoreworICAgIGlmICghbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VPYmpDKQorICAgICAgICBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBhZG9w
dE5TKFtbV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyBhbGxvY10gaW5pdFdpdGhW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6dGhpc10pOworCisgICAgcmV0dXJuIG1fd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQy5nZXQoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbihOU1ZpZXcmIGxheWVySG9zdGVkVmlldywg
Y29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3csIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1Bp
Y3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxsc2NyZWVuKCVwKSwgaW5pdGlhbFJlY3Q6eyVk
LCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwLCBtb2RlOiVkIiwgdGhpcywgaW5pdGlhbFJl
Y3QueCgpLCBpbml0aWFsUmVjdC55KCksIGluaXRpYWxSZWN0LndpZHRoKCksIGluaXRpYWxSZWN0
LmhlaWdodCgpLCBwYXJlbnRXaW5kb3csIG1vZGUpOworCisgICAgVU5VU0VEX1BBUkFNKGFsbG93
c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7CisgICAgQVNTRVJUKG1vZGUgPT0gSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisKKyAg
ICBtX21vZGUgPSBtb2RlOworCisgICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSBz
ZXRVcFBJUEZvclZpZGVvVmlldzombGF5ZXJIb3N0ZWRWaWV3IHdpdGhGcmFtZTooTlNSZWN0KWlu
aXRpYWxSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107CisKKyAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7Cisg
ICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKKyAgICB9KTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVyRnVsbHNjcmVlbigpCit7
CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmVudGVy
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkgeworICAgICAg
ICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGVudGVyUElQXTsKKworI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICAgICAgW21fcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBp
Y3R1cmVBY3RpdmU6WUVTXTsKKyNlbmRpZgorCisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRF
bnRlckZ1bGxzY3JlZW4oKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjpleGl0RnVsbHNjcmVlbihjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QsIE5TV2luZG93
ICpwYXJlbnRXaW5kb3cpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuKCVwKSwgZmluYWxSZWN0OnslZCwgJWQsICVkLCAl
ZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGZpbmFsUmVjdC54KCksIGZpbmFsUmVjdC55KCks
IGZpbmFsUmVjdC53aWR0aCgpLCBmaW5hbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7CisK
KyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJ
blBpY3R1cmVBY3RpdmU6Tk9dOworI2VuZGlmCisKKyAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChmaW5hbFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBbbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOworICAgIGVsc2UKKyAgICAgICAgW21fd2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OmZpbmFsUmVj
dCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIExPRyhGdWxsc2Ny
ZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRB
bmltYXRpb25Ub01vZGUoJXApLCBtb2RlOiVkIiwgdGhpcywgbW9kZSk7CisKKyNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFBpY3R1cmVJblBpY3R1cmVBY3Rp
dmU6Tk9dOworI2VuZGlmCisKKyAgICBpZiAoW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQyBkaWRSZXF1ZXN0RXhpdGluZ1BJUF0pCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
aXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4gPSBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkOworICAgIC8vIE9uIE1hYywgc3RhbmRh
cmQgZnVsbHNjcmVlbiBpcyBoYW5kbGVkIGJ5IHRoZSBGdWxsc2NyZWVuIEFQSSBhbmQgbm90IGJ5
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuCisgICAgLy8gSnVzdCB1cGRhdGUgbV9tb2RlIGRpcmVj
dGx5IHRvIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
IGluIHRoYXQgY2FzZSB0byBrZWVwCisgICAgLy8gbV9tb2RlIGluIHN5bmMgd2l0aCB0aGUgZnVs
bHNjcmVlbiBtb2RlIGluIEhUTUxNZWRpYUVsZW1lbnQuCisgICAgaWYgKGlzRXhpdGluZ1RvU3Rh
bmRhcmRGdWxsc2NyZWVuKQorICAgICAgICBtX21vZGUgPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsKKworICAgIFttX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgc2V0RXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOmlzRXhpdGluZ1Rv
U3RhbmRhcmRGdWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VP
YmpDIGV4aXRQSVBdOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xl
YW51cEZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIFttX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07CisgICAgW21fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlRnVsbHNjcmVlblN0YXRlXTsKKworICAg
IGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSglcCkiLCB0aGlzKTsKKwor
ICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBuaWw7CisgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgPSBuaWw7CisKKyAgICBjbGVhbnVwRnVsbHNjcmVlbigpOworCisgICAgW21fd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBpbnZhbGlkYXRlXTsKKyAgICBtX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU9iakMgPSBuaWw7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECitz
dGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKK3sKKyAgICByZXR1cm4gdmFs
ID8gInRydWUiIDogImZhbHNlIjsKK30KKyNlbmRpZgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3Qg
SW50UmVjdCYgaW5saW5lUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdykKK3sKKyAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cHJlcGFyZWRUb1JldHVy
blRvSW5saW5lKCVwKSwgdmlzaWJsZTolcywgaW5saW5lUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBw
YXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpLCBpbmxpbmVSZWN0Lngo
KSwgaW5saW5lUmVjdC55KCksIGlubGluZVJlY3Qud2lkdGgoKSwgaW5saW5lUmVjdC5oZWlnaHQo
KSwgcGFyZW50V2luZG93KTsKKworICAgIGlmICghdmlzaWJsZSkgeworICAgICAgICBbbV93ZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQVNTRVJUKHBhcmVudFdpbmRvdyk7CisgICAgW21fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpaW5saW5lUmVj
dCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCit7
CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKCVwKSwgZW5hYmxlZDolcyIsIHRoaXMsIGJvb2xTdHJpbmcoZW5h
YmxlZCkpOworCisgICAgaWYgKGVuYWJsZWQgJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCisgICAgICAgIGV4aXRG
dWxsc2NyZWVuKEludFJlY3QoKSwgbmlsKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQoreworICAgIExPRyhGdWxs
c2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoJXAp
OiVzIiwgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbykpOworCisgICAgaWYgKCFoYXNWaWRlbykK
KyAgICAgICAgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworfQorCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNp
emUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCglcCksIHdpZHRoOiUuMGYs
IGhlaWdodDolLjBmIiwgdGhpcywgdmlkZW9EaW1lbnNpb25zLndpZHRoKCksIHZpZGVvRGltZW5z
aW9ucy5oZWlnaHQoKSk7CisKKyAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSB6ZXJvIHdo
ZW4gd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgdmlkZW8gdG8gYW5vdGhlci4gSWdub3Jl
IHplcm8gdmFsdWVzLgorICAgIGlmICghdmlkZW9EaW1lbnNpb25zLmlzWmVybygpKQorICAgICAg
ICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNldFZpZGVvRGltZW5zaW9uczp2
aWRlb0RpbWVuc2lvbnNdOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlUGljdHVyZUluUGljdHVyZSkgJiYgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2Jq
QyBpc1BsYXlpbmddOworfQorCitib29sIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCit7Cisg
ICAgcmV0dXJuIFBJUExpYnJhcnkoKSAmJiBnZXRQSVBWaWV3Q29udHJvbGxlckNsYXNzKCk7Cit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oCmluZGV4IDcwNWQ2M2I0OGE5OWFlZTFlODkz
OTY1NjI0MDEzMjI0M2U0NzJjNGQuLjc2N2YwMTI4NzMwMDAxYWI0ZDc5ZmU2MDNjMTIyNzc0YWY3
MTNlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlci5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW1wb3J0IDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIHN0cnVj
dCBNZWRpYVNlbGVjdGlvbk9wdGlvbjsKIH0KIApAQCAtNTgsMTAgKzU4LDEwIEBAIFdFQkNPUkVf
RVhQT1JUCiAgICAgZmxvYXQgX3JhdGU7CiAgICAgQk9PTCBfY2FuVG9nZ2xlUGxheWJhY2s7CiAK
LSAgICBSZWZQdHI8V2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBfd2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOworICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM+IF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiB9CiAK
LUBwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMqIHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqIHBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzsKIEBwcm9wZXJ0eSAocmVhZHdyaXRlKSBOU1RpbWVJbnRlcnZhbCBjb250ZW50RHVy
YXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFkd3JpdGUpIEFWVmFsdWVU
aW1pbmcgKnRpbWluZzsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1RpbWVJbnRlcnZhbCBzZWVr
VG9UaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4IDdiNDRhMDc0ZGYyOTgwNjJmODA1M2U5ZWJj
N2QzMTQ1MWU4MmU1ZTUuLmFiYmRiNTI3NzIwNzI0YWZlNTQ3MzExNzQwOGI0MzdhMDk0OTJhZTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXIubW0KQEAgLTI5LDggKzI5LDggQEAKICNpZiBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkgJiYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQogCiAjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgot
I2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW1wb3J0ICJXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgogI2ltcG9ydCA8d3RmL1Nv
ZnRMaW5raW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTksOCAr
NTksOCBAQCBAc3ludGhlc2l6ZSBjYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlOwogCiAtICh2b2lk
KWRlYWxsb2MKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAg
ICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9s
c01hbmFnZXIobnVsbHB0cik7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMp
CisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJv
bHNNYW5hZ2VyKG51bGxwdHIpOwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIApAQCAtOTMsNyAr
OTMsNyBAQCAtICh2b2lkKXNlZWtUb1RpbWU6KE5TVGltZUludGVydmFsKXRpbWUgdG9sZXJhbmNl
QmVmb3JlOihOU1RpbWVJbnRlcnZhbCl0b2xlcmFuYwogewogICAgIFVOVVNFRF9QQVJBTSh0b2xl
cmFuY2VCZWZvcmUpOwogICAgIFVOVVNFRF9QQVJBTSh0b2xlcmFuY2VBZnRlcik7Ci0gICAgX3dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+
c2Vla1RvVGltZSh0aW1lKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWVrVG9UaW1lKHRpbWUpOwogfQogCiAtICh2b2lkKWNhbmNl
bFRodW1ibmFpbEFuZEF1ZGlvQW1wbGl0dWRlU2FtcGxlR2VuZXJhdGlvbgpAQCAtMTI1LDEyICsx
MjUsMTIgQEAgLSAoQk9PTCljYW5CZWdpblRvdWNoQmFyU2NydWJiaW5nCiAKIC0gKHZvaWQpYmVn
aW5Ub3VjaEJhclNjcnViYmluZwogewotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
YmVnaW5TY3J1YmJpbmcoKTsKIH0KIAogLSAodm9pZCllbmRUb3VjaEJhclNjcnViYmluZwogewot
ICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPmVuZFNjcnViYmluZygpOworICAg
IF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPmVuZFNjcnViYmluZygpOwogfQogCiAjaWYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTMwMApAQCAtMTkyLDcgKzE5Miw3
IEBAIC0gKHZvaWQpc2V0Q3VycmVudEF1ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbjoo
QVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0CiAgICAgaWYgKGF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb24gJiYgX2F1ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMpCiAgICAgICAgIGlu
ZGV4ID0gW19hdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zIGluZGV4T2ZPYmplY3Q6
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbl07CiAKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWxlY3RBdWRpb01lZGlhT3B0
aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOworICAgIF9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/IGluZGV4IDogVUlOVDY0X01BWCk7
CiB9CiAKIC0gKE5TQXJyYXk8QVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uICo+ICopbGVn
aWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zCkBAIC0yMjIsNyArMjIyLDcgQEAgLSAo
dm9pZClzZXRDdXJyZW50TGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246KEFWVG91
Y2hCYXJNZWRpYVNlbGVjdGlvbk8KICAgICBpZiAobGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
ICYmIF9sZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMpCiAgICAgICAgIGluZGV4
ID0gW19sZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMgaW5kZXhPZk9iamVjdDps
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25dOwogCi0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0TGVnaWJsZU1lZGlh
T3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOworICAgIF9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5UNjRf
TUFYKTsKIH0KIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAw
CkBAIC0yOTIsNDcgKzI5Miw0NyBAQCAtICh2b2lkKXNldExlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4OihOU1VJbnRlZ2VyKXNlbGVjdGVkSW5kZXgKICAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZv
cktleTpAImN1cnJlbnRMZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbiJdOwogfQog
Ci0tIChXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYworLSAoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKilwbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMKIHsKLSAgICByZXR1cm4gX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5nZXQoKTsKKyAgICByZXR1cm4gX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5nZXQo
KTsKIH0KIAotLSAodm9pZClzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6KFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
CistICh2b2lkKXNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzooUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjKilwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKIHsKLSAgICBpZiAoX3dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9PSB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMpCisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPT0gcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoX3dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYykKLSAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CisgICAgaWYgKF9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxwdHIpOwogCi0gICAgX3dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9IHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjID0gcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOwogCi0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMp
Ci0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKHNlbGYpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
KQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRy
b2xzTWFuYWdlcihzZWxmKTsKIH0KIAogLSAodm9pZCl0b2dnbGVQbGF5YmFjawogewotICAgIGlm
IChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF93ZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnRvZ2ds
ZVBsYXlTdGF0ZSgpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCisgICAg
ICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkt
PnRvZ2dsZVBsYXlTdGF0ZSgpOwogfQogCiAtICh2b2lkKXNldFBsYXlpbmc6KEJPT0wpcGxheWlu
ZwogewotICAgIGlmICghX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyB8fCAhX3dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAg
ICBpZiAoIV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgfHwgIV9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEJPT0wgaXNDdXJyZW50bHlQbGF5aW5nID0gc2VsZi5wbGF5aW5nOwogICAgIGlmICghaXND
dXJyZW50bHlQbGF5aW5nICYmIHBsYXlpbmcpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKKyAgICAgICAg
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGxh
eSgpOwogICAgIGVsc2UgaWYgKGlzQ3VycmVudGx5UGxheWluZyAmJiAhcGxheWluZykKLSAgICAg
ICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKS0+cGF1c2UoKTsKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKIH0KIAogLSAoQk9PTClpc1BsYXlpbmcKIHsK
LSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBy
ZXR1cm4gX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwoKS0+aXNQbGF5aW5nKCk7CisgICAgaWYgKF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMgJiYgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwo
KSkKKyAgICAgICAgcmV0dXJuIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPmlzUGxheWluZygpOwogCiAgICAgcmV0dXJuIE5POwogfQpAQCAtMzQw
LDggKzM0MCw4IEBAIC0gKEJPT0wpaXNQbGF5aW5nCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDEzMDAKIC0gKHZvaWQpdG9nZ2xlUGljdHVyZUluUGljdHVyZQogewot
ICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjICYmIF93ZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkt
PnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYyAmJiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25N
b2RlbCgpKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbCgpLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODEyNGMx
ZTFiZmUwMTViZDI5YzBlZjA3YTcwZTM3MWMxOWI1MWU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0KLSNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIK
LSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1PQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWw7Ci0KLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYyBmaW5hbAotICAgIDogcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJs
aWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gY3JlYXRlKFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjKCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQot
Ci0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbCB7IH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQo
ZG91YmxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdl
ZChkb3VibGUgLypjdXJyZW50VGltZSovLCBkb3VibGUgLyphbmNob3JUaW1lKi8pIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAvKmlzUGxheWluZyovLCBm
bG9hdCAvKnBsYXliYWNrUmF0ZSovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
ZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIC8qbGFzdE1vZGlm
aWVkVGltZSovLCBkb3VibGUgLypsaXZlVXBkYXRlSW50ZXJ2YWwqLykgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2Vs
ZWN0ZWRJbmRleCovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIC8qb3B0aW9ucyovLCB1aW50NjRfdCAvKnNlbGVjdGVkSW5kZXgqLykgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2
NF90KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlv
bkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBs
b2NhbGl6ZWREZXZpY2VOYW1lICovKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
aW52YWxpZGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5h
Z2VyKCk7Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIgKik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tDb250cm9s
c01hbmFnZXIgKnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0jZW5kaWYKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGJlZ2luU2NydWJiaW5nKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRTY3J1YmJpbmcoKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7IG51bGxwdHIgfTsKLSNpZiBFTkFCTEUoV0VC
X1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFn
ZXIgKm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgIHsgbnVsbHB0ciB9OwotCi0gICAgdm9pZCB1
cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVudFRpbWUsIGRv
dWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxheWluZyk7Ci0j
ZW5kaWYKLQotfTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0NGE2MWM1MGUwMTYyYzNjMTBlNzE3NWQ4MWM2ZjJhMjQ4
NGNlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1t
CisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgi
Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkK
LQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNpbXBvcnQgIkludFJlY3QuaCIKLSNpbXBvcnQgIk1l
ZGlhU2VsZWN0aW9uT3B0aW9uLmgiCi0jaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIK
LSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWVGltZS5oPgotCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1T
T0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElP
TkFMKEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
PiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZShXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCYgbW9kZWwpCi17Ci0gICAgYXV0byBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyhtb2RlbCkpOwotICAgIG1vZGVsLmFkZENsaWVu
dChpbnRlcmZhY2UpOwotICAgIHJldHVybiBpbnRlcmZhY2U7Ci19Ci0KLVdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYzo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKLSAgICA6IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwoJm1v
ZGVsKQotewotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6On5XZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMoKQotewotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVy
YXRpb24pCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAg
IFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpOwotCi0gICAgY29udHJvbHNNYW5hZ2VyLmNvbnRlbnREdXJhdGlvbiA9
IGR1cmF0aW9uOwotCi0gICAgLy8gRklYTUU6IFdlIHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9u
IHRoYXQgcGxheWJhY2sgaXMgcmVhZHksIGJ1dCB0aGF0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVl
LgotICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7Ci0gICAgY29udHJv
bHNNYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IFlFUzsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGR1cmF0aW9uKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hv
clRpbWUpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAg
IFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpOwotICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5n
KGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lLCBjb250cm9sc01hbmFnZXIucmF0ZSwgY29udHJvbHNN
YW5hZ2VyLnBsYXlpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudFRpbWUpOwot
ICAgIFVOVVNFRF9QQVJBTShhbmNob3JUaW1lKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0
IHBsYXliYWNrUmF0ZSkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCi0gICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgW2NvbnRyb2xzTWFuYWdlciBzZXRSYXRlOmlz
UGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKLSAgICBbY29udHJvbHNNYW5hZ2VyIHNldFBs
YXlpbmc6aXNQbGF5aW5nXTsKLSAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWlu
ZyhtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVu
dFRpbWUoKSA6IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSwg
cGxheWJhY2tSYXRlLCBpc1BsYXlpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXNQbGF5
aW5nKTsKLSAgICBVTlVTRURfUEFSQU0ocGxheWJhY2tSYXRlKTsKLSNlbmRpZgotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6YmVnaW5TY3J1YmJpbmcoKQotewotI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICB1cGRhdGVQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlclRpbWluZyhtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID8gbV9wbGF5YmFj
a1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRpbWUoKSA6IDAsIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNz
SW5mb10gc3lzdGVtVXB0aW1lXSwgMCwgZmFsc2UpOwotI2VuZGlmCi0gICAgd2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWwoKS0+YmVnaW5TY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWM6OmVuZFNjcnViYmluZygpCi17Ci0gICAgd2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwoKS0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0aW1l
UmFuZ2VzVG9BcnJheShjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQotewotICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gcmFuZ2VBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5n
ZXMubGVuZ3RoKCk7IGkrKykgewotICAgICAgICBjb25zdCBQbGF0Zm9ybVRpbWVSYW5nZXMmIHJh
bmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCk7Ci0gICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0g
Q01UaW1lUmFuZ2VNYWtlKHRvQ01UaW1lKHJhbmdlcy5zdGFydChpKSksIHRvQ01UaW1lKHJhbmdl
cy5lbmQoaSkpKTsKLSAgICAgICAgW3JhbmdlQXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVl
V2l0aENNVGltZVJhbmdlOnJhbmdlXV07Ci0gICAgfQotCi0gICAgcmV0dXJuIHJhbmdlQXJyYXk7
Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnNlZWth
YmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUsIGRv
dWJsZSkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAg
W3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnRpbWVSYW5n
ZXNUb0FycmF5KHRpbWVSYW5nZXMpLmdldCgpXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRp
bWVSYW5nZXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSNp
ZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3aXRo
U2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0
ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0j
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFtwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6b3B0aW9ucyB3
aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV07
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICBVTlVTRURfUEFSQU0oc2Vs
ZWN0ZWRJbmRleCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAg
W3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4OnNl
bGVjdGVkSW5kZXhdOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbcGxheUJhY2tDb250
cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4
XTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOwotI2VuZGlmCi19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCi0gICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0Q2Fu
VG9nZ2xlUGljdHVyZUluUGljdHVyZTohZW5hYmxlZF07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShlbmFibGVkKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYzo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5yZW1vdmVDbGll
bnQoKnRoaXMpOwotICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRyOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2Vy
KCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgcGxh
eUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQotCi1XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpCi17
Ci0gICAgcmV0dXJuIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXI7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpzZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihXZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlcikKLXsKLSAgICBtX3BsYXliYWNrQ29udHJv
bHNNYW5hZ2VyID0gbWFuYWdlcjsKLQotICAgIGlmICghbWFuYWdlciB8fCAhbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9y
VGltZVN0YW1wID0gIVttYW5hZ2VyIHJhdGVdID8gTkFOIDogW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwotICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVU
aW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOm1fcGxheWJhY2tTZXNzaW9u
TW9kZWwtPmN1cnJlbnRUaW1lKCkgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRl
OjBdOwotICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmR1cmF0
aW9uKCk7Ci0gICAgbWFuYWdlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBtYW5h
Z2VyLmhhc0VuYWJsZWRBdWRpbyA9IGR1cmF0aW9uID4gMDsKLSAgICBtYW5hZ2VyLmhhc0VuYWJs
ZWRWaWRlbyA9IGR1cmF0aW9uID4gMDsKLSAgICBtYW5hZ2VyLnJhdGUgPSBtX3BsYXliYWNrU2Vz
c2lvbk1vZGVsLT5pc1BsYXlpbmcoKSA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBsYXliYWNr
UmF0ZSgpIDogMC47Ci0gICAgbWFuYWdlci5zZWVrYWJsZVRpbWVSYW5nZXMgPSB0aW1lUmFuZ2Vz
VG9BcnJheShtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZWVrYWJsZVJhbmdlcygpKS5nZXQoKTsK
LSAgICBtYW5hZ2VyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwotICAgIG1hbmFnZXIucGxheWlu
ZyA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpOwotICAgIFttYW5hZ2VyIHNl
dEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNV
SW50ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgo
KSldOwotICAgIFttYW5hZ2VyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6bV9wbGF5
YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxl
Y3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwt
PmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSldOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYzo6dXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91
YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwg
Ym9vbCBpc1BsYXlpbmcpCi17Ci0gICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFn
ZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIGlmICghbWFuYWdlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwgKm1vZGVsID0gd2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwoKTsKLSAgICBpZiAoIW1vZGVsKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBkb3VibGUgZWZmZWN0aXZlQW5jaG9yVGltZSA9IHBsYXliYWNrUmF0ZSA/IGFuY2hvclRp
bWUgOiBOQU47Ci0gICAgZG91YmxlIGVmZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0
ZTsKLSAgICBpZiAoIWlzUGxheWluZwotICAgICAgICB8fCBtb2RlbC0+aXNTY3J1YmJpbmcoKQot
ICAgICAgICB8fCAobWFuYWdlci5yYXRlID4gMCAmJiBtb2RlbC0+cGxheWJhY2tTdGFydGVkVGlt
ZSgpID49IGN1cnJlbnRUaW1lKQotICAgICAgICB8fCAobWFuYWdlci5yYXRlIDwgMCAmJiBtb2Rl
bC0+cGxheWJhY2tTdGFydGVkVGltZSgpIDw9IGN1cnJlbnRUaW1lKSkKLSAgICAgICAgZWZmZWN0
aXZlUGxheWJhY2tSYXRlID0gMDsKLQotICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVU
aW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lIGFuY2hv
clRpbWVTdGFtcDplZmZlY3RpdmVBbmNob3JUaW1lIHJhdGU6ZWZmZWN0aXZlUGxheWJhY2tSYXRl
XTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
LQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE4NTFiMmNlM2EyZTllNDU1OWExMjEzNjA0ZDEyNjBiZmU5MzBiNGQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgi
Ci0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW5jbHVkZSAi
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1PQkpDX0NMQVNTIE5T
V2luZG93OwotT0JKQ19DTEFTUyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDOwot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRTaXplOwot
Y2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOwotY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7Ci0KLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYwotICAgIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50Ci0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAg
LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+IHsKLQot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiBj
cmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7Ci0gICAgfQotICAg
IHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYygpOwotICAgIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKiB3ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWw7IH0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCog
d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsgfQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwqKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogd2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcjsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqKTsKLQotICAg
IC8vIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wg
IGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKLQotICAg
IC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2
aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBsYXllckhvc3RlZFZpZXcs
IGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93LCBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVudGVyRnVsbHNj
cmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50
UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRh
dGUoKTsKLSAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKSB7IH0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUs
IGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci0KLSAgICBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQotICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQot
ICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gbW9kZTsgfQotICAgIHZvaWQgc2V0TW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIHZvaWQg
Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0K
LSAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKLQot
ICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUo
KSB7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Y09iakMgKnZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKTsKLQotcHJpdmF0ZToKLSAgICBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjJik7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gbV9wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2U7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwgeyBudWxscHRyIH07Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIqIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OwotICAgIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX21vZGUgeyBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07Ci0gICAgUmV0YWluUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakM+IG1fd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlT2JqQzsKLX07Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmU2NDJjOGVjMGNiZjk0NzVlODQ5
NmRmN2M4NzAyYzI0ODY1NTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw1NzMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgiCi0KLSNpZiBQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLQotI2ltcG9ydCAiQVZL
aXRTUEkuaCIKLSNpbXBvcnQgIkludFJlY3QuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBv
cnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgotI2ltcG9ydCAiUElQU1BJLmgiCi0jaW1wb3J0
ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oIgot
I2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgiCi0jaW1wb3J0ICJXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaCIKLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLQotI2ltcG9ydCAi
Q29yZU1lZGlhU29mdExpbmsuaCIKLQotU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktp
dCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKLQotU09G
VF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKFBJUCkKLVNPRlRfTElOS19DTEFTU19P
UFRJT05BTChQSVAsIFBJUFZpZXdDb250cm9sbGVyKQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotQGNsYXNzIFdlYlZpZGVvVmlld0NvbnRhaW5lcjsKLQotQHByb3RvY29sIFdlYlZpZGVv
Vmlld0NvbnRhaW5lckRlbGVnYXRlIDxOU09iamVjdD4KLQotLSAodm9pZClib3VuZHNEaWRDaGFu
Z2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmll
d0NvbnRhaW5lcjsKLS0gKHZvaWQpc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFp
bmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXI7Ci0KLUBlbmQK
LQotQGludGVyZmFjZSBXZWJWaWRlb1ZpZXdDb250YWluZXIgOiBOU1ZpZXcgewotICAgIGlkIDxX
ZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRl
OwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpZCA8V2ViVmlkZW9WaWV3Q29u
dGFpbmVyRGVsZWdhdGU+IHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOwotCi1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBXZWJWaWRlb1ZpZXdDb250YWluZXIKLQotQHN5bnRoZXNpemUgdmlkZW9W
aWV3Q29udGFpbmVyRGVsZWdhdGU9X3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOwotCi0tICh2
b2lkKXJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXplOihOU1NpemUpb2xkQm91bmRzU2l6ZQotewot
ICAgIFtzdXBlciByZXNpemVXaXRoT2xkU3VwZXJ2aWV3U2l6ZTpvbGRCb3VuZHNTaXplXTsKLQot
ICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9W
aWV3Q29udGFpbmVyOnNlbGZdOwotfQotCi0tICh2b2lkKXZpZXdEaWRNb3ZlVG9TdXBlcnZpZXcK
LXsKLSAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1N1cGVydmlld107Ci0KLSAgICBbX3ZpZGVvVmll
d0NvbnRhaW5lckRlbGVnYXRlIHN1cGVydmlld0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5l
cjpzZWxmXTsKLX0KLQotQGVuZAotCi1lbnVtIGNsYXNzIFBJUFN0YXRlIHsKLSAgICBOb3RJblBJ
UCwKLSAgICBJblBJUCwKLSAgICBFeGl0aW5nUElQCi19OwotCi1AaW50ZXJmYWNlIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgOiBOU09iamVjdCA8UElQVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZSwgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IHsKLSAgICBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM7Ci0gICAgTlNTaXplIF92aWRlb0RpbWVuc2lvbnM7Ci0gICAgUmV0YWluUHRyPFBJUFZp
ZXdDb250cm9sbGVyPiBfcGlwVmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPE5TVmlld0Nv
bnRyb2xsZXI+IF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyOwotICAgIFJldGFpblB0cjxX
ZWJWaWRlb1ZpZXdDb250YWluZXI+IF92aWRlb1ZpZXdDb250YWluZXI7Ci0gICAgUElQU3RhdGUg
X3BpcFN0YXRlOwotICAgIFJldGFpblB0cjxOU1dpbmRvdz4gX3JldHVybmluZ1dpbmRvdzsKLSAg
ICBOU1JlY3QgX3JldHVybmluZ1JlY3Q7Ci0gICAgQk9PTCBfcGxheWluZzsKLSAgICBCT09MIF9k
aWRSZXF1ZXN0RXhpdGluZ1BJUDsKLSAgICBCT09MIF9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3Jl
ZW47Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYzooV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil3ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7Ci0tICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3Rh
dGU7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0KLS8vIFRyYWNraW5nIHZpZGVvIHBsYXliYWNrIHN0
YXRlCi1AcHJvcGVydHkgKG5vbmF0b21pYykgTlNTaXplIHZpZGVvRGltZW5zaW9uczsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNQbGF5aW5nKSBCT09MIHBsYXlpbmc7Ci0tICh2b2lk
KXVwZGF0ZUlzUGxheWluZzooQk9PTClpc1BsYXlpbmcgbmV3UGxheWJhY2tSYXRlOihmbG9hdClw
bGF5YmFja1JhdGU7Ci0KLS8vIEhhbmRsaW5nIFBJUCB0cmFuc2l0aW9ucwotQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGRpZFJlcXVlc3RFeGl0aW5nUElQOwotQHByb3BlcnR5
IChub25hdG9taWMsIGdldHRlcj1pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikgQk9PTCBl
eGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47Ci0KLS0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1Zp
ZXc6KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3c7Ci0tICh2b2lkKWVudGVyUElQOwotLSAodm9pZClleGl0UElQOwot
LSAodm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpcmVjdCBpbldpbmRvdzooTlNX
aW5kb3cgKil3aW5kb3c7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hY09iakMKLQotQHN5bnRoZXNpemUgcGxheWluZz1fcGxheWluZzsKLUBz
eW50aGVzaXplIHZpZGVvRGltZW5zaW9ucz1fdmlkZW9EaW1lbnNpb25zOwotQHN5bnRoZXNpemUg
ZGlkUmVxdWVzdEV4aXRpbmdQSVA9X2RpZFJlcXVlc3RFeGl0aW5nUElQOwotQHN5bnRoZXNpemUg
ZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuPV9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YzooV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil3ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMg
PSB3ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM7Ci0gICAgX3BpcFN0YXRlID0gUElQU3Rh
dGU6Ok5vdEluUElQOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0
ZUZ1bGxzY3JlZW5TdGF0ZQotewotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6
bmlsXTsKLSAgICBfcGlwVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgW192aWRlb1ZpZXdDb250
YWluZXIgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0
VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU6bmlsXTsKLSAgICBfdmlkZW9WaWV3Q29udGFpbmVy
ID0gbmlsOwotICAgIF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyID0gbmlsOwotICAgIF9w
aXBTdGF0ZSA9IFBJUFN0YXRlOjpOb3RJblBJUDsKLSAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAg
PSBOTzsKLSAgICBfZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuID0gTk87Ci0gICAgX3JldHVy
bmluZ1dpbmRvdyA9IG5pbDsKLSAgICBfcmV0dXJuaW5nUmVjdCA9IE5TWmVyb1JlY3Q7Ci19Ci0K
LS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIFtzZWxmIGludmFsaWRhdGVGdWxsc2NyZWVuU3Rh
dGVdOwotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSBudWxscHRyOwotICAg
IF92aWRlb0RpbWVuc2lvbnMgPSBOU1plcm9TaXplOwotfQotCi0tICh2b2lkKXVwZGF0ZUlzUGxh
eWluZzooQk9PTClpc1BsYXlpbmcgbmV3UGxheWJhY2tSYXRlOihmbG9hdClwbGF5YmFja1JhdGUK
LXsKLSAgICBfcGxheWluZyA9IGlzUGxheWluZyAmJiBwbGF5YmFja1JhdGU7Ci0KLSAgICBbX3Bp
cFZpZXdDb250cm9sbGVyIHNldFBsYXlpbmc6X3BsYXlpbmddOwotfQotCi0tICh2b2lkKXNldFZp
ZGVvRGltZW5zaW9uczooTlNTaXplKXZpZGVvRGltZW5zaW9ucwotewotICAgIF92aWRlb0RpbWVu
c2lvbnMgPSB2aWRlb0RpbWVuc2lvbnM7Ci0KLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldEFz
cGVjdFJhdGlvOl92aWRlb0RpbWVuc2lvbnNdOwotfQotCi0tICh2b2lkKXNldFVwUElQRm9yVmlk
ZW9WaWV3OihOU1ZpZXcgKil2aWRlb1ZpZXcgd2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgaW5XaW5k
b3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgQVNTRVJUKCFfcGlwVmlld0NvbnRyb2xsZXIp
OwotICAgIEFTU0VSVCghX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIpOwotICAgIEFTU0VS
VCghX3ZpZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAgICBfcGlwVmlld0NvbnRyb2xsZXIgPSBhZG9w
dE5TKFthbGxvY1BJUFZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgW19waXBW
aWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVy
IHNldFVzZXJDYW5SZXNpemU6WUVTXTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFBsYXlp
bmc6X3BsYXlpbmddOwotICAgIFtzZWxmIHNldFZpZGVvRGltZW5zaW9uczpOU0VxdWFsU2l6ZXMo
X3ZpZGVvRGltZW5zaW9ucywgTlNaZXJvU2l6ZSkgPyBmcmFtZS5zaXplIDogX3ZpZGVvRGltZW5z
aW9uc107Ci0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKLSAg
ICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpOwotCi0gICAgX3ZpZGVvVmlld0NvbnRhaW5lciA9
IGFkb3B0TlMoW1tXZWJWaWRlb1ZpZXdDb250YWluZXIgYWxsb2NdIGluaXRXaXRoRnJhbWU6ZnJh
bWVdKTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRlb1ZpZXdDb250YWluZXJEZWxl
Z2F0ZTpzZWxmXTsKLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBhZGRTdWJ2aWV3OnZpZGVvVmll
d107Ci0gICAgdmlkZW9WaWV3LmZyYW1lID0gW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXTsK
LSAgICB2aWRlb1ZpZXcuYXV0b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dpZHRoU2l6YWJsZSB8IE5T
Vmlld0hlaWdodFNpemFibGU7Ci0KLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciA9
IGFkb3B0TlMoW1tOU1ZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW192aWRlb1Zp
ZXdDb250YWluZXJDb250cm9sbGVyIHNldFZpZXc6X3ZpZGVvVmlld0NvbnRhaW5lci5nZXQoKV07
Ci0gICAgW3dpbmRvdy5jb250ZW50VmlldyBhZGRTdWJ2aWV3Ol92aWRlb1ZpZXdDb250YWluZXIu
Z2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZlVG86bmlsXTsKLX0KLQotLSAo
dm9pZCllbnRlclBJUAotewotICAgIGlmIChfcGlwU3RhdGUgPT0gUElQU3RhdGU6OkluUElQKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgdmll
d10ubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gQ0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29s
b3JCbGFjayk7Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBwcmVzZW50Vmlld0NvbnRyb2xsZXJB
c1BpY3R1cmVJblBpY3R1cmU6X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIuZ2V0KCldOwot
ICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpJblBJUDsKLX0KLQotLSAodm9pZClleGl0UElQCi17
Ci0gICAgaWYgKF9waXBTdGF0ZSAhPSBQSVBTdGF0ZTo6SW5QSVAgfHwgIV9waXBWaWV3Q29udHJv
bGxlciB8fCAhX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKLSAgICBbX3ZpZGVvVmlld0NvbnRh
aW5lckNvbnRyb2xsZXIgdmlld10ubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gQ0dDb2xvckdldENv
bnN0YW50Q29sb3Ioa0NHQ29sb3JDbGVhcik7Ci0gICAgW19waXBWaWV3Q29udHJvbGxlciBkaXNt
aXNzVmlld0NvbnRyb2xsZXI6X3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIuZ2V0KCldOwot
ICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpFeGl0aW5nUElQOwotfQotCi0tICh2b2lkKWV4aXRQ
SVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dwotewotICAgIF9yZXR1cm5pbmdXaW5kb3cgPSB3aW5kb3c7Ci0gICAgX3JldHVybmluZ1JlY3Qg
PSByZWN0OwotICAgIAotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UmVwbGFjZW1lbnRSZWN0
OnJlY3RdOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UmVwbGFjZW1lbnRXaW5kb3c6d2lu
ZG93XTsKLQotICAgIFtzZWxmIGV4aXRQSVBdOwotfQotCi0vLyBXZWJWaWRlb1ZpZXdDb250YWlu
ZXJEZWxlZ2F0ZQotCi0tICh2b2lkKWJvdW5kc0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5l
cjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyCi17Ci0gICAgaWYg
KCFfdmlkZW9WaWV3Q29udGFpbmVyIHx8ICFfcGlwVmlld0NvbnRyb2xsZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVF9VTlVTRUQodmlkZW9WaWV3Q29udGFpbmVyLCB2aWRlb1ZpZXdD
b250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUo
W192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7Ci19Ci0KLS0gKHZvaWQpc3VwZXJ2aWV3RGlk
Q2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRl
b1ZpZXdDb250YWluZXIKLXsKLSAgICBpZiAoIV92aWRlb1ZpZXdDb250YWluZXIgfHwgIV9waXBW
aWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHZpZGVvVmlld0Nv
bnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsKLQotICAgIGlmICghW3ZpZGVvVmlld0Nv
bnRhaW5lciBpc0Rlc2NlbmRhbnRPZjpbX3BpcFZpZXdDb250cm9sbGVyIHZpZXddXSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gT25jZSB0aGUgdmlldyBpcyBtb3ZlZCBpbnRvIHRoZSBwaXAg
dmlldywgbWFrZSBzdXJlIGl0IHJlc2l6ZXMgd2l0aCB0aGUgcGlwIHZpZXcuCi0gICAgdmlkZW9W
aWV3Q29udGFpbmVyLmZyYW1lID0gW3ZpZGVvVmlld0NvbnRhaW5lciBzdXBlcnZpZXddLmJvdW5k
czsKLSAgICB2aWRlb1ZpZXdDb250YWluZXIuYXV0b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dpZHRo
U2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGU7Ci19Ci0KLS8vIFBJUFZpZXdDb250cm9sbGVy
RGVsZWdhdGUKLQotLSAoQk9PTClwaXBTaG91bGRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIgKilw
aXAKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7
Ci0KLSAgICBpZiAoIV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgfHwgIV93ZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KCkpCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBZ
RVM7Ci0gICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIoKS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7Ci0KLSAg
ICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpcGlwRGlkQ2xvc2U6KFBJUFZpZXdDb250cm9sbGVy
ICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xs
ZXIpOwotCi0gICAgaWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSAmJiBf
dmlkZW9WaWV3Q29udGFpbmVyICYmIF9yZXR1cm5pbmdXaW5kb3cgJiYgIU5TRXF1YWxSZWN0cyhf
cmV0dXJuaW5nUmVjdCwgTlNaZXJvUmVjdCkpIHsKLSAgICAgICAgW05TQW5pbWF0aW9uQ29udGV4
dCBydW5BbmltYXRpb25Hcm91cDpeKE5TQW5pbWF0aW9uQ29udGV4dCAqY29udGV4dCkgewotICAg
ICAgICAgICAgY29udGV4dC5hbGxvd3NJbXBsaWNpdEFuaW1hdGlvbiA9IE5POwotICAgICAgICAg
ICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0RnJhbWU6X3JldHVybmluZ1JlY3RdOwotICAgICAg
ICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10p
OwotICAgICAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7Ci0KLSAgICAgICAgICAgIFtbX3JldHVy
bmluZ1dpbmRvdyBjb250ZW50Vmlld10gYWRkU3VidmlldzpfdmlkZW9WaWV3Q29udGFpbmVyLmdl
dCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxhdGl2ZVRvOm5pbF07Ci0gICAgICAgIH0g
Y29tcGxldGlvbkhhbmRsZXI6bmlsXTsKLSAgICB9Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYykgewotICAgICAgICBpZiAoIXNlbGYuaXNFeGl0aW5nVG9TdGFuZGFy
ZEZ1bGxzY3JlZW4pIHsKLSAgICAgICAgICAgIGlmIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCog
dmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKSB7Ci0gICAgICAgICAgICAgICAgdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5N
b2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0KLSAgICAg
ICAgaWYgKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBmdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgPSBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcigpKQotICAgICAgICAgICAgZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgIH0KLX0KLQotLSAodm9pZClwaXBBY3Rpb25Q
bGF5OihQSVBWaWV3Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBw
aXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKLX0KLQotLSAodm9pZClwaXBB
Y3Rpb25QYXVzZTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NFUlRfVU5VU0VE
KHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwotfQotCi0tICh2
b2lkKXBpcEFjdGlvblN0b3A6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJU
X1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwotCi0gICAgaWYgKCFfd2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsID0gX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAg
ICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBhdXNlKCk7Ci0KLSAgICAvLyBGSVhNRSAyNTA5NjE3
MDogU2hvdWxkIGFuaW1hdGUgb25seSBpZiB0aGUgcGFnZSB3aXRoIHRoZSB2aWRlbyBpcyB1bm9i
c2N1cmVkLiBGb3Igbm93LCBhbHdheXMgY2xvc2Ugd2l0aG91dCBhbmltYXRpb24uCi0gICAgW3Nl
bGYgZXhpdFBJUF07Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyhX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkK
LSAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSkKLXsKLSAgICBBU1NFUlQobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCkpOwotICAgIGF1dG8gbW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKLSAgICBtb2RlbC0+YWRkQ2xpZW50KCp0
aGlzKTsKLSAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWlu
Zzptb2RlbC0+aXNQbGF5aW5nKCkgbmV3UGxheWJhY2tSYXRlOm1vZGVsLT5wbGF5YmFja1JhdGUo
KV07Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6fldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYygpCi17Ci0gICAgaWYgKG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsK
LSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKiBtb2RlbCkKLXsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAg
ICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbW9kZWw7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciog
b2JzZXJ2ZXIpCi17Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldE1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUgfCBt
b2RlOwotICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9tb2RlID0gbmV3TW9kZTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAg
ICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fbW9kZSk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpjbGVhck1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBtX21vZGUg
JiB+bW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0g
ICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX21v
ZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6cmF0ZUNoYW5n
ZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsKLSAgICBbdmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzppc1BsYXlpbmcgbmV3UGxheWJh
Y2tSYXRlOnBsYXliYWNrUmF0ZV07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQotewotICAgIG1fcGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlLT5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLX0KLQotV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjT2JqQyAqV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjp2aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQykKLSAgICAgICAgbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VP
YmpDID0gYWRvcHROUyhbW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgYWxsb2Nd
IGluaXRXaXRoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOnRoaXNdKTsKLQotICAgIHJl
dHVybiBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMuZ2V0KCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBs
YXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFy
ZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCi17Ci0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbigl
cCksIGluaXRpYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCwgbW9kZTol
ZCIsIHRoaXMsIGluaXRpYWxSZWN0LngoKSwgaW5pdGlhbFJlY3QueSgpLCBpbml0aWFsUmVjdC53
aWR0aCgpLCBpbml0aWFsUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93LCBtb2RlKTsKLQotICAg
IFVOVVNFRF9QQVJBTShhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOwotICAgIEFTU0VS
VChtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpOwotCi0gICAgbV9tb2RlID0gbW9kZTsKLQotICAgIFt2aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VPYmpDKCkgc2V0VXBQSVBGb3JWaWRlb1ZpZXc6JmxheWVySG9zdGVkVmlldyB3
aXRoRnJhbWU6KE5TUmVjdClpbml0aWFsUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOwotCi0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJv
dGVjdGVkVGhpcywgdGhpc10gewotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxs
c2NyZWVuKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjplbnRlckZ1bGxzY3JlZW4oKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAg
ICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVBpY3R1cmVJblBpY3R1cmUpIHsKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlT2JqQyBlbnRlclBJUF07Ci0KLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01B
TkFHRVIpCi0gICAgICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250
cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOllFU107Ci0jZW5kaWYKLQot
ICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW4oY29u
c3QgSW50UmVjdCYgZmluYWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQotewotICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNj
cmVlbiglcCksIGZpbmFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0
aGlzLCBmaW5hbFJlY3QueCgpLCBmaW5hbFJlY3QueSgpLCBmaW5hbFJlY3Qud2lkdGgoKSwgZmlu
YWxSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOwotCi0jaWYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQotICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxh
eUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKLSNl
bmRpZgotCi0gICAgaWYgKFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZGlkUmVx
dWVzdEV4aXRpbmdQSVBdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZmluYWxSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0
UElQXTsKLSAgICBlbHNlCi0gICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9i
akMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDpmaW5hbFJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93
XTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2Ny
ZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKCVw
KSwgbW9kZTolZCIsIHRoaXMsIG1vZGUpOwotCi0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQotICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tD
b250cm9sc01hbmFnZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKLSNlbmRpZgot
Ci0gICAgaWYgKFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZGlkUmVxdWVzdEV4
aXRpbmdQSVBdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGlzRXhpdGluZ1RvU3RhbmRh
cmRGdWxsc2NyZWVuID0gbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVTdGFuZGFyZDsKLSAgICAvLyBPbiBNYWMsIHN0YW5kYXJkIGZ1bGxzY3JlZW4gaXMg
aGFuZGxlZCBieSB0aGUgRnVsbHNjcmVlbiBBUEkgYW5kIG5vdCBieSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLgotICAgIC8vIEp1c3QgdXBkYXRlIG1fbW9kZSBkaXJlY3RseSB0byBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCBpbiB0aGF0IGNhc2Ug
dG8ga2VlcAotICAgIC8vIG1fbW9kZSBpbiBzeW5jIHdpdGggdGhlIGZ1bGxzY3JlZW4gbW9kZSBp
biBIVE1MTWVkaWFFbGVtZW50LgotICAgIGlmIChpc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVl
bikKLSAgICAgICAgbV9tb2RlID0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlU3RhbmRhcmQ7Ci0KLSAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpD
IHNldEV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbjppc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNj
cmVlbl07Ci0gICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2Ny
ZWVuKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7Ci0KLSAgICBbbV93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU9iakMgaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZV07Ci0KLSAgICBpZiAobV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoJXApIiwgdGhpcyk7Ci0KLSAg
ICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmlsOwotICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyID0gbmlsOwotCi0gICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLQotICAgIFttX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaW52YWxpZGF0ZV07Ci0gICAgbV93ZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VPYmpDID0gbmlsOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3Rh
dGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCi17Ci0gICAgcmV0dXJuIHZhbCA/
ICJ0cnVlIiA6ICJmYWxzZSI7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0
IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5kb3cpCi17Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZSglcCksIHZpc2libGU6JXMsIGlubGluZVJlY3Q6eyVkLCAlZCwgJWQsICVk
fSwgcGFyZW50V2luZG93OiVwIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSwgaW5saW5lUmVj
dC54KCksIGlubGluZVJlY3QueSgpLCBpbmxpbmVSZWN0LndpZHRoKCksIGlubGluZVJlY3QuaGVp
Z2h0KCksIHBhcmVudFdpbmRvdyk7Ci0KLSAgICBpZiAoIXZpc2libGUpIHsKLSAgICAgICAgW21f
d2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChwYXJlbnRXaW5kb3cpOwotICAgIFttX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KWlubGlu
ZVJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBT
dHJpbmcmKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCglcCksIGVuYWJsZWQ6JXMiLCB0aGlzLCBi
b29sU3RyaW5nKGVuYWJsZWQpKTsKLQotICAgIGlmIChlbmFibGVkICYmIG1fbW9kZSA9PSBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQot
ICAgICAgICBleGl0RnVsbHNjcmVlbihJbnRSZWN0KCksIG5pbCk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykK
LXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6
aGFzVmlkZW9DaGFuZ2VkKCVwKTolcyIsIHRoaXMsIGJvb2xTdHJpbmcoaGFzVmlkZW8pKTsKLQot
ICAgIGlmICghaGFzVmlkZW8pCi0gICAgICAgIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRGltZW5zaW9u
c0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRGltZW5zaW9u
c0NoYW5nZWQoJXApLCB3aWR0aDolLjBmLCBoZWlnaHQ6JS4wZiIsIHRoaXMsIHZpZGVvRGltZW5z
aW9ucy53aWR0aCgpLCB2aWRlb0RpbWVuc2lvbnMuaGVpZ2h0KCkpOwotCi0gICAgLy8gV2lkdGgg
YW5kIGhlaWdodCBjYW4gYmUgemVybyB3aGVuIHdlIGFyZSB0cmFuc2l0aW9uaW5nIGZyb20gb25l
IHZpZGVvIHRvIGFub3RoZXIuIElnbm9yZSB6ZXJvIHZhbHVlcy4KLSAgICBpZiAoIXZpZGVvRGlt
ZW5zaW9ucy5pc1plcm8oKSkKLSAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
T2JqQyBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKLX0KLQotYm9vbCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxz
Y3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpICYmIFttX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaXNQbGF5aW5nXTsKLX0KLQotYm9vbCBzdXBw
b3J0c1BpY3R1cmVJblBpY3R1cmUoKQotewotICAgIHJldHVybiBQSVBMaWJyYXJ5KCkgJiYgZ2V0
UElQVmlld0NvbnRyb2xsZXJDbGFzcygpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDgxNmY2MGU3M2M3OGE3MWJmOTc1ZjdlMjJiYWQ3YTZkMDAxZWZk
ZGYuLjMyZDdlODgwMGU1MmI5YWI0MjljZjJkY2ExNjFiNmRjYjAwMDJlM2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE1NCw4ICsxNTQsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9
IFwKICAgICBXZWJQYXN0ZWJvYXJkUHJveHkgXAogICAgIFdlYlBheW1lbnRDb29yZGluYXRvciBc
CiAgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkgXAotICAgIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIgXAotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSBcCisgICAgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlciBcCisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IFwK
ICAgICBXZWJQcm9jZXNzIFwKICAgICBXZWJQcm9jZXNzQ29ubmVjdGlvbiBcCiAgICAgV2ViUHJv
Y2Vzc1Bvb2wgXApAQCAtMTY4LDggKzE2OCw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAg
IFdlYlNvY2tldFN0cmVhbSBcCiAgICAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIFwKICAgICBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSBcCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlciBcCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IFwKKyAgICBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyIFwKKyAgICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgXAogIwog
CiBTQ1JJUFRTID0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0KaW5kZXggNDQ4MTFhMDJkNGY0ZTY5MTkzZjQ5ZjI1M2M4Njk4OGYwMzA1YzljYi4u
YTJjMGFiMzg0ZDU2NWJiYWNlMjA2YjA1NTNhNTFlNWI0ZjNlZDZiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0xMjYsMTIgKzEyNiwx
MiBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9y
dCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgogI2ltcG9ydCAiVUlLaXRTUEku
aCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1wb3J0ICJXS1BERlZpZXcuaCIKICNpbXBvcnQg
IldLUGFzc3dvcmRWaWV3LmgiCiAjaW1wb3J0ICJXS1Njcm9sbFZpZXcuaCIKICNpbXBvcnQgIldL
V2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5LmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIl9XS1dlYlZpZXdQcmludEZvcm1hdHRlci5o
IgogI2ltcG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db3Jl
R3JhcGhpY3NTUEkuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU4MGY5NTc3
ZjA0NDMwY2NjNjRjZjMzY2VlN2U3YTg5Yjk1M2Y2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCkBA
IC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTZWxlY3Rpb25PcHRp
b24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVmlldy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxheWJhY2tTZXNzaW9uTW9kZWwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVSYW5nZXMu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCit0eXBlZGVmIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0IFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOworI2Vsc2UKK3R5cGVkZWYg
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIFBsYXRmb3JtUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQ
YWdlUHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CisKK2NsYXNzIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCBmaW5hbDogcHVibGljIFJlZkNvdW50ZWQ8UGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0PiwgcHVibGljIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsICB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ+IGNyZWF0ZShQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90
IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmly
dHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KCkgeyB9CisKKyAgICB2b2lkIGludmFs
aWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KKworICAgIC8vIFBsYXliYWNrU2Vzc2lv
bk1vZGVsCisgICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCYpZmluYWw7CisKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3Vi
bGUpOworICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSk7CisgICAgdm9pZCBidWZm
ZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSk7CisgICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hh
bmdlZChkb3VibGUpOworICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0
IHBsYXliYWNrUmF0ZSk7CisgICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoV2ViQ29yZTo6
VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKTsKKyAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCk7CisgICAg
dm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNv
cmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3QgaW5kZXgpOworICAg
IHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdl
YkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3QgaW5kZXgpOwor
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29u
c3QgU3RyaW5nJik7CisgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQoYm9vbCk7CisgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9vbCk7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKKworICAgIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dChQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIG1hbmFnZXIs
IHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAg
ICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBQbGF5
YmFja1Nlc3Npb25Nb2RlbAorICAgIHZvaWQgcGxheSgpIGZpbmFsOworICAgIHZvaWQgcGF1c2Uo
KSBmaW5hbDsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOworICAgIHZvaWQgYmVn
aW5TY3J1YmJpbmcoKSBmaW5hbDsKKyAgICB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFsOworICAg
IHZvaWQgc2Vla1RvVGltZShkb3VibGUpIGZpbmFsOworICAgIHZvaWQgZmFzdFNlZWsoZG91Ymxl
IHRpbWUpIGZpbmFsOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBmaW5hbDsKKyAg
ICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIGZpbmFsOworICAgIHZvaWQgZW5kU2Nhbm5p
bmcoKSBmaW5hbDsKKyAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpIGZp
bmFsOworICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90KSBmaW5hbDsK
KyAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSBmaW5hbDsKKyAgICB2b2lkIHRvZ2ds
ZU11dGVkKCkgZmluYWw7CisgICAgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKKworICAgIGRv
dWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wbGF5YmFj
a1N0YXJ0ZWRUaW1lOyB9CisgICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9kdXJhdGlvbjsgfQorICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fY3VycmVudFRpbWU7IH0KKyAgICBkb3VibGUgYnVmZmVyZWRUaW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9idWZmZXJlZFRpbWU7IH0KKyAgICBib29sIGlzUGxheWluZygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9CisgICAgYm9vbCBpc1NjcnViYmluZygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNTY3J1YmJpbmc7IH0KKyAgICBmbG9hdCBwbGF5YmFj
a1JhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BsYXliYWNrUmF0ZTsgfQorICAgIFJlZjxX
ZWJDb3JlOjpUaW1lUmFuZ2VzPiBzZWVrYWJsZVJhbmdlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fc2Vla2FibGVSYW5nZXMuY29weVJlZigpOyB9CisgICAgZG91YmxlIHNlZWthYmxlVGltZVJh
bmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlZWthYmxlVGlt
ZVJhbmdlc0xhc3RNb2RpZmllZFRpbWU7IH0KKyAgICBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFs
KCkgY29uc3QgeyByZXR1cm4gbV9saXZlVXBkYXRlSW50ZXJ2YWw7IH0KKyAgICBib29sIGNhblBs
YXlGYXN0UmV2ZXJzZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2FuUGxheUZhc3RSZXZlcnNl
OyB9CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnM7IH0KKyAgICB1aW50NjRfdCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7IH0KKyAgICBWZWN0
b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnM7IH0KKyAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4OyB9CisgICAgYm9vbCBleHRl
cm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5
YmFja0VuYWJsZWQ7IH0KKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlOyB9CisgICAgU3RyaW5nIGV4dGVybmFs
UGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRl
cm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsgfQorICAgIGJvb2wgd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3dpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkOyB9CisgICAgYm9vbCBpc011dGVkKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9tdXRlZDsgfQorCisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBtX21hbmFn
ZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7CisgICAgSGFzaFNldDxXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudCo+IG1fY2xpZW50czsKKyAgICBkb3VibGUgbV9wbGF5YmFj
a1N0YXJ0ZWRUaW1lIHsgMCB9OworICAgIGJvb2wgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNV
cGRhdGUgeyBmYWxzZSB9OworICAgIGRvdWJsZSBtX2R1cmF0aW9uIHsgMCB9OworICAgIGRvdWJs
ZSBtX2N1cnJlbnRUaW1lIHsgMCB9OworICAgIGRvdWJsZSBtX2J1ZmZlcmVkVGltZSB7IDAgfTsK
KyAgICBib29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNTY3J1YmJpbmcg
eyBmYWxzZSB9OworICAgIGZsb2F0IG1fcGxheWJhY2tSYXRlIHsgMCB9OworICAgIFJlZjxXZWJD
b3JlOjpUaW1lUmFuZ2VzPiBtX3NlZWthYmxlUmFuZ2VzIHsgV2ViQ29yZTo6VGltZVJhbmdlczo6
Y3JlYXRlKCkgfTsKKyAgICBkb3VibGUgbV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRU
aW1lIHsgMCB9OworICAgIGRvdWJsZSBtX2xpdmVVcGRhdGVJbnRlcnZhbCB7IDAgfTsKKyAgICBi
b29sIG1fY2FuUGxheUZhc3RSZXZlcnNlIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6
TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAg
dWludDY0X3QgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCB7IDAgfTsKKyAgICBWZWN0b3I8V2Vi
Q29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
czsKKyAgICB1aW50NjRfdCBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07CisgICAg
Ym9vbCBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgbV9leHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSB7IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9uZSB9OworICAg
IFN0cmluZyBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOworICAgIGJvb2wg
bV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX211
dGVkIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSA6
IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7CisgICAgdmlydHVh
bCB+UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUo
KTsKKworICAgIFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBjb250cm9sc01hbmFn
ZXJJbnRlcmZhY2UoKTsKKyAgICB2b2lkIHJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCk7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDsK
KyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OworCisgICAgZXhw
bGljaXQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYpOworICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmlu
YWw7CisKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dD4sIFJlZlB0cjxQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4+IE1vZGVs
SW50ZXJmYWNlVHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4
dElkKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gUGxheWJhY2tTZXNzaW9uTWFuYWdlcgorICAg
IHZvaWQgc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOworICAgIHZvaWQg
cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBjdXJyZW50VGlt
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBo
b3N0VGltZSk7CisgICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBzZWVrYWJsZVJhbmdlc1ZlY3RvckNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91Ymxl
Pj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRl
cnZhbCk7CisgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0No
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25P
cHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8
V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgbGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCk7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUsIFN0
cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOworICAgIHZvaWQgZHVy
YXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKTsKKyAgICB2
b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IHBsYXliYWNrU3RhcnRlZFRpbWUpOworICAgIHZvaWQgcmF0ZUNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpOworICAgIHZvaWQgaGFuZGxlQ29u
dHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90LCBTdHJpbmcpIGNvbnN0OworICAgIHZv
aWQgbXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7CisKKyAgICAv
LyBNZXNzYWdlcyB0byBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCisgICAgdm9pZCBwbGF5KHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdp
blNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCBlbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQg
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4
KTsKKyAgICB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQs
IHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgdm9pZCBzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOworCisgICAgV2Vi
UGFnZVByb3h5KiBtX3BhZ2U7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VU
dXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkIHsgMCB9OworICAgIEhhc2hDb3VudGVkU2V0PHVpbnQ2NF90PiBtX2NsaWVudENvdW50czsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8
fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhYzhmNzlk
MWIyNDU1YTc4MGY4MjI3YTNlZmE0OTE2OWZkMDVlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4KQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCittZXNzYWdlcyAtPiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkgeworICAgIFJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQp
CisgICAgQ3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCisgICAgQnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCisgICAgU2Vla2FibGVSYW5nZXNWZWN0
b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRv
dWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRl
SW50ZXJ2YWwpCisgICAgQ2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgdmFsdWUpCisgICAgQXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQorICAgIExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQorICAgIEF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQorICAgIExlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgRXh0ZXJuYWxQ
bGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVk
LCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKKyAgICBX
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIGRpc2FibGVkKQorICAgIER1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBkdXJhdGlvbikKKyAgICBQbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQorICAgIFJhdGVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKQorICAgIE11dGVk
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOworICAgIFNldFVwUGxheWJh
Y2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKQorICAgIENsZWFyUGxh
eWJhY2tDb250cm9sc01hbmFnZXIoKQorCisgICAgSGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJl
c3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgU3RyaW5nIGlkKQorfQorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJjMzk5ZThkYjg2YTkxNTA1YTJhZGQ2NjQ0ZGQ4
OTAzNjIyN2U3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQpAQCAtMCwwICsxLDU2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkuaCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQ
cm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNwcmFnbWEgbWFy
ayAtIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dAorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6YWRkQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQp
Cit7CisgICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xp
ZW50cy5hZGQoJmNsaWVudCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjpyZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVt
b3ZlKCZjbGllbnQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxh
eSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5wbGF5KG1fY29u
dGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBhdXNlKCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnBhdXNlKG1fY29udGV4
dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZVBsYXlT
dGF0ZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQ
bGF5U3RhdGUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6YmVnaW5TY3J1YmJpbmcoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+YmVnaW5TY3J1YmJpbmcobV9jb250ZXh0SWQpOworCisgICAgbV9pc1NjcnViYmlu
ZyA9IHRydWU7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY3J1
YmJpbmcoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZW5kU2Ny
dWJiaW5nKG1fY29udGV4dElkKTsKKworICAgIG1faXNTY3J1YmJpbmcgPSBmYWxzZTsKKyAgICBt
X3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGlzUGxheWluZygpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlZWtUb1RpbWUobV9jb250
ZXh0SWQsIHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6ZmFz
dFNlZWsoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5mYXN0U2VlayhtX2NvbnRleHRJZCwgdGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit7CisgICAgaWYgKG1fbWFu
YWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nRm9yd2FyZChtX2NvbnRleHRJ
ZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5n
QmFja3dhcmQoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YmVn
aW5TY2FubmluZ0JhY2t3YXJkKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OmVuZFNjYW5uaW5nKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAg
ICAgICBtX21hbmFnZXItPmVuZFNjYW5uaW5nKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qg
b3B0aW9uSWQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0
X3Qgb3B0aW9uSWQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5z
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGljdHVyZUlu
UGljdHVyZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0Ojp0b2dnbGVNdXRlZCgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT50b2dnbGVNdXRlZChtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpzZXRNdXRlZChib29sIG11dGVkKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+c2V0TXV0ZWQobV9jb250ZXh0SWQsIG11dGVkKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFu
Z2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQoreworICAgIG1fcGxheWJhY2tTdGFydGVk
VGltZSA9IHBsYXliYWNrU3RhcnRlZFRpbWU7CisgICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVl
ZHNVcGRhdGUgPSBmYWxzZTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit7CisgICAgbV9kdXJhdGlvbiA9IGR1
cmF0aW9uOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGll
bnQtPmR1cmF0aW9uQ2hhbmdlZChkdXJhdGlvbik7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lKQorewor
ICAgIG1fY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTsKKyAgICBhdXRvIGFuY2hvclRpbWUgPSBb
W05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07CisgICAgaWYgKG1fcGxh
eWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRlKQorICAgICAgICBwbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZChjdXJyZW50VGltZSk7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKKyAgICAgICAgY2xpZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hv
clRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YnVmZmVyZWRU
aW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIG1fYnVmZmVyZWRUaW1lID0g
YnVmZmVyZWRUaW1lOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBm
bG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAgbV9pc1BsYXlpbmcgPSBpc1BsYXlpbmc7CisgICAg
bV9wbGF5YmFja1JhdGUgPSBwbGF5YmFja1JhdGU7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBt
X2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFj
a1JhdGUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vla2FibGVS
YW5nZXNDaGFuZ2VkKFdlYkNvcmU6OlRpbWVSYW5nZXMmIHNlZWthYmxlUmFuZ2VzLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBtX3Nl
ZWthYmxlUmFuZ2VzID0gc2Vla2FibGVSYW5nZXM7CisgICAgbV9zZWVrYWJsZVRpbWVSYW5nZXNM
YXN0TW9kaWZpZWRUaW1lID0gbGFzdE1vZGlmaWVkVGltZTsKKyAgICBtX2xpdmVVcGRhdGVJbnRl
cnZhbCA9IGxpdmVVcGRhdGVJbnRlcnZhbDsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xp
ZW50cykKKyAgICAgICAgY2xpZW50LT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQoc2Vla2FibGVSYW5n
ZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wg
Y2FuUGxheUZhc3RSZXZlcnNlKQoreworICAgIG1fY2FuUGxheUZhc3RSZXZlcnNlID0gY2FuUGxh
eUZhc3RSZXZlcnNlOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICBjbGllbnQtPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBhdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgp
Cit7CisgICAgbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zOworICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBhdWRpb01lZGlhU2Vs
ZWN0ZWRJbmRleDsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAg
Y2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnMsIGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMsIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpCit7CisgICAgbV9s
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
czsKKyAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3Rl
ZEluZGV4OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNs
aWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucywgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRl
eCA9IHNlbGVjdGVkSW5kZXg7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykK
KyAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVk
SW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAg
bV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKKworICAgIGZvciAo
YXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwg
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgbG9jYWxpemVkTmFtZSkKK3sKKyAgICBtX2V4dGVybmFsUGxheWJhY2tFbmFi
bGVkID0gZW5hYmxlZDsKKyAgICBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlID0gdHlwZTsK
KyAgICBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lID0gbG9jYWxpemVkTmFt
ZTsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQt
PmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZE5hbWUpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpCit7
CisgICAgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCA9IHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICBjbGllbnQtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh3aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBtX211dGVkID0gbXV0ZWQ7Cisg
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+bXV0ZWRD
aGFuZ2VkKG11dGVkKTsKK30KKworI3ByYWdtYSBtYXJrIC0gUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5CisKK1JlZlB0cjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShwYWdlKSk7Cit9CisK
K1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
KFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IG1fcGFnZSgmcGFnZSkKK3sKKyAgICBtX3BhZ2Ut
PnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCAqdGhp
cyk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6flBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSgpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBp
bnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKCkKK3sKKyAgICBtX3BhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UgPSBudWxscHRyOworCisgICAgZm9y
IChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBSZWZQdHI8
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICAgICAgUmVmUHRyPFBsYXRm
b3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisgICAgICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlk
YXRlKCk7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV9jbGllbnRD
b3VudHMuY2xlYXIoKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2RlbElu
dGVyZmFjZVR1cGxlIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ+IG1vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpjcmVhdGUo
KnRoaXMsIGNvbnRleHRJZCk7CisgICAgUmVmPFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTo6Y3JlYXRl
KG1vZGVsKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdU
Rk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TW9k
ZWxJbnRlcmZhY2VUdXBsZSYgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVNb2Rl
bEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29u
dGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZh
Y2UoY29udGV4dElkKSk7Cit9CisKK1BsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmFk
ZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fY2xpZW50Q291
bnRzLmFkZChjb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgaWYg
KCFtX2NsaWVudENvdW50cy5yZW1vdmUoY29udGV4dElkKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuaW52YWxpZGF0ZSgpOworICAgIG1fY29udGV4
dE1hcC5yZW1vdmUoY29udGV4dElkKTsKK30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20g
UGxheWJhY2tTZXNzaW9uTWFuYWdlcgorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCA9PSBjb250ZXh0SWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCkKKyAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCk7CisKKyAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IGNv
bnRleHRJZDsKKyAgICBlbnN1cmVJbnRlcmZhY2UobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQp
LmVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOworICAgIGFkZENsaWVudEZvckNvbnRleHQobV9jb250
cm9sc01hbmFnZXJDb250ZXh0SWQpOworCisgICAgbV9wYWdlLT52aWRlb0NvbnRyb2xzTWFuYWdl
ckRpZENoYW5nZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dElkKTsKKyNlbmRp
ZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2xlYXJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlcigpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICghbV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUNsaWVudEZv
ckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAgIG1fY29udHJvbHNNYW5h
Z2VyQ29udGV4dElkID0gMDsKKyAgICBtX3BhZ2UtPnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hh
bmdlKCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJl
c2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCkucmVzZXRNZWRpYVN0YXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJs
ZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIFJl
ZjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CisgICAgZm9y
IChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdlcykgeworICAgICAgICBBU1NFUlQoaXNmaW5pdGUo
cmFuZ2UuZmlyc3QpKTsKKyAgICAgICAgQVNTRVJUKGlzZmluaXRlKHJhbmdlLnNlY29uZCkpOwor
ICAgICAgICBBU1NFUlQocmFuZ2Uuc2Vjb25kID49IHJhbmdlLmZpcnN0KTsKKyAgICAgICAgdGlt
ZVJhbmdlcy0+YWRkKHJhbmdlLmZpcnN0LCByYW5nZS5zZWNvbmQpOworICAgIH0KKworICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla2FibGVSYW5nZXNDaGFuZ2VkKHRpbWVSYW5nZXMsIGxh
c3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQodmFsdWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxl
Y3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlv
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJ
bmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpleHRlcm5hbFBs
YXliYWNrUHJvcGVydGllc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQs
IHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQoreworICAg
IFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlID0g
c3RhdGljX2Nhc3Q8UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlPih0YXJnZXRUeXBlKTsKKyAgICBBU1NFUlQodHlwZSA9PSBQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6VGFyZ2V0VHlwZUFpclBsYXkgfHwgdHlwZSA9PSBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFy
Z2V0VHlwZVRWT3V0IHx8IHR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVO
b25lKTsKKworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZXh0ZXJuYWxQbGF5YmFja0NoYW5n
ZWQoZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQoreworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVk
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om11dGVkQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5tdXRlZENoYW5nZWQobXV0ZWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0
aW9uKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZHVyYXRpb25DaGFuZ2VkKGR1cmF0
aW9uKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBsYXliYWNrU3Rh
cnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRl
ZFRpbWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5YmFja1N0YXJ0ZWRUaW1l
Q2hhbmdlZChwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlp
bmcsIGRvdWJsZSByYXRlKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmF0ZUNoYW5n
ZWQoaXNQbGF5aW5nLCByYXRlKTsKK30KKworCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgU3RyaW5nIGlkZW50aWZpZXIpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlm
IChjb250ZXh0SWQgPT0gbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAgICAgIG1fcGFn
ZS0+aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGlkZW50aWZpZXIpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oY29udGV4dElkKTsKKyAgICBVTlVTRURfUEFSQU0oaWRlbnRpZmll
cik7CisjZW5kaWYKK30KKworCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gUGxheWJhY2tTZXNz
aW9uTWFuYWdlcgorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxheSh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpQbGF5KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGF1c2UodWludDY0X3QgY29udGV4dElk
KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
UGF1c2UoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQor
eworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9n
Z2xlUGxheVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6QmVnaW5TY3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbmRTY3J1YmJpbmcodWludDY0X3QgY29u
dGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6RW5kU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSB0aW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6U2Vla1RvVGltZShjb250ZXh0SWQsIHRpbWUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmZhc3RTZWVr
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpGYXN0U2Vlayhjb250ZXh0SWQsIHRpbWUp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdG
b3J3YXJkKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OkJlZ2luU2Nhbm5pbmdCYWNrd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OkVuZFNjYW5uaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0QXVkaW9NZWRpYU9w
dGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihjb250
ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OlRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVNdXRlZCh1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpUb2dnbGVNdXRlZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNldE11dGVkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBtdXRlZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OlNldE11dGVkKGNvbnRleHRJZCwgbXV0ZWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlcXVlc3RD
b250cm9sbGVkRWxlbWVudElEKCkKK3sKKyAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0
SWQpCisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKworUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UqIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y29udHJvbHNNYW5hZ2VySW50
ZXJmYWNlKCkKK3sKKyAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFj
ZShtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisgICAgcmV0dXJuICZpbnRlcmZhY2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTc3MjU2ZTRhZWU4MWVkNDZjY2FkNmZkZTI2MDli
M2ViYzQ5NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQp
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQor
CisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVZpZXcuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxXZWJDb3Jl
L1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg+CisjZWxzZQorI2luY2x1ZGUgPFdlYkNv
cmUvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KElPUykKK3R5cGVkZWYgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgUGxh
dGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7CisjZWxzZQordHlwZWRlZiBXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgUGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsK
K2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKKworY2xh
c3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGZpbmFsCisgICAgOiBwdWJsaWMgUmVmQ291
bnRlZDxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6
VmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciAgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0PiBjcmVhdGUoVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiBtYW5h
Z2VyLCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCB1
aW50NjRfdCBjb250ZXh0SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQobWFuYWdlciwgcGxheWJhY2tTZXNzaW9uTW9kZWws
IGNvbnRleHRJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsg
fQorCisgICAgUGxhdGZvcm1WaWV3ICpsYXllckhvc3RWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9s
YXllckhvc3RWaWV3LmdldCgpOyB9CisgICAgdm9pZCBzZXRMYXllckhvc3RWaWV3KFJldGFpblB0
cjxQbGF0Zm9ybVZpZXc+JiYgbGF5ZXJIb3N0VmlldykgeyBtX2xheWVySG9zdFZpZXcgPSBXVEZN
b3ZlKGxheWVySG9zdFZpZXcpOyB9CisKK3ByaXZhdGU6CisgICAgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYsIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dCYsIHVpbnQ2NF90KTsKKworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisg
ICAgdm9pZCBhZGRDbGllbnQoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBm
aW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZpZGVvTGF5
ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmlkZW9M
YXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0K
KyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0KKworICAgIC8vIFZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyCisgICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkRXhpdEZ1
bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsK
KworICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOworICAgIFJlZjxQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1fcGxheWJhY2tTZXNzaW9uTW9kZWw7CisgICAg
dWludDY0X3QgbV9jb250ZXh0SWQ7CisgICAgUmV0YWluUHRyPFBsYXRmb3JtVmlldyAqPiBtX2xh
eWVySG9zdFZpZXc7CisgICAgSGFzaFNldDxXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCo+IG1fY2xpZW50czsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lv
bnM7CisgICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFn
ZVByb3h5JiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Jik7CisgICAgdmlydHVhbCB+Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKwor
ICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIGJvb2wgaGFzTW9k
ZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNv
bnN0OworICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUo
KSBjb25zdDsKKyAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7CisgICAgYm9v
bCBpc1Zpc2libGUoKSBjb25zdDsKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKQorICAgIGJvb2wgaXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVs
bHNjcmVlbigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKKworICAgIGV4cGxpY2l0IFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkm
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpIG92ZXJyaWRlOworCisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ+LCBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3Jl
YXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2RlbEludGVy
ZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICBQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSYgZW5zdXJlSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVp
bnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIKKyAgICB2b2lkIHNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlh
bFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUp
OworICAgIHZvaWQgc2V0SGFzVmlkZW8odWludDY0X3QgY29udGV4dElkLCBib29sKTsKKyAgICB2
b2lkIHNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYpOworICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6
OkludFJlY3QgZmluYWxSZWN0KTsKKyAgICB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0X3Qg
Y29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCk7Cisj
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisgICAg
dm9pZCBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUodWludDY0X3QgY29udGV4
dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
OworI2VuZGlmCisKKyAgICAvLyBNZXNzYWdlcyB0byBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisg
ICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNo
ZWRXaXRoTWVkaWEgPSBmYWxzZSk7CisgICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9h
dFJlY3QpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KTsKKyAgICB2b2lk
IGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKTsKKworICAgIFdlYlBhZ2VQ
cm94eSogbV9wYWdlOworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OworICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50
ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKKyAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdl
ckNvbnRleHRJZCB7IDAgfTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBpbnQ+IG1fY2xpZW50Q291
bnRzOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWZjM2I1MDQ3ZWY0N2FiYTE5NTcxZTc2NDNhMDcyZWNlODIyMGFlZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDM2IEBACisjIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKK21l
c3NhZ2VzIC0+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSB7CisgICAgU2V0SGFzVmlkZW8o
dWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQorICAgIFNldFZpZGVvRGltZW5zaW9u
cyh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMp
CisgICAgU2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3Qg
dmlkZW9MYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5n
U2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUp
CisgICAgRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFeGl0RnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQorICAg
IENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQcmVwYXJlZFRvUmV0
dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6Oklu
dFJlY3QgaW5saW5lUmVjdCkKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkKKyAgICBFeGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKKyNlbmRpZgorfQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNjYjliMjkyMTk2ODI2ODY0ZjAwOTEw
MDhmOTMwODk4ODhhMThhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpAQCAtMCwwICsxLDUyMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmgiCisKKyNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNp
bXBvcnQgIkFQSVVJQ2xpZW50LmgiCisjaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1w
b3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KKyNpbXBv
cnQgPFdlYkNvcmUvTWFjaFNlbmRSaWdodC5oPgorI2ltcG9ydCA8V2ViQ29yZS9NZWRpYVBsYXll
ckVudW1zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1F1YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGltZVJhbmdlcy5oPgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisK
KyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5LmgiCisjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2VuZGlmCisKK0BpbnRlcmZhY2UgV0tMYXll
ckhvc3RWaWV3IDogUGxhdGZvcm1WaWV3CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSB1
aW50MzJfdCBjb250ZXh0SUQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0xheWVySG9zdFZp
ZXcKKworI2lmIFBMQVRGT1JNKElPUykKKysgKENsYXNzKWxheWVyQ2xhc3MgeworICAgIHJldHVy
biBbQ0FMYXllckhvc3QgY2xhc3NdOworfQorI2Vsc2UKKy0gKENBTGF5ZXIgKiltYWtlQmFja2lu
Z0xheWVyCit7CisgICAgcmV0dXJuIFtbW0NBTGF5ZXJIb3N0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07Cit9CisjZW5kaWYKKworLSAodWludDMyX3QpY29udGV4dElEIHsKKyAgICByZXR1cm4g
W1tzZWxmIGxheWVySG9zdF0gY29udGV4dElkXTsKK30KKworLSAodm9pZClzZXRDb250ZXh0SUQ6
KHVpbnQzMl90KWNvbnRleHRJRCB7CisgICAgW1tzZWxmIGxheWVySG9zdF0gc2V0Q29udGV4dElk
OmNvbnRleHRJRF07Cit9CisKKy0gKENBTGF5ZXJIb3N0ICopbGF5ZXJIb3N0IHsKKyAgICByZXR1
cm4gKENBTGF5ZXJIb3N0ICopW3NlbGYgbGF5ZXJdOworfQorCitAZW5kCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmIFBMQVRGT1JNKElPUykg
JiYgIUhBVkUoQVZLSVQpCisKK1JlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYpCit7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpp
bnZhbGlkYXRlKCkKK3sKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhh
c01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3sKKworfQorCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQoreworCit9
CisjZWxzZQorCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQKKwor
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQo
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5JiBtYW5hZ2VyLCBQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQmIHBsYXliYWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAg
OiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKHBsYXli
YWNrU2Vzc2lvbk1vZGVsKQorICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQoreworfQorCitW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQo
KQoreworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YWRkQ2xpZW50KFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVu
dHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Cit9CisK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZW1vdmVDbGllbnQoVmlkZW9GdWxs
c2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRh
aW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVk
V2l0aE1lZGlhKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cmVx
dWVzdEZ1bGxzY3JlZW5Nb2RlKG1fY29udGV4dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSk7
Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAg
ICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckZyYW1lKG1fY29udGV4dElkLCBmcmFtZSk7Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0
eShXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit7
CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0xheWVyR3Jh
dml0eShtX2NvbnRleHRJZCwgZ3Jhdml0eSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1fbWFuYWdlcikK
KyAgICAgICAgbV9tYW5hZ2VyLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9jb250ZXh0SWQsIG1v
ZGUpOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6aXNWaXNpYmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9tYW5hZ2VyID8gbV9tYW5hZ2VyLT5pc1Zpc2libGUoKSA6
IGZhbHNlOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBG
dWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRp
ZFNldHVwRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZEV4aXRGdWxsc2Ny
ZWVuKG1fY29udGV4dElkKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5mdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUobV9jb250ZXh0SWQpOworfQorCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkKKworUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdl
LCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eShwYWdlLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpKTsKK30KKworVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5
JiBwYWdlLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSkKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAgICAsIG1fcGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5KHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkKK3sKKyAgICBtX3BhZ2UtPnBy
b2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCAqdGhpcyk7
Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6flZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSgpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpbnZh
bGlkYXRlKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlk
YXRlKCkKK3sKKyAgICBtX3BhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UgPSBudWxscHRyOworCisgICAgZm9yIChh
dXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICAgICAgUmVmUHRyPFBsYXRmb3Jt
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CisgICAgICAgIHN0ZDo6dGllKG1v
ZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRl
KCk7CisgICAgICAgIFttb2RlbC0+bGF5ZXJIb3N0VmlldygpIHJlbW92ZUZyb21TdXBlcnZpZXdd
OworICAgICAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0VmlldyhudWxscHRyKTsKKyAgICB9CisKKyAg
ICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVs
bHNjcmVlbigpCit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMo
KSkKKyAgICAgICAgc3RkOjpnZXQ8MT4odHVwbGUpLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKCk7Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAorewor
ICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAg
aWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+aGFzTW9kZShtb2RlKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVy
ZSgpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMo
KSkgeworICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5tYXlBdXRvbWF0aWNhbGx5U2hv
d1ZpZGVvUGljdHVyZUluUGljdHVyZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKQorYm9vbCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdAoreworICAgIGZvciAo
YXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6
Z2V0PDE+KHR1cGxlKS0+aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30K
KyNlbmRpZgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YXBwbGljYXRpb25E
aWRCZWNvbWVBY3RpdmUoKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAu
dmFsdWVzKCkpCisgICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+YXBwbGljYXRpb25EaWRCZWNv
bWVBY3RpdmUoKTsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVy
ZmFjZVR1cGxlIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lvbk1v
ZGVsID0gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCk7CisgICAgUmVmPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgcGxheWJhY2tTZXNzaW9uTW9kZWws
IGNvbnRleHRJZCk7CisgICAgYXV0byYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOworICAg
IFJlZjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZv
cm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OmNyZWF0ZShwbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UpOworICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5hZGRDbGllbnRGb3JDb250
ZXh0KGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldFZpZGVvRnVsbHNjcmVlbk1vZGVs
KCZtb2RlbC5nZXQoKSk7CisgICAgaW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcigmbW9kZWwuZ2V0KCkpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZN
b3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFj
ZVR1cGxlKCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7
CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1ZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dCYgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2Rl
bCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVN
b2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworUGxhdGZvcm1WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2UmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkLCAxKTsKKyAg
ICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlKys7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZW1vdmVD
bGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBBU1NFUlQobV9jbGll
bnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7CisKKyAgICBpbnQgY2xpZW50Q291bnQgPSBt
X2NsaWVudENvdW50cy5nZXQoY29udGV4dElkKTsKKyAgICBBU1NFUlQoY2xpZW50Q291bnQgPiAw
KTsKKyAgICBjbGllbnRDb3VudC0tOworCisgICAgaWYgKGNsaWVudENvdW50IDw9IDApIHsKKyAg
ICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPnJlbW92ZUNsaWVudEZvckNvbnRl
eHQoY29udGV4dElkKTsKKyAgICAgICAgbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCk7
CisgICAgICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fY2xpZW50Q291bnRzLnNldChjb250ZXh0SWQsIGNsaWVudENvdW50
KTsKK30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0dXBGdWxsc2NyZWVuV2l0
aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9y
LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2Ny
ZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlKQoreworICAgIEFTU0VSVCh2aWRl
b0xheWVySUQpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVs
OworICAgIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNl
OworCisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOworICAgIGFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKwor
ICAgIFJldGFpblB0cjxXS0xheWVySG9zdFZpZXc+IHZpZXcgPSBzdGF0aWNfY2FzdDxXS0xheWVy
SG9zdFZpZXcqPihtb2RlbC0+bGF5ZXJIb3N0VmlldygpKTsKKyAgICBpZiAoIXZpZXcpIHsKKyAg
ICAgICAgdmlldyA9IGFkb3B0TlMoW1tXS0xheWVySG9zdFZpZXcgYWxsb2NdIGluaXRdKTsKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgIFt2aWV3IHNldFdhbnRzTGF5ZXI6WUVTXTsKKyNlbmRp
ZgorICAgICAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0Vmlldyh2aWV3KTsKKyAgICB9CisgICAgW3Zp
ZXcgc2V0Q29udGV4dElEOnZpZGVvTGF5ZXJJRF07CisgICAgaWYgKGhvc3RpbmdEZXZpY2VTY2Fs
ZUZhY3RvciAhPSAxKSB7CisgICAgICAgIC8vIEludmVydCB0aGUgc2NhbGUgdHJhbnNmb3JtIGFk
ZGVkIGluIHRoZSBXZWJQcm9jZXNzIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vMTgzMTY1NDI+Lgor
ICAgICAgICBmbG9hdCBpbnZlcnNlU2NhbGUgPSAxIC8gaG9zdGluZ0RldmljZVNjYWxlRmFjdG9y
OworICAgICAgICBbW3ZpZXcgbGF5ZXJdIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3Jt
M0RNYWtlU2NhbGUoaW52ZXJzZVNjYWxlLCBpbnZlcnNlU2NhbGUsIDEpXTsKKyAgICB9CisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgVUlWaWV3ICpwYXJlbnRWaWV3ID0gZG93bmNhc3Q8UmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eT4oKm1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkucmVtb3Rl
TGF5ZXJUcmVlSG9zdCgpLnJvb3RMYXllcigpOworICAgIGludGVyZmFjZS0+c2V0dXBGdWxsc2Ny
ZWVuKCptb2RlbC0+bGF5ZXJIb3N0VmlldygpLCBpbml0aWFsUmVjdCwgcGFyZW50Vmlldywgdmlk
ZW9GdWxsc2NyZWVuTW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7CisjZWxzZQorICAgIElu
dFJlY3QgaW5pdGlhbFdpbmRvd1JlY3Q7CisgICAgbV9wYWdlLT5yb290Vmlld1RvV2luZG93KGlu
aXRpYWxSZWN0LCBpbml0aWFsV2luZG93UmVjdCk7CisgICAgaW50ZXJmYWNlLT5zZXR1cEZ1bGxz
Y3JlZW4oKm1vZGVsLT5sYXllckhvc3RWaWV3KCksIGluaXRpYWxXaW5kb3dSZWN0LCBtX3BhZ2Ut
PnBsYXRmb3JtV2luZG93KCksIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmUpOworI2VuZGlmCisgICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJl
SW5QaWN0dXJlRGlkQ2hhbmdlKG1fcGFnZSwgdmlkZW9GdWxsc2NyZWVuTW9kZSAmIE1lZGlhUGxh
eWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBoYXNWaWRlbykKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5o
YXNWaWRlb0NoYW5nZWQoaGFzVmlkZW8pOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgRmxv
YXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJ
ZCkudmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh2aWRlb0RpbWVuc2lvbnMpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElk
KTsKKyAgICBpbnRlcmZhY2UuZW50ZXJGdWxsc2NyZWVuKCk7CisKKyAgICAvLyBPbmx5IG9uZSBj
b250ZXh0IGNhbiBiZSBpbiBhIGdpdmVuIGZ1bGwgc2NyZWVuIG1vZGUgYXQgYSB0aW1lOgorICAg
IGZvciAoYXV0byYgY29udGV4dFBhaXIgOiBtX2NvbnRleHRNYXApIHsKKyAgICAgICAgYXV0byYg
b3RoZXJDb250ZXh0SWQgPSBjb250ZXh0UGFpci5rZXk7CisgICAgICAgIGlmIChjb250ZXh0SWQg
PT0gb3RoZXJDb250ZXh0SWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRv
JiBvdGhlckludGVyZmFjZSA9IHN0ZDo6Z2V0PDE+KGNvbnRleHRQYWlyLnZhbHVlKTsKKyAgICAg
ICAgaWYgKG90aGVySW50ZXJmYWNlLT5oYXNNb2RlKGludGVyZmFjZS5tb2RlKCkpKQorICAgICAg
ICAgICAgb3RoZXJJbnRlcmZhY2UtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQoreworI2lm
IFBMQVRGT1JNKElPUykKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNj
cmVlbihmaW5hbFJlY3QpOworI2Vsc2UKKyAgICBJbnRSZWN0IGZpbmFsV2luZG93UmVjdDsKKyAg
ICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3coZmluYWxSZWN0LCBmaW5hbFdpbmRvd1JlY3QpOwor
ICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsV2luZG93
UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyNlbmRpZgorfQorCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHRhcmdldE1vZGUpOwor
fQorI2VuZGlmCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjbGVhbnVwRnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuY2xlYW51cEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KQoreworICAgIG1fcGFnZS0+
ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2li
bGUsIGlubGluZVJlY3QpOworI2Vsc2UKKyAgICBJbnRSZWN0IGlubGluZVdpbmRvd1JlY3Q7Cisg
ICAgbV9wYWdlLT5yb290Vmlld1RvV2luZG93KGlubGluZVJlY3QsIGlubGluZVdpbmRvd1JlY3Qp
OworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnByZXBhcmVkVG9SZXR1cm5Ub0lubGlu
ZSh2aXNpYmxlLCBpbmxpbmVXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3JtV2luZG93KCkpOwor
I2VuZGlmCit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyCisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RnVsbHNjcmVl
bk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3sKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlJlcXVlc3RG
dWxsc2NyZWVuTW9kZShjb250ZXh0SWQsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRT
ZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkU2V0dXBGdWxsc2NyZWVuKGNvbnRl
eHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxz
Y3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5kaWRFeGl0
RnVsbHNjcmVlbigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
RW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbihjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPmRpZEVudGVyRnVsbHNjcmVl
bigpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZT4gaW50ZXJmYWNlOworCisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkg
PSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgW0NBVHJhbnNhY3Rp
b24gZmx1c2hdOworICAgIFttb2RlbC0+bGF5ZXJIb3N0VmlldygpIHJlbW92ZUZyb21TdXBlcnZp
ZXddOworICAgIG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkQ2xlYW51cEZ1bGxzY3Jl
ZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisKKyAgICBpbnRlcmZhY2UtPnNldE1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAg
cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworfQorCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworI2lm
IFBMQVRGT1JNKElPUykKKyAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBvcnQgPSBbVUlX
aW5kb3cgX3N5bmNocm9uaXplRHJhd2luZ0Fjcm9zc1Byb2Nlc3Nlc107CisjZWxzZQorICAgICAg
ICBNYWNoU2VuZFJpZ2h0IGZlbmNlU2VuZFJpZ2h0OworICAgICAgICBpZiAoRHJhd2luZ0FyZWFQ
cm94eSogZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCisgICAgICAgICAgICBm
ZW5jZVNlbmRSaWdodCA9IGRyYXdpbmdBcmVhLT5jcmVhdGVGZW5jZSgpOworICAgICAgICBtYWNo
X3BvcnRfbmFtZV90IGZlbmNlUG9ydCA9IGZlbmNlU2VuZFJpZ2h0LmxlYWtTZW5kUmlnaHQoKTsK
KyNlbmRpZgorCisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6U2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKGNvbnRleHRJZCwgZnJhbWUsIElQQzo6
QXR0YWNobWVudChmZW5jZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSksIG1fcGFnZS0+
cGFnZUlEKCkpOworICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6VmlkZW9G
dWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXllckdyYXZpdHlF
bnVtKGNvbnRleHRJZCwgKHVuc2lnbmVkKWdyYXZpdHkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIG1fcGFnZS0+dWlDbGllbnQoKS5oYXNWaWRl
b0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIG1vZGUgJiBNZWRpYVBsYXllckVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTW9kZUNoYW5n
ZWQoY29udGV4dElkLCBtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK2Jvb2wgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3BhZ2UtPmlzVmlld1Zpc2libGUoKSAmJiBtX3BhZ2UtPmlzSW5XaW5kb3coKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYm9vbCBpc1ZpZXdWaXNpYmxlID0gbV9wYWdl
LT5pc1ZpZXdWaXNpYmxlKCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCBpc1Zp
ZXdWaXNpYmxlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMzNiZTY1YTk4YzIxOWMwZGI5
MWQwMzI4NDI5NWVjZTVmNTQ3M2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJN
ZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL01lZGlhU2VsZWN0aW9uT3B0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9T
KQotdHlwZWRlZiBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCBQbGF0
Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKLSNlbHNlCi10eXBlZGVmIFdlYkNvcmU6
OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFn
ZVByb3h5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwotCi1jbGFzcyBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBSZWZDb3VudGVkPFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCAgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBt
YW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQobWFuYWdlciwgY29udGV4dElk
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCgp
IHsgfQotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9Ci0K
LSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAotICAgIHZvaWQgYWRkQ2xpZW50KFdlYkNv
cmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZW1v
dmVDbGllbnQoV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKWZpbmFsOwot
Ci0gICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKTsKLSAgICB2b2lkIGN1cnJlbnRUaW1l
Q2hhbmdlZChkb3VibGUpOwotICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpOwot
ICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlKTsKLSAgICB2b2lkIHJh
dGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpOwotICAgIHZvaWQg
c2Vla2FibGVSYW5nZXNDaGFuZ2VkKFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1v
ZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci0gICAgdm9pZCBjYW5QbGF5
RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
IG9wdGlvbnMsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIG9wdGlvbnMsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAg
dm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgbXV0
ZWRDaGFuZ2VkKGJvb2wpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ7Ci0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250
ZXh0SWQpCi0gICAgICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgICAgICAsIG1fY29udGV4
dElkKGNvbnRleHRJZCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWwKLSAgICB2b2lkIHBsYXkoKSBmaW5hbDsKLSAgICB2b2lkIHBhdXNlKCkgZmluYWw7Ci0g
ICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5hbDsKLSAgICB2b2lkIGJlZ2luU2NydWJiaW5n
KCkgZmluYWw7Ci0gICAgdm9pZCBlbmRTY3J1YmJpbmcoKSBmaW5hbDsKLSAgICB2b2lkIHNlZWtU
b1RpbWUoZG91YmxlKSBmaW5hbDsKLSAgICB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBmaW5h
bDsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgZmluYWw7Ci0gICAgdm9pZCBiZWdp
blNjYW5uaW5nQmFja3dhcmQoKSBmaW5hbDsKLSAgICB2b2lkIGVuZFNjYW5uaW5nKCkgZmluYWw7
Ci0gICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2
b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCkgZmluYWw7Ci0gICAgdm9pZCB0
b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkgZmluYWw7Ci0gICAgdm9pZCB0b2dnbGVNdXRlZCgpIGZp
bmFsOwotICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7Ci0KLSAgICBkb3VibGUgcGxheWJh
Y2tTdGFydGVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGxheWJhY2tTdGFydGVkVGlt
ZTsgfQotICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZHVyYXRp
b247IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2N1
cnJlbnRUaW1lOyB9Ci0gICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fYnVmZmVyZWRUaW1lOyB9Ci0gICAgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2lzUGxheWluZzsgfQotICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2lzU2NydWJiaW5nOyB9Ci0gICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9wbGF5YmFja1JhdGU7IH0KLSAgICBSZWY8V2ViQ29yZTo6VGlt
ZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlZWthYmxl
UmFuZ2VzLmNvcHlSZWYoKTsgfQotICAgIGRvdWJsZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9k
aWZpZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0
TW9kaWZpZWRUaW1lOyB9Ci0gICAgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGl2ZVVwZGF0ZUludGVydmFsOyB9Ci0gICAgYm9vbCBjYW5QbGF5RmFzdFJldmVy
c2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NhblBsYXlGYXN0UmV2ZXJzZTsgfQotICAgIFZl
Y3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
OyB9Ci0gICAgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4OyB9Ci0gICAgVmVjdG9yPFdlYkNvcmU6
Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOyB9Ci0gICAg
dWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsgfQotICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFj
a0VuYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVk
OyB9Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9l
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZTsgfQotICAgIFN0cmluZyBleHRlcm5hbFBsYXliYWNr
TG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5
YmFja0xvY2FsaXplZERldmljZU5hbWU7IH0KLSAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZDsgfQotICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbXV0
ZWQ7IH0KLQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogbV9tYW5hZ2VyOwot
ICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgZG91YmxlIG1fcGxheWJhY2tT
dGFydGVkVGltZSB7IDAgfTsKLSAgICBib29sIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBk
YXRlIHsgZmFsc2UgfTsKLSAgICBkb3VibGUgbV9kdXJhdGlvbiB7IDAgfTsKLSAgICBkb3VibGUg
bV9jdXJyZW50VGltZSB7IDAgfTsKLSAgICBkb3VibGUgbV9idWZmZXJlZFRpbWUgeyAwIH07Ci0g
ICAgYm9vbCBtX2lzUGxheWluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzU2NydWJiaW5nIHsg
ZmFsc2UgfTsKLSAgICBmbG9hdCBtX3BsYXliYWNrUmF0ZSB7IDAgfTsKLSAgICBSZWY8V2ViQ29y
ZTo6VGltZVJhbmdlcz4gbV9zZWVrYWJsZVJhbmdlcyB7IFdlYkNvcmU6OlRpbWVSYW5nZXM6OmNy
ZWF0ZSgpIH07Ci0gICAgZG91YmxlIG1fc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGlt
ZSB7IDAgfTsKLSAgICBkb3VibGUgbV9saXZlVXBkYXRlSW50ZXJ2YWwgeyAwIH07Ci0gICAgYm9v
bCBtX2NhblBsYXlGYXN0UmV2ZXJzZSB7IGZhbHNlIH07Ci0gICAgVmVjdG9yPFdlYkNvcmU6Ok1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBtX2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOwotICAgIHVp
bnQ2NF90IG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07Ci0gICAgVmVjdG9yPFdlYkNv
cmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBtX2xlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM7
Ci0gICAgdWludDY0X3QgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9OwotICAgIGJv
b2wgbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIG1fZXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUgeyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUgfTsK
LSAgICBTdHJpbmcgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZTsKLSAgICBi
b29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wg
bV9tdXRlZCB7IGZhbHNlIH07Ci19OwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
UHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYp
OwotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSgpOwotCi0gICAg
dm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICBQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSogY29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCk7Ci0gICAgdm9pZCByZXF1ZXN0Q29udHJv
bGxlZEVsZW1lbnRJRCgpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTsKLQotICAgIGV4cGxpY2l0IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eShXZWJQYWdlUHJveHkmKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwotCi0gICAgdHlwZWRlZiBzdGQ6OnR1cGxl
PFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBSZWZQdHI8UGxhdGZvcm1X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxlOwotICAgIE1v
ZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYg
ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBQbGF0Zm9ybVdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZSYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9p
ZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0KLSAgICAvLyBN
ZXNzYWdlcyBmcm9tIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLSAgICB2b2lkIHNldFVwUGxh
eWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKLSAgICB2b2lkIHJlc2V0TWVkaWFTdGF0
ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpOwotICAg
IHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZm
ZXJlZFRpbWUpOwotICAgIHZvaWQgc2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91
YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotICAgIHZv
aWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFs
dWUpOwotICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2
b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwot
ICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVk
RGV2aWNlTmFtZSk7Ci0gICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbik7Ci0gICAgdm9pZCBwbGF5YmFja1N0
YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0
ZWRUaW1lKTsKLSAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBp
c1BsYXlpbmcsIGRvdWJsZSByYXRlKTsKLSAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXNwb25zZSh1aW50NjRfdCwgU3RyaW5nKSBjb25zdDsKLSAgICB2b2lkIG11dGVkQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOwotCi0gICAgLy8gTWVzc2FnZXMgdG8g
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcgotICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0
SWQpOwotICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHRvZ2ds
ZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVnaW5TY3J1YmJpbmco
dWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0
aW1lKTsKLSAgICB2b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUp
OwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9p
ZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBp
bmRleCk7Ci0gICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7Ci0gICAgdm9pZCB0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQg
c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKLQotICAgIFdlYlBhZ2VQcm94eSog
bV9wYWdlOwotICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29u
dGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsK
LSAgICBIYXNoQ291bnRlZFNldDx1aW50NjRfdD4gbV9jbGllbnRDb3VudHM7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjYzNmE4MzI3M2ViOGUxNDRhNmExMDM1MDU1Nzg5YzIzZTA5MTI3ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KKysr
IC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eSB7Ci0gICAgUmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLSAgICBDdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
Y3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSkKLSAgICBCdWZmZXJlZFRpbWVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKLSAgICBTZWVrYWJsZVJhbmdl
c1ZlY3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJs
ZSwgZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVV
cGRhdGVJbnRlcnZhbCkKLSAgICBDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCB2YWx1ZSkKLSAgICBBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi0gICAgTGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8V2ViQ29yZTo6
TWVkaWFTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi0g
ICAgQXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCi0gICAgTGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLSAgICBFeHRl
cm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVu
YWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQot
ICAgIFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgZGlzYWJsZWQpCi0gICAgRHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIGR1cmF0aW9uKQotICAgIFBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCi0gICAgUmF0ZUNoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCi0gICAg
TXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7Ci0gICAgU2V0VXBQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgQ2xl
YXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpCi0KLSAgICBIYW5kbGVDb250cm9sbGVkRWxlbWVu
dElEUmVzcG9uc2UodWludDY0X3QgY29udGV4dElkLCBTdHJpbmcgaWQpCi19Ci0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGY5ZDMzZjlmYzA4OTNhODIwOTdhNWVlYzhmODZmNWFhODY1M2NmZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KKysrIC9kZXYvbnVsbApAQCAt
MSw1NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKLQotI2lmIFBMQVRGT1JNKElP
UykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
LQotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgPFdlYktp
dFN5c3RlbUludGVyZmFjZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dAotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YWRkQ2xpZW50KFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2Ns
aWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyZW1vdmVDbGllbnQoV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9jbGll
bnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6cGxheSgpCi17Ci0gICAg
aWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5wbGF5KG1fY29udGV4dElkKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnBhdXNlKCkKLXsKLSAgICBp
ZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnBhdXNlKG1fY29udGV4dElkKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgp
Ci17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQbGF5U3Rh
dGUobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6YmVnaW5TY3J1YmJpbmcoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+YmVnaW5TY3J1YmJpbmcobV9jb250ZXh0SWQpOwotCi0gICAgbV9pc1NjcnViYmluZyA9
IHRydWU7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY3J1
YmJpbmcoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZW5kU2Ny
dWJiaW5nKG1fY29udGV4dElkKTsKLQotICAgIG1faXNTY3J1YmJpbmcgPSBmYWxzZTsKLSAgICBt
X3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSA9IGlzUGxheWluZygpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkK
LXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNlZWtUb1RpbWUobV9j
b250ZXh0SWQsIHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAg
bV9tYW5hZ2VyLT5mYXN0U2VlayhtX2NvbnRleHRJZCwgdGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCi17Ci0gICAg
aWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nRm9yd2FyZCht
X2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpi
ZWdpblNjYW5uaW5nQmFja3dhcmQoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+YmVnaW5TY2FubmluZ0JhY2t3YXJkKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmVuZFNjYW5uaW5nKCkKLXsKLSAgICBpZiAo
bV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmVuZFNjYW5uaW5nKG1fY29udGV4dElkKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAg
ICAgbV9tYW5hZ2VyLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25J
ZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikK
LSAgICAgICAgbV9tYW5hZ2VyLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24obV9jb250ZXh0SWQs
IG9wdGlvbklkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnRv
Z2dsZVBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+dG9nZ2xlUGljdHVyZUluUGljdHVyZShtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVNdXRlZCgpCi17Ci0gICAgaWYg
KG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVNdXRlZChtX2NvbnRleHRJZCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZXRNdXRlZChib29s
IG11dGVkKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2V0TXV0
ZWQobV9jb250ZXh0SWQsIG11dGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0YXJ0
ZWRUaW1lKQotewotICAgIG1fcGxheWJhY2tTdGFydGVkVGltZSA9IHBsYXliYWNrU3RhcnRlZFRp
bWU7Ci0gICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgPSBmYWxzZTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3Vi
bGUgZHVyYXRpb24pCi17Ci0gICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIGZvciAoYXV0
byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmR1cmF0aW9uQ2hhbmdlZChk
dXJhdGlvbik7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpjdXJy
ZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lKQotewotICAgIG1fY3VycmVudFRpbWUg
PSBjdXJyZW50VGltZTsKLSAgICBhdXRvIGFuY2hvclRpbWUgPSBbW05TUHJvY2Vzc0luZm8gcHJv
Y2Vzc0luZm9dIHN5c3RlbVVwdGltZV07Ci0gICAgaWYgKG1fcGxheWJhY2tTdGFydGVkVGltZU5l
ZWRzVXBkYXRlKQotICAgICAgICBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChjdXJyZW50VGlt
ZSk7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50
LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3Vi
bGUgYnVmZmVyZWRUaW1lKQotewotICAgIG1fYnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1lOwot
ICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmJ1ZmZl
cmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFj
a1JhdGUpCi17Ci0gICAgbV9pc1BsYXlpbmcgPSBpc1BsYXlpbmc7Ci0gICAgbV9wbGF5YmFja1Jh
dGUgPSBwbGF5YmFja1JhdGU7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0g
ICAgICAgIGNsaWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFu
Z2VkKFdlYkNvcmU6OlRpbWVSYW5nZXMmIHNlZWthYmxlUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlm
aWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBtX3NlZWthYmxlUmFu
Z2VzID0gc2Vla2FibGVSYW5nZXM7Ci0gICAgbV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZp
ZWRUaW1lID0gbGFzdE1vZGlmaWVkVGltZTsKLSAgICBtX2xpdmVVcGRhdGVJbnRlcnZhbCA9IGxp
dmVVcGRhdGVJbnRlcnZhbDsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAg
ICAgICAgY2xpZW50LT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQoc2Vla2FibGVSYW5nZXMsIGxhc3RN
b2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxh
eUZhc3RSZXZlcnNlKQotewotICAgIG1fY2FuUGxheUZhc3RSZXZlcnNlID0gY2FuUGxheUZhc3RS
ZXZlcnNlOwotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGll
bnQtPmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY2FuUGxheUZhc3RSZXZlcnNlKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBhdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9ucywgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgpCi17
Ci0gICAgbV9hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zOwotICAgIG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0
ZWRJbmRleDsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xp
ZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoYXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnMsIGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIGxlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMsIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9s
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
czsKLSAgICBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3Rl
ZEluZGV4OwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNs
aWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucywgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9hdWRpb01lZGlhU2VsZWN0ZWRJ
bmRleCA9IHNlbGVjdGVkSW5kZXg7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKLSAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVj
dGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bGVn
aWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17
Ci0gICAgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKLQotICAg
IGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmxlZ2libGVN
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wg
ZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkTmFtZSkKLXsKLSAgICBtX2V4dGVybmFs
UGxheWJhY2tFbmFibGVkID0gZW5hYmxlZDsKLSAgICBtX2V4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlID0gdHlwZTsKLSAgICBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lID0g
bG9jYWxpemVkTmFtZTsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQotICAg
ICAgICBjbGllbnQtPmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2Fs
aXplZE5hbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6d2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQpCi17Ci0gICAgbV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCA9IHdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOwotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9j
bGllbnRzKQotICAgICAgICBjbGllbnQtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hh
bmdlZCh3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWxDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBt
X211dGVkID0gbXV0ZWQ7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAg
ICAgIGNsaWVudC0+bXV0ZWRDaGFuZ2VkKG11dGVkKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ci0KLVJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk+IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBh
Z2VQcm94eSYgcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eShwYWdlKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSkK
LSAgICA6IG1fcGFnZSgmcGFnZSkKLXsKLSAgICBtX3BhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCAqdGhpcyk7Ci19Ci0KLVdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6fldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSgp
Ci17Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnZhbGlkYXRlKCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
LXsKLSAgICBtX3BhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBtX3BhZ2UgPSBudWxscHRyOwotCi0gICAgZm9yIChhdXRv
JiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICAgICAgUmVmUHRyPFBsYXRmb3Jt
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPiBpbnRlcmZhY2U7Ci0gICAgICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7Ci0KLSAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlk
YXRlKCk7Ci0gICAgfQotCi0gICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRD
b3VudHMuY2xlYXIoKTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpNb2Rl
bEludGVyZmFjZVR1cGxlIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQotewotICAgIFJlZjxXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ+IG1vZGVsID0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7Ci0gICAgUmVmPFBsYXRmb3JtV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlPiBpbnRlcmZhY2UgPSBQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZTo6Y3JlYXRlKG1vZGVsKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUo
V1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9k
ZWxJbnRlcmZhY2VUdXBsZSgpKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShj
b250ZXh0SWQpOwotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1X
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAqc3Rk
OjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLVBsYXRm
b3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlJiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJu
ICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQo
dWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgaWYgKCFtX2NsaWVudENvdW50
cy5yZW1vdmUoY29udGV4dElkKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5zdXJlSW50ZXJm
YWNlKGNvbnRleHRJZCkuaW52YWxpZGF0ZSgpOwotICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29u
dGV4dElkKTsKLX0KLQotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcgotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2V0VXBQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9PSBjb250
ZXh0SWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRl
eHRJZCkKLSAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCk7Ci0KLSAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsK
LSAgICBlbnN1cmVJbnRlcmZhY2UobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpLmVuc3VyZUNv
bnRyb2xzTWFuYWdlcigpOwotICAgIGFkZENsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQpOwotCi0gICAgbV9wYWdlLT52aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZSgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dElkKTsKLSNlbmRpZgotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2xlYXJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcigpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmICghbV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbW92ZUNsaWVudEZvckNvbnRl
eHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgIG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkID0gMDsKLSAgICBtX3BhZ2UtPnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlc2V0
TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkucmVzZXRNZWRpYVN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLmN1cnJlbnRUaW1lQ2hhbmdlZChjdXJyZW50VGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMs
IGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQotewot
ICAgIFJlZjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdlcykgewotICAgICAgICBBU1NFUlQoaXNm
aW5pdGUocmFuZ2UuZmlyc3QpKTsKLSAgICAgICAgQVNTRVJUKGlzZmluaXRlKHJhbmdlLnNlY29u
ZCkpOwotICAgICAgICBBU1NFUlQocmFuZ2Uuc2Vjb25kID49IHJhbmdlLmZpcnN0KTsKLSAgICAg
ICAgdGltZVJhbmdlcy0+YWRkKHJhbmdlLmZpcnN0LCByYW5nZS5zZWNvbmQpOwotICAgIH0KLQot
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla2FibGVSYW5nZXNDaGFuZ2VkKHRpbWVSYW5n
ZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodmFsdWUpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6bGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdl
ZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkuYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5sZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpleHRlcm5hbFBsYXliYWNrUHJvcGVydGllc0NoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2Nh
bGl6ZWREZXZpY2VOYW1lKQotewotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8V2ViUGxheWJhY2tTZXNzaW9u
TW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlPih0YXJnZXRUeXBlKTsKLSAgICBBU1NF
UlQodHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkgfHwg
dHlwZSA9PSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZVRWT3V0IHx8IHR5cGUg
PT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVOb25lKTsKLQotICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoZW5hYmxlZCwgdHlwZSwg
bG9jYWxpemVkRGV2aWNlTmFtZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIGRpc2FibGVkKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkud2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgbXV0ZWQpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5tdXRlZENo
YW5nZWQobXV0ZWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
ZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQotewot
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBsYXliYWNrU3RhcnRlZFRp
bWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUp
Ci17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdl
ZChwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OnJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcs
IGRvdWJsZSByYXRlKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmF0ZUNoYW5nZWQo
aXNQbGF5aW5nLCByYXRlKTsKLX0KLQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgU3RyaW5nIGlkZW50aWZpZXIpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlm
IChjb250ZXh0SWQgPT0gbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgIG1fcGFn
ZS0+aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGlkZW50aWZpZXIpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oY29udGV4dElkKTsKLSAgICBVTlVTRURfUEFSQU0oaWRlbnRpZmll
cik7Ci0jZW5kaWYKLX0KLQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcgotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGxh
eSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpQbGF5KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6cGF1c2UodWludDY0
X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6UGF1c2UoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUodWlu
dDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlUGxheVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YmVnaW5T
Y3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6QmVnaW5TY3J1YmJpbmcoY29udGV4dElkKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjplbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RW5kU2NydWJiaW5nKGNvbnRl
eHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQot
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
U2Vla1RvVGltZShjb250ZXh0SWQsIHRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpGYXN0U2Vlayhjb250ZXh0SWQsIHRpbWUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdGb3J3YXJk
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OkJlZ2luU2Nhbm5pbmdCYWNrd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjYW5uaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6U2VsZWN0
QXVkaW9NZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKLXsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlbGVjdExlZ2li
bGVNZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojp0b2dnbGVQaWN0dXJlSW5QaWN0
dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoY29udGV4dElk
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Ojp0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVNdXRlZChjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNl
dE11dGVkKGNvbnRleHRJZCwgbXV0ZWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElE
KCkKLXsKLSAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6SGFuZGxlQ29udHJv
bGxlZEVsZW1lbnRJRFJlcXVlc3QobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLX0KLQotUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkK
LXsKLSAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgcmV0dXJuICZpbnRlcmZhY2U7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUwNDBjYTA1MTE0NTNj
YTcwOTA0YTVhNGRjZGVmZTlkOWVmNTIxYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFW
S0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKLQotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVk
ZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oPgotI2Vsc2UKLSNp
bmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oPgotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShJT1MpCi10eXBlZGVmIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0IFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwotI2Vs
c2UKLXR5cGVkZWYgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjIFBsYXRm
b3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7Ci1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dCBmaW5hbAotICAgIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0PgotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dD4gY3JlYXRlKFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdl
ciwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwg
dWludDY0X3QgY29udGV4dElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KG1hbmFnZXIsIHBsYXliYWNrU2Vzc2lvbk1v
ZGVsLCBjb250ZXh0SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0KCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51
bGxwdHI7IH0KLQotICAgIFBsYXRmb3JtVmlldyAqbGF5ZXJIb3N0VmlldygpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJIb3N0Vmlldy5nZXQoKTsgfQotICAgIHZvaWQgc2V0TGF5ZXJIb3N0VmlldyhS
ZXRhaW5QdHI8UGxhdGZvcm1WaWV3PiYmIGxheWVySG9zdFZpZXcpIHsgbV9sYXllckhvc3RWaWV3
ID0gV1RGTW92ZShsYXllckhvc3RWaWV3KTsgfQotCi1wcml2YXRlOgotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmLCBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmLCB1aW50NjRfdCk7Ci0KLSAgICAvLyBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbAotICAgIHZvaWQgYWRkQ2xpZW50KFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlcXVlc3RGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKLSAgICBib29sIGlzVmlz
aWJsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGlt
ZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9Ci0K
LSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgotICAgIHZvaWQgZGlkU2V0
dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkqIG1fbWFuYWdlcjsKLSAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0PiBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsOwotICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwot
ICAgIFJldGFpblB0cjxQbGF0Zm9ybVZpZXcgKj4gbV9sYXllckhvc3RWaWV3OwotICAgIEhhc2hT
ZXQ8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0g
ICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdmlkZW9EaW1lbnNpb25zOwotICAgIGJvb2wgbV9oYXNW
aWRlbyB7IGZhbHNlIH07Ci19OwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+LCBw
cml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYsIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOwotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eSgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2
b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICBib29sIGhhc01vZGUoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdDsK
LSAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29u
c3Q7Ci0gICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwotICAgIGJvb2wgaXNW
aXNpYmxlKCkgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkKLSAgICBib29sIGlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3Jl
ZW4oKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7Ci0KLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Jik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFj
ZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
TW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVs
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRk
Q2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xp
ZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgLy8gTWVzc2FnZXMgZnJv
bSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCi0gICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW5XaXRo
SUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxv
d3NQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICB2b2lkIHNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCk7Ci0gICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4
dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKLSAgICB2b2lkIGVudGVyRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCk7Ci0gICAgdm9pZCBjbGVhbnVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcHJlcGFyZWRUb1JldHVy
blRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRS
ZWN0IGlubGluZVJlY3QpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQotICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9N
b2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSNlbmRpZgotCi0gICAgLy8gTWVzc2FnZXMgdG8gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcgotICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2
NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpOwotICAgIHZvaWQgZGlk
U2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkaWRFeGl0RnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0KTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2
aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eSk7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUpOwotICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNv
bnRleHRJZCk7Ci0KLSAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKLSAgICBSZWY8V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKLSAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0g
ICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaE1h
cDx1aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50czsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
MjgxNWQ2NzIzOGU5ZDNhZmZjZjAxZjRmNGRiZDQwNTI0MDg0NGNmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9u
dWxsCkBAIC0xLDM2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IHsKLSAgICBTZXRIYXNWaWRlbyh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCi0gICAgU2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucykKLSAgICBTZXR1cEZ1
bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQs
IFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3Rvciwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVv
RnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKLSAgICBFbnRlckZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotICAgIEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCi0gICAgQ2xlYW51cEZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKQotICAgIFByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVS
ZWN0KQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KQotICAgIEV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotI2VuZGlmCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEyOWFkOWExNDFk
NDE2YjFiOWJlZDJlMzM3YWU2YWFlMWRhZTFjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KKysrIC9kZXYvbnVsbApAQCAtMSw1MjIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5LmgiCi0KLSNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0K
LSNpbXBvcnQgIkFQSVVJQ2xpZW50LmgiCi0jaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5LmgiCi0j
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW1wb3J0ICJXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRp
b24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvTWFjaFNlbmRSaWdodC5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9NZWRpYVBsYXllckVudW1zLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1F1YXJ0ekNvcmVTUEkuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmgiCi0jaW1wb3J0ICJVSUtpdFNQSS5oIgotI2VuZGlmCi0KLUBpbnRl
cmZhY2UgV0tMYXllckhvc3RWaWV3IDogUGxhdGZvcm1WaWV3Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSB1aW50MzJfdCBjb250ZXh0SUQ7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
S0xheWVySG9zdFZpZXcKLQotI2lmIFBMQVRGT1JNKElPUykKLSsgKENsYXNzKWxheWVyQ2xhc3Mg
ewotICAgIHJldHVybiBbQ0FMYXllckhvc3QgY2xhc3NdOwotfQotI2Vsc2UKLS0gKENBTGF5ZXIg
KiltYWtlQmFja2luZ0xheWVyCi17Ci0gICAgcmV0dXJuIFtbW0NBTGF5ZXJIb3N0IGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07Ci19Ci0jZW5kaWYKLQotLSAodWludDMyX3QpY29udGV4dElEIHsK
LSAgICByZXR1cm4gW1tzZWxmIGxheWVySG9zdF0gY29udGV4dElkXTsKLX0KLQotLSAodm9pZClz
ZXRDb250ZXh0SUQ6KHVpbnQzMl90KWNvbnRleHRJRCB7Ci0gICAgW1tzZWxmIGxheWVySG9zdF0g
c2V0Q29udGV4dElkOmNvbnRleHRJRF07Ci19Ci0KLS0gKENBTGF5ZXJIb3N0ICopbGF5ZXJIb3N0
IHsKLSAgICByZXR1cm4gKENBTGF5ZXJIb3N0ICopW3NlbGYgbGF5ZXJdOwotfQotCi1AZW5kCi0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2lmIFBM
QVRGT1JNKElPUykgJiYgIUhBVkUoQVZLSVQpCi0KLVJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBh
Z2VQcm94eSYpCi17Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKLXsKLX0KLQotYm9vbCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9Q
aWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKCkKLXsKLQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YXBw
bGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQotewotCi19Ci0jZWxzZQotCi0jcHJhZ21hIG1hcmsg
LSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQKLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5JiBtYW5hZ2VyLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQm
IHBsYXliYWNrU2Vzc2lvbk1vZGVsLCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgOiBtX21hbmFn
ZXIoJm1hbmFnZXIpCi0gICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKHBsYXliYWNrU2Vzc2lv
bk1vZGVsKQotICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotewotfQotCi1XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKQot
ewotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YWRkQ2xpZW50KFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2Ns
aWVudHMuY29udGFpbnMoJmNsaWVudCkpOwotICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZW1vdmVDbGllbnQoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9jbGll
bnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEZ1bGxzY3Jl
ZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBi
b29sIGZpbmlzaGVkV2l0aE1lZGlhKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1fY29udGV4dElkLCBtb2RlLCBmaW5pc2hl
ZFdpdGhNZWRpYSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpz
ZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQotewotICAgIGlmICht
X21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckZyYW1lKG1fY29udGV4
dElkLCBmcmFtZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpz
ZXRWaWRlb0xheWVyR3Jhdml0eShXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5IGdyYXZpdHkpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5h
Z2VyLT5zZXRWaWRlb0xheWVyR3Jhdml0eShtX2NvbnRleHRJZCwgZ3Jhdml0eSk7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
Ci17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQobV9jb250ZXh0SWQsIG1vZGUpOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tYW5hZ2Vy
ID8gbV9tYW5hZ2VyLT5pc1Zpc2libGUoKSA6IGZhbHNlOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKLXsKLSAgICBpZiAobV9t
YW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmRpZFNldHVwRnVsbHNjcmVlbihtX2NvbnRleHRJ
ZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1
bGxzY3JlZW4oKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZGlk
RW50ZXJGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKCkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPmRpZEV4aXRGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZENsZWFudXBGdWxsc2Ny
ZWVuKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmRpZENsZWFu
dXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCi17Ci0gICAgaWYgKG1f
bWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
bV9jb250ZXh0SWQpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkKLQotUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eShwYWdlLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpKTsKLX0KLQotV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFn
ZVByb3h5JiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmIHBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eSkKLSAgICA6IG1fcGFnZSgmcGFnZSkKLSAgICAsIG1fcGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5KHBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSkKLXsKLSAgICBt
X3BhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJ
RCgpLCAqdGhpcyk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6fldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKLXsKLSAgICBtX3BhZ2UtPnByb2Nlc3MoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBtX3BhZ2Ug
PSBudWxscHRyOwotCi0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMo
KSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2Rl
bDsKLSAgICAgICAgUmVmUHRyPFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBp
bnRlcmZhY2U7Ci0gICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7Ci0K
LSAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIFttb2RlbC0+bGF5ZXJI
b3N0VmlldygpIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICBtb2RlbC0+c2V0TGF5ZXJI
b3N0VmlldyhudWxscHRyKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKLSAg
ICBtX2NsaWVudENvdW50cy5jbGVhcigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0gICAgZm9yIChh
dXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKLSAgICAgICAgc3RkOjpnZXQ8MT4o
dHVwbGUpLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Ci19Ci0KLWJvb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAotewotICAgIGZvciAoYXV0byYgdHVwbGUg
OiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxl
KS0+aGFzTW9kZShtb2RlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpt
YXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Ci17Ci0gICAg
Zm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAo
c3RkOjpnZXQ8MT4odHVwbGUpLT5tYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGlj
dHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmlzUGxheWluZ1ZpZGVv
SW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdAotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBt
X2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+
aXNQbGF5aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3Rp
dmUoKQotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpCi0g
ICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsK
LX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxl
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2Uo
dWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lvbk1vZGVsID0g
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmVuc3VyZU1vZGVsKGNvbnRleHRJZCk7Ci0g
ICAgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgcGxheWJhY2tTZXNzaW9uTW9kZWws
IGNvbnRleHRJZCk7Ci0gICAgYXV0byYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHktPmVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOwotICAg
IFJlZjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxh
dGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OmNyZWF0ZShwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UpOwotICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5hZGRDbGllbnRG
b3JDb250ZXh0KGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKCZtb2RlbC5nZXQoKSk7Ci0gICAgaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcigmbW9kZWwuZ2V0KCkpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFr
ZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKLX0KLQotV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4
dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCYgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0
dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0K
LQotUGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UmIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAg
ICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkp
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YWRkQ2xpZW50Rm9y
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2Ns
aWVudENvdW50cy5hZGQoY29udGV4dElkLCAxKTsKLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRDb3VudHMuY29udGFpbnMoY29u
dGV4dElkKSk7Ci0KLSAgICBpbnQgY2xpZW50Q291bnQgPSBtX2NsaWVudENvdW50cy5nZXQoY29u
dGV4dElkKTsKLSAgICBBU1NFUlQoY2xpZW50Q291bnQgPiAwKTsKLSAgICBjbGllbnRDb3VudC0t
OwotCi0gICAgaWYgKGNsaWVudENvdW50IDw9IDApIHsKLSAgICAgICAgbV9wbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHktPnJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLSAgICAg
ICAgbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCk7Ci0gICAgICAgIG1fY29udGV4dE1h
cC5yZW1vdmUoY29udGV4dElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2xp
ZW50Q291bnRzLnNldChjb250ZXh0SWQsIGNsaWVudENvdW50KTsKLX0KLQotI3ByYWdtYSBtYXJr
IE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBp
bml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yLCBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBh
bGxvd3NQaWN0dXJlSW5QaWN0dXJlKQotewotICAgIEFTU0VSVCh2aWRlb0xheWVySUQpOwotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOwotICAgIFJlZlB0
cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOwotCi0gICAg
c3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpOwotICAgIGFkZENsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIFJldGFp
blB0cjxXS0xheWVySG9zdFZpZXc+IHZpZXcgPSBzdGF0aWNfY2FzdDxXS0xheWVySG9zdFZpZXcq
Pihtb2RlbC0+bGF5ZXJIb3N0VmlldygpKTsKLSAgICBpZiAoIXZpZXcpIHsKLSAgICAgICAgdmll
dyA9IGFkb3B0TlMoW1tXS0xheWVySG9zdFZpZXcgYWxsb2NdIGluaXRdKTsKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgICAgIFt2aWV3IHNldFdhbnRzTGF5ZXI6WUVTXTsKLSNlbmRpZgotICAgICAg
ICBtb2RlbC0+c2V0TGF5ZXJIb3N0Vmlldyh2aWV3KTsKLSAgICB9Ci0gICAgW3ZpZXcgc2V0Q29u
dGV4dElEOnZpZGVvTGF5ZXJJRF07Ci0gICAgaWYgKGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciAh
PSAxKSB7Ci0gICAgICAgIC8vIEludmVydCB0aGUgc2NhbGUgdHJhbnNmb3JtIGFkZGVkIGluIHRo
ZSBXZWJQcm9jZXNzIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vMTgzMTY1NDI+LgotICAgICAgICBm
bG9hdCBpbnZlcnNlU2NhbGUgPSAxIC8gaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yOwotICAgICAg
ICBbW3ZpZXcgbGF5ZXJdIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2Nh
bGUoaW52ZXJzZVNjYWxlLCBpbnZlcnNlU2NhbGUsIDEpXTsKLSAgICB9Ci0KLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgVUlWaWV3ICpwYXJlbnRWaWV3ID0gZG93bmNhc3Q8UmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eT4oKm1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkucmVtb3RlTGF5ZXJUcmVl
SG9zdCgpLnJvb3RMYXllcigpOwotICAgIGludGVyZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCptb2Rl
bC0+bGF5ZXJIb3N0VmlldygpLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgdmlkZW9GdWxsc2Ny
ZWVuTW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7Ci0jZWxzZQotICAgIEludFJlY3QgaW5p
dGlhbFdpbmRvd1JlY3Q7Ci0gICAgbV9wYWdlLT5yb290Vmlld1RvV2luZG93KGluaXRpYWxSZWN0
LCBpbml0aWFsV2luZG93UmVjdCk7Ci0gICAgaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKm1v
ZGVsLT5sYXllckhvc3RWaWV3KCksIGluaXRpYWxXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3Jt
V2luZG93KCksIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOwot
I2VuZGlmCi0gICAgbV9wYWdlLT51aUNsaWVudCgpLmhhc1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJl
RGlkQ2hhbmdlKG1fcGFnZSwgdmlkZW9GdWxsc2NyZWVuTW9kZSAmIE1lZGlhUGxheWVyRW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBoYXNWaWRlbykKLXsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5oYXNWaWRl
b0NoYW5nZWQoaGFzVmlkZW8pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6c2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgRmxvYXRT
aXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCku
dmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh2aWRlb0RpbWVuc2lvbnMpOwotfQotCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElk
KTsKLSAgICBpbnRlcmZhY2UuZW50ZXJGdWxsc2NyZWVuKCk7Ci0KLSAgICAvLyBPbmx5IG9uZSBj
b250ZXh0IGNhbiBiZSBpbiBhIGdpdmVuIGZ1bGwgc2NyZWVuIG1vZGUgYXQgYSB0aW1lOgotICAg
IGZvciAoYXV0byYgY29udGV4dFBhaXIgOiBtX2NvbnRleHRNYXApIHsKLSAgICAgICAgYXV0byYg
b3RoZXJDb250ZXh0SWQgPSBjb250ZXh0UGFpci5rZXk7Ci0gICAgICAgIGlmIChjb250ZXh0SWQg
PT0gb3RoZXJDb250ZXh0SWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRv
JiBvdGhlckludGVyZmFjZSA9IHN0ZDo6Z2V0PDE+KGNvbnRleHRQYWlyLnZhbHVlKTsKLSAgICAg
ICAgaWYgKG90aGVySW50ZXJmYWNlLT5oYXNNb2RlKGludGVyZmFjZS5tb2RlKCkpKQotICAgICAg
ICAgICAgb3RoZXJJbnRlcmZhY2UtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQotewot
I2lmIFBMQVRGT1JNKElPUykKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVs
bHNjcmVlbihmaW5hbFJlY3QpOwotI2Vsc2UKLSAgICBJbnRSZWN0IGZpbmFsV2luZG93UmVjdDsK
LSAgICBtX3BhZ2UtPnJvb3RWaWV3VG9XaW5kb3coZmluYWxSZWN0LCBmaW5hbFdpbmRvd1JlY3Qp
OwotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsV2lu
ZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpKTsKLSNlbmRpZgotfQotCi0jaWYgUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9u
VG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdldE1vZGUpCi17Ci0gICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKHRhcmdldE1v
ZGUpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpj
bGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgZW5zdXJlSW50ZXJm
YWNlKGNvbnRleHRJZCkuY2xlYW51cEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KQotewot
ICAgIG1fcGFnZS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7Ci0KLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKHZpc2libGUsIGlubGluZVJlY3QpOwotI2Vsc2UKLSAgICBJbnRSZWN0IGlubGluZVdp
bmRvd1JlY3Q7Ci0gICAgbV9wYWdlLT5yb290Vmlld1RvV2luZG93KGlubGluZVJlY3QsIGlubGlu
ZVdpbmRvd1JlY3QpOwotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxpbmVXaW5kb3dSZWN0LCBtX3BhZ2UtPnBsYXRmb3Jt
V2luZG93KCkpOwotI2VuZGlmCi19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hl
ZFdpdGhNZWRpYSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OlJlcXVlc3RGdWxsc2NyZWVuTW9kZShjb250ZXh0SWQsIG1vZGUsIGZpbmlz
aGVkV2l0aE1lZGlhKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6RGlkU2V0dXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRXhpdEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKLSAgICBtX3BhZ2UtPmRpZEVudGVyRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ+IG1vZGVsOwotICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZT4gaW50ZXJmYWNlOwotCi0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hd
OwotICAgIFttb2RlbC0+bGF5ZXJIb3N0VmlldygpIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAg
IG1vZGVsLT5zZXRMYXllckhvc3RWaWV3KG51bGxwdHIpOwotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkQ2xlYW51cEZ1bGxzY3JlZW4oY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldE1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgcmVtb3Zl
Q2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6RmxvYXRSZWN0IGZyYW1lKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotI2lmIFBM
QVRGT1JNKElPUykKLSAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBvcnQgPSBbVUlXaW5k
b3cgX3N5bmNocm9uaXplRHJhd2luZ0Fjcm9zc1Byb2Nlc3Nlc107Ci0jZWxzZQotICAgICAgICBN
YWNoU2VuZFJpZ2h0IGZlbmNlU2VuZFJpZ2h0OwotICAgICAgICBpZiAoRHJhd2luZ0FyZWFQcm94
eSogZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCi0gICAgICAgICAgICBmZW5j
ZVNlbmRSaWdodCA9IGRyYXdpbmdBcmVhLT5jcmVhdGVGZW5jZSgpOwotICAgICAgICBtYWNoX3Bv
cnRfbmFtZV90IGZlbmNlUG9ydCA9IGZlbmNlU2VuZFJpZ2h0LmxlYWtTZW5kUmlnaHQoKTsKLSNl
bmRpZgotCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6U2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKGNvbnRleHRJZCwgZnJhbWUsIElQQzo6
QXR0YWNobWVudChmZW5jZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSksIG1fcGFnZS0+
cGFnZUlEKCkpOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXll
ckdyYXZpdHlFbnVtKGNvbnRleHRJZCwgKHVuc2lnbmVkKWdyYXZpdHkpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIG1fcGFnZS0+dWlDbGll
bnQoKS5oYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIG1vZGUgJiBN
ZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxs
c2NyZWVuTW9kZUNoYW5nZWQoY29udGV4dElkLCBtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19
Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojppc1Zpc2libGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKSAmJiBtX3BhZ2UtPmlzSW5X
aW5kb3coKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYm9vbCBp
c1ZpZXdWaXNpYmxlID0gbV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCk7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUoY29udGV4dElkLCBpc1ZpZXdWaXNpYmxlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19
Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KaW5kZXgg
N2YxZTk4NTk4NmU1MzU4YzQ1NDhjYTU5OTNlYWE2M2VjMWJhOWMwMy4uOWFlZGU3MGFlMTcxMzdm
YWExMjNjYjUwZThlNjM4NDlhNWUyMmQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgIlBhZ2VDbGll
bnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkVHlw
ZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAi
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0
UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCIKQEAg
LTYyLDcgKzYzLDYgQEAKICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgogI2ltcG9ydCAiV2Vi
SW5zcGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5o
IgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RS
ZWdpc3RyeUludGVybmFsLmgiCkBAIC0xMTcwLDggKzExNzAsOCBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojp1cGRhdGVNZWRpYVRvdWNoQmFyKCkKICAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFn
ZXIgc2V0Q2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZTpZRVNdOwogICAgIH0KIAotICAgIGlmIChQ
bGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogaW50ZXJmYWNlID0gbV9wYWdlLT5w
bGF5YmFja1Nlc3Npb25NYW5hZ2VyKCktPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpKQotICAg
ICAgICBbbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6aW50ZXJmYWNlXTsKKyAgICBpZiAoUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UqIGludGVyZmFjZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250
cm9sc01hbmFnZXJJbnRlcmZhY2UoKSkKKyAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFn
ZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CiAKICAgICBbbV9t
ZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CiAgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5h
Z2VyLmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4
IDMzMTUyZmUxYTlmNjBjMmUzOGRmMzRmNWMyZTVjN2JkOGFjMDk2OGIuLjhiMDZlZGM4OGVkNjky
NjA3NTVlZWY0YWVkNWUyMzg1MzJjOTY0MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtMTUyLDkgKzE1Miw5IEBACiAjaWYgUExBVEZPUk0oQ09DT0EpCiAj
aW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIlJl
bW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5oIgorI2luY2x1ZGUgIlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiVmlld1NuYXBzaG90U3RvcmUuaCIKLSNpbmNs
dWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTWFj
aFNlbmRSaWdodC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcE9ic2VydmVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yV2luZG93Lmg+CkBAIC0xODAsNyArMTgwLDcgQEAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQpAQCAtMzk0LDggKzM5NCw4IEBAIFdl
YlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nl
c3NQcm94eSYgcHJvY2VzcywgdWluCiAgICAgbV9mdWxsU2NyZWVuTWFuYWdlciA9IFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgbV9wYWdlQ2xpZW50LmZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHlDbGllbnQoKSk7CiAjZW5kaWYKICNpZiBQTEFURk9STShJT1MpICYmIEhBVkUo
QVZLSVQpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpjcmVhdGUoKnRoaXMpOwotICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsICpt
X3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZ
KQpAQCAtNjM2LDggKzYzNiw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJv
Y2VzcygpCiAgICAgbV9mdWxsU2NyZWVuTWFuYWdlciA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHk6OmNyZWF0ZSgqdGhpcywgbV9wYWdlQ2xpZW50LmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGll
bnQoKSk7CiAjZW5kaWYKICNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgbV9wbGF5
YmFja1Nlc3Npb25NYW5hZ2VyID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVh
dGUoKnRoaXMpOwotICAgIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIgPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsICptX3BsYXliYWNrU2Vzc2lv
bk1hbmFnZXIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpAQCAtNDMyNSwxMiAr
NDMyNSwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RnVsbHNjcmVlbkNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpGdWxsc2NyZWVuQ2xpZW50PiYmCiAjZW5kaWYKICAgICAKICNpZiAoUExB
VEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSog
V2ViUGFnZVByb3h5OjpwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKK1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eSogV2ViUGFnZVByb3h5OjpwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKIHsKICAg
ICByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmdldCgpOwogfQogCi1XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdl
cigpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6dmlkZW9GdWxs
c2NyZWVuTWFuYWdlcigpCiB7CiAgICAgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlci5n
ZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYmRlOGMy
NjlkNzI1YWRiMjQ2ZjJhNjkyNTA1YThjZTZiMzdlZWQ0Mi4uMzYxOWU0M2MzNjYyZWQ1MDI3MTFh
ZWFjMmI3M2ExMjgwYmMyMzNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKQEAgLTIwMSw5ICsyMDEsOSBAQCBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOwogY2xh
c3MgV2ViQ29udGV4dE1lbnVQcm94eTsKIGNsYXNzIFdlYkVkaXRDb21tYW5kUHJveHk7CiBjbGFz
cyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwogY2xhc3MgV2Vi
TmF2aWdhdGlvblN0YXRlOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Owor
Y2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OwogY2xhc3MgV2ViS2V5Ym9hcmRFdmVu
dDsKIGNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXI7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwpAQCAt
MzQzLDggKzM0Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZ1bGxzY3JlZW5DbGllbnQoc3Rk
Ojp1bmlxdWVfcHRyPEFQSTo6RnVsbHNjcmVlbkNsaWVudD4mJik7CiAjZW5kaWYKICNpZiAoUExB
VEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkqIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkqIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAgICBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkqIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKyAgICBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkqIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oSU9TKQpAQCAtMTY4MCw4ICsxNjgwLDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAj
aWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsK
KyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBtX3BsYXliYWNrU2Vzc2lv
bk1hbmFnZXI7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gbV92aWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBjNDNjNzY1
ZTRkN2FiM2NkYmRkZWE5ZmNjYWIyZGM1YjA3NTk4N2ZhLi4zMzEyZGNhY2ZlYzA1MGNiODA5ZDc4
ZDllMWU0YTM1MDk2YzMyN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0KQEAgLTQxLDExICs0MSwxMSBAQAogI2ltcG9ydCAiUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24uaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0ICJVc2Vy
RGF0YS5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0
ICJWaWV3VXBkYXRlRGlzcGF0Y2hlck1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4u
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDc3ZDllMTc1MjBiMmM4MGYyMmViN2MyOTdhZDZlMDlmNmJmMmIwMzQuLjczNzVmMWM0NjAz
OGRlMjdjODY0ZDU4MjYzMjljNGU0MTQ4ZjA2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODcxLDggKzg3MSw4IEBACiAJCTM3RkMx
OTQ3MTg1MEZCRjIwMDhDRkE0NyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMx
OTQ2MTg1MEZCRjIwMDhDRkE0NyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVByaXZh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkz
N0ZDMTk0QTE4NTEwRDZBMDA4Q0ZBNDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGQzE5
NDgxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbSAq
LzsgfTsKIAkJMzdGQzE5NEIxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzdGQzE5NDkxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oICovOyB9OwotCQkzRjQxOEVGOTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQxOEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTNGNDE4RUZC
MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVG
RCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY1MTg4N0JEOTcwMDI3
OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
KwkJM0Y0MThFRkIxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJM0Y4N0I5QkQxNTg5NDAxMjAw
OTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlCQTE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JD
aG9vc2VyLmNwcCAqLzsgfTsKIAkJM0Y4N0I5QkUxNTg5NDAxOTAwOTBGRjYyIC8qIFdlYkNvbG9y
Q2hvb3Nlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0Y4N0I5QkIxNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5oICovOyB9OwogCQkz
Rjg3QjlDMDE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQaWNrZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGODdCOUJGMTU4OTQwRDgwMDkwRkY2
MiAvKiBXZWJDb2xvclBpY2tlci5oICovOyB9OwpAQCAtMTEwOSw5ICsxMTA5LDkgQEAKIAkJNTI3
MkQ0QzkxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJENEM3MUU3MzVGMDkwMEVC
NDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI3MkQ0Q0ExRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJv
dGVjdGlvblNwYWNlTlMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjcyRDRDODFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5t
bSAqLzsgfTsKIAkJNTI4QzM3QzExOTVDQkIxQTAwRDhCOUNDIC8qIFdLQmFja0ZvcndhcmRMaXN0
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE5RjI4MTAxOTU4RjQ3ODAwOENBQzcyIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyRDVBMUIw
MUM1NzQ5NUEwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFBMUM1NzQ5
NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLzsgfTsKLQkJ
NTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVB
MUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0g
Ki87IH07Ci0JCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0g
Ki87IH07CisJCTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
aCAqLzsgfTsKKwkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkubW0gKi87IH07CisJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0g
Ki87IH07CiAJCTUzMDI1ODNCMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291
cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MDI1ODJFMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcCAqLzsg
fTsKIAkJNTMwMjU4M0MxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODJG
MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggKi87IH07CiAJCTUz
MDI1ODNEMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMwMURDQkJEMUQw
MERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLzsgfTsKQEAgLTE5MjMsMTQgKzE5
MjMsMTQgQEAKIAkJQ0Q3OEUxMTcxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzhF
MTE2MURCN0RDMEEwMDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50LmggKi87IH07CiAJCUNE
NzhFMTE5MURCN0U1QUQwMDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzhFMTE4MURCN0U1QUQw
MDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREEwNDFGNDFBQ0UyMTA1MDA0QTEzRUMgLyog
QmFja0JvYXJkU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTA0MUYzMUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNl
c1NQSS5oICovOyB9OwotCQlDREEyOUExQTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLm1tICovOyB9OwotCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIuaCAqLzsgfTsKLQkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oICovOyB9OwotCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKLQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjQxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
OyB9OwotCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ck1lc3NhZ2VzLmggKi87IH07Ci0JCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87
IH07Ci0JCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CisJCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubW0gKi87IH07CisJCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oICovOyB9OworCQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmggKi87IH07CisJCUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5Lm1tICovOyB9OworCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNDFDQkVCNjdBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCUNEQTI5QTI5
MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI1MUNCRUI2
N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKKwkJ
Q0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNzFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJQ0RD
MzgyRkUxNzIxMTc5OTAwOEEyRkMzIC8qIFNlY0l0ZW1TaGltTGlicmFyeS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUY4QTc4MTM4QjQ2MDkwMEE5
NUY0NCAvKiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gKi87IH07CiAJCUNEQzM4MzA3MTcyMTE3REQw
MDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8q
IENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgKi87IH07CiAJCUNEQzM4MzBDMTcyMTIyODIw
MDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MzBCMTcyMTIxQ0UwMDhBMkZDMyAvKiBD
b29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaCAqLzsgfTsKQEAgLTMwODgsMTAgKzMwODgsMTAgQEAK
IAkJMzdGQzE5NDYxODUwRkJGMjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVn
YXRlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5n
Q29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzdGQzE5NDgxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLTlNVUkxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzdGQzE5NDkxODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05TVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjUxODg3
QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNG
NDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGNjE4ODdCRDk3MDAy
Nzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGNDE4RUY4MTg4
N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjg3QjlCQTE1ODkz
RjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTNGODdCOUJCMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JDaG9vc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJD
b2xvclBpY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBp
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM3MCwxMiArMzM3MCwxMiBA
QAogCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTI3MkQ0QzcxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlv
blNwYWNlTlMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQcm90ZWN0aW9u
U3BhY2VOUy5oOyBwYXRoID0gbWFjL1dLUHJvdGVjdGlvblNwYWNlTlMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTI3MkQ0QzgxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlv
blNwYWNlTlMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1By
b3RlY3Rpb25TcGFjZU5TLm1tOyBwYXRoID0gbWFjL1dLUHJvdGVjdGlvblNwYWNlTlMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUyRDVBMUFCMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUIzMUM1
NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVB
MUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUIyMUM1NzQ5
RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
NUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzMDI1ODJGMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVy
ZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0
dXJlUmVzb3VyY2UuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzAyNTgzMDFEQ0JC
RDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00MjU1LDE2ICs0MjU1LDE2IEBACiAJCUNENzhFMTE2MURCN0RDMEEw
MDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFQSUZ1bGxzY3JlZW5DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0Q3OEUxMTgxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tGdWxsc2NyZWVuRGVsZWdhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMDQxRjMxQUNFMjEwNTAwNEExM0VD
IC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJhY2tCb2FyZFNlcnZpY2VzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMTkxQ0JE
QkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUExQzFDQkRCRjVCMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
REEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEy
OUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlB
MjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTE4MUNCREJGNDEwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExQzFDQkRC
RjVCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjQx
Q0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxheWJhY2tTZXNzaW9u
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2Fn
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFu
YWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI2MUNC
RUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNEQzM4MkY3MTcyMTE1MDYwMDhBMkZDMyAvKiBDRk5ldHdvcmsuZnJhbWV3b3JrICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IG5hbWUgPSBDRk5ldHdvcmsuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQ0ZOZXR3b3JrLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJQ0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGlt
TGlicmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODMwNjE3MjExNzk5MDA4QTJG
QzMgLyogV2ViUHJvY2Vzc1NoaW0uZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRl
eCA9IDA7IHBhdGggPSBXZWJQcm9jZXNzU2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKQEAgLTUxOTYsMTcgKzUxOTYsMTcgQEAKIAkJCQkyRDFCNUQ1QTE4NTg2
NTk5MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluICovLAogCQkJ
CTFBQzAyNzNFMTk2NjIyRDYwMEMxMkI3NSAvKiBXZWJQYWdlUHJveHlDb2NvYS5tbSAqLywKIAkJ
CQk3QzQ2OTRDQjFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0g
Ki8sCi0JCQkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5oICovLAotCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMUYxQ0JF
QjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywKKwkJ
CQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggKi8sCisJCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAogCQkJCTdDRTREMjE1MUE0OTE0
ODQwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbENvY29hLm1tICovLAogCQkJCTFBMDRGNjE3MUE0
QTNBN0EwMEEyMUI2RSAvKiBXZWJQcm9jZXNzUHJveHlDb2NvYS5tbSAqLywKIAkJCQk3QUFEMTc1
RTFFQTZBRjM3MDAzQjA4OTQgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2Eu
bW0gKi8sCiAJCQkJNTFEMTI0MzExRTZERTUyMTAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRs
ZXJDb2NvYS5oICovLAogCQkJCTUxRDEyNDMyMUU2REU1MjEwMDJCMjgyMCAvKiBXZWJVUkxTY2hl
bWVIYW5kbGVyQ29jb2EubW0gKi8sCi0JCQkJNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovLAotCQkJCTUyRDVBMUFCMUM1NzQ5NEUw
MERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8s
Ci0JCQkJNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5tbSAqLywKKwkJCQk1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5LmggKi8sCisJCQkJNTJENUExQUIxQzU3NDk0RTAwREUzNEEzIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MkQ1QTFB
QzFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovLAog
CQkJCTJERkM3REI5MUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1wbC5oICovLAogCQkJCTJE
RkM3REJBMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1wbC5tbSAqLywKIAkJCQkxQUQwMUJD
QjE5MDVENTQ5MDBDOUM0NUYgLyogV0tSZWxvYWRGcmFtZUVycm9yUmVjb3ZlcnlBdHRlbXB0ZXIu
aCAqLywKQEAgLTYzOTAsMTQgKzYzOTAsMTQgQEAKIAkJCQlDRDQ5MUIwNTFFNzBEMDVGMDAwMDkw
NjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3BwICovLAogCQkJCUNENDkxQjA2MUU3MEQw
NUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oICovLAogCQkJCUNENDkxQjBB
MUU3MzJEMTIwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5tZXNzYWdlcy5pbiAq
LywKLQkJCQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5oICovLAotCQkJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCUNEQTI5QTE4MUNCREJGNDEwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovLAorCQkJCUNEQTI5QTE5MUNCREJG
NDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8sCisJCQkJQ0RBMjlBMUMx
Q0JEQkY1QjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8s
CisJCQkJQ0RBMjlBMTgxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW0gKi8sCiAJCQkJRUNBNjgwRDcxRTY5MERGODAwNzMxRDIwIC8qIFdlYlByb2Nlc3NDb2NvYS5o
ICovLAogCQkJCTdDNkU3MEY5MThCMkQ0QTAwMEYyNEUyRSAvKiBXZWJQcm9jZXNzQ29jb2EubW0g
Ki8sCi0JCQkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIuaCAqLywKLQkJCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKLQkJCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLywKKwkJCQk1MkQ1QTFCMjFDNTc0
OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovLAorCQkJCTUyRDVBMUIz
MUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICov
LAorCQkJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03ODc5LDEwICs3ODc5LDEwIEBACiAJCQkJMUFCMUY3OTMxRDFCMzYxMzAwN0M5QkQx
IC8qIFdlYlBheW1lbnRDb29yZGluYXRvck1lc3NhZ2VzLmggKi8sCiAJCQkJMUFCMUY3OTQxRDFC
MzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLywKIAkJCQkxQUIxRjc5NTFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHlNZXNzYWdlcy5oICovLAotCQkJCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlD
REEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmggKi8sCi0JCQkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJQ0RBMjlBMjcxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgg
Ki8sCisJCQkJQ0RBMjlBMjQxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaCAqLywKKwkJCQlDREEyOUEyNjFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLywKKwkJCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQkxQTA0M0Y2NzEyNTE0RDhCMDBGRkJGQjUg
LyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFBMDQz
RjY4MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8s
CiAJCQkJQkMzMDY2QkMxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2
ZXIuY3BwICovLApAQCAtNzkwNCwxMCArNzkwNCwxMCBAQAogCQkJCTFBQUYwOEI2MTkyNjlFNkQw
MEI2MzkwQyAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJNZXNzYWdlcy5oICovLAogCQkJCTdD
MzYxRDc2MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJN0MzNjFENzcxOTI4MDNCRDAwMzZBNTlEIC8qIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCAqLywKLQkJCQkzRjQxOEVGNTE4
ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCi0JCQkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJNZXNzYWdlcy5oICovLAotCQkJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAot
CQkJCTNGNDE4RUY4MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oICovLAorCQkJCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQkzRjQxOEVGNjE4
ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8sCisJ
CQkJM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJM0Y0MThFRjgxODg3QkQ5NzAwMjc5NUZEIC8q
IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkpOwogCQkJbmFt
ZSA9ICJEZXJpdmVkIFNvdXJjZXMiOwogCQkJcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDI7
CkBAIC04NzM5LDEwICs4NzM5LDEwIEBACiAJCQkJMUFCMUY3OTkxRDFCMzYxMzAwN0M5QkQxIC8q
IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGODUwRkU3MUVEN0MzOUYwMEZCNzdBNyAvKiBXZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0U3MzYxMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTFCMUNCREJGNDEwMDkw
MUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlD
REEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEyOUEy
QjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTFCMUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEyOTFDQkVCNjdB
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDREEyOUEyMDFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxRDU5MjlGMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNTc0NEYwMTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQb3B1cEl0ZW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUQzQjk0ODQ3MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUu
aCBpbiBIZWFkZXJzICovLApAQCAtODc5NSw3ICs4Nzk1LDcgQEAKIAkJCQk3QzM2MUQ3OTE5Mjgw
M0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTU3MzlCQkQxQjQyMDQyRDAwRDI1OEMxIC8qIFdlYlVzZXJNZWRp
YUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNFRTU3NUMxREI3RDYxMTAwQzc0QzUwIC8q
IFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFC
MDFDNTc0OTVBMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREZDN0RCQjFCQ0NDMTk1MDBD
MTU0OEMgLyogV2ViVmlld0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5Q0Q1NUFBMTI4RTI5
NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjkyMzJERjQxOEIyOUQ2ODAwRDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3RNYWMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNDcsMTAgKzEwMzQ3LDEwIEBA
CiAJCQkJMUEzRTczNjIxMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RERDEyN0E1MjFDMDA4RkY0RjQgLyogV2ViUGxh
dGZvcm1Ub3VjaFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0NEEyMTg4NEU0RjAw
MEVEODZEQiAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnRJT1MuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW0gaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlDREEyOUExQTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUNEQTI5QTIxMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxRDU5MjlFMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUEwOEZFRTQxRDU5M0UyQTAwOEJBOENCIC8qIFdlYlBsdWdpbklu
Zm9Qcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU3NDRFRjEyNjM4RkIzMDA2RjBG
MTIgLyogV2ViUG9wdXBJdGVtLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA0MjQsMTAgKzEwNDI0
LDEwIEBACiAJCQkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1NzM5
QkJFMUI0MjA0NjYwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODNFRTU3NUIxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdl
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJM0Y0MThF
RjkxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTNG
NDE4RUZCMTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjcxQzU3NEEwMjAw
REUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkz
RjQxOEVGOTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMg
LyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0Y0
MThFRkIxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREZDN0RCQzFCQ0NDMTk1MDBDMTU0
OEMgLyogV2ViVmlld0ltcGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0REMTEyN0EyOTgw
MDA4RkY0RjQgLyogV2ViV2hlZWxFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjgxNjBE
MDE4NzY0NTU3MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA0ZDIyYWZmMTI4OWY3MDJlOGU1ODRhNjcy
M2I1YzZhZTllZGQ5YjhmLi5mZWUwZDI4Njc3ZDAwMGE1YTc5NzBkYWQ0OWE1MTkwZjRkMjhhZGEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNzgsOCArNzgsOCBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
IgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGIy
MDI1Yjg1MzUwNDI4OGRiOGJmZTkwZGJhNWViODlhYmMxMjUzMmUuLjFjN2E4ZmVjZGU2ZWEzMDk0
NjY0MWVlZDQ0ZDIxMjZiZmFiNDk1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAogCiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAjaW5jbHVkZSAiUERGUGx1Z2luLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCisjaW5j
bHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIldLU3RyaW5nQ0YuaCIK
LSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2
ZS5oPgogI2VuZGlmCiAKQEAgLTM0NzEsMTcgKzM0NzEsMTcgQEAgUmVtb3RlV2ViSW5zcGVjdG9y
VUkqIFdlYlBhZ2U6OnJlbW90ZUluc3BlY3RvclVJKCkKIH0KIAogI2lmIChQTEFURk9STShJT1Mp
ICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgV2ViUGFnZTo6cGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBXZWJQYWdlOjpwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
cikKLSAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
ID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKTsKICAgICByZXR1cm4gKm1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYg
V2ViUGFnZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
JiBXZWJQYWdlOjp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fdmlkZW9G
dWxsc2NyZWVuTWFuYWdlcikKLSAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyKCkpOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpjcmVhdGUoKnRoaXMsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKSk7CiAgICAg
cmV0dXJuICptX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAzZTU5MTk2ODFlYTAyYzYzZDY1
ZGE2N2FhYjMyODM0NDhiZDdjYWU5Li5hZDFiZWM0NTg3YTc3MzE5YzMzNGZjYWVkMDA2OTRiODI3
Yjk0OTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBA
IC0xODYsMTEgKzE4NiwxMSBAQCBjbGFzcyBXZWJOb3RpZmljYXRpb25DbGllbnQ7CiBjbGFzcyBX
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKIGNsYXNzIFdlYlBhZ2VHcm91cFByb3h5OwogY2xh
c3MgV2ViUGFnZU92ZXJsYXk7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworY2xh
c3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKIGNsYXNzIFdlYlBvcHVwTWVudTsKIGNsYXNzIFdl
YlVuZG9TdGVwOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOwotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFz
cyBXZWJXaGVlbEV2ZW50OwogZW51bSBGaW5kT3B0aW9ucyA6IHVpbnQxNl90Owogc3RydWN0IEFz
c2lzdGVkTm9kZUluZm9ybWF0aW9uOwpAQCAtMjY2LDggKzI2Niw4IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzSW5zcGVjdG9yUGFnZSgpIHsgcmV0dXJuICEhbV9pbnNwZWN0b3JVSSB8fCAhIW1fcmVt
b3RlSW5zcGVjdG9yVUk7IH0KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7Ci0gICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciYgdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOworICAgIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyJiB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAjZW5kaWYKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgdm9pZCBzZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2soYm9vbCk7
CkBAIC0xNDAwLDggKzE0MDAsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxSZW1vdGVXZWJJbnNw
ZWN0b3JVST4gbV9yZW1vdGVJbnNwZWN0b3JVSTsKIAogI2lmIChQTEFURk9STShJT1MpICYmIEhB
VkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3BsYXliYWNr
U2Vzc2lvbk1hbmFnZXI7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IG1f
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTWFuYWdl
cj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyPiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiAjZW5kaWYKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgYm9vbCBtX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayB7IGZhbHNl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNr
U2Vzc2lvbk1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzZhMjgxN2I5MDJkZGEyOTZiYTM2YmIxY2U4
YWNlNjI3OTAxM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJN
ZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRFbnVtcy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1DQUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBdHRhY2htZW50OworY2xhc3MgQ29u
bmVjdGlvbjsKK2NsYXNzIERlY29kZXI7CitjbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Cit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE5vZGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJQYWdlOworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKworY2xhc3Mg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCBmaW5hbAorICAgIDogcHVibGljIFJlZkNv
dW50ZWQ8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJD
b3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uTWFuYWdlciYg
bWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0
SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ7CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKKyAgICB2b2lkIHJlc2V0TWVk
aWFTdGF0ZSgpIGZpbmFsOworCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAg
ICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUpIGZpbmFsOworICAgIHZvaWQgY3VycmVudFRp
bWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIGZpbmFsOwor
ICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIGZpbmFsOworICAgIHZvaWQgcGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpIGZpbmFs
OworICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkgZmluYWw7CisgICAgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6
VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKSBmaW5hbDsKKyAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2
YWx1ZSkgZmluYWw7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKKyAgICB2b2lkIGF1
ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOworICAgIHZvaWQg
bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2
b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcm
IGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIGZpbmFsOworICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJv
b2wpIGZpbmFsOworCisgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElkKTsKKworICAgIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIqIG1fbWFuYWdlcjsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKK307CisK
K2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYp
OworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKKworICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisK
KyAgICB2b2lkIHNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudCYpOworICAgIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOworICAg
IHVpbnQ2NF90IGNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50Jik7CisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsK
KworICAgIGV4cGxpY2l0IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOworCisgICAg
dHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudD4sIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Pj4gTW9k
ZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5k
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYg
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJDb3Jl
OjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJ
bnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29u
dGV4dElkKTsKKworICAgIC8vIEludGVyZmFjZSB0byBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAg
ICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSk7CisgICAg
dm9pZCBjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVu
dFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKTsKKyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKKyAgICB2b2lkIHBsYXli
YWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHBsYXliYWNr
U3RhcnRlZFRpbWUpOworICAgIHZvaWQgcmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKKyAgICB2b2lkIHNlZWthYmxlUmFu
Z2VzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMm
LCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7Cisg
ICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCB2YWx1ZSk7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCk7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1l
KTsKKyAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wpOworICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCk7CisKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eQorICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcGF1
c2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRf
dCBjb250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQg
c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGZh
c3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgYmVnaW5T
Y2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5p
bmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Nhbm5pbmcodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBo
YW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldE11dGVkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7CisKKyAgICBXZWJQYWdlKiBtX3BhZ2U7Cisg
ICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiwgdWludDY0X3Q+IG1fbWVkaWFF
bGVtZW50czsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2Nv
bnRleHRNYXA7CisgICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07
CisgICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291bnRzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNThkYzk4NDdjZWRjOTIyOWI3YTNkZTIz
MjE3YzQ3ZmVjY2YzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQz
IEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQorbWVzc2FnZXMgLT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlciB7CisgICAgUGxheSh1aW50NjRf
dCBjb250ZXh0SWQpCisgICAgUGF1c2UodWludDY0X3QgY29udGV4dElkKQorICAgIFRvZ2dsZVBs
YXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQmVnaW5TY3J1YmJpbmcodWludDY0X3Qg
Y29udGV4dElkKQorICAgIEVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2Vl
a1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEZhc3RTZWVrKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCisgICAgQmVnaW5TY2FubmluZ0ZvcndhcmQo
dWludDY0X3QgY29udGV4dElkKQorICAgIEJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBj
b250ZXh0SWQpCisgICAgRW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQorICAgIFNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKKyAg
ICBTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBp
bmRleCkKKyAgICBIYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250
ZXh0SWQpCisgICAgVG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgVG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQorICAgIFNldE11dGVkKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MTQxZTM4ZjU0NDUzZGIxNTJiMzFkMmFiZTFmNGNiYjA2MDM4YmFiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubW0KQEAgLTAsMCArMSw0NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgorCisjaWYgUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQorCisjaW1wb3J0ICJBdHRhY2htZW50LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIldl
YlBhZ2UuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3Iu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1l
cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL1NldHRpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvVXNlckdlc3R1cmVJbmRpY2F0b3IuaD4KKyNpbXBvcnQgPG1hY2gvbWFjaF9wb3J0
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RhdGljIHVpbnQ2NF90IG5leHRDb250ZXh0SWQoKQoreworICAgIHN0YXRpYyB1aW50NjRfdCBj
b250ZXh0SWQgPSAwOworICAgIHJldHVybiArK2NvbnRleHRJZDsKK30KKworI3ByYWdtYSBtYXJr
IC0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dAorCitQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0KFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdl
cigmbWFuYWdlcikKKyAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKworUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQoKQoreworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnJlc2V0
TWVkaWFTdGF0ZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5y
ZXNldE1lZGlhU3RhdGUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kdXJhdGlvbkNoYW5nZWQobV9jb250
ZXh0SWQsIGR1cmF0aW9uKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9y
VGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmN1cnJlbnRU
aW1lQ2hhbmdlZChtX2NvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQo
ZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21h
bmFnZXItPmJ1ZmZlcmVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6cmF0ZUNoYW5nZWQoYm9v
bCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX21hbmFnZXItPnJhdGVDaGFuZ2VkKG1fY29udGV4dElkLCBpc1BsYXlpbmcsIHBs
YXliYWNrUmF0ZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCit7
CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5wbGF5YmFja1N0YXJ0ZWRU
aW1lQ2hhbmdlZChtX2NvbnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUs
IGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5zZWVrYWJsZVJhbmdlc0NoYW5nZWQobV9jb250ZXh0SWQsIHJhbmdlcywg
bGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0ZUludGVydmFsKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wg
dmFsdWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5jYW5QbGF5
RmFzdFJldmVyc2VDaGFuZ2VkKG1fY29udGV4dElkLCB2YWx1ZSk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFu
Z2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMs
IHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRp
YVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5sZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdl
ZChtX2NvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNlbGVj
dGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVk
RGV2aWNlTmFtZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKG1fY29udGV4dElkLCBlbmFibGVkLCB0eXBlLCBsb2NhbGl6
ZWREZXZpY2VOYW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0
Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkQ2hhbmdlZChtX2NvbnRleHRJZCwgZGlzYWJsZWQpOworfQorCit2b2lkIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+bXV0ZWRDaGFuZ2VkKG1f
Y29udGV4dElkLCBtdXRlZCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIKKworUmVmPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+IFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIocGFnZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UoJnBh
Z2UpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBh
Z2UucGFnZUlEKCksICp0aGlzKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6flBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIoKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRN
YXAudmFsdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50PiBtb2RlbDsKKyAgICAgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ+IGludGVyZmFjZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0
dXBsZTsKKyAgICAgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKyAgICAgICAg
bW9kZWwtPnNldE1lZGlhRWxlbWVudChudWxscHRyKTsKKworICAgICAgICBpbnRlcmZhY2UtPmlu
dmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX21l
ZGlhRWxlbWVudHMuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOworCisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxl
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ+IG1vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJZCk7
CisgICAgbW9kZWwtPmFkZENsaWVudCgqaW50ZXJmYWNlKTsKKworICAgIHJldHVybiBzdGQ6Om1h
a2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1BsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVy
ZmFjZVR1cGxlKCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJ
ZCk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYkNvcmU6
OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50JiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6Omdl
dDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dCYgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJl
ZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRy
PFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRp
ZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7
CisKKyAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbWVkaWFFbGVtZW50ID0gbW9kZWwtPm1l
ZGlhRWxlbWVudCgpOworICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAg
bW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKyAgICBpbnRlcmZhY2UtPmludmFsaWRh
dGUoKTsKKyAgICBtX21lZGlhRWxlbWVudHMucmVtb3ZlKG1lZGlhRWxlbWVudC5nZXQoKSk7Cisg
ICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIG1fY2xpZW50Q291bnRzLmFkZChjb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQor
eworICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhjb250ZXh0SWQpKTsKKyAgICBp
ZiAobV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCisgICAgICAgIHJlbW92ZUNvbnRl
eHQoY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZXRVcFBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxl
bWVudCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgYXV0byBmb3VuZEl0ZXJhdG9yID0gbV9t
ZWRpYUVsZW1lbnRzLmZpbmQoJm1lZGlhRWxlbWVudCk7CisgICAgaWYgKGZvdW5kSXRlcmF0b3Ig
IT0gbV9tZWRpYUVsZW1lbnRzLmVuZCgpKSB7CisgICAgICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9
IGZvdW5kSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQgPT0gY29udGV4dElkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICht
X2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgICAgIHJlbW92ZUNsaWVudEZvckNv
bnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAgICAgICBtX2NvbnRyb2xzTWFu
YWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsgcmV0
dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7CisgICAgICAgIGF1dG8gY29udGV4dElkID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkKQorICAgICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdl
ckNvbnRleHRJZCk7CisgICAgICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID0gY29udGV4
dElkOworICAgICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE1lZGlhRWxlbWVudCgmbWVk
aWFFbGVtZW50KTsKKyAgICB9CisKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6U2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcldpdGhJRChtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworI2VuZGlmCit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cigpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICghbV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9j
b250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
ID0gMDsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6Q2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyNlbmRpZgorfQorCit1aW50NjRfdCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjb250ZXh0SWRG
b3JNZWRpYUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQor
eworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9tZWRpYUVsZW1lbnRzLmVuc3VyZSgmbWVkaWFFbGVt
ZW50LCBbJl0geyByZXR1cm4gbmV4dENvbnRleHRJZCgpOyB9KTsKKyAgICB1aW50NjRfdCBjb250
ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkuc2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOworICAgIHJldHVybiBjb250ZXh0
SWQ7Cit9CisKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDoKKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZXNldE1lZGlhU3Rh
dGUodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSZXNldE1lZGlhU3RhdGUoY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZHVyYXRp
b25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQoreworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpEdXJhdGlv
bkNoYW5nZWQoY29udGV4dElkLCBkdXJhdGlvbiksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkN1cnJl
bnRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YnVmZmVyZWRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCit7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkJ1
ZmZlcmVkVGltZUNoYW5nZWQoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5YmFja1N0YXJ0ZWRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1l
KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpQbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQsIHBsYXliYWNrU3RhcnRl
ZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9h
dCBwbGF5YmFja1JhdGUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OlJhdGVDaGFuZ2VkKGNvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5
YmFja1JhdGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBX
ZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwg
ZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKK3sKKyAgICBWZWN0b3I8c3RkOjpwYWlyPGRvdWJs
ZSwgZG91YmxlPj4gcmFuZ2VzVmVjdG9yOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJh
bmdlcy5yYW5nZXMoKS5zdGFydChpKS50b0RvdWJsZSgpOworICAgICAgICBkb3VibGUgZW5kID0g
dGltZVJhbmdlcy5yYW5nZXMoKS5lbmQoaSkudG9Eb3VibGUoKTsKKyAgICAgICAgcmFuZ2VzVmVj
dG9yLmFwcGVuZCh7IHN0YXJ0LCBlbmQgfSk7CisgICAgfQorICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpTZWVrYWJsZVJhbmdlc1ZlY3RvckNo
YW5nZWQoY29udGV4dElkLCBXVEZNb3ZlKHJhbmdlc1ZlY3RvciksIGxhc3RNb2RpZmllZFRpbWUs
IGxpdmVVcGRhdGVJbnRlcnZhbCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIHZhbHVlKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpDYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNvbnRleHRJ
ZCwgdmFsdWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
dGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwg
UGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5
cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpFeHRlcm5hbFBsYXliYWNrUHJvcGVy
dGllc0NoYW5nZWQoY29udGV4dElkLCBlbmFibGVkLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odGFy
Z2V0VHlwZSksIGxvY2FsaXplZERldmljZU5hbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVkaW9N
ZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpMZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4
dElkLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6V2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWRDaGFuZ2VkKGNvbnRleHRJZCwgZGlzYWJsZWQpKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11
dGVkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpNdXRlZENoYW5nZWQoY29udGV4dElkLCBtdXRlZCkpOworfQorCisjcHJhZ21hIG1h
cmsgTWVzc2FnZXMgZnJvbSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5KCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkucGF1c2UoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0
b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkudG9nZ2xlUGxheVN0YXRlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY3J1YmJpbmcoKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQoreworICAg
IFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwor
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSB0aW1lKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5n
VXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla1RvVGltZSh0aW1l
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSB0aW1lKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGlj
YXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
ZmFzdFNlZWsodGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5T
Y2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0ZvcndhcmQoKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQor
eworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3Qg
Y29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2Nhbm5pbmco
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlhT3B0
aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKK30KKwordm9p
ZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGF1dG8gZWxlbWVudCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkubWVkaWFFbGVtZW50KCk7CisgICAgaWYgKGVsZW1lbnQpCisgICAgICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpIYW5kbGVDb250cm9sbGVk
RWxlbWVudElEUmVzcG9uc2UoY29udGV4dElkLCBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpKSk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGljdHVyZUluUGljdHVy
ZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNh
dG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50
b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkudG9nZ2xlTXV0ZWQoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit7CisgICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRNdXRlZChtdXRlZCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjhkM2MyNDkyNTUxMmJhMzM4ZGIwOWMyYzEyZjc1Yzc1MjkyM2NkNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MTWVkaWFFbGVtZW50RW51bXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FM
YXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEF0
dGFjaG1lbnQ7CitjbGFzcyBDb25uZWN0aW9uOworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIE1lc3Nh
Z2VSZWNlaXZlcjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRmxvYXRTaXplOwor
Y2xhc3MgTm9kZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVySG9zdGlu
Z0NvbnRleHQ7CitjbGFzcyBXZWJQYWdlOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Cisg
ICAgOiBwdWJsaWMgUmVmQ291bnRlZDxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pgor
ICAgICwgcHVibGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGNyZWF0
ZShWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5WaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7
IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KKworICAgIExheWVySG9zdGluZ0NvbnRleHQqIGxheWVy
SG9zdGluZ0NvbnRleHQoKSB7IHJldHVybiBtX2xheWVySG9zdGluZ0NvbnRleHQuZ2V0KCk7IH0K
KyAgICB2b2lkIHNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9z
dGluZ0NvbnRleHQ+JiYpOworCisgICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNBbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldElzQW5pbWF0aW5nKGJvb2wgZmxhZykgeyBt
X2lzQW5pbWF0aW5nID0gZmxhZzsgfQorCisgICAgYm9vbCB0YXJnZXRJc0Z1bGxzY3JlZW4oKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldElzRnVsbHNjcmVlbjsgfQorICAgIHZvaWQgc2V0VGFyZ2V0
SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZsYWc7IH0K
KworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBmdWxsc2NyZWVuTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGU7IH0KKyAg
ICB2b2lkIHNldEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSB7IG1fZnVsbHNjcmVlbk1vZGUgPSBtb2RlOyB9CisK
KyAgICBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1faXNGdWxsc2NyZWVuOyB9
CisgICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1faXNGdWxsc2NyZWVuID0g
ZmxhZzsgfQorCitwcml2YXRlOgorICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Cisg
ICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aWRlb0Rp
bWVuc2lvbnNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOworCisg
ICAgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
JiwgdWludDY0X3QgY29udGV4dElkKTsKKworICAgIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIqIG1f
bWFuYWdlcjsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OworICAgIGJvb2wgbV9p
c0FuaW1hdGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3RhcmdldElzRnVsbHNjcmVlbiB7IGZh
bHNlIH07CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1fZnVsbHNjcmVlbk1vZGUgeyBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAgYm9vbCBtX2lzRnVsbHNjcmVlbiB7IGZh
bHNlIH07Cit9OworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFJlZkNv
dW50ZWQ8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3Jl
YXRlKFdlYlBhZ2UmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7CisgICAgdmlydHVhbCB+Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcigpOworICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAg
IAorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50CisgICAg
Ym9vbCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0OworICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxz
Y3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBl
eGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQmKTsKKyAgICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9u
KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNz
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ7CisKKyAgICBleHBsaWNpdCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2UmLCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50PiwgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+PiBN
b2RlbEludGVyZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxB
bmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2RlbEludGVyZmFjZVR1cGxl
JiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYkNv
cmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRf
dCBjb250ZXh0SWQpOworICAgIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIGVuc3Vy
ZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dCh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRf
dCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpOworCisgICAgLy8gSW50ZXJmYWNlIHRvIFZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQKKyAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaGFzVmlkZW8pOworICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOworCisgICAgLy8gTWVzc2FnZXMg
ZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKyAgICB2b2lkIHJlcXVlc3RGdWxsc2Ny
ZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSk7CisgICAgdm9p
ZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEV4
aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRFbnRlckZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFj
aG1lbnQgZmVuY2VQb3J0KTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50
NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpOworICAgIHZvaWQgZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSk7CisgICAgCisg
ICAgV2ViUGFnZSogbV9wYWdlOworICAgIFJlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXI7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50KiwgdWludDY0X3Q+IG1fdmlkZW9FbGVtZW50czsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBN
b2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7CisgICAgdWludDY0X3QgbV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQgeyAwIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2Ns
aWVudENvdW50czsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29h
L1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41YzRiNTY4OTU1OWVlNzVkOTk0MTZlODA0YzdmY2Y2OTdiYjAyNTEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCittZXNzYWdl
cyAtPiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIHsKKyAgICBSZXF1ZXN0RnVsbHNjcmVlbk1vZGUo
dWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRp
YSkKKyAgICBEaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIERpZEV4
aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRFbnRlckZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQorICAgIERpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICBTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQor
ICAgIFNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVk
IGdyYXZpdHkpCisgICAgRnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVv
RnVsbHNjcmVlbk1vZGUpCisgICAgRnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMxMmJkMjUwNGRjOTNmYTgxMjMxNzNjYTkyODM3MWI5MzA5Mzg5ZDEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5tbQpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgorCisjaWYg
KFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbXBvcnQgIkF0dGFjaG1lbnQuaCIKKyNp
bXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKKyNp
bXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgorI2ltcG9ydCAiV2ViUGFnZS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgor
I2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nv
bG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50
TmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxWaWRlb0VsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
ckxheWVyQmFja2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWRlby5oPgorI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbXBvcnQgPG1hY2gvbWFjaF9wb3J0Lmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3Rh
dGljIEludFJlY3QgaW5saW5lVmlkZW9GcmFtZShIVE1MVmlkZW9FbGVtZW50JiBlbGVtZW50KQor
eworICAgIGVsZW1lbnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBp
ZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gcmVjdCA9IHJlbmRl
cmVyLT52aWRlb0JveCgpOworICAgIHJlY3QubW92ZUJ5KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5k
aW5nQm94UmVjdCgpLmxvY2F0aW9uKCkpOworICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCku
dmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcocmVjdCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgOiBtX21hbmFnZXIoJm1h
bmFnZXIpCisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisKK1ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ6On5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCkK
K3sKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMYXllckhv
c3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiYmIGNvbnRl
eHQpCit7CisgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gV1RGTW92ZShjb250ZXh0KTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQo
Ym9vbCBoYXNWaWRlbykKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
Pmhhc1ZpZGVvQ2hhbmdlZChtX2NvbnRleHRJZCwgaGFzVmlkZW8pOworfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3Qg
RmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT52aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKG1fY29udGV4dElkLCB2aWRlb0Rp
bWVuc2lvbnMpOworfQorCisjcHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisK
K1JlZjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVh
dGUoV2ViUGFnZSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9u
TWFuYWdlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyKHBhZ2UsIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpKTsKK30KKworVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiBwYWdlLCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQorICAgIDogbV9wYWdlKCZwYWdl
KQorICAgICwgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIp
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2Uu
cGFnZUlEKCksICp0aGlzKTsKK30KKworVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6flZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIoKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAu
dmFsdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBtb2RlbDsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ+IGludGVyZmFjZTsKKyAgICAgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSB0dXBs
ZTsKKworICAgICAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOworICAgICAgICBt
b2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOworCisgICAgICAgIGludGVyZmFjZS0+aW52
YWxpZGF0ZSgpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworICAgIG1fdmlk
ZW9FbGVtZW50cy5jbGVhcigpOworICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7CisgICAgCisg
ICAgaWYgKG1fcGFnZSkKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmludmFsaWRhdGUoKQoreworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBtX3BhZ2UgPSBudWxscHRyOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpN
b2RlbEludGVyZmFjZVR1cGxlIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5k
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0PiBpbnRlcmZhY2UgPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUo
KnRoaXMsIGNvbnRleHRJZCk7CisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5hZGRDbGll
bnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGlu
Z0NvbnRleHQoTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJv
Y2VzcygpKTsKKyAgICBtb2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2UpOworCisgICAgcmV0dXJu
IHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsKK30K
KworVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1v
ZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKwor
V2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4g
KnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpl
bnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpn
ZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAg
ICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAg
IHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKTsKKworICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+cmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dChjb250ZXh0SWQpOworCisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVv
RWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9FbGVt
ZW50KG51bGxwdHIpOworICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisgICAg
aW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CisgICAgbV92aWRlb0VsZW1lbnRzLnJlbW92ZSh2aWRl
b0VsZW1lbnQuZ2V0KCkpOworICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xpZW50Q291bnRzLmFk
ZChjb250ZXh0SWQsIDEpOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBBU1NFUlQobV9jbGllbnRDb3VudHMuY29udGFpbnMoY29udGV4dElkKSk7CisKKyAgICBpbnQg
Y2xpZW50Q291bnQgPSBtX2NsaWVudENvdW50cy5nZXQoY29udGV4dElkKTsKKyAgICBBU1NFUlQo
Y2xpZW50Q291bnQgPiAwKTsKKyAgICBjbGllbnRDb3VudC0tOworCisgICAgaWYgKGNsaWVudENv
dW50IDw9IDApIHsKKyAgICAgICAgbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCk7Cisg
ICAgICAgIHJlbW92ZUNvbnRleHQoY29udGV4dElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fY2xpZW50Q291bnRzLnNldChjb250ZXh0SWQsIGNsaWVudENvdW50KTsKK30KKwor
I3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQ6CisKK2Jvb2wgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Cit7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKKyAgICByZXR1cm4gU2V0dGluZ3M6
OmF2S2l0RW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gbW9kZSA9PSBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlICYmIHN1cHBvcnRz
UGljdHVyZUluUGljdHVyZSgpOworI2VuZGlmCit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVu
dCYgdmlkZW9FbGVtZW50LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBBU1NFUlQobW9kZSAhPSBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICBMT0coRnVs
bHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9y
VmlkZW9FbGVtZW50KCVwKSIsIHRoaXMpOworCisgICAgdWludDY0X3QgY29udGV4dElkID0gbV9w
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5jb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQodmlkZW9FbGVt
ZW50KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmlkZW9FbGVtZW50cy5hZGQoJnZpZGVvRWxl
bWVudCwgY29udGV4dElkKTsKKyAgICBVTlVTRURfUEFSQU0oYWRkUmVzdWx0KTsKKyAgICBBU1NF
UlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9PSBjb250ZXh0SWQpOworCisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1v
ZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAg
ICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisgICAgaWYgKCFpbnRlcmZhY2UtPmxh
eWVySG9zdGluZ0NvbnRleHQoKSkKKyAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdD
b250ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nl
c3MoKSk7CisKKyAgICBhdXRvIHZpZGVvUmVjdCA9IGlubGluZVZpZGVvRnJhbWUodmlkZW9FbGVt
ZW50KTsKKyAgICBGbG9hdFJlY3QgdmlkZW9MYXllckZyYW1lID0gRmxvYXRSZWN0KDAsIDAsIHZp
ZGVvUmVjdC53aWR0aCgpLCB2aWRlb1JlY3QuaGVpZ2h0KCkpOworCisgICAgSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG9sZE1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxz
Y3JlZW5Nb2RlKCk7CisgICAgaW50ZXJmYWNlLT5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7
CisgICAgaW50ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKKyAgICBtb2RlbC0+c2V0
VmlkZW9FbGVtZW50KCZ2aWRlb0VsZW1lbnQpOworICAgIGlmIChvbGRNb2RlID09IEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpCisgICAgICAgIG1vZGVsLT5z
ZXRWaWRlb0xheWVyRnJhbWUodmlkZW9MYXllckZyYW1lKTsKKworICAgIGlmIChpbnRlcmZhY2Ut
PmlzQW5pbWF0aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnRlcmZhY2UtPnNldElzQW5p
bWF0aW5nKHRydWUpOworCisgICAgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlID0gdmlkZW9F
bGVtZW50LndlYmtpdFN1cHBvcnRzUHJlc2VudGF0aW9uTW9kZShIVE1MVmlkZW9FbGVtZW50OjpW
aWRlb1ByZXNlbnRhdGlvbk1vZGU6OlBpY3R1cmVJblBpY3R1cmUpOworICAgIAorICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxz
Y3JlZW5XaXRoSUQoY29udGV4dElkLCBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+
Y29udGV4dElEKCksIHZpZGVvUmVjdCwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBpbnRl
cmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCksIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVv
RWxlbWVudCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoJXApIiwgdGhpcyk7CisgICAgQVNT
RVJUKG1fcGFnZSk7CisgICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlucygmdmlkZW9F
bGVtZW50KSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0
KCZ2aWRlb0VsZW1lbnQpOworICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShj
b250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7
CisKKyAgICBpZiAoaW50ZXJmYWNlLmlzQW5pbWF0aW5nKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludGVyZmFjZS5zZXRJc0FuaW1hdGluZyh0cnVlKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY29udGV4
dElkLCBpbmxpbmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
K30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuVG9N
b2RlV2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1l
bnQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0
YXJnZXRNb2RlKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oJXApIiwgdGhpcyk7
CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkK
KyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICBBU1NFUlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5z
KCZ2aWRlb0VsZW1lbnQpKTsKKworICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVt
ZW50cy5nZXQoJnZpZGVvRWxlbWVudCk7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50
ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVu
KGZhbHNlKTsKKworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoY29udGV4dElk
LCB0YXJnZXRNb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TSh2aWRlb0VsZW1lbnQpOworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRNb2RlKTsKKyNlbmRpZgor
fQorCisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aGFzVmlkZW9DaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKK3sKKyAgICBpZiAobV9wYWdlKQorICAg
ICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
U2V0SGFzVmlkZW8oY29udGV4dElkLCBoYXNWaWRlbyksIG1fcGFnZS0+cGFnZUlEKCkpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKK3sKKyAg
ICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6U2V0VmlkZW9EaW1lbnNpb25zKGNvbnRleHRJZCwgdmlkZW9EaW1l
bnNpb25zKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBm
cm9tIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eToKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBm
aW5pc2hlZFdpdGhNZWRpYSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJlcXVlc3RG
dWxsc2NyZWVuTW9kZShtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSk7Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZp
ZGVvRnVsbHNjcmVlbk1vZGUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5mdWxsc2Ny
ZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVs
bHNjcmVlbiglcCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKworICAgIEFTU0VSVChtX3BhZ2Up
OworICAgIFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CisjaWZu
ZGVmIE5ERUJVRworICAgIFt2aWRlb0xheWVyIHNldE5hbWU6QCJXZWIgdmlkZW8gZnVsbHNjcmVl
biBtYW5hZ2VyIGxheWVyIl07CisjZW5kaWYKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworCisgICAgW3ZpZGVv
TGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UoMCwgMCldOworICAgIFt2aWRlb0xheWVyIHNl
dEJhY2tncm91bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVu
dCldOworCisgICAgLy8gU2V0IGEgc2NhbGUgZmFjdG9yIGhlcmUgdG8gbWFrZSBjb252ZXJ0UmVj
dDp0b0xheWVyOm5pbCB0YWtlIHNjYWxlIGZhY3RvciBpbnRvIGFjY291bnQuIDxyZGFyOi8vcHJv
YmxlbS8xODMxNjU0Mj4uCisgICAgLy8gVGhpcyBzY2FsZSBmYWN0b3IgaXMgaW52ZXJ0ZWQgaW4g
dGhlIGhvc3RpbmcgcHJvY2Vzcy4KKyAgICBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IgPSBtX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgW3ZpZGVvTGF5ZXIgc2V0VHJhbnNmb3JtOkNB
VHJhbnNmb3JtM0RNYWtlU2NhbGUoaG9zdGluZ1NjYWxlRmFjdG9yLCBob3N0aW5nU2NhbGVGYWN0
b3IsIDEpXTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
bW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQo
KS0+c2V0Um9vdExheWVyKHZpZGVvTGF5ZXIpOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgCisgICAgbW9kZWwtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKHZpZGVvTGF5ZXIsIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250ZXh0
SWRdIHsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNvbnRleHRJZF0geworICAgICAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCks
IHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOworICAgICAgICB9KTsKKyAgICB9KTsK
KyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorICAgIAordm9pZCBWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQor
eworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJG
dWxsc2NyZWVuKCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQpOworCisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBp
bnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGlu
dGVyZmFjZS0+c2V0SXNBbmltYXRpbmcoZmFsc2UpOworICAgIGludGVyZmFjZS0+c2V0SXNGdWxs
c2NyZWVuKGZhbHNlKTsKKworICAgIGlmIChpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9F
bGVtZW50ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOworICAgIGlmICghdmlkZW9FbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBw
cmV2aW91c2x5IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgorICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0VsZW1l
bnRdIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxl
bWVudCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhp
dEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMs
IGNvbnRleHRJZCk7CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIAorICAgIG1vZGVsLT53YWl0Rm9yUHJlcGFyZWRG
b3JJbmxpbmVUaGVuKFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxd
IHsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3By
b3RlY3RlZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlLCBtb2RlbF0geworICAgICAgICAgICAg
bW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCwgW3Byb3RlY3RlZFRoaXMsIGNvbnRl
eHRJZCwgaW50ZXJmYWNlXSB7CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNl
XSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRl
eHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdD
b250ZXh0KCktPnNldFJvb3RMYXllcihudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChudWxscHRyKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkNsZWFudXBGdWxsc2NyZWVuKGNv
bnRleHRJZCksIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorICAgIAor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbiglcCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBz
dGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRl
cmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUgPSBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCk7
CisgICAgYm9vbCB0YXJnZXRJc0Z1bGxzY3JlZW4gPSBpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNj
cmVlbigpOworCisgICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CisgICAg
UmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1l
bnQoKTsKKworICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgcmVtb3ZlQ2xpZW50Rm9yQ29u
dGV4dChjb250ZXh0SWQpOworCisgICAgaWYgKCF2aWRlb0VsZW1lbnQgfHwgIXRhcmdldElzRnVs
bHNjcmVlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxlbWVudCwgbW9kZV0gewor
ICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgcHJvdGVjdGVk
VGhpcy0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKnZpZGVvRWxlbWVudCwg
bW9kZSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNl
dFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZp
dHkpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRWaWRlb0xheWVyR3Jhdml0eSgo
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKK30KKyAgICAKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQoreworICAgIGlmICghbV9wYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBtb2RlbCA9IGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCk7CisKKyAgICBpZiAoIWlzUGFnZVZpc2libGUpCisgICAgICAgIG1vZGVsLnZpZGVvRWxl
bWVudCgpLT5zY3JvbGxJbnRvVmlld0lmTm90VmlzaWJsZShmYWxzZSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZShjb250ZXh0SWQsIHRydWUsIGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLnZpZGVv
RWxlbWVudCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorICAgIAordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQor
eworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9M
YXllckZyYW1lRmVuY2VkKCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQpOworCisgICAgUmVmUHRy
PFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1v
ZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKwor
ICAgIGlmIChzdGQ6OmlzbmFuKGJvdW5kcy54KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLnkoKSkg
fHwgc3RkOjppc25hbihib3VuZHMud2lkdGgoKSkgfHwgc3RkOjppc25hbihib3VuZHMuaGVpZ2h0
KCkpKSB7CisgICAgICAgIGF1dG8gdmlkZW9SZWN0ID0gaW5saW5lVmlkZW9GcmFtZSgqbW9kZWwt
PnZpZGVvRWxlbWVudCgpKTsKKyAgICAgICAgYm91bmRzID0gRmxvYXRSZWN0KDAsIDAsIHZpZGVv
UmVjdC53aWR0aCgpLCB2aWRlb1JlY3QuaGVpZ2h0KCkpOworICAgIH0KKyAgICAKKyAgICBbQ0FU
cmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRp
b246MF07CisgICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKQorICAgICAg
ICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0RmVuY2VQb3J0KGZlbmNlUG9y
dC5wb3J0KCkpOworICAgIG1vZGVsLT5zZXRWaWRlb0xheWVyRnJhbWUoYm91bmRzKTsKKyAgICBt
YWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBmZW5jZVBvcnQucG9ydCgpKTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3NTNjYjE2OThiZGIxNTVmOTY2OTgxMTFmMDUxNWYyMzg4N2Y1ZGEy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRp
YUVsZW1lbnRFbnVtcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNw
YWNlIElQQyB7Ci1jbGFzcyBBdHRhY2htZW50OwotY2xhc3MgQ29ubmVjdGlvbjsKLWNsYXNzIERl
Y29kZXI7Ci1jbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIE5vZGU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwot
Y2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dCBmaW5hbAotICAgIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4KLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBj
b250ZXh0SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dCgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxs
cHRyOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UKLSAg
ICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIGZpbmFsOwotCi0gICAgLy8gV2ViUGxheWJhY2tNb2Rl
bENsaWVudAotICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgZmluYWw7Ci0gICAgdm9p
ZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGlt
ZSkgZmluYWw7Ci0gICAgdm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgZmluYWw7Ci0g
ICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVk
VGltZSkgZmluYWw7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQg
cGxheWJhY2tSYXRlKSBmaW5hbDsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25z
dCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBs
aXZlVXBkYXRlSW50ZXJ2YWwpIGZpbmFsOwotICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZChib29sIHZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBmaW5hbDsKLSAgICB2b2lkIGxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIGZpbmFsOwot
ICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7
Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZp
bmFsOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJD
b3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUs
IGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgZmluYWw7Ci0gICAgdm9pZCB3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoYm9vbCkgZmluYWw7Ci0gICAgdm9pZCBt
dXRlZENoYW5nZWQoYm9vbCkgZmluYWw7Ci0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQp
OwotCi0gICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciogbV9tYW5hZ2VyOwotICAgIHVpbnQ2
NF90IG1fY29udGV4dElkOwotfTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciA6
IHB1YmxpYyBSZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI+LCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJik7Ci0gICAgdmlydHVhbCB+V2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpOwotCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0VXBQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlcihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7Ci0gICAgdm9pZCBj
bGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgdWludDY0X3QgY29udGV4dElkRm9y
TWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmKTsKLQotcHJvdGVjdGVkOgot
ICAgIGZyaWVuZCBjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OwotICAg
IGZyaWVuZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwotCi0gICAgZXhwbGljaXQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJik7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
PiwgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+PiBNb2RlbEludGVy
ZmFjZVR1cGxlOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9kZWxBbmRJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlJiBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYkNvcmU6OldlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIGVuc3VyZUlu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dCh1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpOwotCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQKLSAgICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwot
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlKTsKLSAg
ICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpOwotICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpOwotICAgIHZvaWQgcGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJh
Y2tTdGFydGVkVGltZSk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpOwotICAgIHZvaWQgc2Vla2FibGVS
YW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdl
cyYsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKTsK
LSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIHZhbHVlKTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgbGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGxl
Z2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmlj
ZU5hbWUpOwotICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0gICAgdm9pZCBtdXRlZENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCBib29sKTsKLQotICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Ci0gICAgdm9pZCBwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCBwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjcnViYmluZyh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIHZvaWQgZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0g
ICAgdm9pZCBzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOwotICAg
IHZvaWQgZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9p
ZCBiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVn
aW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBlbmRTY2Fu
bmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlv
bih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAgICB2b2lkIHNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKLSAg
ICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJ
ZCk7Ci0gICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCB0b2dnbGVNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2V0
TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKLQotICAgIFdlYlBhZ2UqIG1f
cGFnZTsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqLCB1aW50NjRfdD4g
bV9tZWRpYUVsZW1lbnRzOwotICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVw
bGU+IG1fY29udGV4dE1hcDsKLSAgICB1aW50NjRfdCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCB7IDAgfTsKLSAgICBIYXNoQ291bnRlZFNldDx1aW50NjRfdD4gbV9jbGllbnRDb3VudHM7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk1NjY2YTcxNTRjYzRhOTQ0ZDA0ZWNhODZjYjMwMzAwNmJkNzc4YTEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIC9k
ZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlciB7Ci0gICAgUGxheSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgUGF1c2UodWludDY0X3Qg
Y29udGV4dElkKQotICAgIFRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAg
QmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQotICAgIEVuZFNjcnViYmluZyh1aW50
NjRfdCBjb250ZXh0SWQpCi0gICAgU2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSB0aW1lKQotICAgIEZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi0g
ICAgQmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQotICAgIEJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRW5kU2Nhbm5pbmcodWludDY0
X3QgY29udGV4dElkKQotICAgIFNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4
dElkLCB1aW50NjRfdCBpbmRleCkKLSAgICBTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKLSAgICBIYW5kbGVDb250cm9sbGVkRWxlbWVu
dElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgVG9nZ2xlUGljdHVyZUluUGljdHVy
ZSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgVG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElk
KQotICAgIFNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLX0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1
YTI3ZTQ4YjJhNDI4MjlmYjQ0MjI0YzE3NGQ5YjIzODM1NWI1Zi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAi
QXR0YWNobWVudC5oIgotI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0
ICJXZWJQYWdlLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMu
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCi0j
aW1wb3J0ICJXZWJQcm9jZXNzLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0V2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5n
cy5oPgotI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Vz
ZXJHZXN0dXJlSW5kaWNhdG9yLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB1aW50
NjRfdCBuZXh0Q29udGV4dElkKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udGV4dElkID0g
MDsKLSAgICByZXR1cm4gKytjb250ZXh0SWQ7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQKLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgOiBtX21hbmFn
ZXIoJm1hbmFnZXIpCi0gICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCi17Ci19Ci0KLVdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0KCkKLXsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+cmVzZXRNZWRpYVN0YXRlKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0
aW9uKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZHVyYXRpb25D
aGFuZ2VkKG1fY29udGV4dElkLCBkdXJhdGlvbik7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGlt
ZSwgZG91YmxlIGFuY2hvclRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5jdXJyZW50VGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNo
b3JUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojpi
dWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgaWYgKG1fbWFu
YWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5idWZmZXJlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElk
LCBidWZmZXJlZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17
Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yYXRlQ2hhbmdlZChtX2Nv
bnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIHBsYXliYWNr
U3RhcnRlZFRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiByYW5n
ZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQot
ewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2Vla2FibGVSYW5nZXND
aGFuZ2VkKG1fY29udGV4dElkLCByYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJ
bnRlcnZhbCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIHZhbHVlKQotewotICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgIG1fbWFuYWdlci0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtX2NvbnRl
eHRJZCwgdmFsdWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAg
IGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGlmIChtX21hbmFnZXIpCi0g
ICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9j
b250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBt
X21hbmFnZXItPmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNl
bGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5h
bWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5leHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNl
TmFtZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6d2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAg
aWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZENoYW5nZWQobV9jb250ZXh0SWQsIGRpc2FibGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKLXsK
LSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPm11dGVkQ2hhbmdlZChtX2Nv
bnRleHRJZCwgbXV0ZWQpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyCi0KLVJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBhZ2UpKTsKLX0KLQotV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQot
ICAgIDogbV9wYWdlKCZwYWdlKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7Ci19Ci0KLVdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6On5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKLXsKLSAgICBmb3Ig
KGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0
cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgICAg
IHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdHVwbGU7Ci0gICAgICAgIG1vZGVsLT5yZW1v
dmVDbGllbnQoKmludGVyZmFjZSk7Ci0gICAgICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVs
bHB0cik7Ci0KLSAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAg
bV9jb250ZXh0TWFwLmNsZWFyKCk7Ci0gICAgbV9tZWRpYUVsZW1lbnRzLmNsZWFyKCk7Ci0gICAg
bV9jbGllbnRDb3VudHMuY2xlYXIoKTsKLQotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbCA9IFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwotICAg
IG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFjZSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3R1
cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRl
cmZhY2VUdXBsZSgpKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0
SWQpOwotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJDb3Jl
OjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVybiAq
c3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0KLVdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpz
dGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+
IG1vZGVsOwotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1l
ZGlhRWxlbWVudCA9IG1vZGVsLT5tZWRpYUVsZW1lbnQoKTsKLSAgICBtb2RlbC0+c2V0TWVkaWFF
bGVtZW50KG51bGxwdHIpOwotICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7Ci0g
ICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7Ci0gICAgbV9tZWRpYUVsZW1lbnRzLnJlbW92ZSht
ZWRpYUVsZW1lbnQuZ2V0KCkpOwotICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElk
KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JD
b250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRDb3VudHMu
Y29udGFpbnMoY29udGV4dElkKSk7Ci0gICAgaWYgKG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250
ZXh0SWQpKQotICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCi17Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgIGF1dG8gZm91bmRJdGVyYXRvciA9IG1fbWVkaWFFbGVtZW50cy5maW5kKCZtZWRpYUVs
ZW1lbnQpOwotICAgIGlmIChmb3VuZEl0ZXJhdG9yICE9IG1fbWVkaWFFbGVtZW50cy5lbmQoKSkg
ewotICAgICAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBmb3VuZEl0ZXJhdG9yLT52YWx1ZTsKLSAg
ICAgICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQp
Ci0gICAgICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkKTsKLSAgICAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMu
ZW5zdXJlKCZtZWRpYUVsZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOwot
ICAgICAgICBhdXRvIGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAg
ICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkKLSAgICAgICAgICAgIHJlbW92ZUNs
aWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgICAgICBtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IGNvbnRleHRJZDsKLSAgICAgICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7Ci0gICAgfQotCi0gICAg
YWRkQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNldFVw
UGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQotewotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkKTsKLSAgICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNsZWFyUGxheWJh
Y2tDb250cm9sc01hbmFnZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0jZW5kaWYKLX0KLQotdWlu
dDY0X3QgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y29udGV4dElkRm9yTWVkaWFFbGVtZW50
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKLXsKLSAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5lbnN1cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsgcmV0
dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7Ci0gICAgdWludDY0X3QgY29udGV4dElkID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE1lZGlh
RWxlbWVudCgmbWVkaWFFbGVtZW50KTsKLSAgICByZXR1cm4gY29udGV4dElkOwotfQotCi0jcHJh
Z21hIG1hcmsgSW50ZXJmYWNlIHRvIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmR1cmF0aW9u
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RHVyYXRp
b25DaGFuZ2VkKGNvbnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQotewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjpDdXJyZW50VGltZUNoYW5nZWQoY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSks
IG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRU
aW1lKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpCdWZmZXJlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgYnVmZmVyZWRUaW1lKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxh
eWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY29udGV4
dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSYXRlQ2hhbmdlZChj
b250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdl
cywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi17
Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlc1ZlY3RvcjsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7Ci0g
ICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuc3RhcnQoaSkudG9Eb3Vi
bGUoKTsKLSAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuZW5kKGkpLnRv
RG91YmxlKCk7Ci0gICAgICAgIHJhbmdlc1ZlY3Rvci5hcHBlbmQoeyBzdGFydCwgZW5kIH0pOwot
ICAgIH0KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6U2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKGNvbnRleHRJZCwgV1RGTW92ZShy
YW5nZXNWZWN0b3IpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjYW5Q
bGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6Q2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjb250ZXh0SWQsIHZhbHVlKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
LXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9u
cywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdl
LT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJu
YWxQbGF5YmFja0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBl
LCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJuYWxQbGF5YmFja1Byb3Bl
cnRpZXNDaGFuZ2VkKGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRh
cmdldFR5cGUpLCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OkF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxlY3RlZEluZGV4
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCi17Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Oldp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFuZ2VkKGNvbnRleHRJZCwg
bXV0ZWQpKTsKLX0KLQotI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OgotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXko
dWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRv
cihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxh
eSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBhdXNlKCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2
NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBs
YXlTdGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmJlZ2luU2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLmVuZFNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKLXsK
LSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWtUb1RpbWUodGltZSk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgdGltZSkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZhc3RTZWVr
KHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVpbnQ2NF90
IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjYW5uaW5n
KCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRp
YU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewotICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9u
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi17Ci0gICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1
ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGVsZW1lbnQgPSBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLm1lZGlhRWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50KQotICAgICAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6SGFu
ZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNvbnRleHRJZCwgZWxlbWVudC0+Z2V0SWRB
dHRyaWJ1dGUoKSkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQotewotICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkudG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZU11dGVkKCk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sIG11dGVkKQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TXV0ZWQobXV0
ZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTlhMDBm
MTFhZWE0NDRmOTY4NTEzNWI5OTcwY2NhMmQ4YWU3MzI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgKFBMQVRGT1JNKElPUykgJiYgSEFW
RShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCi0KLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnRFbnVt
cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgQXR0YWNobWVudDsKLWNsYXNzIENv
bm5lY3Rpb247Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgTWVzc2FnZVJlY2VpdmVyOwotfQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBOb2RlOwotfQotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKLWNsYXNzIFdl
YlBhZ2U7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OwotY2xhc3Mg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKLSAgICA6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+Ci0gICAg
LCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gY3Jl
YXRlKFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7Ci0gICAgfQotICAgIHZpcnR1
YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKTsKLQotICAgIHZvaWQgaW52
YWxpZGF0ZSgpIHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi0gICAgTGF5ZXJIb3N0aW5nQ29u
dGV4dCogbGF5ZXJIb3N0aW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4
dC5nZXQoKTsgfQotICAgIHZvaWQgc2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9w
dHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4mJik7Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nKCkgY29u
c3QgeyByZXR1cm4gbV9pc0FuaW1hdGluZzsgfQotICAgIHZvaWQgc2V0SXNBbmltYXRpbmcoYm9v
bCBmbGFnKSB7IG1faXNBbmltYXRpbmcgPSBmbGFnOyB9Ci0KLSAgICBib29sIHRhcmdldElzRnVs
bHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0SXNGdWxsc2NyZWVuOyB9Ci0gICAgdm9p
ZCBzZXRUYXJnZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1fdGFyZ2V0SXNGdWxsc2NyZWVu
ID0gZmxhZzsgfQotCi0gICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIGZ1bGxzY3JlZW5Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVu
TW9kZTsgfQotICAgIHZvaWQgc2V0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIHsgbV9mdWxsc2NyZWVuTW9kZSA9
IG1vZGU7IH0KLQotICAgIGJvb2wgaXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1
bGxzY3JlZW47IH0KLSAgICB2b2lkIHNldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV9pc0Z1
bGxzY3JlZW4gPSBmbGFnOyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDbGllbnQKLSAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikg
b3ZlcnJpZGU7Ci0KLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlciogbV9tYW5hZ2VyOwotICAgIHVpbnQ2NF90IG1fY29udGV4dElk
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGlu
Z0NvbnRleHQ7Ci0gICAgYm9vbCBtX2lzQW5pbWF0aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
dGFyZ2V0SXNGdWxsc2NyZWVuIHsgZmFsc2UgfTsKLSAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9mdWxsc2NyZWVuTW9kZSB7IFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUgfTsKLSAgICBi
b29sIG1faXNGdWxsc2NyZWVuIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYsIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXImKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
KCk7Ci0gICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgCi0gICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQot
ICAgIC8vIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQKLSAgICBib29sIHN1cHBvcnRzVmlkZW9G
dWxsc2NyZWVuKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSkgY29uc3Q7Ci0gICAgdm9pZCBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVu
dChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYpOwotICAgIHZvaWQgZXhp
dFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVv
RWxlbWVudCYsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDsKLQotICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIoV2ViUGFnZSYsIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXImKTsKLQotICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ+LCBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVs
SW50ZXJmYWNlVHVwbGU7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgZW5z
dXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBhZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0KLSAgICAvLyBJbnRlcmZhY2UgdG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dAotICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBoYXNWaWRlbyk7Ci0gICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci0KLSAgICAvLyBNZXNz
YWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQotICAgIHZvaWQgcmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKTsK
LSAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQ
Qzo6QXR0YWNobWVudCBmZW5jZVBvcnQpOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHlF
bnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSk7Ci0gICAgdm9pZCBmdWxs
c2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgIHZvaWQgZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKTsK
LSAgICAKLSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQqLCB1aW50NjRfdD4gbV92aWRlb0VsZW1lbnRzOwotICAgIEhhc2hNYXA8
dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKLSAgICB1aW50NjRf
dCBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90
LCBpbnQ+IG1fY2xpZW50Q291bnRzOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3Nh
Z2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzU5YzI1YWFlN2IwMTVlMzAx
M2Q5YTFiMTUwN2I2MTBhMmZiY2E1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAot
IyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAot
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgKFBMQVRGT1JNKElP
UykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi1tZXNzYWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIHsK
LSAgICBSZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVu
TW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKLSAgICBEaWRTZXR1cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKQotICAgIERpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICBEaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotICAgIERpZENs
ZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBTZXRWaWRlb0xheWVyRnJh
bWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJ
UEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQotICAgIFNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1
aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpCi0gICAgRnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCi0gICAgRnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxl
KQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2Ev
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MGE0MGZkNzJkMWQwNWNjZGQ2MzVkOTBhYWFmZjQzYzhjMTM0MzYzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsNDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKLQotI2lmIChQTEFURk9STShJT1Mp
ICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBdHRhY2htZW50LmgiCi0jaW1wb3J0ICJMb2dnaW5n
LmgiCi0jaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIldlYlBhZ2Uu
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbXBvcnQgIldlYlBy
b2Nlc3MuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oIgot
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBv
cnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5o
PgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVz
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1M
VmlkZW9FbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2lt
cG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXll
ckJhY2tpbmcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlkZW8uaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBJ
bnRSZWN0IGlubGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxlbWVudCYgZWxlbWVudCkKLXsKLSAg
ICBlbGVtZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7Ci0gICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFy
ZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIHJlY3QgPSByZW5kZXJlci0+
dmlkZW9Cb3goKTsKLSAgICByZWN0Lm1vdmVCeShyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoKS5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLnZpZXco
KS0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIDogbV9tYW5h
Z2VyKCZtYW5hZ2VyKQotICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQotewotfQotCi1XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5n
Q29udGV4dD4mJiBjb250ZXh0KQotewotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdURk1v
dmUoY29udGV4dCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgaWYgKG1fbWFuYWdlcikK
LSAgICAgICAgbV9tYW5hZ2VyLT5oYXNWaWRlb0NoYW5nZWQobV9jb250ZXh0SWQsIGhhc1ZpZGVv
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2aWRlb0Rp
bWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAg
IGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChtX2NvbnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcgotCi1SZWY8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4g
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlLCBwbGF5YmFja1Nl
c3Npb25NYW5hZ2VyKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKLSAgICA6IG1fcGFnZSgmcGFnZSkKLSAgICAsIG1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlcihwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKQotewotICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgp
LCAqdGhpcyk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZh
bHVlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0g
dHVwbGU7Ci0KLSAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKLSAgICAg
ICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKLQotICAgICAgICBpbnRlcmZhY2Ut
PmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKLSAgICBt
X3ZpZGVvRWxlbWVudHMuY2xlYXIoKTsKLSAgICBtX2NsaWVudENvdW50cy5jbGVhcigpOwotICAg
IAotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9wYWdlKTsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsKLX0KLQotV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwotICAgIG1f
cGxheWJhY2tTZXNzaW9uTWFuYWdlci0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwot
Ci0gICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRl
eHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7Ci0gICAgbW9kZWwtPmFkZENs
aWVudCgqaW50ZXJmYWNlKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZSht
b2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkp
OwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1
cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwwPihl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQotV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAg
ICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNv
bnRleHRJZCk7Ci0KLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPnJlbW92ZUNsaWVudEZv
ckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRl
b0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7Ci0gICAgbW9kZWwtPnNldFZpZGVvRWxl
bWVudChudWxscHRyKTsKLSAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAg
IGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIG1fdmlkZW9FbGVtZW50cy5yZW1vdmUodmlk
ZW9FbGVtZW50LmdldCgpKTsKLSAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50Rm9yQ29udGV4dCh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsaWVudENvdW50
cy5hZGQoY29udGV4dElkLCAxKTsKLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQp
Ci17Ci0gICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotCi0g
ICAgaW50IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7Ci0gICAg
QVNTRVJUKGNsaWVudENvdW50ID4gMCk7Ci0gICAgY2xpZW50Q291bnQtLTsKLQotICAgIGlmIChj
bGllbnRDb3VudCA8PSAwKSB7Ci0gICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0
SWQpOwotICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7
Ci19Ci0KLSNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50OgotCi1ib29sIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdAot
ewotI2lmIFBMQVRGT1JNKElPUykKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgcmV0dXJu
IFNldHRpbmdzOjphdktpdEVuYWJsZWQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1vZGUgPT0gSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSAm
JiBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhU
TUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgQVNTRVJU
KG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7
Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZp
ZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCglcCkiLCB0aGlzKTsKLQotICAgIHVpbnQ2NF90
IGNvbnRleHRJZCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+Y29udGV4dElkRm9yTWVkaWFF
bGVtZW50KHZpZGVvRWxlbWVudCk7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZpZGVvRWxlbWVu
dHMuYWRkKCZ2aWRlb0VsZW1lbnQsIGNvbnRleHRJZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGFkZFJl
c3VsdCk7Ci0gICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPT0gY29udGV4dElk
KTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgYWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwot
ICAgIGlmICghaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpCi0gICAgICAgIGludGVy
ZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVG
b3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOwotCi0gICAgYXV0byB2aWRlb1JlY3QgPSBpbmxp
bmVWaWRlb0ZyYW1lKHZpZGVvRWxlbWVudCk7Ci0gICAgRmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFt
ZSA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlkZW9SZWN0LmhlaWdodCgp
KTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBvbGRN
b2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOwotICAgIGludGVyZmFjZS0+c2V0VGFy
Z2V0SXNGdWxsc2NyZWVuKHRydWUpOwotICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUo
bW9kZSk7Ci0gICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudCgmdmlkZW9FbGVtZW50KTsKLSAgICBp
ZiAob2xkTW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVO
b25lKQotICAgICAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKHZpZGVvTGF5ZXJGcmFtZSk7
Ci0KLSAgICBpZiAoaW50ZXJmYWNlLT5pc0FuaW1hdGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyh0cnVlKTsKLQotICAgIGJvb2wgYWxsb3dzUGlj
dHVyZUluUGljdHVyZSA9IHZpZGVvRWxlbWVudC53ZWJraXRTdXBwb3J0c1ByZXNlbnRhdGlvbk1v
ZGUoSFRNTFZpZGVvRWxlbWVudDo6VmlkZW9QcmVzZW50YXRpb25Nb2RlOjpQaWN0dXJlSW5QaWN0
dXJlKTsKLSAgICAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNl
LT5sYXllckhvc3RpbmdDb250ZXh0KCktPmNvbnRleHRJRCgpLCB2aWRlb1JlY3QsIG1fcGFnZS0+
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpLCBhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCi17Ci0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlk
ZW9FbGVtZW50KCVwKSIsIHRoaXMpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVCht
X3ZpZGVvRWxlbWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOwotCi0gICAgdWludDY0X3Qg
Y29udGV4dElkID0gbV92aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKLSAgICBhdXRv
JiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFj
ZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotCi0gICAgaWYgKGludGVyZmFjZS5pc0Fu
aW1hdGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnRlcmZhY2Uuc2V0SXNBbmltYXRp
bmcodHJ1ZSk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCwgaW5saW5lVmlkZW9GcmFtZSh2
aWRlb0VsZW1lbnQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24o
V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKLXsKLSAgICBM
T0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxz
Y3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKCVwKSIsIHRoaXMpOwotCi0jaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgQVNTRVJUKG1fcGFn
ZSk7Ci0gICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlucygmdmlkZW9FbGVtZW50KSk7
Ci0KLSAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2aWRlb0Vs
ZW1lbnQpOwotICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQp
OwotCi0gICAgaW50ZXJmYWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0KLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhp
dEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9kZSks
IG1fcGFnZS0+cGFnZUlEKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odmlkZW9FbGVtZW50
KTsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0TW9kZSk7Ci0jZW5kaWYKLX0KLQotI3ByYWdtYSBt
YXJrIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OgotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omhhc1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEhh
c1ZpZGVvKGNvbnRleHRJZCwgaGFzVmlkZW8pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAg
aWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OlNldFZpZGVvRGltZW5zaW9ucyhjb250ZXh0SWQsIHZpZGVvRGlt
ZW5zaW9ucyksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi0jcHJhZ21hIG1hcmsgTWVzc2FnZXMg
ZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUs
IGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5y
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUobW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwotfQotCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7Ci0KLSAg
ICBBU1NFUlQobV9wYWdlKTsKLSAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NBTGF5
ZXIgbGF5ZXJdOwotI2lmbmRlZiBOREVCVUcKLSAgICBbdmlkZW9MYXllciBzZXROYW1lOkAiV2Vi
IHZpZGVvIGZ1bGxzY3JlZW4gbWFuYWdlciBsYXllciJdOwotI2VuZGlmCi0KLSAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVT
XTsKLQotICAgIFt2aWRlb0xheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDAsIDApXTsKLSAg
ICBbdmlkZW9MYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpD
b2xvcjo6dHJhbnNwYXJlbnQpXTsKLQotICAgIC8vIFNldCBhIHNjYWxlIGZhY3RvciBoZXJlIHRv
IG1ha2UgY29udmVydFJlY3Q6dG9MYXllcjpuaWwgdGFrZSBzY2FsZSBmYWN0b3IgaW50byBhY2Nv
dW50LiA8cmRhcjovL3Byb2JsZW0vMTgzMTY1NDI+LgotICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9y
IGlzIGludmVydGVkIGluIHRoZSBob3N0aW5nIHByb2Nlc3MuCi0gICAgZmxvYXQgaG9zdGluZ1Nj
YWxlRmFjdG9yID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIFt2aWRlb0xheWVy
IHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3Rvciwg
aG9zdGluZ1NjYWxlRmFjdG9yLCAxKV07Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFj
ZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNl
LT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKLQotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIAotICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyLCBbcHJv
dGVjdGVkVGhpcywgdGhpcywgY29udGV4dElkXSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250ZXh0SWRd
IHsKLSAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OkVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJ
RCgpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gY29t
bWl0XTsKLX0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbiglcCwgJXgpIiwgdGhp
cywgY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldElzQW5p
bWF0aW5nKGZhbHNlKTsKLSAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0K
LSAgICBpZiAoaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52
aWRlb0VsZW1lbnQoKTsKLSAgICBpZiAoIXZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0
ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdmlkZW9FbGVtZW50XSB7Ci0gICAgICAg
IGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5l
eGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQpOwotICAgIH0p
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVu
KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCVwLCAleCkiLCB0aGlzLCBjb250ZXh0
SWQpOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBt
b2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAKLSAgICBtb2RlbC0+d2FpdEZvclByZXBhcmVk
Rm9ySW5saW5lVGhlbihbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVs
XSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtw
cm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxdIHsKLSAgICAgICAgICAg
IG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0ZWRUaGlzLCBjb250
ZXh0SWQsIGludGVyZmFjZV0gewotICAgICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFj
ZV0gewotICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250
ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5n
Q29udGV4dCgpLT5zZXRSb290TGF5ZXIobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0cik7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFn
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVl
bihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLSAg
ICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRl
eHRJZCk7Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhm
YWxzZSk7Ci0gICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlID0gaW50ZXJmYWNlLT5m
dWxsc2NyZWVuTW9kZSgpOwotICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuID0gaW50ZXJmYWNl
LT50YXJnZXRJc0Z1bGxzY3JlZW4oKTsKLQotICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihuaWwpOwotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBt
b2RlbC0+dmlkZW9FbGVtZW50KCk7Ci0KLSAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIHJl
bW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLQotICAgIGlmICghdmlkZW9FbGVtZW50
IHx8ICF0YXJnZXRJc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRl
b0VsZW1lbnQsIG1vZGVdIHsKLSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKLSAg
ICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVt
ZW50KCp2aWRlb0VsZW1lbnQsIG1vZGUpOwotICAgIH0pOwotfQotICAgIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29u
dGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
c2V0VmlkZW9MYXllckdyYXZpdHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZp
dHkpZ3Jhdml0eSk7Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdl
VmlzaWJsZSkKLXsKLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byYgbW9kZWwgPSBlbnN1cmVNb2RlbChjb250ZXh0SWQpOwotCi0gICAgaWYgKCFpc1BhZ2VWaXNp
YmxlKQotICAgICAgICBtb2RlbC52aWRlb0VsZW1lbnQoKS0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZp
c2libGUoZmFsc2UpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVl
LCBpbmxpbmVWaWRlb0ZyYW1lKCptb2RlbC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLX0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9M
YXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJv
dW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwg
IldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCglcCwg
JXgpIiwgdGhpcywgY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0KLSAgICBpZiAoc3RkOjpp
c25hbihib3VuZHMueCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy55KCkpIHx8IHN0ZDo6aXNuYW4o
Ym91bmRzLndpZHRoKCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLmhlaWdodCgpKSkgewotICAgICAg
ICBhdXRvIHZpZGVvUmVjdCA9IGlubGluZVZpZGVvRnJhbWUoKm1vZGVsLT52aWRlb0VsZW1lbnQo
KSk7Ci0gICAgICAgIGJvdW5kcyA9IEZsb2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwg
dmlkZW9SZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVn
aW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwotICAgIGlm
IChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKLSAgICAgICAgaW50ZXJmYWNlLT5s
YXllckhvc3RpbmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgpKTsKLSAg
ICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7Ci0gICAgbWFjaF9wb3J0X2RlYWxs
b2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7Ci0gICAgW0NBVHJhbnNh
Y3Rpb24gY29tbWl0XTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5k
ZXggMjQzMzVhY2E1NmZmODQ5MWI1YTEzMjE2MmE3ZDk0MWMxMWQwODUxOS4uZmVhY2M2NWVlMGNi
ZmZhNzA3MjAwODMzMjk2OGI4Y2I4ZThiYTUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMzE2LDggKzMxNiw4IEBACiAKIAogI2lmIFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29y
ZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0lOVEVS
QUNUSU9OKQpAQCAtOTI2NSwxMSArOTI2NSwxMSBAQCAtICh2b2lkKV9zZXRVcFBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyRm9yTWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jgog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2Rl
bCkKLSAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOworICAgICAgICBfcHJpdmF0ZS0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3Jl
YXRlKCk7CiAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsLT5zZXRNZWRpYUVsZW1l
bnQoJm1lZGlhRWxlbWVudCk7CiAKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UpCi0gICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNr
U2Vzc2lvbk1vZGVsKTsKKyAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKCpfcHJpdmF0ZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwpOwogCiAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCmluZGV4IGE3OGIwOTBl
MDdiZTQzNjE5NmE2OTVjYTEyODdlODc4ZDI2NjYxY2MuLmJkZWRmNzczZGRmZGUwNjZmYTUyZTE3
NTZjYjY4MjIyNzQ2Y2Y0Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViVmlld0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlZpZXdEYXRhLmgKQEAgLTU0LDggKzU0LDggQEAgY2xhc3MgUGFnZTsKIGNsYXNzIFRleHRJ
bmRpY2F0b3JXaW5kb3c7CiBjbGFzcyBWYWxpZGF0aW9uQnViYmxlOwogI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotY2xhc3MgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitjbGFzcyBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDsKICNlbmRpZgogfQogCkBAIC0zMzgsOCArMzM4LDgg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpCi0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50PiBwbGF5YmFja1Nlc3Npb25Nb2RlbDsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBwbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50PiBwbGF5YmFja1Nlc3Npb25Nb2RlbDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjPiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAjZW5kaWYKICAg
ICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQppbmRleCA3Nzk3MzZhMTZhZmY2MGUzZmE1YTBhYzdl
YTM2NDA2ZGMzNjRmMmU0Li5mOTMwZmE5NmM4ODViYmZmNzQwNGYwNzIzNTk2NzU5NTVmYzRiODMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRh
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0K
QEAgLTUxLDggKzUxLDggQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0jaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQuaD4KICNlbmRpZgogCiBCT09MIGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZyA9IE5POwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316620</attachid>
            <date>2017-07-27 22:44:24 -0700</date>
            <delta_ts>2017-07-28 00:25:46 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-174437-20170727224423.patch</filename>
            <type>text/plain</type>
            <size>694161</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5OTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmExOWZhNmYzNWJlZDhi
YjMzNDAxYzgwMDUwMWY4OTg1MDQ5MDc4ZC4uYTAzYWEyYzI5MDEwY2VmMTMwYjQ0MGZlODJmYjAz
ZjE3YTRmZDBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE3LTA3LTIxICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgV2ViIHByZWZp
eCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbiBhbmQgV2ViUGxheWJhY2tTZXNzaW9uIGNsYXNzZXMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0MzcK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVz
dHMgYmVjYXVzZSBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgUmVtb3ZlIHJlZHVuZGFu
dCBXZWItIHByZWZpeCBmcm9tIGNsYXNzZXMgaW4gV2ViQ29yZSBuYW1lc3BhY2UuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmguCisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2U6On5QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1BsYXliYWNrU2Vzc2lvbk1vZGVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oLgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tTZXNzaW9uTW9kZWw6On5QbGF5YmFja1Nlc3Npb25Nb2RlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDo6flBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ojpl
eHRlcm5hbFBsYXliYWNrQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmguCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9W
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOjp+VmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1ZpZGVvRnVs
bHNjcmVlbk1vZGVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxs
c2NyZWVuTW9kZWw6On5WaWRlb0Z1bGxzY3JlZW5Nb2RlbCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudDo6flZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nv
Y29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0uCisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0uCisgICAg
ICAgICogcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0uCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJB
VlBsYXllckNvbnRyb2xsZXIubW06CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmguCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbTogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
bW0uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbToKKwogMjAxNy0wNy0yNyAgSmVyZW15IEpv
bmVzICA8amVyZW15akBhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3Qgb3ZlcnJpZGUgX2FsbG93
c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayBpbiBNZWRpYURvY3VtZW50IHdpdGggcGxheXNp
bmxpbmVBdHRyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBiMDU4ZGYzYmUxMjk4MzExNWUwMmVmMzhmMThiZTM2ZGZj
OTM4OTc2Li5lOGYyZjNjODAyNmFhYTJlMDhhN2JiNjYzYTkyNDk3YWQ1NTdlZDgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTA3LTIxICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFw
cGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgV2ViIHByZWZpeCBmcm9tIFdlYlZpZGVvRnVsbHNj
cmVlbiBhbmQgV2ViUGxheWJhY2tTZXNzaW9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0MzcKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBSZW1vdmUgcmVkdW5kYW50IFdlYi0gcHJlZml4IGZy
b20gY2xhc3NlcyBpbiBXZWJLaXQgbmFtZXNwYWNlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMubWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
LgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHku
bW06IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tOiBSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnVwZGF0ZU1lZGlhVG91Y2hCYXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjptX3dlYWtQdHJGYWN0b3J5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcik6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjp2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXIubW06IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2Nv
Y29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaC4KKyAgICAgICAgKFdlYktpdDo6VmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
ZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1dl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW06IFJlbW92ZWQuCisKIDIwMTctMDctMjcgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFBhcnQgMiBvZjogUmVuYW1l
IERhdGFiYXNlUHJvY2VzcyB0byBTdG9yYWdlUHJvY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwppbmRleCBhYWVkZTg5MzcyM2E1MjBiODJmMDJhYjM4OTdlZjY5NTgyOWY3ZDRlLi44ZWNh
Zjc1YzNiMzdkMDE5MjQ0MTc0ZGY2ZTYyZGIwNzRlMDA0MWM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDctMjEgIEplcmVteSBKb25lcyAgPGpl
cmVteWpAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBXZWIgcHJlZml4IGZyb20gV2ViVmlk
ZW9GdWxsc2NyZWVuIGFuZCBXZWJQbGF5YmFja1Nlc3Npb24gY2xhc3Nlcy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDQzNworCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlbW92ZSByZWR1bmRhbnQgV2ViLSBw
cmVmaXggZnJvbSBjbGFzc2VzIGluIFdlYktpdCBuYW1lc3BhY2UuCisKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX3NldFVwUGxheWJhY2tDb250cm9s
c01hbmFnZXJGb3JNZWRpYUVsZW1lbnQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0
YS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEubW06CisKIDIwMTctMDctMjYgIEJy
aWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFdFQl9USU1JTkcg
ZmVhdHVyZSBmbGFnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYmU0NjAwZGVhMzAxZmE3MzA5YTY1ZmZjMTI3NmJiNWRhN2UxNjYy
OC4uOTdkN2QyMzk4MjBiZThkMzJjZWRmMjk3NDc2ZTYyNzM3M2E2Y2YxYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY4Myw4
ICsxNjgzLDggQEAKIAkJM0Y4MDIwMzYxRTlFNDdDMzAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1
cmVEZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gM0Y4MDIwMzExRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3Bw
ICovOyB9OwogCQkzRjgwMjAzNzFFOUU0N0M1MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDNGODAyMDM0MUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlci5oICovOyB9OwogCQkzRjgwMjAzODFFOUU0N0M5MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gM0Y4MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmNwcCAqLzsgfTsKLQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovOyB9OwotCQkzRkJDNEFGNDE4OTg4MTU2
MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2
RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2
RUUzOCAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKKwkJM0ZCQzRBRjQxODk4
ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFGMjE4OTg4MTU2MDA0
NkVFMzggLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzRkYxRkE2NjFFNzM1MEZEMDBDMTAw
MkYgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi87IH07CiAJCTNGRjgxM0E3MURCQTg2NDAwMDlCRjAwMSAv
KiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDRkM0MzRGMTkyNDA2QTkwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0Nv
bnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzRkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE2
MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovOyB9OwpAQCAt
MjQ2MywxMSArMjQ2MywxMSBAQAogCQk1MUZCNTUwNTExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9z
ZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRkI1NTAzMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovOyB9OwogCQk1
MUZCNjdEQjFBRTZCODJCMDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjY3RDkx
QUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmNwcCAqLzsgfTsK
IAkJNTFGQjY3REMxQUU2QjgyRjAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNjdE
QTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MjEzMUU1QjFDNEYx
NTc2MDAzM0Y4MDIgLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzFFNUExQzRGMTU2MTAw
MzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLzsgfTsKKwkJNTIx
MzFFNUIxQzRGMTU3NjAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMxRTVBMUM0
RjE1NjEwMDMzRjgwMiAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi87IH07CiAJ
CTUyNjcyNEYzMUNCMkZFQUQwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29h
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzI0
RjExQ0IyRkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0gKi87
IH07CiAJCTUyQjBENEJFMUM1N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjBENEJEMUM1N0ZEMUUw
MDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTUyQjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyQjBENEMxMUM1N0ZGOTEwMDc3Q0U1MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUy
QjBENEMyMUM1N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjBENEMxMUM1
N0ZGOTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkI2QzlDMjE1RTNGNERG
MDA2OTBCMDUgLyogRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkI2QzlCRDE1RTNGNERGMDA2OTBCMDUgLyog
RE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTUyQjZDOUMzMTVFM0Y0REYwMDY5
MEIwNSAvKiBET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkI2QzlCRTE1RTNGNERGMDA2OTBCMDUgLyogRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbi5oICovOyB9OwogCQk1MkI2QzlDNTE1RTNGNERGMDA2OTBCMDUgLyog
TmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkI2QzlDMDE1RTNGNERGMDA2OTBCMDUgLyogTmFtZWRGbG93Q29sbGVj
dGlvbi5jcHAgKi87IH07CkBAIC0yNDc1LDkgKzI0NzUsOSBAQAogCQk1MkNDQTlFMjE1RTNGNjJD
MDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0NBOUUwMTVFM0Y2MkMwMDUzQzc3RiAv
KiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk1MkNDQTlFMzE1RTNGNjJD
MDA1M0M3N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNDQTlFMTE1RTNGNjJDMDA1M0M3N0YgLyog
SlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggKi87IH07CiAJCTUyRDVBMThGMUM1NDU5MjMwMERF
MzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTE4RDFDNTQ1OTAzMDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1tICovOyB9OwotCQk1MkQ1QTFBNzFDNTc0ODlE
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OworCQk1MkQ1QTFBNzFDNTc0ODlE
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNTJENUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJENUExQTYxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lm1tICovOyB9OwogCQk1MkUyQ0FGQzE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQ
cm9kdWNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkYxMDg2NTE2MkI2REE0MDA5
QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRD
b250ZW50Q2hlY2tlci5jcHAgKi87IH07CiAJCTUyRjEwODY2MTYyQjZEQTgwMDlBQzgxRSAvKiBN
aXhlZENvbnRlbnRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02
MTY5LDE1ICs2MTY5LDE1IEBACiAJCUNEQTA3RkJFMThFMEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1T
bGVlcExpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREEwN0ZCQzE4RTBBMTZBMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQTA3RkMx
MThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDdGQkYxOEUwQTIyQjAwNDY5
OUZBIC8qIFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0gKi87IH07CiAJCUNEQTA3RkMyMThFMEEy
MkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwN0ZDMDE4RTBBMjJCMDA0Njk5RkEgLyog
U3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oICovOyB9OwotCQlDREEyOUEwOTFDQkQ5OUY0MDA5MDFD
Q0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREEyOUEwQTFDQkQ5QTc0MDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlD
REEyOUEwRTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEyOUEwQzFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi87IH07Ci0JCUNEQTI5QTBGMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMEQxQ0JEOUNGRTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQTI5QTE0MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMubW0gKi87IH07Ci0JCUNEQTI5QTE3MUNCREE1NkMwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRjFDQkY3M0ZDMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gKi87IH07CisJCUNEQTI5QTA5MUNCRDk5RjQwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTA4MUNCRDk5RjQwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDREEyOUEwQjFDQkQ5QTc0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNEQTI5QTBFMUNC
RDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTBDMUNCRDlD
RkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSAqLzsgfTsK
KwkJQ0RBMjlBMEYxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlD
REEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTQx
Q0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLzsgfTsK
KwkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlB
MTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNEQTI5QTMwMUNC
Rjc0RDQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJGMUNCRjczRkMw
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKIAkJQ0RB
MjlBMzExQ0JGNzREQTAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTJEMUNCRjczRkMw
MDkwMUNDRiAvKiBXZWJBVlBsYXllckNvbnRyb2xsZXIubW0gKi87IH07Ci0JCUNEQTI5QTMyMUND
MDFBOTUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMkUxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RBMjlBMzIxQ0MwMUE5
NTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyRTFDQkY3M0ZDMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREE3OTgyNDE3MEEyNTgzMDBENDVDNTUg
LyogQXVkaW9TZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTc5ODIzMTcwQTI1ODMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uY3BwICov
OyB9OwogCQlDREE3OTgyNzE3MEEyNzkxMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNzk4MjUxNzBB
Mjc5MDAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSAqLzsgfTsKIAkJQ0RBNzk4MkExNzBB
M0QwMDAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlvU2Vz
c2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC05MjkzLDggKzkyOTMsOCBAQAogCQkzRjgwMjAzMjFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1
ZGlvQ2FwdHVyZURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3Jl
QXVkaW9DYXB0dXJlRGV2aWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODAy
MDMzMUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3JlQXVkaW9DYXB0dXJlRGV2
aWNlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODAyMDM0MUU5
RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUzOCAvKiBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NWaWV3cG9y
dFJ1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkZGRjlBNzE1OUQ5QTU1
MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzRkZGRjlBQjE1OUQ5QjA2MDAyMEJCRDUgLyogVmlld3BvcnRTdHlsZVJlc29s
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdwb3J0U3R5
bGVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE4NiwxMiAr
MTAxODYsMTIgQEAKIAkJNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nsb3NlRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNjdEOTFBRTZCNUU0MDBEMDZDNUEg
LyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUZCNjdEQTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4
dGVuc2lvblN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29u
dGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTIx
MzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjExQ0Iy
RkRGNjAwNzU5NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMjFDQjJGREY2MDA3
NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjBENEJEMUM1N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9y
bVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1WaWV3Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyQjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJC
MEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkQxNUUzRjRERjAwNjkw
QjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyQjZDOUJFMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dD
b2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNkM5QkYxNUUz
RjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IERPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTAyMDEsOSArMTAyMDEsOSBAQAogCQk1MkNDQTlFMTE1RTNGNjJDMDA1M0M3
N0YgLyogSlNET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkQ1QTE4RDFDNTQ1OTAzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlk
ZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkQ1QTE4RTFDNTQ1OTAzMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkxheWVy
TWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBNDFDNTc0ODg5
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTJENUExQTUxQzU3NDg4OTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUyRDVBMUE2MUM1NzQ4ODkwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExQTUxQzU3
NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUE2MUM1NzQ4ODkwMERF
MzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkUyQ0FGQjE5RkYwMjA3MDAx
RUVCNEYgLyogTWVkaWFQcm9kdWNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZWRpYVByb2R1Y2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjEwODYy
MTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1peGVkQ29udGVudENoZWNrZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRD
b250ZW50Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaXhlZENv
bnRlbnRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDY3MSwxNiAr
MTQ2NzEsMTYgQEAKIAkJQ0RBMDdGQkMxOEUwQTE2QTAwNDY5OUZBIC8qIFN5c3RlbVNsZWVwTGlz
dGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtU2xlZXBMaXN0
ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEwN0ZCRjE4RTBBMjJCMDA0
Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFN5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEQTA3RkMwMThFMEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVl
cExpc3RlbmVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVNs
ZWVwTGlzdGVuZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMDgx
Q0JEOTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDREEyOUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQ0RBMjlBMTQxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlB
MDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMEExQ0JEOUE3NDAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1vZGVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXliYWNrU2Vzc2lvbk1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5
QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEy
OUEwRDFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTQxQ0JE
QTU2QzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMTUxQ0JEQTU2QzAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMjlBMkMxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVy
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBVlBsYXll
ckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBMjlBMkQxQ0JG
NzNGQzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkFWUGxheWVyQ29udHJvbGxlci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUNEQTI5QTJGMUNCRjczRkMwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDREEyOUEyRTFDQkY3M0ZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
QTc5ODIxMTcwQTIyREMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXVkaW9TZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTc5ODIzMTcw
QTI1ODMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0RBNzk4MjUxNzBBMjc5MDAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbklPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MDU3LDE0ICsxOTA1NywxNCBAQAogCQkJ
CUUxQTMxNjJDMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMu
bW0gKi8sCiAJCQkJQ0Q1ODk2RTAxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q1ODk2REYxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyLm1tICovLAotCQkJCUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCAqLywKLQkJCQlDREEyOUExNDFDQkRB
NTZDMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tICovLAorCQkJ
CUNEQTI5QTE1MUNCREE1NkMwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
aCAqLywKKwkJCQlDREEyOUExNDFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjLm1tICovLAogCQkJCUNEODIwMzA2MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi8sCiAJCQkJQ0Q4MjAzMDcxMzk1QUI2QTAwRjk1NkM2
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCiAJCQkJQ0Q4MjAzMDgxMzk1
QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAq
LywKIAkJCQlDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5tbSAqLywKLQkJCQk1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi8sCi0JCQkJNTIxMzFFNUExQzRGMTU2
MTAwMzNGODAyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAqLywKKwkJCQk1
MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmgg
Ki8sCisJCQkJNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSAqLywKIAkJCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93
QW5pbWF0aW9uLmggKi8sCiAJCQkJQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5tbSAqLywKIAkJCQk5MzgwRjQ3NzA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0
TWFjLm1tICovLApAQCAtMjEwNjUsMTQgKzIxMDY1LDE0IEBACiAJCQkJRkUwRDg0RUExMDQ4NDM2
RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1tICovLAogCQkJCUY0ODIyMzBGMUUzODY5QjgwMDY2RkM3
OSAvKiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggKi8sCiAJCQkJRjQ4MjIzMEUxRTM4NjlC
ODAwNjZGQzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0gKi8sCi0JCQkJQ0RBMjlB
MkUxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmgg
Ki8sCi0JCQkJQ0RBMjlBMkYxQ0JGNzNGQzAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUFWS2l0Lm1tICovLAorCQkJCUNEQTI5QTJFMUNCRjczRkMwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oICovLAorCQkJCUNEQTI5QTJGMUNCRjczRkMwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQkxRjg3NTZC
MTFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8s
CiAJCQkJMUY4NzU2QjAxRTIyQkVFRjAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tl
ckNsaWVudC5tbSAqLywKIAkJCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8sCiAJCQkJM0Y0MkIzMUMxODgxMTkxQjAwMjc4
QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLywKLQkJCQkzRkJD
NEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
aCAqLywKLQkJCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW0gKi8sCisJCQkJM0ZCQzRBRjIxODk4ODE1NjAwNDZFRTM4IC8qIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8sCisJCQkJM0ZCQzRBRjExODk4ODE1NjAw
NDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovLAogCQkJCUU0NTM5
MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGlvczsKQEAgLTIxMTE5LDE0ICsyMTExOSwxNCBAQAogCQkJCUNEQzk3OUYzMUM0OThDMDkwMERC
NTBENCAvKiBXZWJDb3JlTlNFcnJvckV4dHJhcy5oICovLAogCQkJCUNEQzk3OUYyMUM0OThDMDkw
MERCNTBENCAvKiBXZWJDb3JlTlNFcnJvckV4dHJhcy5tbSAqLywKIAkJCQk1REZFQkFCNjE4NTky
QjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8sCi0JCQkJQ0RBMjlBMDgxQ0JE
OTlGNDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovLAotCQkJCUNE
QTI5QTBBMUNCRDlBNzQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovLAot
CQkJCUNEQTI5QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5oICovLAotCQkJCUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSAqLywKLQkJCQk1MkIwRDRCRjFDNTdGRDY2
MDA3N0NFNTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLywKLQkJCQk1
MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywK
LQkJCQk1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQuaCAqLywKLQkJCQk1MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gKi8sCisJCQkJQ0RBMjlBMDgxQ0JEOTlG
NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovLAorCQkJCUNEQTI5QTBB
MUNCRDlBNzQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbC5oICovLAorCQkJCUNEQTI5
QTBEMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5o
ICovLAorCQkJCUNEQTI5QTBDMUNCRDlDRkUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5tbSAqLywKKwkJCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLywKKwkJCQk1MkQ1QTFBNDFDNTc0ODg5MDBE
RTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywKKwkJCQk1MkQ1QTFBNTFDNTc0ODg5
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLywKKwkJCQk1
MkQ1QTFBNjFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTMwMDAwLDExICszMDAwMCwxMSBAQAogCQkJCTA3MDlENzkzMUFFNTU1N0UwMDRF
NDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MUEzMTYyRDEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRDU4OTZFMjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJh
Y2tDb250cm9sc01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNEQTI5QTA5MUNCRDk5RjQw
MDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAot
CQkJCUNEQTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NGIC8q
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RB
MjlBMEIxQ0JEOUE3NDAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTI5QTA5MUNCRDk5
RjQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCUNEQTI5QTMyMUNDMDFBOTUwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMTcxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMEIx
Q0JEOUE3NDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1vZGVsLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQUYzNDgxMEE2QzQwNTIwMEFCRTA2RSAv
KiBXZWJTY3JpcHRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQUYzNDgzMEE2QzQwNTIw
MEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTU2OUQxQjBEN0UyQjgyMDA3QzM5ODMgLyogV2ViU2NyaXB0T2JqZWN0UHJvdG9jb2wuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzAwMjEsMTQgKzMwMDIxLDE0IEBACiAJCQkJMUY4NzU2QjIxRTIyQzMz
NTAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzFERUE0NTYxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJU
aWxlZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJCMEQ0QzAxQzU3RkQ2NjAw
NzdDRTUzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MkIwRDRDMDFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBBMTM5NUFCNkEwMEY5NTZDNiAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjQy
QjMxRDE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJM0ZC
QzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkQ1QTFBNzFD
NTc0ODlEMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUyRDVBMUE4MUM1NzQ4QTMwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0ZCQzRBRjQxODk4ODE1NjAwNDZF
RTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MkIwRDRDMjFDNTdGRjkxMDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkQ1QTFBNzFDNTc0ODlEMDBERTM0QTMgLyogVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRDVBMUE4MUM1NzQ4QTMwMERF
MzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjEyMTcxRjYxNkE4Q0YwQjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVEMjFBODAzMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUIxMEI2OTgwMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tl
bi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzcwMCw5ICszMzcwMCw5IEBACiAJCQkJMDcwOUQ3OTIx
QUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTFBMzE2MkUxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0
cmluZ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENTg5NkUxMUNEMkIxNTEwMEIzQkND
OCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNE
QTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTE2MUNCREE1NkMwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlDREEyOUEw
RTFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUExNjFD
QkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJQ0RBMjlBMEUxQ0JEOUNGRTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBRjM0ODIwQTZDNDA1MjAw
QUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3QUFCRDFB
MTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdB
QUJEMUQxNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0zMzcxOCw5ICszMzcxOCw5IEBACiAJCQkJQ0Q4MjAzMEIxMzk1QUI2QTAwRjk1NkM2
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkz
RjQyQjMxRTE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKLQkJ
CQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW0gaW4gU291cmNlcyAqLywKLQkJCQk1MjEzMUU1QjFDNEYxNTc2MDAzM0Y4MDIgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTJE
NUExQTkxQzU3NDhBOTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTIxMzFF
NUIxQzRGMTU3NjAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTUyRDVBMUE5MUM1NzQ4QTkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENF
RDIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFB
ODAyMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGM1
NmM3YWE4ZWE0N2YzYzAwNTNhNzdjZDI4YTAzOTkxOTAxNzY5NTIuLjE2ZTZjM2E0NGMxNDUzODk5
ZGE4MWFlMTk5ZGNkNGQyYWQ0NWNmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcApAQCAtMTE3LDcgKzExNyw3IEBACiAKICNpZiBQTEFURk9STShJT1MpCiAjaW5j
bHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQpAQCAtMTU2LDcgKzE1Niw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRl
ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1v
ZGVsLmgiCiAjZW5kaWYKIAogI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4u
KSBSRUxFQVNFX0xPR19JRihkb2N1bWVudCgpLnBhZ2UoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+
aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBIVE1MTWVkaWFFbGVtZW50
OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwCmluZGV4IGVhMTQ5ZTg4YjdjZTYyNWVlM2E5ODBkNmUxZWNhMzhlMzkyYTU0
YmUuLmQ2YWVmZGZjNGQ2OGI0OWYxNDljZTUyY2NiYTc2MGU5MjkwMDZkMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKIAogI2lmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkK
LSNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2luY2x1ZGUgIlZpZGVvRnVs
bHNjcmVlbk1vZGVsLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40MTA1ZWY2ZGIzMjcwZjMxNWI3NzVjNzQyZjM1MTVjZTAxODY3MDVk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBUaW1lUmFuZ2VzOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Ugewor
cHVibGljOgorICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSgpIHsgfTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgPSAwOworfTsKKworfQorCisjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9QbGF5YmFja1Nlc3Npb25Nb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
UGxheWJhY2tTZXNzaW9uTW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODc0NDE1NzQ2OWEyYTdiMmU3NjM5
ZTFmOWEzYWU3MTRkZjI4NjQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWwuaApAQCAtMCwwICsxLDEwNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGltZVJhbmdlczsKK2NsYXNz
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Oworc3RydWN0IE1lZGlhU2VsZWN0aW9uT3B0aW9u
OworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
UGxheWJhY2tTZXNzaW9uTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChQ
bGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
Q2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHBsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Ny
dWJiaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJpbmcoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2Fu
bmluZ0ZvcndhcmQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHRvZ2dsZU11dGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNdXRlZChi
b29sKSA9IDA7CisKKyAgICBlbnVtIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgVGFyZ2V0
VHlwZU5vbmUsIFRhcmdldFR5cGVBaXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQgfTsKKworICAgIHZp
cnR1YWwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgY3VycmVu
dFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgYnVmZmVyZWRUaW1lKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzU2NydWJiaW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcGxh
eWJhY2tSYXRlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmPFRpbWVSYW5nZXM+IHNlZWth
YmxlUmFuZ2VzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIHNlZWthYmxlVGltZVJh
bmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgbGl2
ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5RmFz
dFJldmVyc2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxl
Y3RlZEluZGV4KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBleHRlcm5hbFBsYXliYWNr
RW5hYmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
U3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNdXRlZCgpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIFBs
YXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QbGF5YmFj
a1Nlc3Npb25Nb2RlbENsaWVudCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFu
Z2VkKGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3Vi
bGUgLyogY3VycmVudFRpbWUgKi8sIGRvdWJsZSAvKiBhbmNob3JUaW1lICovKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgLyogcGxheWJhY2tTdGFydGVk
VGltZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgLyogaXNQbGF5
aW5nICovLCBmbG9hdCAvKiBwbGF5YmFja1JhdGUgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRvdWJsZSAvKiBsYXN0TW9k
aWZpZWQgKi8sIGRvdWJsZSAvKiBsaXZlSW50ZXJ2YWwgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJbmRleCAqLykg
eyB9CisgICAgdmlydHVhbCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qIG9wdGlvbnMgKi8sIHVpbnQ2
NF90IC8qIHNlbGVjdGVkSW5kZXggKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhdWRpb01lZGlh
U2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGVn
aWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICovLCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYg
LyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
bXV0ZWRDaGFuZ2VkKGJvb2wpIHsgfQorfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9T
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA3YzRmNmNhOTg3YmVh
N2VhNTM5YTIxYTRiZWExY2Y1N2JkODljMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgKQEAg
LTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvVHJhY2s7
CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgVGV4dFRyYWNrOworY2xhc3MgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlOworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2RlbCwgcHVibGljIEV2ZW50TGlz
dGVuZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpKTsKKyAgICB9CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7Cisg
ICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRp
YUVsZW1lbnQuZ2V0KCk7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50JikgZmluYWw7
CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBmaW5h
bCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhp
cykgPT0gJnJoczsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoUGxheWJh
Y2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNs
aWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcGxheSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGF1c2UoKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2Vla1RvVGltZShkb3VibGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
YXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdp
blNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5T
Y2FubmluZ0JhY2t3YXJkKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY2Fu
bmluZygpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBpbmRleCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldE11dGVkKGJvb2wpIGZpbmFsOworCisgICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgZmlu
YWw7CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGJ1
ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWw7CisgICAgUmVmPFRpbWVSYW5n
ZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIHNlZWthYmxlVGlt
ZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgbGl2ZVVw
ZGF0ZUludGVydmFsKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2Uo
KSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWw7CisgICAgdWludDY0X3QgYXVkaW9NZWRp
YVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICB1
aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QgZmluYWw7CisgICAgYm9v
bCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIEV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWw7
CisgICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IGZpbmFsOworCitwcm90ZWN0ZWQ6CisgICAg
V0VCQ09SRV9FWFBPUlQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCk7CisgICAgc3RhdGljIGNv
bnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOworICAg
IGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWVBbGwoKTsKKworICAgIFJlZlB0cjxI
VE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBib29sIG1faXNMaXN0ZW5pbmcg
eyBmYWxzZSB9OworICAgIEhhc2hTZXQ8UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2Ns
aWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JN
ZW51OworICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51
OworCisgICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOworICAgIHZvaWQgdXBkYXRlTWVkaWFTZWxlY3Rp
b25JbmRpY2VzKCk7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNjI5YzgwMDIwNjk3YWMzMjRiM2NjODMyNmRjNjI5NjllZmNj
MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTAsMCArMSw1MzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQuaCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAiQXVkaW9U
cmFja0xpc3QuaCIKKyNpbXBvcnQgIkV2ZW50LmgiCisjaW1wb3J0ICJFdmVudExpc3RlbmVyLmgi
CisjaW1wb3J0ICJFdmVudE5hbWVzLmgiCisjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgorI2ltcG9y
dCAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVk
aWFDb250cm9sc0hvc3QuaCIKKyNpbXBvcnQgIk1lZGlhU2VsZWN0aW9uT3B0aW9uLmgiCisjaW1w
b3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIlRleHRUcmFja0xp
c3QuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFu
aW1hdGlvbi5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYv
U29mdExpbmtpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQoKQorICAg
IDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKK3sK
K30KKworUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6On5QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQ6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQp
Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMs
IGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCkucmVtb3ZlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7CisgICAg
ICAgIG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuY2hhbmdlRXZlbnQsICp0aGlzLCBmYWxzZSk7CisgICAgfQorICAgIG1faXNMaXN0
ZW5pbmcgPSBmYWxzZTsKKworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnJlc2V0UGxheWJhY2tTZXNzaW9uU3RhdGUoKTsKKworICAgIG1fbWVkaWFFbGVt
ZW50ID0gbWVkaWFFbGVtZW50OworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50KSB7CisgICAgICAg
IGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisgICAgICAgICAg
ICBtX21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsICp0aGlzLCBmYWxz
ZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX21l
ZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNo
YW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOworICAgICAgICBtX2lzTGlzdGVuaW5nID0gdHJ1ZTsK
KyAgICB9CisKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnROYW1lQWxsKCkpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV2ViQ29yZTo6RXZlbnQmIGV2ZW50KQoreworICAg
IHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC50eXBlKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9t
aWNTdHJpbmcmIGV2ZW50TmFtZSkKK3sKKyAgICBpZiAobV9jbGllbnRzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxs
KCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCku
ZHVyYXRpb25jaGFuZ2VFdmVudCkgeworICAgICAgICBkb3VibGUgZHVyYXRpb24gPSB0aGlzLT5k
dXJhdGlvbigpOworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOworICAgICAgICAvLyBUaGVz
ZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJh
dGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBpdC4KKyAgICAgICAgLy8gSXQg
aGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5LgorICAg
ICAgICBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSA9IHRoaXMtPmNhblBsYXlGYXN0UmV2ZXJzZSgp
OworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xp
ZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0UmV2ZXJzZSk7CisgICAg
fQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBs
YXlFdmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBsYXlpbmdFdmVu
dCkgeworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAg
Y2xpZW50LT5wbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChwbGF5YmFja1N0YXJ0ZWRUaW1lKCkp
OworICAgIH0KKworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5wYXVzZUV2ZW50CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxh
eUV2ZW50CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2
ZW50KSB7CisgICAgICAgIGJvb2wgaXNQbGF5aW5nID0gdGhpcy0+aXNQbGF5aW5nKCk7CisgICAg
ICAgIGZsb2F0IHBsYXliYWNrUmF0ZSA9IHRoaXMtPnBsYXliYWNrUmF0ZSgpOworICAgICAgICBm
b3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5yYXRlQ2hh
bmdlZChpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7CisgICAgfQorCisgICAgaWYgKGFsbAorICAg
ICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCkgeworICAg
ICAgICBhdXRvIGN1cnJlbnRUaW1lID0gdGhpcy0+Y3VycmVudFRpbWUoKTsKKyAgICAgICAgYXV0
byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVd
OworICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xp
ZW50LT5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUsIGFuY2hvclRpbWUpOworICAgIH0K
KworICAgIGlmIChhbGwKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wcm9n
cmVzc0V2ZW50KSB7CisgICAgICAgIGF1dG8gYnVmZmVyZWRUaW1lID0gdGhpcy0+YnVmZmVyZWRU
aW1lKCk7CisgICAgICAgIGF1dG8gc2Vla2FibGVSYW5nZXMgPSB0aGlzLT5zZWVrYWJsZVJhbmdl
cygpOworICAgICAgICBhdXRvIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUgPSB0
aGlzLT5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCk7CisgICAgICAgIGF1dG8g
bGl2ZVVwZGF0ZUludGVydmFsID0gdGhpcy0+bGl2ZVVwZGF0ZUludGVydmFsKCk7CisgICAgICAg
IGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgICAgIGNsaWVudC0+YnVm
ZmVyZWRUaW1lQ2hhbmdlZChidWZmZXJlZFRpbWUpOworICAgICAgICAgICAgY2xpZW50LT5zZWVr
YWJsZVJhbmdlc0NoYW5nZWQoc2Vla2FibGVSYW5nZXMsIHNlZWthYmxlVGltZVJhbmdlc0xhc3RN
b2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tF
dmVudAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZl
bnQpCisgICAgICAgIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpOworCisgICAgaWYgKGFs
bAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5
YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpIHsKKyAgICAgICAgYm9vbCBlbmFibGVk
ID0gZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKTsKKyAgICAgICAgRXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgdGFyZ2V0VHlwZSA9IGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCk7CisgICAg
ICAgIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lID0gZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXpl
ZERldmljZU5hbWUoKTsKKworICAgICAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkID0gdGhpcy0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKTsKKworICAgICAgICBm
b3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7CisgICAgICAgICAgICBjbGllbnQtPmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHRhcmdldFR5cGUsIGxvY2FsaXplZERldmljZU5h
bWUpOworICAgICAgICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gV2UgZG9uJ3QgY2FsbCB1cGRhdGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKSBpbiB0
aGUgYWxsIGNhc2UsIHNpbmNlCisgICAgLy8gdXBkYXRlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkg
d2lsbCBhbHNvIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIGluZGljZXMuCisgICAgaWYgKGV2ZW50TmFt
ZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpCisgICAgICAgIHVwZGF0ZU1lZGlhU2VsZWN0
aW9uSW5kaWNlcygpOworCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZl
bnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50KSB7CisgICAgICAgIGZvciAoYXV0byBjbGllbnQg
OiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChpc011dGVkKCkp
OworICAgIH0KK30KK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmFkZENs
aWVudChQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCgh
bV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpyZW1vdmVDbGll
bnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9j
bGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkKK3sK
KyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5wbGF5KCk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKK3sK
KyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5wYXVzZSgp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5
U3RhdGUoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjpiZWdpblNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKK3sKKyAgICBpZiAo
bV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY3J1YmJpbmcoKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla1RvVGltZShk
b3VibGUgdGltZSkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3
YXJkKCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNr
d2FyZCgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVu
dC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQor
eworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNj
YW5uaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
bGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgc2VsZWN0ZWRBdWRpb0luZGV4KQoreworICAg
IGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBzaXplID0gbV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudVtpXS0+c2V0RW5hYmxlZChpID09IHNlbGVj
dGVkQXVkaW9JbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKK3sKKyAgICBpZiAo
IW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0VHJhY2sqIHRleHRU
cmFjazsKKyAgICBpZiAoaW5kZXggPCBtX2xlZ2libGVUcmFja3NGb3JNZW51LnNpemUoKSkKKyAg
ICAgICAgdGV4dFRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtzdGF0aWNfY2FzdDxzaXpl
X3Q+KGluZGV4KV0uZ2V0KCk7CisgICAgZWxzZQorICAgICAgICB0ZXh0VHJhY2sgPSBUZXh0VHJh
Y2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOworCisgICAgbV9tZWRpYUVsZW1lbnQtPnNldFNlbGVj
dGVkVGV4dFRyYWNrKHRleHRUcmFjayk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIGlmIChtX21lZGlh
RWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSA9PSBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRG
dWxsc2NyZWVuKCk7CisgICAgZWxzZQorICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50ZXJGdWxs
c2NyZWVuKE1lZGlhUGxheWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0
dXJlKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xl
TXV0ZWQoKQoreworICAgIHNldE11dGVkKCFpc011dGVkKCkpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNdXRlZChib29sIG11dGVkKQoreworICAgIGlm
IChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldE11dGVkKG11dGVk
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKCkKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRp
YUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygp
OworICAgIGF1dG8mIHRleHRUcmFja3MgPSBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpOwor
ICAgIGlmICh0ZXh0VHJhY2tzLmxlbmd0aCgpKQorICAgICAgICBtX2xlZ2libGVUcmFja3NGb3JN
ZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoJnRleHRUcmFj
a3MpOworICAgIGVsc2UKKyAgICAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5jbGVhcigpOwor
CisgICAgYXV0byYgYXVkaW9UcmFja3MgPSBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKTsK
KyAgICBpZiAoYXVkaW9UcmFja3MubGVuZ3RoKCkgPiAxKQorICAgICAgICBtX2F1ZGlvVHJhY2tz
Rm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZhdWRp
b1RyYWNrcyk7CisgICAgZWxzZQorICAgICAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudS5jbGVhcigp
OworCisgICAgYXV0byBhdWRpb09wdGlvbnMgPSBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygp
OworICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCk7CisgICAg
YXV0byBsZWdpYmxlT3B0aW9ucyA9IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsKKyAg
ICBhdXRvIGxlZ2libGVJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsKKworICAg
IGZvciAoYXV0byBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgY2xpZW50LT5hdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoYXVkaW9PcHRpb25zLCBhdWRpb0luZGV4KTsKKyAg
ICAgICAgY2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChsZWdpYmxl
T3B0aW9ucywgbGVnaWJsZUluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uSW5kaWNlcygpCit7CisgICAg
YXV0byBhdWRpb0luZGV4ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKTsKKyAgICBhdXRvIGxl
Z2libGVJbmRleCA9IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKTsKKworICAgIGZvciAoYXV0
byBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgY2xpZW50LT5hdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKGF1ZGlvSW5kZXgpOworICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZChsZWdpYmxlSW5kZXgpOworICAgIH0KK30KKworZG91Ymxl
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5YmFja1N0YXJ0ZWRUaW1lKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tTdGFydGVkVGltZSgpOworfQorCitj
b25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6Om9ic2VydmVkRXZlbnROYW1lcygpCit7CisgICAgLy8gRklYTUUoMTU3NDUyKTogUmVtb3Zl
IHRoZSByaWdodC1oYW5kIGNvbnN0cnVjdG9yIG5vdGF0aW9uIG9uY2UgTmV2ZXJEZXN0cm95ZWQg
c3VwcG9ydHMgaW5pdGlhbGl6ZXJfbGlzdHMuCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZl
Y3RvcjxBdG9taWNTdHJpbmc+PiBuYW1lcyA9IFZlY3RvcjxBdG9taWNTdHJpbmc+KHsKKyAgICAg
ICAgZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMo
KS5wYXVzZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucGxheUV2ZW50LAorICAgICAgICBl
dmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkudGltZXVw
ZGF0ZUV2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwKKyAgICAgICAg
ZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQsCisgICAgICAgIGV2ZW50TmFtZXMoKS5yZW1vdmV0
cmFja0V2ZW50LAorICAgICAgICBldmVudE5hbWVzKCkudm9sdW1lY2hhbmdlRXZlbnQsCisgICAg
ICAgIGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hh
bmdlZEV2ZW50LAorICAgIH0pOworICAgIHJldHVybiBuYW1lcy5nZXQoKTsKK30KKworY29uc3Qg
QXRvbWljU3RyaW5nJiAgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmV2ZW50TmFt
ZUFsbCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZXZlbnRO
YW1lQWxsKCJhbGxFdmVudHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICByZXR1cm4gZXZlbnROYW1lQWxsOworfQorCitkb3VibGUgUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnN1cHBv
cnRzU2Vla2luZygpID8gbV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkgOiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworfQorCitkb3VibGUgUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSA6IDA7Cit9CisKK2Rv
dWJsZSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YnVmZmVyZWRUaW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWF4QnVm
ZmVyZWRUaW1lKCkgOiAwOworfQorCitib29sIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Ojppc1BsYXlpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/ICFt
X21lZGlhRWxlbWVudC0+cGF1c2VkKCkgOiBmYWxzZTsKK30KKworZmxvYXQgUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUmF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrUmF0ZSgpIDogMDsKK30K
KworUmVmPFRpbWVSYW5nZXM+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVr
YWJsZVJhbmdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRp
YUVsZW1lbnQtPnNlZWthYmxlKCkgOiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKK30KKworZG91Ymxl
IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrYWJsZVRpbWVSYW5nZXNMYXN0
TW9kaWZpZWRUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21l
ZGlhRWxlbWVudC0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIDogMDsKK30K
KworZG91YmxlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsaXZlVXBkYXRlSW50
ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVt
ZW50LT5saXZlVXBkYXRlSW50ZXJ2YWwoKSA6IDA7Cit9CisgICAgCitib29sIFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAoreworICAg
IHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJh
dGUoKSA8IDAuMCA6IGZhbHNlOworfQorCitWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
cygpIGNvbnN0Cit7CisgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb09wdGlv
bnM7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBhdWRpb09wdGlvbnM7CisKKyAgICBhdXRvJiBj
YXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdy
b3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CisKKyAgICBhdWRpb09wdGlvbnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCkpOworICAgIGZvciAoYXV0
byYgYXVkaW9UcmFjayA6IG1fYXVkaW9UcmFja3NGb3JNZW51KQorICAgICAgICBhdWRpb09wdGlv
bnMudW5jaGVja2VkQXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlv
bkZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpKTsKKworICAgIHJldHVybiBhdWRpb09wdGlvbnM7
Cit9CisKK3VpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01l
ZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBp
ZiAobV9hdWRpb1RyYWNrc0Zvck1lbnVbaW5kZXhdLT5lbmFibGVkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgfQorICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2
NF90Pjo6bWF4KCk7Cit9CisKK1ZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBj
b25zdAoreworICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9wdGlvbnM7
CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCkpCisgICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKworICAgIGF1dG8mIGNh
cHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3Jv
dXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKworICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2xl
Z2libGVUcmFja3NGb3JNZW51KQorICAgICAgICBsZWdpYmxlT3B0aW9ucy5hcHBlbmQoY2FwdGlv
blByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sodHJhY2suZ2V0KCkpKTsK
KworICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKK30KKwordWludDY0X3QgUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAor
eworICAgIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2
NF90Pjo6bWF4KCk7CisgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOworICAgIGJvb2wgdHJhY2tN
ZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7CisKKyAgICBhdXRvIGhvc3QgPSBtX21lZGlhRWxlbWVu
dCA/IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpIDogbnVsbHB0cjsKKworICAg
IGlmICghaG9zdCkKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7CisKKyAgICBBdG9taWNT
dHJpbmcgZGlzcGxheU1vZGUgPSBob3N0LT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKKyAgICBUZXh0
VHJhY2sqIG9mZkl0ZW0gPSBob3N0LT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsKKyAgICBUZXh0VHJh
Y2sqIGF1dG9tYXRpY0l0ZW0gPSBob3N0LT5jYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKTsKKwor
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX2xlZ2libGVUcmFja3NGb3JNZW51
LnNpemUoKTsgaW5kZXgrKykgeworICAgICAgICBhdXRvJiB0cmFjayA9IG1fbGVnaWJsZVRyYWNr
c0Zvck1lbnVbaW5kZXhdOworICAgICAgICBpZiAodHJhY2sgPT0gb2ZmSXRlbSkKKyAgICAgICAg
ICAgIG9mZkluZGV4ID0gaW5kZXg7CisKKyAgICAgICAgaWYgKHRyYWNrID09IGF1dG9tYXRpY0l0
ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQo
KSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAgICAgICAgICAgdHJh
Y2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkaXNw
bGF5TW9kZSAhPSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpICYmIHRyYWNr
LT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7CisgICAgICAgICAgICBzZWxl
Y3RlZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG9mZkl0ZW0gJiYgIXRyYWNrTWVudUl0
ZW1TZWxlY3RlZCAmJiBkaXNwbGF5TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6Zm9yY2VkT25s
eUtleXdvcmQoKSkKKyAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9mZkluZGV4OworCisgICAgcmV0
dXJuIHNlbGVjdGVkSW5kZXg7Cit9CisKK2Jvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPndlYmtpdEN1cnJlbnRQbGF5YmFja1Rhcmdl
dElzV2lyZWxlc3MoKTsKK30KKworUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAh
bV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCisgICAgICAgIHJldHVybiBUYXJn
ZXRUeXBlTm9uZTsKKworICAgIHN3aXRjaCAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNI
b3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpKSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBUYXJnZXRUeXBlTm9uZTsKKyAgICBj
YXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpOb25lOgorICAgICAgICByZXR1cm4g
VGFyZ2V0VHlwZU5vbmU7CisgICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6
QWlycGxheToKKyAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVBaXJQbGF5OworICAgIGNhc2UgTWVk
aWFDb250cm9sc0hvc3Q6OkRldmljZVR5cGU6OlR2b3V0OgorICAgICAgICByZXR1cm4gVGFyZ2V0
VHlwZVRWT3V0OworICAgIH0KK30KKworU3RyaW5nIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9z
dCgpKQorICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkt
PmV4dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
K30KKworYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6d2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCAm
JiBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCkud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQoKm1fbWVkaWFFbGVtZW50KTsKK30KKworYm9vbCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6aXNNdXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50
ID8gbV9tZWRpYUVsZW1lbnQtPm11dGVkKCkgOiBmYWxzZTsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1YzE1YjExOTg3MjExM2Y0ODBjOTgz
MWFiYTg2OGQ4ZWZlYjA5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNwcmFn
bWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5W
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcigpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
U2V0dXBGdWxsc2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3Jl
ZW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgPSAwOworfTsKKworfQorCisjZW5kaWYK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1vZGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM4NDlmYzIwZGEwY2I0MmJkOTI3NjE3ZjE0MThmOWI3NzMw
YzI3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50
RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50OworCitjbGFzcyBW
aWRlb0Z1bGxzY3JlZW5Nb2RlbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2Ny
ZWVuTW9kZWwoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFZpZGVv
RnVsbHNjcmVlbk1vZGVsQ2xpZW50Jik9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwg
Ym9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpID0gMDsKKyAgICBlbnVtIFZpZGVvR3Jhdml0eSB7
IFZpZGVvR3Jhdml0eVJlc2l6ZSwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBWaWRlb0dyYXZp
dHlSZXNpemVBc3BlY3RGaWxsIH07CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2
aXR5KFZpZGVvR3Jhdml0eSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTW9kZUNo
YW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSA9IDA7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgRmxv
YXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
VmlkZW8oKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSA9IDA7Cit9
OworCitXRUJDT1JFX0VYUE9SVCBib29sIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOworICAg
IAorfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjA3Mzc0ODZhNDRmZTk5NTRkNzVjYTVmOTFhOWNlNjJjNDE0ODkzMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50LmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJT1Mp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisK
KyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXVkaW9UcmFjazsKK2NsYXNzIEhUTUxWaWRlb0Vs
ZW1lbnQ7CitjbGFzcyBUZXh0VHJhY2s7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJs
aWMgVmlkZW9GdWxsc2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQoKSk7CisgICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
flZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopOworICAgIEhUTUxWaWRlb0Vs
ZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50LmdldCgp
OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0
Zm9ybUxheWVyKiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIgPSBb
XSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2FpdEZvclByZXBhcmVkRm9ySW5saW5l
VGhlbihXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciA9IFtdIHsgfSk7
CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVFdmVudChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgV2ViQ29yZTo6RXZlbnQmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqPih0aGlzKSA9PSAm
cmhzOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3Zl
Q2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpIG92
ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0
UmVjdCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0xheWVyR3Jh
dml0eShWaWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Zpc2libGUoKSBjb25z
dCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgdmlkZW9EaW1lbnNpb25z
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWRlb0RpbWVuc2lvbnM7IH0KKyAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNW
aWRlbzsgfQorCisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudCgpOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0SGFzVmlkZW8o
Ym9vbCk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoY29uc3QgRmxvYXRTaXplJik7CisK
KyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2ZWRFdmVu
dE5hbWVzKCk7CisgICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFsbCgpOwor
CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVtZW50OworICAgIFJldGFp
blB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyOworICAgIGJvb2wgbV9p
c0xpc3RlbmluZyB7IGZhbHNlIH07CisgICAgSGFzaFNldDxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCo+IG1fY2xpZW50czsKKyAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OworICAgIEZs
b2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsKKyAgICBGbG9hdFJlY3QgbV92aWRlb0ZyYW1lOwor
ICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudTsKKyAg
ICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2s+PiBtX2F1ZGlvVHJhY2tzRm9yTWVudTsKK307CisK
K30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjJlZDIxMzU4Y2U2M2ZlM2VmYmY5MGQ4NTBjZjRlMTVjOTJmNjQ1MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50Lm1tCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgorCisjaW1w
b3J0ICJET01XaW5kb3cuaCIKKyNpbXBvcnQgIkhpc3RvcnkuaCIKKyNpbXBvcnQgIkxvZ2dpbmcu
aCIKKyNpbXBvcnQgIk1lZGlhQ29udHJvbHNIb3N0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9u
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TGlz
dGVuZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5l
cjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCit7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Ojp+VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQoreworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRN
TFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQoreworICAgIGlmIChtX3ZpZGVvRWxlbWVudCA9
PSB2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCAmJiBtX3ZpZGVvRWxlbWVudC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKKyAgICAgICAgbV92
aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOworCisgICAgaWYg
KG1fdmlkZW9FbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKKyAgICAgICAgZm9yIChhdXRvJiBl
dmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVt
ZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKKyAgICB9
CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisgICAgbV92aWRlb0VsZW1lbnQgPSB2aWRl
b0VsZW1lbnQ7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKKyAgICAgICAgICAgIG1fdmlkZW9F
bGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKnRoaXMsIGZhbHNlKTsKKyAgICAg
ICAgbV9pc0xpc3RlbmluZyA9IHRydWU7CisgICAgfQorCisgICAgdXBkYXRlRm9yRXZlbnROYW1l
KGV2ZW50TmFtZUFsbCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNv
cmU6OkV2ZW50JiBldmVudCkKK3sKKyAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQudHlwZSgp
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRlRm9y
RXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit7CisgICAgaWYg
KG1fY2xpZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGFs
bCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVBbGwoKTsKKworICAgIGlmIChhbGwKKyAgICAgICAg
fHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCkgeworICAgICAgICBzZXRI
YXNWaWRlbyhtX3ZpZGVvRWxlbWVudCk7CisgICAgICAgIHNldFZpZGVvRGltZW5zaW9ucyhtX3Zp
ZGVvRWxlbWVudCA/IEZsb2F0U2l6ZShtX3ZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCBtX3Zp
ZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSkgOiBGbG9hdFNpemUoKSk7CisgICAgfQorfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXllciA9PSB2
aWRlb0xheWVyKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IHZpZGVvTGF5ZXI7
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hv
clBvaW50OkNHUG9pbnRNYWtlKDAsIDApXTsKKyNlbHNlCisgICAgW21fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UoMC41LCAwLjUpXTsKKyNlbmRpZgorICAg
IFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVdOworICAgIAor
ICAgIGlmICghbV92aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV92
aWRlb0VsZW1lbnQtPndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7CisgICAgaWYgKG1fdmlk
ZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpICE9IG1vZGUpCisg
ICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKKworICAgIGlm
IChtX3ZpZGVvRWxlbWVudCAmJiBmaW5pc2hlZFdpdGhNZWRpYSAmJiBtb2RlID09IE1lZGlhUGxh
eWVyRW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKSB7CisgICAgICAgIGlmIChtX3ZpZGVv
RWxlbWVudC0+ZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYg
KERPTVdpbmRvdyogd2luZG93ID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkuZG9tV2luZG93
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeSogaGlzdG9yeSA9IHdpbmRvdy0+aGlz
dG9yeSgpKQorICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LT5iYWNrKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKK3sKKyAgICBtX3Zp
ZGVvRnJhbWUgPSByZWN0OworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczpD
R1JlY3QocmVjdCldOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0Vs
ZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOworfQorCit2b2lkIFZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit7CisgICAgTWVkaWFQbGF5ZXI6OlZp
ZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0OworICAgIGlmIChncmF2aXR5ID09IFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dy
YXZpdHlSZXNpemUpCisgICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dy
YXZpdHlSZXNpemU7CisgICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQorICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRp
YVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OworICAgIGVsc2UgaWYgKGdyYXZpdHkg
PT0gVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpCisg
ICAgICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3RGaWxsOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgCisg
ICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkodmlkZW9HcmF2aXR5
KTsKK30KKworY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQoreworICAgIHN0YXRpYyBjb25zdCBh
dXRvIG5hbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxBdG9taWNTdHJpbmc+IHsgZXZl
bnROYW1lcygpLnJlc2l6ZUV2ZW50IH0pOworICAgIHJldHVybiBuYW1lczsKK30KKworY29uc3Qg
QXRvbWljU3RyaW5nJiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1l
QWxsKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnRO
YW1lQWxsID0gImFsbEV2ZW50cyI7CisgICAgcmV0dXJuIHNFdmVudE5hbWVBbGw7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2Ny
ZWVuTW9kZSkKK3sKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVt
ZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmFkZENsaWVudChWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRh
aW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZW1vdmVDbGllbnQoVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5z
KCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOworfQorCitib29sIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAoreworICAg
IGlmICghbV92aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChQ
YWdlKiBwYWdlID0gbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICBy
ZXR1cm4gcGFnZS0+aXNWaXNpYmxlKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldEhhc1ZpZGVvKGJvb2wgaGFzVmlk
ZW8pCit7CisgICAgaWYgKGhhc1ZpZGVvID09IG1faGFzVmlkZW8pCisgICAgICAgIHJldHVybjsK
KworICAgIG1faGFzVmlkZW8gPSBoYXNWaWRlbzsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDog
bV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmhhc1ZpZGVvQ2hhbmdlZChtX2hhc1ZpZGVvKTsK
K30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9EaW1l
bnNpb25zKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIGlmIChtX3Zp
ZGVvRGltZW5zaW9ucyA9PSB2aWRlb0RpbWVuc2lvbnMpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fdmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1lbnNpb25zOworCisgICAgZm9yIChhdXRvJiBj
bGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+dmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChtX3ZpZGVvRGltZW5zaW9ucyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA5ZTc5NzQ0YjQ5ODlhM2E3YjkzNTcwYWFl
YjdlODJlYjA3ZTkzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgVGltZVJhbmdlczsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UoKSB7
IH07Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpID0gMDsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA2ZDUzZjBmNzc2OTM3NzVhZDQ4NjFjMjIzMDRhYzkzODAwOWM4MjMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZi5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBUaW1lUmFuZ2VzOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ7Ci1zdHJ1
Y3QgTWVkaWFTZWxlY3Rpb25PcHRpb247Ci0KLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIHsgfTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDbGllbnQmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcGF1c2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0
ZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY3J1YmJpbmcoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGVuZFNjcnViYmluZygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvVGlt
ZShkb3VibGUgdGltZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGlt
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBlbmRTY2FubmluZygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0QXVkaW9NZWRp
YU9wdGlvbih1aW50NjRfdCBpbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdG9n
Z2xlUGljdHVyZUluUGljdHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlTXV0ZWQo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wpID0gMDsKLQotICAgIGVudW0g
RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgeyBUYXJnZXRUeXBlTm9uZSwgVGFyZ2V0VHlwZUFp
clBsYXksIFRhcmdldFR5cGVUVk91dCB9OwotCi0gICAgdmlydHVhbCBkb3VibGUgcGxheWJhY2tT
dGFydGVkVGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGlzUGxheWluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3J1YmJpbmco
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9hdCBwbGF5YmFja1JhdGUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBSZWY8VGltZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBkb3VibGUgc2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB1aW50NjRfdCBhdWRpb01lZGlh
U2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgZXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZXh0ZXJuYWxQbGF5YmFj
a0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c011dGVkKCkgY29uc3QgPSAwOwotfTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSAvKiBjdXJyZW50VGlt
ZSAqLywgZG91YmxlIC8qIGFuY2hvclRpbWUgKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBidWZm
ZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXliYWNrU3Rh
cnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSAvKiBwbGF5YmFja1N0YXJ0ZWRUaW1lICovKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAvKiBpc1BsYXlpbmcgKi8sIGZsb2F0IC8q
IHBsYXliYWNrUmF0ZSAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hh
bmdlZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIC8qIGxhc3RNb2RpZmllZCAqLywgZG91Ymxl
IC8qIGxpdmVJbnRlcnZhbCAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNhblBsYXlGYXN0UmV2
ZXJzZUNoYW5nZWQoYm9vbCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiAvKiBv
cHRpb25zICovLCB1aW50NjRfdCAvKiBzZWxlY3RlZEluZGV4ICovKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgLyogb3B0aW9ucyAqLywgdWludDY0X3QgLyogc2VsZWN0ZWRJ
bmRleCAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENo
YW5nZWQodWludDY0X3QpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3QpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWRE
ZXZpY2VOYW1lICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWRDaGFuZ2VkKGJvb2wpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBtdXRlZENoYW5nZWQo
Ym9vbCkgeyB9Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI4
NDY5NDY0OTZhOWFjNDk1OTUxYmRmMWM4MTdkY2ViYjc1ZWQyMS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvVHJh
Y2s7Ci1jbGFzcyBIVE1MTWVkaWFFbGVtZW50OwotY2xhc3MgVGV4dFRyYWNrOwotY2xhc3MgV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotCi1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCwgcHVi
bGljIEV2ZW50TGlzdGVuZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCgpKTsKLSAg
ICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhRWxlbWVudChI
VE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdl
YkNvcmU6OkV2ZW50JikgZmluYWw7Ci0gICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3Qg
V1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0
ZW5lciYgcmhzKSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3Jl
OjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVu
dCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxheSgpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcGF1c2UoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2ds
ZVBsYXlTdGF0ZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY3J1YmJp
bmcoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFNjcnViYmluZygpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY2FubmluZygpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qg
aW5kZXgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGljdHVyZUluUGlj
dHVyZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlTXV0ZWQoKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwotCi0gICAg
ZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkg
Y29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGJ1ZmZlcmVkVGltZSgpIGNvbnN0IGZpbmFsOwotICAg
IGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1NjcnViYmluZygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29u
c3QgZmluYWw7Ci0gICAgUmVmPFRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmlu
YWw7Ci0gICAgZG91YmxlIHNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSBjb25z
dCBmaW5hbDsKLSAgICBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCBmaW5hbDsKLSAgICBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmlu
YWw7Ci0gICAgdWludDY0X3QgYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbDsK
LSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNv
bnN0IGZpbmFsOwotICAgIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlKCkgY29uc3QgZmluYWw7Ci0gICAgU3RyaW5nIGV4dGVybmFsUGxheWJhY2tM
b2NhbGl6ZWREZXZpY2VOYW1lKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0
IGZpbmFsOwotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHByb2dyZXNzRXZl
bnRUaW1lckZpcmVkKCk7Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmlu
Zz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBl
dmVudE5hbWVBbGwoKTsKLQotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxl
bWVudDsKLSAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgVmVjdG9yPFJlZlB0
cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51OwotICAgIFZlY3RvcjxSZWZQdHI8
QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51OwotCi0gICAgZG91YmxlIHBsYXliYWNr
U3RhcnRlZFRpbWUoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cygpOwotICAgIHZvaWQgdXBkYXRlTWVkaWFTZWxlY3Rpb25JbmRpY2VzKCk7Ci19OwotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhZGQ0OWJhNmJkNzQ5MmFkYTAyN2U3MzJkNjMyZTY3MmI2
YTFhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDUzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50LmgiCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIkF1ZGlvVHJhY2tMaXN0
LmgiCi0jaW1wb3J0ICJFdmVudC5oIgotI2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgotI2ltcG9y
dCAiRXZlbnROYW1lcy5oIgotI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKLSNpbXBvcnQgIkhUTUxN
ZWRpYUVsZW1lbnQuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk1lZGlhQ29udHJv
bHNIb3N0LmgiCi0jaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgotI2ltcG9ydCAiUGFn
ZS5oIgotI2ltcG9ydCAiUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJUZXh0VHJhY2tMaXN0LmgiCi0j
aW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24u
aD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5r
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50KCkKLSAgICA6
IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi17Ci19
Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp+V2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQoKQotewotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50KQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCA9PSBtZWRpYUVsZW1lbnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0g
ICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUs
ICp0aGlzLCBmYWxzZSk7Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpLnJl
bW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2Up
OwotICAgICAgICBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLnJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCAqdGhpcywgZmFsc2UpOwotICAgIH0KLSAgICBt
X2lzTGlzdGVuaW5nID0gZmFsc2U7Ci0KLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAg
IG1fbWVkaWFFbGVtZW50LT5yZXNldFBsYXliYWNrU2Vzc2lvblN0YXRlKCk7Ci0KLSAgICBtX21l
ZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudDsKLQotICAgIGlmIChtX21lZGlhRWxlbWVudCkgewot
ICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQotICAg
ICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhp
cywgZmFsc2UpOwotICAgICAgICBtX21lZGlhRWxlbWVudC0+YXVkaW9UcmFja3MoKS5hZGRFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5jaGFuZ2VFdmVudCwgKnRoaXMsIGZhbHNlKTsKLSAgICAgICAgbV9pc0xpc3RlbmluZyA9
IHRydWU7Ci0gICAgfQotCi0gICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxlRXZl
bnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50JiBldmVu
dCkKLXsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQudHlwZSgpKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlRm9yRXZlbnROYW1lKGNv
bnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgaWYgKG1fY2xpZW50cy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgYWxsID0gZXZlbnROYW1lID09
IGV2ZW50TmFtZUFsbCgpOwotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0g
ZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpIHsKLSAgICAgICAgZG91YmxlIGR1cmF0
aW9uID0gdGhpcy0+ZHVyYXRpb24oKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xp
ZW50cykKLSAgICAgICAgICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKLSAg
ICAgICAgLy8gVGhlc2UgaXMgbm8gc3RhbmRhcmQgZXZlbnQgZm9yIG1pbkZhc3RSZXZlcnNlUmF0
ZUNoYW5nZTsgZHVyYXRpb24gY2hhbmdlIGlzIGEgcmVhc29uYWJsZSBwcm94eSBmb3IgaXQuCi0g
ICAgICAgIC8vIEl0IGhhcHBlbnMgZXZlcnkgdGltZSBhIG5ldyBpdGVtIGJlY29tZXMgcmVhZHkg
dG8gcGxheS4KLSAgICAgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UgPSB0aGlzLT5jYW5QbGF5
RmFzdFJldmVyc2UoKTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAg
ICAgICAgICAgIGNsaWVudC0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5RmFzdFJl
dmVyc2UpOwotICAgIH0KLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2
ZW50TmFtZXMoKS5wbGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5wbGF5aW5nRXZlbnQpIHsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykK
LSAgICAgICAgICAgIGNsaWVudC0+cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tT
dGFydGVkVGltZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFt
ZSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVudAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZl
bnROYW1lcygpLnBsYXlFdmVudAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygp
LnJhdGVjaGFuZ2VFdmVudCkgewotICAgICAgICBib29sIGlzUGxheWluZyA9IHRoaXMtPmlzUGxh
eWluZygpOwotICAgICAgICBmbG9hdCBwbGF5YmFja1JhdGUgPSB0aGlzLT5wbGF5YmFja1JhdGUo
KTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgICAgIGNs
aWVudC0+cmF0ZUNoYW5nZWQoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwotICAgIH0KLQotICAg
IGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRl
RXZlbnQpIHsKLSAgICAgICAgYXV0byBjdXJyZW50VGltZSA9IHRoaXMtPmN1cnJlbnRUaW1lKCk7
Ci0gICAgICAgIGF1dG8gYW5jaG9yVGltZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXTsKLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykKLSAg
ICAgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JU
aW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkucHJvZ3Jlc3NFdmVudCkgewotICAgICAgICBhdXRvIGJ1ZmZlcmVkVGltZSA9IHRo
aXMtPmJ1ZmZlcmVkVGltZSgpOwotICAgICAgICBhdXRvIHNlZWthYmxlUmFuZ2VzID0gdGhpcy0+
c2Vla2FibGVSYW5nZXMoKTsKLSAgICAgICAgYXV0byBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9k
aWZpZWRUaW1lID0gdGhpcy0+c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpOwot
ICAgICAgICBhdXRvIGxpdmVVcGRhdGVJbnRlcnZhbCA9IHRoaXMtPmxpdmVVcGRhdGVJbnRlcnZh
bCgpOwotICAgICAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAgICAg
ICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVyZWRUaW1lKTsKLSAgICAgICAgICAg
IGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWthYmxlUmFuZ2VzLCBzZWVrYWJsZVRp
bWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLmFkZHRyYWNrRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5y
ZW1vdmV0cmFja0V2ZW50KQotICAgICAgICB1cGRhdGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKTsK
LQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS53ZWJr
aXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KSB7Ci0gICAgICAg
IGJvb2wgZW5hYmxlZCA9IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCk7Ci0gICAgICAgIEV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSgpOwotICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSA9IGV4dGVybmFsUGxh
eWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCk7Ci0KLSAgICAgICAgYm9vbCB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZCA9IHRoaXMtPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCk7
Ci0KLSAgICAgICAgZm9yIChhdXRvIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICAgICAg
Y2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2Nh
bGl6ZWREZXZpY2VOYW1lKTsKLSAgICAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IGNhbGwgdXBkYXRlTWVkaWFTZWxlY3Rpb25J
bmRpY2VzKCkgaW4gdGhlIGFsbCBjYXNlLCBzaW5jZQotICAgIC8vIHVwZGF0ZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucygpIHdpbGwgYWxzbyB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpbmRpY2VzLgotICAg
IGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50KQotICAgICAgICB1cGRh
dGVNZWRpYVNlbGVjdGlvbkluZGljZXMoKTsKLQotICAgIGlmIChhbGwKLSAgICAgICAgfHwgZXZl
bnROYW1lID09IGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCkgewotICAgICAgICBmb3Ig
KGF1dG8gY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICAgICAgY2xpZW50LT5tdXRlZENoYW5n
ZWQoaXNNdXRlZCgpKTsKLSAgICB9Ci19Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjphZGRDbGllbnQoV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVu
dCkKLXsKLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9j
bGllbnRzLmFkZCgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBj
bGllbnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAg
bV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6cGxheSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAg
ICAgICBtX21lZGlhRWxlbWVudC0+cGxheSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpwYXVzZSgpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQot
ICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1
YmJpbmcoKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmJlZ2luU2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygpCi17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQot
ICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17
Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3Vy
cmVudFRpbWUodGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkK
LSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotfQotCi12b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCi17
Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5T
Y2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQo
KQotewotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJl
Z2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpCYWNrd2FyZCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjYW5uaW5nKCkKLXsK
LSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY2Fu
bmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojpz
ZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVjdGVkQXVkaW9JbmRleCkKLXsKLSAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMCwgc2l6ZSA9IG1fYXVkaW9UcmFja3NGb3JNZW51LnNpemUoKTsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgbV9hdWRpb1RyYWNrc0Zvck1lbnVbaV0tPnNldEVuYWJsZWQoaSA9PSBzZWxl
Y3RlZEF1ZGlvSW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17Ci0gICAg
aWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGV4dFRyYWNrKiB0
ZXh0VHJhY2s7Ci0gICAgaWYgKGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5zaXplKCkp
Ci0gICAgICAgIHRleHRUcmFjayA9IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnVbc3RhdGljX2Nhc3Q8
c2l6ZV90PihpbmRleCldLmdldCgpOwotICAgIGVsc2UKLSAgICAgICAgdGV4dFRyYWNrID0gVGV4
dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKLQotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRT
ZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2spOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBpZiAo
bV9tZWRpYUVsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgPT0gTWVkaWFQbGF5ZXJFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50
LT5leGl0RnVsbHNjcmVlbigpOwotICAgIGVsc2UKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVu
dGVyRnVsbHNjcmVlbihNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQ6OnRvZ2dsZU11dGVkKCkKLXsKLSAgICBzZXRNdXRlZCghaXNNdXRlZCgpKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRl
ZCkKLXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRNdXRlZChtdXRlZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpCi17Ci0gICAgaWYgKCFtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGNhcHRpb25QcmVm
ZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0
aW9uUHJlZmVyZW5jZXMoKTsKLSAgICBhdXRvJiB0ZXh0VHJhY2tzID0gbV9tZWRpYUVsZW1lbnQt
PnRleHRUcmFja3MoKTsKLSAgICBpZiAodGV4dFRyYWNrcy5sZW5ndGgoKSkKLSAgICAgICAgbV9s
ZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RG
b3JNZW51KCZ0ZXh0VHJhY2tzKTsKLSAgICBlbHNlCi0gICAgICAgIG1fbGVnaWJsZVRyYWNrc0Zv
ck1lbnUuY2xlYXIoKTsKLQotICAgIGF1dG8mIGF1ZGlvVHJhY2tzID0gbV9tZWRpYUVsZW1lbnQt
PmF1ZGlvVHJhY2tzKCk7Ci0gICAgaWYgKGF1ZGlvVHJhY2tzLmxlbmd0aCgpID4gMSkKLSAgICAg
ICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tM
aXN0Rm9yTWVudSgmYXVkaW9UcmFja3MpOwotICAgIGVsc2UKLSAgICAgICAgbV9hdWRpb1RyYWNr
c0Zvck1lbnUuY2xlYXIoKTsKLQotICAgIGF1dG8gYXVkaW9PcHRpb25zID0gYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnMoKTsKLSAgICBhdXRvIGF1ZGlvSW5kZXggPSBhdWRpb01lZGlhU2VsZWN0
ZWRJbmRleCgpOwotICAgIGF1dG8gbGVnaWJsZU9wdGlvbnMgPSBsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zKCk7Ci0gICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3Rl
ZEluZGV4KCk7Ci0KLSAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAg
IGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1ZGlvT3B0aW9ucywg
YXVkaW9JbmRleCk7Ci0gICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQobGVnaWJsZU9wdGlvbnMsIGxlZ2libGVJbmRleCk7Ci0gICAgfQotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVNlbGVjdGlv
bkluZGljZXMoKQotewotICAgIGF1dG8gYXVkaW9JbmRleCA9IGF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4KCk7Ci0gICAgYXV0byBsZWdpYmxlSW5kZXggPSBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4
KCk7Ci0KLSAgICBmb3IgKGF1dG8gY2xpZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAgIGNsaWVu
dC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChhdWRpb0luZGV4KTsKLSAgICAgICAg
Y2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQobGVnaWJsZUluZGV4KTsK
LSAgICB9Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
cGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNr
U3RhcnRlZFRpbWUoKTsKLX0KLQotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQotewotICAg
IC8vIEZJWE1FKDE1NzQ1Mik6IFJlbW92ZSB0aGUgcmlnaHQtaGFuZCBjb25zdHJ1Y3RvciBub3Rh
dGlvbiBvbmNlIE5ldmVyRGVzdHJveWVkIHN1cHBvcnRzIGluaXRpYWxpemVyX2xpc3RzLgotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4gbmFtZXMgPSBWZWN0
b3I8QXRvbWljU3RyaW5nPih7Ci0gICAgICAgIGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2
ZW50LAotICAgICAgICBldmVudE5hbWVzKCkucGF1c2VFdmVudCwKLSAgICAgICAgZXZlbnROYW1l
cygpLnBsYXlFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCwKLSAg
ICAgICAgZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygp
LnByb2dyZXNzRXZlbnQsCi0gICAgICAgIGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50LAotICAg
ICAgICBldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwKLSAgICAgICAgZXZlbnROYW1lcygp
LnZvbHVtZWNoYW5nZUV2ZW50LAotICAgICAgICBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBs
YXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCwKLSAgICB9KTsKLSAgICByZXR1cm4g
bmFtZXMuZ2V0KCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGV2ZW50TmFtZUFsbCgiYWxsRXZlbnRzIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZUFsbDsKLX0K
LQotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpkdXJhdGlvbigp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5zdXBwb3J0c1NlZWtpbmcoKSA/IG1fbWVkaWFFbGVt
ZW50LT5kdXJhdGlvbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KTsKLX0KLQotZG91YmxlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjdXJy
ZW50VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVs
ZW1lbnQtPmN1cnJlbnRUaW1lKCkgOiAwOwotfQotCi1kb3VibGUgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
bWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1heEJ1ZmZlcmVkVGltZSgpIDogMDsKLX0K
LQotYm9vbCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6aXNQbGF5aW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyAhbV9tZWRpYUVsZW1lbnQtPnBh
dXNlZCgpIDogZmFsc2U7Ci19Ci0KLWZsb2F0IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50OjpwbGF5YmFja1JhdGUoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dCA/IG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSA6IDA7Ci19Ci0KLVJlZjxUaW1lUmFu
Z2VzPiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVSYW5nZXMo
KSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5z
ZWVrYWJsZSgpIDogVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci19Ci0KLWRvdWJsZSBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVk
VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1l
bnQtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRpbWUoKSA6IDA7Ci19Ci0KLWRvdWJs
ZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGl2ZVVwZGF0ZUludGVydmFs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+
bGl2ZVVwZGF0ZUludGVydmFsKCkgOiAwOwotfQotICAgIAotYm9vbCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9tZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRl
KCkgPCAwLjAgOiBmYWxzZTsKLX0KLQotVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnMoKSBjb25zdAotewotICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gYXVkaW9PcHRp
b25zOwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3Vt
ZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gYXVkaW9PcHRpb25zOwotCi0gICAgYXV0byYg
Y2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5n
cm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOwotCi0gICAgYXVkaW9PcHRpb25zLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9hdWRpb1RyYWNrc0Zvck1lbnUuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIGF1ZGlvVHJhY2sgOiBtX2F1ZGlvVHJhY2tzRm9yTWVudSkKLSAgICAgICAgYXVkaW9PcHRp
b25zLnVuY2hlY2tlZEFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRp
b25Gb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gYXVkaW9PcHRpb25z
OwotfQotCi11aW50NjRfdCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6YXVk
aW9NZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAg
ICAgaWYgKG1fYXVkaW9UcmFja3NGb3JNZW51W2luZGV4XS0+ZW5hYmxlZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50NjRfdD46Om1heCgpOwotfQotCi1WZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVP
cHRpb25zOwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRv
Y3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Ci0KLSAgICBh
dXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNr
IDogbV9sZWdpYmxlVHJhY2tzRm9yTWVudSkKLSAgICAgICAgbGVnaWJsZU9wdGlvbnMuYXBwZW5k
KGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdl
dCgpKSk7Ci0KLSAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Ci19Ci0KLXVpbnQ2NF90IFdlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4
KCkgY29uc3QKLXsKLSAgICB1aW50NjRfdCBzZWxlY3RlZEluZGV4ID0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpOwotICAgIHVpbnQ2NF90IG9mZkluZGV4ID0gMDsKLSAgICBi
b29sIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IGZhbHNlOwotCi0gICAgYXV0byBob3N0ID0gbV9t
ZWRpYUVsZW1lbnQgPyBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSA6IG51bGxw
dHI7Ci0KLSAgICBpZiAoIWhvc3QpCi0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4OwotCi0g
ICAgQXRvbWljU3RyaW5nIGRpc3BsYXlNb2RlID0gaG9zdC0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7
Ci0gICAgVGV4dFRyYWNrKiBvZmZJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7Ci0g
ICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVBdXRvbWF0aWNJ
dGVtKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9sZWdpYmxlVHJh
Y2tzRm9yTWVudS5zaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgYXV0byYgdHJhY2sgPSBtX2xl
Z2libGVUcmFja3NGb3JNZW51W2luZGV4XTsKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0p
Ci0gICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OwotCi0gICAgICAgIGlmICh0cmFjayA9PSBh
dXRvbWF0aWNJdGVtICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0
aWNLZXl3b3JkKCkpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAg
ICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoZGlzcGxheU1vZGUgIT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQo
KSAmJiB0cmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgewotICAgICAg
ICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNl
bGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChvZmZJdGVtICYmICF0
cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6
OmZvcmNlZE9ubHlLZXl3b3JkKCkpCi0gICAgICAgIHNlbGVjdGVkSW5kZXggPSBvZmZJbmRleDsK
LQotICAgIHJldHVybiBzZWxlY3RlZEluZGV4OwotfQotCi1ib29sIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT53ZWJraXRDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdAotewotICAgIGlmICgh
bV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKQot
ICAgICAgICByZXR1cm4gVGFyZ2V0VHlwZU5vbmU7Ci0KLSAgICBzd2l0Y2ggKG1fbWVkaWFFbGVt
ZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZVR5cGUoKSkgewotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gVGFy
Z2V0VHlwZU5vbmU7Ci0gICAgY2FzZSBNZWRpYUNvbnRyb2xzSG9zdDo6RGV2aWNlVHlwZTo6Tm9u
ZToKLSAgICAgICAgcmV0dXJuIFRhcmdldFR5cGVOb25lOwotICAgIGNhc2UgTWVkaWFDb250cm9s
c0hvc3Q6OkRldmljZVR5cGU6OkFpcnBsYXk6Ci0gICAgICAgIHJldHVybiBUYXJnZXRUeXBlQWly
UGxheTsKLSAgICBjYXNlIE1lZGlhQ29udHJvbHNIb3N0OjpEZXZpY2VUeXBlOjpUdm91dDoKLSAg
ICAgICAgcmV0dXJuIFRhcmdldFR5cGVUVk91dDsKLSAgICB9Ci19Ci0KLVN0cmluZyBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERl
dmljZU5hbWUoKSBjb25zdAotewotICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxl
bWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50
LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7Ci0gICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLWJvb2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vzc2lvbigp
LndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCptX21lZGlhRWxlbWVudCk7Ci19Ci0KLWJv
b2wgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmlzTXV0ZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT5tdXRlZCgpIDog
ZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzMmI0MzkzNWQyYjI4MWQ4MTYzZmIxNzY1
OGExYzdjZTQ0YTM2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1bGxz
Y3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyNzAyZGI4NmI1OTI2NDkyMmFl
YjQwMWNkYjIyMjE5ZDlmZGU0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFU
Rk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50RW51bXMuaCIKLSNpbmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Owot
Ci1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGFkZENsaWVu
dChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jik9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpID0gMDsKLSAg
ICBlbnVtIFZpZGVvR3Jhdml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSwgVmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0LCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsIH07Ci0gICAgdmlydHVhbCB2
b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgRmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCA9IDA7Ci19OwotCi1jbGFzcyBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaGFzVmlkZW9D
aGFuZ2VkKGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdl
ZChjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci19OwotCi1XRUJDT1JFX0VYUE9SVCBib29sIHN1cHBv
cnRzUGljdHVyZUluUGljdHVyZSgpOwotICAgIAotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlh
MGZiMTcwOTE5ZmQxODdmMjAwZjY4OWI3MjJhNWVkYWE1ZDZjMTMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEF1ZGlvVHJhY2s7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotY2xhc3Mg
VGV4dFRyYWNrOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7Ci0K
LWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IDogcHVibGljIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50KCkpOwotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKLSAgICBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRWxlbWVudC5n
ZXQoKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
UGxhdGZvcm1MYXllciosIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
ID0gW10geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdhaXRGb3JQcmVwYXJlZEZvcklu
bGluZVRoZW4oV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIgPSBbXSB7
IH0pOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYkNvcmU6OkV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykg
PT0gJnJoczsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9
IGZhbHNlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvTGF5ZXJG
cmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWaXNp
YmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHZpZGVv
RGltZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9
Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1faGFzVmlkZW87IH0KLQotCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IHNldEhhc1ZpZGVvKGJvb2wpOwotICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGNvbnN0IEZs
b2F0U2l6ZSYpOwotCi0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21pY1N0cmluZz4m
IG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVu
dE5hbWVBbGwoKTsKLQotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVu
dDsKLSAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsK
LSAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9OwotICAgIEhhc2hTZXQ8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgYm9vbCBtX2hhc1ZpZGVvIHsg
ZmFsc2UgfTsKLSAgICBGbG9hdFNpemUgbV92aWRlb0RpbWVuc2lvbnM7Ci0gICAgRmxvYXRSZWN0
IG1fdmlkZW9GcmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRy
YWNrc0Zvck1lbnU7Ci0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNr
c0Zvck1lbnU7Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGJmNDdjMGM0ZGU2
NWZlY2M0NWZjNWZmNzQ1NzY4NWIwYzU1YzVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCi0KLSNpbXBvcnQgIkRPTVdpbmRvdy5oIgotI2ltcG9y
dCAiSGlzdG9yeS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9s
c0hvc3QuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmgi
Ci0jaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9FdmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZS5o
PgotI2ltcG9ydCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Rp
bWVSYW5nZXMuaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3Rm
L1NvZnRMaW5raW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQoKQotICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3Rl
bmVyVHlwZSkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6On5X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9F
bGVtZW50KiB2aWRlb0VsZW1lbnQpCi17Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50ID09IHZpZGVv
RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1f
dmlkZW9FbGVtZW50LT52aWRlb0Z1bGxzY3JlZW5MYXllcigpKQotICAgICAgICBtX3ZpZGVvRWxl
bWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobnVsbHB0cik7Ci0KLSAgICBpZiAobV92aWRl
b0VsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TmFt
ZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJl
bW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgIH0KLSAgICBt
X2lzTGlzdGVuaW5nID0gZmFsc2U7Ci0KLSAgICBtX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVu
dDsKLQotICAgIGlmIChtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50
TmFtZSA6IG9ic2VydmVkRXZlbnROYW1lcygpKQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQt
PmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAqdGhpcywgZmFsc2UpOwotICAgICAgICBtX2lz
TGlzdGVuaW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZlbnRO
YW1lQWxsKCkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV2ViQ29yZTo6
RXZlbnQmIGV2ZW50KQotewotICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudC50eXBlKCkpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp1cGRhdGVGb3JF
dmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKLXsKLSAgICBpZiAo
bV9jbGllbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgYWxs
ID0gZXZlbnROYW1lID09IGV2ZW50TmFtZUFsbCgpOwotCi0gICAgaWYgKGFsbAotICAgICAgICB8
fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KSB7Ci0gICAgICAgIHNldEhh
c1ZpZGVvKG1fdmlkZW9FbGVtZW50KTsKLSAgICAgICAgc2V0VmlkZW9EaW1lbnNpb25zKG1fdmlk
ZW9FbGVtZW50ID8gRmxvYXRTaXplKG1fdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIG1fdmlk
ZW9FbGVtZW50LT52aWRlb0hlaWdodCgpKSA6IEZsb2F0U2l6ZSgpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09
IHZpZGVvTGF5ZXIpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gdmlkZW9MYXll
cjsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QW5j
aG9yUG9pbnQ6Q0dQb2ludE1ha2UoMCwgMCldOwotI2Vsc2UKLSAgICBbbV92aWRlb0Z1bGxzY3Jl
ZW5MYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLjUsIDAuNSldOwotI2VuZGlmCi0g
ICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOm1fdmlkZW9GcmFtZV07Ci0gICAg
Ci0gICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fdmlkZW9FbGVtZW50KSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX3ZpZGVvRWxlbWVudC0+d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKLXsKLSAgICBp
ZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlKCkgIT0g
bW9kZSkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOwot
Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIGZpbmlzaGVkV2l0aE1lZGlhICYmIG1vZGUgPT0g
TWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpIHsKLSAgICAgICAgaWYg
KG1fdmlkZW9FbGVtZW50LT5kb2N1bWVudCgpLmlzTWVkaWFEb2N1bWVudCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5k
b21XaW5kb3coKSkgewotICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5KiBoaXN0b3J5ID0gd2lu
ZG93LT5oaXN0b3J5KCkpCi0gICAgICAgICAgICAgICAgICAgIGhpc3RvcnktPmJhY2soKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0KQot
ewotICAgIG1fdmlkZW9GcmFtZSA9IHJlY3Q7Ci0gICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIg
c2V0Qm91bmRzOkNHUmVjdChyZWN0KV07Ci0gICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAg
ICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2
aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKLXsKLSAg
ICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7Ci0gICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZSkKLSAgICAgICAgdmlkZW9HcmF2aXR5ID0g
TWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZTsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpCi0gICAg
ICAgIHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7
Ci0gICAgZWxzZSBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5UmVzaXplQXNwZWN0RmlsbCkKLSAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5
ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGw7Ci0gICAgZWxzZQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAKLSAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxs
c2NyZWVuR3Jhdml0eSh2aWRlb0dyYXZpdHkpOwotfQotCi1jb25zdCBWZWN0b3I8QXRvbWljU3Ry
aW5nPiYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6Om9ic2VydmVkRXZlbnRO
YW1lcygpCi17Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gbmFtZXMgPSBtYWtlTmV2ZXJEZXN0cm95
ZWQoVmVjdG9yPEF0b21pY1N0cmluZz4geyBldmVudE5hbWVzKCkucmVzaXplRXZlbnQgfSk7Ci0g
ICAgcmV0dXJuIG5hbWVzOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKLSAg
ICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotewotICAgIGlmICht
X3ZpZGVvRWxlbWVudCkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlQ2hh
bmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6YWRkQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
JiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwot
ICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudCYgY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkp
OwotICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3ZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBw
YWdlLT5pc1Zpc2libGUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0SGFzVmlkZW8oYm9vbCBoYXNWaWRlbykK
LXsKLSAgICBpZiAoaGFzVmlkZW8gPT0gbV9oYXNWaWRlbykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9oYXNWaWRlbyA9IGhhc1ZpZGVvOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2Ns
aWVudHMpCi0gICAgICAgIGNsaWVudC0+aGFzVmlkZW9DaGFuZ2VkKG1faGFzVmlkZW8pOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0RpbWVu
c2lvbnMoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgaWYgKG1fdmlk
ZW9EaW1lbnNpb25zID09IHZpZGVvRGltZW5zaW9ucykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV92aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnM7Ci0KLSAgICBmb3IgKGF1dG8mIGNs
aWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT52aWRlb0RpbWVuc2lvbnNDaGFuZ2Vk
KG1fdmlkZW9EaW1lbnNpb25zKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjlmY2Q3YjRiY2YxNGJjNzRhNjUyNTIwOGNiZjMxMmNlNjI1ZDM2MTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShJ
T1MpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgiCisjaW5j
bHVkZSAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1
ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCitPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKK09CSkNfQ0xBU1Mg
QVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKK09C
SkNfQ0xBU1MgVUlXaW5kb3c7CitPQkpDX0NMQVNTIFVJVmlldzsKKworbmFtZXNwYWNlIFdURiB7
CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7
CitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbDsKK2NsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkNo
YW5nZU9ic2VydmVyOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdAorICAgIDogcHVibGljIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQorICAgICwg
cHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRl
ZDxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4geworCitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFBsYXliYWNrU2Vzc2lv
bk1vZGVsJiBtb2RlbCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KG1vZGVsKSk7CisgICAgfQorICAgIHZpcnR1YWwgflBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCk7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwq
IHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25N
b2RlbDsgfQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKKworICAgIC8vIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5n
ZWQoZG91YmxlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1l
Q2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBvdmVy
cmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlm
aWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgb3ZlcnJpZGU7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3Ry
aW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBXZWJB
VlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3Bs
YXllckNvbnRyb2xsZXIuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JU
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbk1vZGVsJik7CisK
KyAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7
CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxs
cHRyIH07Cit9OworCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTViYTkwNWE3MDE5NDk2NTc3MzE3YjEwZDUzMDAyN2ZjMWM1MTUxMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdC5tbQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oIgorCisjaWYgUExBVEZPUk0oSU9TKQor
I2lmIEhBVkUoQVZLSVQpCisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJMb2dnaW5n
LmgiCisjaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgorI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIldlYkFWUGxh
eWVyQ29udHJvbGxlci5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgorI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9y
dCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgi
CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0KFBsYXliYWNrU2Vzc2lvbk1vZGVsJiBtb2RlbCkKKyAgICA6IG1fcGxheWVyQ29udHJvbGxl
cihhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSkpCisgICAgLCBt
X3BsYXliYWNrU2Vzc2lvbk1vZGVsKCZtb2RlbCkKK3sKKyAgICBtb2RlbC5hZGRDbGllbnQoKnRo
aXMpOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
OnRoaXNdOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6Jm1vZGVsXTsKKwor
ICAgIGR1cmF0aW9uQ2hhbmdlZChtb2RlbC5kdXJhdGlvbigpKTsKKyAgICBjdXJyZW50VGltZUNo
YW5nZWQobW9kZWwuY3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBz
eXN0ZW1VcHRpbWVdKTsKKyAgICBidWZmZXJlZFRpbWVDaGFuZ2VkKG1vZGVsLmJ1ZmZlcmVkVGlt
ZSgpKTsKKyAgICByYXRlQ2hhbmdlZChtb2RlbC5pc1BsYXlpbmcoKSwgbW9kZWwucGxheWJhY2tS
YXRlKCkpOworICAgIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChtb2RlbC5zZWVrYWJsZVJhbmdlcygp
LCBtb2RlbC5zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCksIG1vZGVsLmxpdmVV
cGRhdGVJbnRlcnZhbCgpKTsKKyAgICBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKG1vZGVsLmNh
blBsYXlGYXN0UmV2ZXJzZSgpKTsKKyAgICBhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQobW9kZWwuYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwuYXVkaW9NZWRpYVNl
bGVjdGVkSW5kZXgoKSk7CisgICAgbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQo
bW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygpLCBtb2RlbC5sZWdpYmxlTWVkaWFT
ZWxlY3RlZEluZGV4KCkpOworICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKG1vZGVsLmV4dGVy
bmFsUGxheWJhY2tFbmFibGVkKCksIG1vZGVsLmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCks
IG1vZGVsLmV4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lKCkpOworICAgIHdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChtb2RlbC53aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZCgpKTsKK30KKworUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6On5QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCgpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6bnVsbHB0cl07CisgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRFeHRlcm5hbFBsYXliYWNrQWN0aXZlOmZhbHNlXTsKKworICAgIGludmFsaWRhdGUo
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6cmVzZXRNZWRpYVN0
YXRlKCkKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHJlc2V0TWVkaWFTdGF0ZV07Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmR1cmF0aW9uQ2hhbmdlZChkb3Vi
bGUgZHVyYXRpb24pCit7CisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9s
bGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworCisgICAgcGxheWVyQ29udHJvbGxlci5j
b250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnRE
dXJhdGlvbldpdGhpbkVuZFRpbWVzID0gZHVyYXRpb247CisKKyAgICAvLyBGSVhNRTogd2UgdGFr
ZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KKyAgICBwbGF5
ZXJDb250cm9sbGVyLmNhblBsYXkgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5QYXVz
ZSA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwor
ICAgIHBsYXllckNvbnRyb2xsZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAgIHBsYXllckNv
bnRyb2xsZXIuY2FuU2VlayA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9IEFW
UGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5OworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSkKK3sKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3Rh
bXAgPSAhW21fcGxheWVyQ29udHJvbGxlciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7CisgICAg
QVZWYWx1ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGlt
aW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCisgICAgICAgIGFuY2hvclRpbWVTdGFtcDph
bmNob3JUaW1lU3RhbXAgcmF0ZTowXTsKKworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0VGlt
aW5nOnRpbWluZ107Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmJ1
ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBXZWJBVlBsYXll
ckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7
CisgICAgZG91YmxlIGR1cmF0aW9uID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb247
CisgICAgZG91YmxlIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWU7CisgICAgaWYgKCFkdXJhdGlvbikK
KyAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IDA7CisgICAgZWxzZQorICAgICAgICBu
b3JtYWxpemVkQnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247CisgICAgcGxh
eWVyQ29udHJvbGxlci5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVkQnVmZmVy
ZWRUaW1lKV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJhdGVD
aGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6c2Vla2FibGVSYW5nZXNDaGFu
Z2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1l
LCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gc2Vla2FibGVSYW5nZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgp
OyBpKyspIHsKKyAgICAgICAgZG91YmxlIHN0YXJ0ID0gdGltZVJhbmdlcy5zdGFydChpKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKKyAgICAgICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMuZW5kKGkp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworCisgICAgICAgIENNVGltZVJhbmdlIHJhbmdlID0gQ01U
aW1lUmFuZ2VNYWtlKENNVGltZU1ha2VXaXRoU2Vjb25kcyhzdGFydCwgMTAwMCksIENNVGltZU1h
a2VXaXRoU2Vjb25kcyhlbmQtc3RhcnQsIDEwMDApKTsKKyAgICAgICAgW3NlZWthYmxlUmFuZ2Vz
IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOworICAgIH0K
KworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnNlZWthYmxl
UmFuZ2VzLmdldCgpXTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJh
bmdlc0xhc3RNb2RpZmllZFRpbWU6IGxhc3RNb2RpZmllZFRpbWVdOworICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0TGl2ZVVwZGF0ZUludGVydmFsOmxpdmVVcGRhdGVJbnRlcnZhbF07Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNo
YW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKK30KKworc3RhdGljIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCit7CisgICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7CisgICAgZm9yIChhdXRvJiBvcHRpb24g
OiBvcHRpb25zKSB7CisgICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9u
PiB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxvY10g
aW5pdF0pOworICAgICAgICBbd2ViT3B0aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9wdGlv
bi5kaXNwbGF5TmFtZV07CisgICAgICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24u
Z2V0KCldOworICAgIH0KKyAgICByZXR1cm4gd2ViT3B0aW9uczsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25z
ID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOworICAgIFttX3BsYXllckNvbnRyb2xs
ZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07CisgICAg
aWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisgICAgICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlv
bnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1d
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsK
KyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6
d2ViT3B0aW9ucy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBj
b3VudF0pCisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5T
VUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIGNv
bnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBBVlBsYXllckNvbnRyb2xs
ZXJFeHRlcm5hbFBsYXliYWNrVHlwZSBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29u
dHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlTm9uZTsKKyAgICBpZiAodGFyZ2V0VHlwZSA9PSBQ
bGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZUFpclBsYXkpCisgICAgICAgIGV4dGVybmFs
UGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVBaXJQ
bGF5OworICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRh
cmdldFR5cGVUVk91dCkKKyAgICAgICAgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNv
bnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0OworCisgICAgV2ViQVZQbGF5ZXJDb250
cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworICAg
IHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6ZWRO
YW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFs
UGxheWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7CisgICAgcGxheWVyQ29udHJvbGxl
ci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2Vk
KGJvb2wgZGlzYWJsZWQpCit7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRBbGxvd3NFeHRl
cm5hbFBsYXliYWNrOiFkaXNhYmxlZF07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQoreworICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0TXV0ZWQ6bXV0ZWRdOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwp
CisgICAgICAgIHJldHVybjsKKworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6
bnVsbHB0cl07CisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlz
KTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKK30KKworfQorCisjZW5k
aWYgLy8gSEFWRShBVktJVCkKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjEyNzcxMDNjMzQxMWE5MzA5YzhmYzUyNDkzNjViZjA1ODUxNDY1
YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpZiBQ
TEFURk9STShJT1MpCisKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSFRN
TE1lZGlhRWxlbWVudEVudW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1
ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW5jbHVkZSAiVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3Au
aD4KKworT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBVSVZp
ZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBVSVdpbmRvdzsKK09CSkNfQ0xBU1MgVUlWaWV3Owor
T0JKQ19DTEFTUyBDQUxheWVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7CitP
QkpDX0NMQVNTIFdlYkFWUGxheWVyTGF5ZXJWaWV3OworT0JKQ19DTEFTUyBXZWJBVlBsYXllckxh
eWVyOworT0JKQ19DTEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7CisKK25h
bWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBJbnRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTW9k
ZWw7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKKyAgICAKK2NsYXNzIFdF
QkNPUkVfRVhQT1JUIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IGZpbmFsCisgICAgOiBw
dWJsaWMgVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKKyAgICAsIHB1YmxpYyBQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudAorICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQmKTsKKyAgICB2aXJ0dWFsIH5WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTW9kZWwoVmlkZW9G
dWxsc2NyZWVuTW9kZWwqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7CisgICAg
UGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1
cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0K
KworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworCisgICAg
Ly8gUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4
dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmlj
ZU5hbWUpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldHVwRnVs
bHNjcmVlbihVSVZpZXcmLCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0
dXJlSW5QaWN0dXJlUGxheWJhY2spOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bnRlckZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1
bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmluYWxSZWN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBy
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJl
Y3QmIGlubGluZVJlY3QpOworCisgICAgZW51bSBjbGFzcyBFeGl0RnVsbFNjcmVlblJlYXNvbiB7
CisgICAgICAgIERvbmVCdXR0b25UYXBwZWQsCisgICAgICAgIEZ1bGxTY3JlZW5CdXR0b25UYXBw
ZWQsCisgICAgICAgIFBpbmNoR2VzdHVyZUhhbmRsZWQsCisgICAgICAgIFJlbW90ZUNvbnRyb2xT
dG9wRXZlbnRSZWNlaXZlZCwKKyAgICAgICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQKKyAgICB9
OworCisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbDsgfQorICAgIGJvb2wgc2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRo
UmVhc29uKEV4aXRGdWxsU2NyZWVuUmVhc29uKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAg
IGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gbV9h
bGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7CisgICAg
dm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wp
PiYmIGNhbGxiYWNrKTsKKyAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkg
Y29uc3Q7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOworCisgICAgdm9p
ZCB3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBkaWRTdGFydFBpY3R1cmVJ
blBpY3R1cmUoKTsKKyAgICB2b2lkIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cisg
ICAgdm9pZCB3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIGRpZFN0b3BQaWN0
dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BX
aXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXikoQk9PTCkpOworCisgICAgdm9pZCBzZXRNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAg
ICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7IH0KKyAgICBib29sIGlzTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlID09IG1vZGU7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JU
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Jik7CisgICAgdm9pZCBiZWdpblNlc3Npb24oKTsKKyAgICB2b2lkIGVudGVyUGljdHVyZUlu
UGljdHVyZSgpOworICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKKyAgICB2b2lk
IHdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxheWVy
Q29udHJvbGxlcigpIGNvbnN0OworCisgICAgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0PiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyAgICBSZXRhaW5QdHI8V2ViQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7
CisgICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0NvbnRy
b2xsZXI7CisgICAgVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwg
eyBudWxscHRyIH07CisgICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkg
dXNlZCB3aGVuIGZ1bGxzY3JlZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2luZG93Lgor
ICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV93aW5kb3c7CisgICAgUmV0YWluUHRyPFVJVmlld0Nv
bnRyb2xsZXI+IG1fdmlld0NvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFVJVmlldz4gbV9wYXJl
bnRWaWV3OworICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV9wYXJlbnRXaW5kb3c7CisgICAgUmV0
YWluUHRyPFdlYkFWUGxheWVyTGF5ZXJWaWV3PiBtX3BsYXllckxheWVyVmlldzsKKyAgICBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OworICAgIFdURjo6RnVuY3Rp
b248dm9pZChib29sKT4gbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjazsKKyAgICBSdW5Mb29wOjpU
aW1lcjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV93YXRjaGRvZ1RpbWVyOworICAg
IGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZXhpdENvbXBsZXRlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2VudGVyUmVxdWVzdGVkIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB7IGZhbHNlIH07CisgICAgYm9v
bCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVT
dG9wIHsgZmFsc2UgfTsKKworICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4oKTsKK307CisKK30K
KworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTgyNTgyYTk0
Y2Y2NGZkNjMxMjlkNTY3YTJiZGFhMzk4MDRmZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCkBA
IC0wLDAgKzEsMTA0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorI2lt
cG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKworI2lmIEhBVkUoQVZLSVQp
CisKKyNpbXBvcnQgIkFWS2l0U1BJLmgiCisjaW1wb3J0ICJHZW9tZXRyeVV0aWxpdGllcy5oIgor
I2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgorI2ltcG9ydCAiVGlt
ZVJhbmdlcy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKKyNp
bXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisjaW1wb3J0ICJXZWJBVlBsYXllckNvbnRy
b2xsZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgPEFW
Rm91bmRhdGlvbi9BVlRpbWUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CisjaW1wb3J0IDxv
YmpjL21lc3NhZ2UuaD4KKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBTb2Z0LWxp
bmtpbmcgaGVhZGVycyBtdXN0IGJlIGluY2x1ZGVkIGxhc3Qgc2luY2UgdGhleSAjZGVmaW5lIGZ1
bmN0aW9ucywgY29uc3RhbnRzLCBldGMuCisjaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgor
CitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZv
dW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9u
LCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX0NPTlNU
QU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgTlNTdHJp
bmcgKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTGF5ZXJWaWRlb0dyYXZp
dHlSZXNpemVBc3BlY3RGaWxsLCBOU1N0cmluZyAqKQorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09Q
VElPTkFMKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBpY3R1cmVJ
blBpY3R1cmVDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBs
YXllclZpZXdDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBfX0FW
UGxheWVyTGF5ZXJWaWV3KQorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQorU09GVF9MSU5L
X0NMQVNTKFVJS2l0LCBVSUFwcGxpY2F0aW9uKQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVNj
cmVlbikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlXaW5kb3cpCitTT0ZUX0xJTktfQ0xBU1Mo
VUlLaXQsIFVJVmlldykKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3Q29udHJvbGxlcikK
K1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlDb2xvcikKK1NPRlRfTElOS19DT05TVEFOVChVSUtp
dCwgVUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0dXNCYXJXaW5kb3dMZXZlbCwgVUlXaW5kb3dMZXZl
bCkKKworc3RhdGljIFVJQ29sb3IgKmNsZWFyVUlDb2xvcigpCit7CisgICAgcmV0dXJuIChVSUNv
bG9yICopW2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdOworfQorCisjaWYgIUxPR19ESVNB
QkxFRAorc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCit7CisgICAgcmV0
dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IFNl
Y29uZHMgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCB7IDFfcyB9OworCitAY2xhc3MgV2Vi
QVZNZWRpYVNlbGVjdGlvbk9wdGlvbjsKKworQGludGVyZmFjZSBXZWJBVlBsYXllclZpZXdDb250
cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdCA8QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRl
X1dlYktpdE9ubHk+IHsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IF9mdWxsc2NyZWVuSW50ZXJmYWNlOworfQorQHByb3BlcnR5IChhc3NpZ24pIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KiBmdWxsc2NyZWVuSW50ZXJmYWNlOworLSAoQk9PTClwbGF5ZXJW
aWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9s
bGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxl
ckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNvbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQorLSAoVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAgICByZXR1cm4gX2Z1bGxzY3JlZW5J
bnRlcmZhY2UuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0RnVsbHNjcmVlbkludGVyZmFjZTooVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKK3sKKyAgICBf
ZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5JbnRlcmZhY2U7Cit9CisKKy0gKHZvaWQp
cGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZp
ZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0o
cGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+d2ls
bFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdDb250cm9s
bGVyRGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxh
eWVyVmlld0NvbnRyb2xsZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xs
ZXIpOworICAgIHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3RhcnRQaWN0dXJlSW5QaWN0
dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJGYWlsZWRUb1N0YXJ0UGlj
dHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9s
bGVyIHdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXll
clZpZXdDb250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIHNlbGYuZnVs
bHNjcmVlbkludGVyZmFjZS0+ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKwor
LSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdG9wUGljdHVyZUluUGljdHVyZTooQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VE
X1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZh
Y2UtPndpbGxTdG9wUGljdHVyZUluUGljdHVyZSgpOworfQorCistICh2b2lkKXBsYXllclZpZXdD
b250cm9sbGVyRGlkU3RvcFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIg
KilwbGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29u
dHJvbGxlcik7CisgICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdG9wUGljdHVyZUlu
UGljdHVyZSgpOworfQorCitzdGF0aWMgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4
aXRGdWxsU2NyZWVuUmVhc29uIGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKEFWUGxheWVy
Vmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCit7CisgICAgc3dpdGNo
IChyZWFzb24pIHsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVl
blJlYXNvbkRvbmVCdXR0b25UYXBwZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQ7Cisg
ICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25GdWxsU2Ny
ZWVuQnV0dG9uVGFwcGVkOgorICAgICAgICByZXR1cm4gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpGdWxsU2NyZWVuQnV0dG9uVGFwcGVkOworICAg
IGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGljdHVyZUlu
UGljdHVyZVN0YXJ0ZWQ6CisgICAgICAgIHJldHVybiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpY3R1cmVJblBpY3R1cmVTdGFydGVkOworICAg
IGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGluY2hHZXN0
dXJlSGFuZGxlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGluY2hHZXN0dXJlSGFuZGxlZDsKKyAgICBjYXNlIEFW
UGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvblJlbW90ZUNvbnRyb2xTdG9w
RXZlbnRSZWNlaXZlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVk
OworICAgIH0KK30KKworLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3
Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0
aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNv
bgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgcmV0dXJu
IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZS0+c2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29u
KGNvbnZlcnRUb0V4aXRGdWxsU2NyZWVuUmVhc29uKHJlYXNvbikpOworfQorCistICh2b2lkKXBs
YXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0Nv
bnRyb2xsZXIgcmVzdG9yZVVzZXJJbnRlcmZhY2VGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCByZXN0b3JlZCkpY29tcGxldGlvbkhhbmRs
ZXIKK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHNlbGYu
ZnVsbHNjcmVlbkludGVyZmFjZS0+cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENv
bXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyKTsKK30KK0BlbmQKKworQGludGVyZmFj
ZSBXZWJBVlBsYXllckxheWVyIDogQ0FMYXllcgorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
bikgTlNTdHJpbmcgKnZpZGVvR3Jhdml0eTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9
aXNSZWFkeUZvckRpc3BsYXkpIEJPT0wgcmVhZHlGb3JEaXNwbGF5OworQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5J
bnRlcmZhY2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBBVlBsYXllckNvbnRyb2xs
ZXIgKnBsYXllckNvbnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBDQUxh
eWVyICp2aWRlb1N1YmxheWVyOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIG51bGxhYmxl
KSBOU0RpY3Rpb25hcnkgKnBpeGVsQnVmZmVyQXR0cmlidXRlczsKK0Bwcm9wZXJ0eSBDR1NpemUg
dmlkZW9EaW1lbnNpb25zOworQHByb3BlcnR5IENHUmVjdCBtb2RlbFZpZGVvTGF5ZXJGcmFtZTsK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyTGF5ZXIgeworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7CisgICAg
UmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJvbGxlcj4gX2F2UGxheWVyQ29udHJvbGxlcjsKKyAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gX3ZpZGVvU3VibGF5ZXI7CisgICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiBfdmlkZW9HcmF2aXR5OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKHNlbGYpIHsKKyAgICAgICAgW3NlbGYgc2V0TWFz
a3NUb0JvdW5kczpZRVNdOworICAgICAgICBfdmlkZW9HcmF2aXR5ID0gZ2V0QVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdCgpOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVl
c3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNvbHZlQm91bmRzKSBvYmpl
Y3Q6bmlsXTsKKyAgICBbX3BpeGVsQnVmZmVyQXR0cmlidXRlcyByZWxlYXNlXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KilmdWxs
c2NyZWVuSW50ZXJmYWNlCit7CisgICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNlLmdldCgp
OworfQorCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0KilmdWxsc2NyZWVuSW50ZXJmYWNlCit7CisgICAgX2Z1bGxzY3JlZW5JbnRl
cmZhY2UgPSBmdWxsc2NyZWVuSW50ZXJmYWNlOworfQorCistIChBVlBsYXllckNvbnRyb2xsZXIg
KilwbGF5ZXJDb250cm9sbGVyCit7CisgICAgcmV0dXJuIChBVlBsYXllckNvbnRyb2xsZXIgKilf
YXZQbGF5ZXJDb250cm9sbGVyLmdldCgpOworfQorCistICh2b2lkKXNldFBsYXllckNvbnRyb2xs
ZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKK3sKKyAgICBBU1NFUlQo
IXBsYXllckNvbnRyb2xsZXIgfHwgW3BsYXllckNvbnRyb2xsZXIgaXNLaW5kT2ZDbGFzczpbV2Vi
QVZQbGF5ZXJDb250cm9sbGVyIGNsYXNzXV0pOworICAgIF9hdlBsYXllckNvbnRyb2xsZXIgPSAo
V2ViQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcjsKK30KKworLSAodm9pZClz
ZXRWaWRlb1N1YmxheWVyOihDQUxheWVyICopdmlkZW9TdWJsYXllcgoreworICAgIF92aWRlb1N1
YmxheWVyID0gdmlkZW9TdWJsYXllcjsKK30KKworLSAoQ0FMYXllciopdmlkZW9TdWJsYXllcgor
eworICAgIHJldHVybiBfdmlkZW9TdWJsYXllci5nZXQoKTsKK30KKworLSAodm9pZClsYXlvdXRT
dWJsYXllcnMKK3sKKyAgICBpZiAoW192aWRlb1N1YmxheWVyIHN1cGVybGF5ZXJdICE9IHNlbGYp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdh
dGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBbX3ZpZGVvU3VibGF5ZXIgc2V0UG9zaXRpb246
Q0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChzZWxmLmJvdW5kcyksIENHUmVjdEdldE1pZFkoc2Vs
Zi5ib3VuZHMpKV07CisKKyAgICBpZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0IDw9IDAg
fHwgc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgRmxvYXRSZWN0IHNvdXJjZVZpZGVvRnJhbWU7CisgICAgRmxvYXRSZWN0IHRhcmdldFZpZGVv
RnJhbWU7CisgICAgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlkZW9EaW1lbnNpb25z
LndpZHRoIC8gc2VsZi52aWRlb0RpbWVuc2lvbnMuaGVpZ2h0OworICAgIAorICAgIGlmIChbZ2V0
QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZSgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jh
dml0eV0pIHsKKyAgICAgICAgc291cmNlVmlkZW9GcmFtZSA9IHNlbGYubW9kZWxWaWRlb0xheWVy
RnJhbWU7CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzZWxmLmJvdW5kczsKKyAgICB9IGVs
c2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkgaXNFcXVhbFRvU3Ry
aW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgeworICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gbGFy
Z2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYu
bW9kZWxWaWRlb0xheWVyRnJhbWUpOworICAgICAgICB0YXJnZXRWaWRlb0ZyYW1lID0gbGFyZ2Vz
dFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91
bmRzKTsKKyAgICB9IGVsc2UgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pIHsKKyAgICAgICAgc291
cmNlVmlkZW9GcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3Qodmlk
ZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7CisgICAgICAgIHNlbGYu
bW9kZWxWaWRlb0xheWVyRnJhbWUgPSBDR1JlY3RNYWtlKDAsIDAsIHNvdXJjZVZpZGVvRnJhbWUu
d2lkdGgoKSwgc291cmNlVmlkZW9GcmFtZS5oZWlnaHQoKSk7CisgICAgICAgIEFTU0VSVChfZnVs
bHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKSk7CisgICAgICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNl
LT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJhbWUoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7
CisgICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9B
cm91bmRSZWN0KHZpZGVvQXNwZWN0UmF0aW8sIHNlbGYuYm91bmRzKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBVSVZpZXcgKnZpZXcgPSAoVUlWaWV3
ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSh0YXJnZXRWaWRlb0ZyYW1lLndpZHRo
KCkgLyBzb3VyY2VWaWRlb0ZyYW1lLndpZHRoKCksIHRhcmdldFZpZGVvRnJhbWUuaGVpZ2h0KCkg
LyBzb3VyY2VWaWRlb0ZyYW1lLmhlaWdodCgpKTsKKyAgICBbdmlldyBzZXRUcmFuc2Zvcm06dHJh
bnNmb3JtXTsKKyAgICAKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmltYXRpb25EdXJhdGlvbiA9IFtD
QVRyYW5zYWN0aW9uIGFuaW1hdGlvbkR1cmF0aW9uXTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeIHsKKyAgICAgICAgW05TT2JqZWN0IGNhbmNlbFByZXZp
b3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihyZXNv
bHZlQm91bmRzKSBvYmplY3Q6bmlsXTsKKworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6
QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6YW5pbWF0
aW9uRHVyYXRpb24gKyAwLjFdOworICAgIH0pOworfQorCistICh2b2lkKXJlc29sdmVCb3VuZHMK
K3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOworICAg
IGlmICghW19hdlBsYXllckNvbnRyb2xsZXIgZGVsZWdhdGVdKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKFtfdmlkZW9TdWJsYXllciBzdXBlcmxheWVyXSAhPSBzZWxmKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0KHNlbGYubW9kZWxWaWRl
b0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pICYmIENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0
eShbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0gdHJhbnNmb3JtXSkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJh
bnNhY3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0
RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAKKyAgICBpZiAoIUNHUmVjdEVxdWFsVG9SZWN0KHNl
bGYubW9kZWxWaWRlb0xheWVyRnJhbWUsIFtzZWxmIGJvdW5kc10pKSB7CisgICAgICAgIHNlbGYu
bW9kZWxWaWRlb0xheWVyRnJhbWUgPSBbc2VsZiBib3VuZHNdOworICAgICAgICBBU1NFUlQoX2Z1
bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOworICAgICAgICBfZnVsbHNjcmVlbkludGVyZmFj
ZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1lKHNlbGYubW9kZWxWaWRlb0xheWVyRnJhbWUp
OworICAgIH0KKyAgICBbKFVJVmlldyAqKVtfdmlkZW9TdWJsYXllciBkZWxlZ2F0ZV0gc2V0VHJh
bnNmb3JtOkNHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHldOworICAgIAorICAgIFtDQVRyYW5zYWN0
aW9uIGNvbW1pdF07Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9HcmF2aXR5OihOU1N0cmluZyAqKXZp
ZGVvR3Jhdml0eQoreworICAgIF92aWRlb0dyYXZpdHkgPSB2aWRlb0dyYXZpdHk7CisgICAgCisg
ICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0
eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3Bl
Y3Q7CisgICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXpl
KCkpCisgICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5UmVzaXplOworICAgIGlmICh2aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdCgpKQorICAgICAgICBncmF2aXR5ID0gV2ViQ29yZTo6VmlkZW9G
dWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmICh2
aWRlb0dyYXZpdHkgPT0gZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwoKSkK
KyAgICAgICAgZ3Jhdml0eSA9IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3RGaWxsOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgCisgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpKTsK
KyAgICBfZnVsbHNjcmVlbkludGVyZmFjZS0+bW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHko
Z3Jhdml0eSk7Cit9CisKKy0gKE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Cit7CisgICAgcmV0dXJu
IF92aWRlb0dyYXZpdHkuZ2V0KCk7Cit9CisKKy0gKENHUmVjdCl2aWRlb1JlY3QKK3sKKyAgICBp
ZiAoc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggPD0gMCB8fCBzZWxmLnZpZGVvRGltZW5zaW9u
cy5oZWlnaHQgPD0gMCkKKyAgICAgICAgcmV0dXJuIHNlbGYuYm91bmRzOworICAgIAorICAgIGZs
b2F0IHZpZGVvQXNwZWN0UmF0aW8gPSBzZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCAvIHNlbGYu
dmlkZW9EaW1lbnNpb25zLmhlaWdodDsKKworICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pCisgICAg
ICAgIHJldHVybiBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9Bc3Bl
Y3RSYXRpbywgc2VsZi5ib3VuZHMpOworICAgIGlmIChbZ2V0QVZMYXllclZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZpdHldKQorICAg
ICAgICByZXR1cm4gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRlb0Fz
cGVjdFJhdGlvLCBzZWxmLmJvdW5kcyk7CisKKyAgICByZXR1cm4gc2VsZi5ib3VuZHM7Cit9CisK
KysgKE5TU2V0ICopa2V5UGF0aHNGb3JWYWx1ZXNBZmZlY3RpbmdWaWRlb1JlY3QKK3sKKyAgICBy
ZXR1cm4gW05TU2V0IHNldFdpdGhPYmplY3RzOkAidmlkZW9EaW1lbnNpb25zIiwgQCJ2aWRlb0dy
YXZpdHkiLCBuaWxdOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViQVZQaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3IDogVUlWaWV3CitAZW5kCisKK3N0YXRpYyBDbGFzcyBXZWJBVlBp
Y3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcyhpZCwgU0VMKQoreworICAg
IHJldHVybiBbV2ViQVZQbGF5ZXJMYXllciBjbGFzc107Cit9CisKK3N0YXRpYyBXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKmFsbG9jV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3SW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBDbGFzcyB0aGVDbGFzcyA9IG5p
bDsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9v
bmNlKCZvbmNlVG9rZW4sIF4geworICAgICAgICB0aGVDbGFzcyA9IG9iamNfYWxsb2NhdGVDbGFz
c1BhaXIoZ2V0VUlWaWV3Q2xhc3MoKSwgIldlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVy
VmlldyIsIDApOworICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xhc3NQYWlyKHRoZUNsYXNzKTsKKyAg
ICAgICAgQ2xhc3MgbWV0YUNsYXNzID0gb2JqY19nZXRNZXRhQ2xhc3MoIldlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QobWV0YUNs
YXNzLCBAc2VsZWN0b3IobGF5ZXJDbGFzcyksIChJTVApV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MsICJAQDoiKTsKKyAgICB9KTsKKyAgICAKKyAgICByZXR1
cm4gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVt0aGVDbGFzcyBhbGxv
Y107Cit9CisKK0BpbnRlcmZhY2UgV2ViQVZQbGF5ZXJMYXllclZpZXcgOiBfX0FWUGxheWVyTGF5
ZXJWaWV3CitAcHJvcGVydHkgKHJldGFpbikgVUlWaWV3KiB2aWRlb1ZpZXc7CitAZW5kCisKK3N0
YXRpYyBDbGFzcyBXZWJBVlBsYXllckxheWVyVmlld19sYXllckNsYXNzKGlkLCBTRUwpCit7Cisg
ICAgcmV0dXJuIFtXZWJBVlBsYXllckxheWVyIGNsYXNzXTsKK30KKworc3RhdGljIEFWUGxheWVy
Q29udHJvbGxlciAqV2ViQVZQbGF5ZXJMYXllclZpZXdfcGxheWVyQ29udHJvbGxlcihpZCBhU2Vs
ZiwgU0VMKQoreworICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyID0gYVNlbGY7
CisgICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxh
eWVyICopW3BsYXllckxheWVyIHBsYXllckxheWVyXTsKKyAgICByZXR1cm4gW3dlYkFWUGxheWVy
TGF5ZXIgcGxheWVyQ29udHJvbGxlcl07Cit9CisKK3N0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5
ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCwgQVZQbGF5ZXJDb250cm9s
bGVyICpwbGF5ZXJDb250cm9sbGVyKQoreworICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXll
ckxheWVyVmlldyA9IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5
ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwor
ICAgIFt3ZWJBVlBsYXllckxheWVyIHNldFBsYXllckNvbnRyb2xsZXI6IHBsYXllckNvbnRyb2xs
ZXJdOworfQorCitzdGF0aWMgVUlWaWV3ICpXZWJBVlBsYXllckxheWVyVmlld192aWRlb1ZpZXco
aWQgYVNlbGYsIFNFTCkKK3sKKyAgICBfX0FWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllciA9
IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVyTGF5ZXIgPSAoV2ViQVZQ
bGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllciBwbGF5ZXJMYXllcl07CisgICAgQ0FMYXllciogdmlk
ZW9MYXllciA9IFt3ZWJBVlBsYXllckxheWVyIHZpZGVvU3VibGF5ZXJdOworICAgIGlmICghdmlk
ZW9MYXllciB8fCAhdmlkZW9MYXllci5kZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoW1t2aWRlb0xheWVyIGRlbGVnYXRlXSBpc0tpbmRPZkNsYXNzOmdldFVJVmlld0Ns
YXNzKCldKTsKKyAgICByZXR1cm4gKFVJVmlldyAqKVt2aWRlb0xheWVyIGRlbGVnYXRlXTsKK30K
Kworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3KGlkIGFTZWxm
LCBTRUwsIFVJVmlldyAqdmlkZW9WaWV3KQoreworICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBs
YXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKndlYkFWUGxheWVy
TGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJd
OworICAgIFt3ZWJBVlBsYXllckxheWVyIHNldFZpZGVvU3VibGF5ZXI6W3ZpZGVvVmlldyBsYXll
cl1dOworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zdGFydFJvdXRpbmdW
aWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQorewor
ICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBX
ZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKKworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxh
eWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsK
KyAgICBXZWJBVlBsYXllckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVy
ICopW3BpcFZpZXcgbGF5ZXJdOworICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dyYXZpdHk6Z2V0
QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpXTsKKyAgICBbcGlwUGxheWVyTGF5ZXIg
c2V0VmlkZW9TdWJsYXllcjpwbGF5ZXJMYXllci52aWRlb1N1YmxheWVyXTsKKyAgICBbcGlwUGxh
eWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnBsYXllckxheWVyLnZpZGVvRGltZW5zaW9uc107
CisgICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpwbGF5ZXJMYXllci52aWRlb0dy
YXZpdHldOworICAgIFtwaXBQbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpwbGF5
ZXJMYXllci5tb2RlbFZpZGVvTGF5ZXJGcmFtZV07CisgICAgW3BpcFBsYXllckxheWVyIHNldFBs
YXllckNvbnRyb2xsZXI6cGxheWVyTGF5ZXIucGxheWVyQ29udHJvbGxlcl07CisgICAgW3BpcFBs
YXllckxheWVyIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6cGxheWVyTGF5ZXIuZnVsbHNjcmVlbklu
dGVyZmFjZV07CisgICAgW3BpcFZpZXcgYWRkU3VidmlldzpwbGF5ZXJMYXllclZpZXcudmlkZW9W
aWV3XTsKK30KKworc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RvcFJvdXRpbmdW
aWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyhpZCBhU2VsZiwgU0VMKQorewor
ICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKKyAgICBp
ZiAoVUlWaWV3ICp2aWRlb1ZpZXcgPSBwbGF5ZXJMYXllclZpZXcudmlkZW9WaWV3KQorICAgICAg
ICBbcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6dmlkZW9WaWV3XTsKKyAgICBXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3ICopW3BsYXllckxheWVyVmlldyBwaWN0dXJlSW5QaWN0dXJlUGxh
eWVyTGF5ZXJWaWV3XTsKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChXZWJB
VlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07CisgICAgV2ViQVZQ
bGF5ZXJMYXllciAqcGlwUGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3
IGxheWVyXTsKKyAgICBbcGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6cGlwUGxh
eWVyTGF5ZXIubW9kZWxWaWRlb0xheWVyRnJhbWVdOworfQorCitzdGF0aWMgV2ViQVZQaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpXZWJBVlBsYXllckxheWVyVmlld19waWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCit7CisgICAgV2ViQVZQbGF5ZXJM
YXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOworICAgIFdlYkFWUGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IFtwbGF5ZXJMYXllclZpZXcgdmFsdWVGb3JL
ZXk6QCJfcGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyJdOworICAgIGlmICghcGlwVmll
dykgeworICAgICAgICBwaXBWaWV3ID0gW2FsbG9jV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVy
TGF5ZXJWaWV3SW5zdGFuY2UoKSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm9dOworICAgICAgICBb
cGxheWVyTGF5ZXJWaWV3IHNldFZhbHVlOnBpcFZpZXcgZm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXciXTsKKyAgICB9CisgICAgcmV0dXJuIHBpcFZpZXc7Cit9CisKK3N0
YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MoaWQgYVNlbGYsIFNFTCkKK3sK
KyAgICBXZWJBVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7CisgICAg
UmV0YWluUHRyPFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldz4gcGlwVmlldyA9
IGFkb3B0TlMoW3BsYXllckxheWVyVmlldyB2YWx1ZUZvcktleTpAIl9waWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3Il0pOworICAgIFtwbGF5ZXJMYXllclZpZXcgc2V0VmFsdWU6bmlsIGZv
cktleTpAIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07CisgICAgb2JqY19zdXBl
ciBzdXBlckNsYXNzIHsgcGxheWVyTGF5ZXJWaWV3LCBnZXRfX0FWUGxheWVyTGF5ZXJWaWV3Q2xh
c3MoKSB9OworICAgIGF1dG8gc3VwZXJfZGVhbGxvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgq
KShvYmpjX3N1cGVyKiwgU0VMKT4ob2JqY19tc2dTZW5kU3VwZXIpOworICAgIHN1cGVyX2RlYWxs
b2MoJnN1cGVyQ2xhc3MsIEBzZWxlY3RvcihkZWFsbG9jKSk7Cit9CisKKyNwcmFnbWEgbWFyayAt
IE1ldGhvZHMKKworc3RhdGljIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICphbGxvY1dlYkFWUGxheWVy
TGF5ZXJWaWV3SW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBDbGFzcyB0aGVDbGFzcyA9IG5pbDsK
KyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNl
KCZvbmNlVG9rZW4sIF4geworICAgICAgICB0aGVDbGFzcyA9IG9iamNfYWxsb2NhdGVDbGFzc1Bh
aXIoZ2V0X19BVlBsYXllckxheWVyVmlld0NsYXNzKCksICJXZWJBVlBsYXllckxheWVyVmlldyIs
IDApOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihkZWFsbG9j
KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19kZWFsbG9jLCAidkA6Iik7CisgICAgICAgIGNs
YXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHNldFBsYXllckNvbnRyb2xsZXI6KSwg
KElNUClXZWJBVlBsYXllckxheWVyVmlld19zZXRQbGF5ZXJDb250cm9sbGVyLCAidkA6QCIpOwor
ICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihwbGF5ZXJDb250cm9s
bGVyKSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19wbGF5ZXJDb250cm9sbGVyLCAiQEA6Iik7
CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHNldFZpZGVvVmll
dzopLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFZpZGVvVmlldywgInZAOkAiKTsKKyAg
ICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IodmlkZW9WaWV3KSwgKElN
UClXZWJBVlBsYXllckxheWVyVmlld192aWRlb1ZpZXcsICJAQDoiKTsKKyAgICAgICAgY2xhc3Nf
YWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc3RhcnRSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0YXJ0
Um91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAidkA6Iik7Cisg
ICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHN0b3BSb3V0aW5nVmlk
ZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcpLCAoSU1QKVdlYkFWUGxheWVyTGF5
ZXJWaWV3X3N0b3BSb3V0aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcs
ICJ2QDoiKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3IocGlj
dHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdf
cGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgIkBAOiIpOworICAgICAgICAKKyAgICAg
ICAgY2xhc3NfYWRkSXZhcih0aGVDbGFzcywgIl9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJW
aWV3Iiwgc2l6ZW9mKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKSwgbG9n
MihzaXplb2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopKSwgIkAiKTsK
KyAgICAgICAgCisgICAgICAgIG9iamNfcmVnaXN0ZXJDbGFzc1BhaXIodGhlQ2xhc3MpOworICAg
ICAgICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFDbGFzcygiV2ViQVZQbGF5ZXJMYXll
clZpZXciKTsKKyAgICAgICAgY2xhc3NfYWRkTWV0aG9kKG1ldGFDbGFzcywgQHNlbGVjdG9yKGxh
eWVyQ2xhc3MpLCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MsICJAQDoiKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gKFdlYkFWUGxheWVyTGF5ZXJWaWV3ICopW3RoZUNsYXNzIGFs
bG9jXTsKK30KKworUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCit7CisgICAgUmVmPFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBpbnRlcmZhY2UgPSBhZG9wdFJlZigqbmV3IFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgIFtpbnRlcmZhY2Ut
Pm1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOmlu
dGVyZmFjZS5wdHIoKV07CisgICAgcmV0dXJuIGludGVyZmFjZTsKK30KKworVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAgOiBt
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCisgICAg
LCBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pKQorICAgICwgbV93YXRjaGRvZ1RpbWVy
KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3
YXRjaGRvZ1RpbWVyRmlyZWQpCit7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Ojp+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKQoreworICAgIFdlYkFWUGxheWVyQ29u
dHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IHRoaXMtPnBsYXllckNvbnRyb2xsZXIoKTsKKyAg
ICBpZiAocGxheWVyQ29udHJvbGxlciAmJiBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJh
Y2tBY3RpdmUpCisgICAgICAgIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGZhbHNlLCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbDo6VGFyZ2V0VHlwZU5vbmUsICIiKTsKKyAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKK30KKworV2ViQVZQbGF5ZXJDb250cm9sbGVyICpWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6cGxheWVyQ29udHJvbGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5ZXJDb250cm9sbGVyKCk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVv
RnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKK3sKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsK
KworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKKworICAgIGlmIChtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5hZGRDbGll
bnQoKnRoaXMpOworCisgICAgaGFzVmlkZW9DaGFuZ2VkKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwg
PyBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5oYXNWaWRlbygpIDogZmFsc2UpOworICAgIHZpZGVv
RGltZW5zaW9uc0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPnZpZGVvRGltZW5zaW9ucygpIDogRmxvYXRTaXplKCkpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcihWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCit7CisgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKK30KKwordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit7Cisg
ICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlkZW9dOworICAg
IFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0SGFzVmlkZW86aGFzVmlkZW9dOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0
IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBs
YXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVy
TGF5ZXJdOworCisgICAgW3BsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczp2aWRlb0RpbWVu
c2lvbnNdOworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0Q29udGVudERpbWVuc2lvbnM6dmlk
ZW9EaW1lbnNpb25zXTsKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0TmVlZHNMYXlvdXRdOwor
CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gKFdl
YkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVttX3BsYXllckxheWVyVmlldyBw
aWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKKyAgICBXZWJBVlBsYXllckxheWVyICpw
aXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOworICAg
IFtwaXBQbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5ZXIudmlkZW9EaW1l
bnNpb25zXTsKKyAgICBbcGlwVmlldyBzZXROZWVkc0xheW91dF07Cit9CisKK3ZvaWQgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5h
YmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBj
b25zdCBTdHJpbmcmKQoreworICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRkZW46ZW5hYmxl
ZF07Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9u
RGlkQmVjb21lQWN0aXZlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlzKTsK
KyAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3Vu
ZCAmJiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmlz
VmlzaWJsZSgpKSB7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJl
SW5QaWN0dXJlXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHdlIGFyZSBi
b3RoIGluIFBpUCBhbmQgaW4gRnVsbHNjcmVlbiAoaS5lLiwgdmlhIGF1dG8tUGlQKSwgYW5kIHdl
IGRpZCBub3Qgc3RvcCBmdWxsc2NyZWVuIHVwb24gcmV0dXJuaW5nLCBpdCBtdXN0IGJlCisgICAg
Ly8gYmVjYXVzZSB0aGUgb3JpZ2luYXRpbmcgdmlldyBpcyBub3QgdmlzaWJsZSwgc28gaGlkZSB0
aGUgZnVsbHNjcmVlbiB3aW5kb3cuCisgICAgaWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCB8IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKSB7CisgICAgICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21w
bGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Cisg
ICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgICAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllFU107CisgICAgICAgIH1dOworICAg
IH0KK30KKworQGludGVyZmFjZSBVSVdpbmRvdyAoKQorLSAoQk9PTClfaXNIb3N0ZWRJbkFub3Ro
ZXJQcm9jZXNzOworQGVuZAorCitAaW50ZXJmYWNlIFVJVmlld0NvbnRyb2xsZXIgKCkKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHNldHRlcj1fc2V0SWdub3JlQXBwU3VwcG9ydGVkT3Jp
ZW50YXRpb25zOikgQk9PTCBfaWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOworQGVuZAor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oVUlW
aWV3JiB2aWRlb1ZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZp
ZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaykKK3sKKyAgICBBU1NF
UlQobW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25l
KTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpz
ZXR1cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisKKyAgICBtX2FsbG93c1BpY3R1cmVJblBpY3R1
cmVQbGF5YmFjayA9IGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsKKworICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZ
RVNdOworICAgIGJvb2wgaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlID0gaGFzTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAg
ICBtX21vZGUgPSBtb2RlOworICAgIG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7CisgICAgbV9w
YXJlbnRXaW5kb3cgPSBwYXJlbnRWaWV3LndpbmRvdzsKKworICAgIGlmICghW1twYXJlbnRWaWV3
IHdpbmRvd10gX2lzSG9zdGVkSW5Bbm90aGVyUHJvY2Vzc10pIHsKKyAgICAgICAgaWYgKCFtX3dp
bmRvdykKKyAgICAgICAgICAgIG1fd2luZG93ID0gYWRvcHROUyhbYWxsb2NVSVdpbmRvd0luc3Rh
bmNlKCkgaW5pdFdpdGhGcmFtZTpbW2dldFVJU2NyZWVuQ2xhc3MoKSBtYWluU2NyZWVuXSBib3Vu
ZHNdXSk7CisgICAgICAgIFttX3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9y
KCldOworICAgICAgICBpZiAoIW1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3ZpZXdD
b250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NVSVZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0
XSk7CisgICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbbV93aW5kb3cg
Ym91bmRzXV07CisgICAgICAgIFttX3ZpZXdDb250cm9sbGVyIF9zZXRJZ25vcmVBcHBTdXBwb3J0
ZWRPcmllbnRhdGlvbnM6WUVTXTsKKyAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJv
bGxlcjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgW21fd2luZG93IHNldFdpbmRv
d0xldmVsOmdldFVJVGV4dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwoKSArIDFd
OworICAgICAgICBbbV93aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOworICAgIH0KKworICAgIGlm
ICghbV9wbGF5ZXJMYXllclZpZXcpCisgICAgICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gYWRvcHRO
UyhbYWxsb2NXZWJBVlBsYXllckxheWVyVmlld0luc3RhbmNlKCkgaW5pdF0pOworICAgIFttX3Bs
YXllckxheWVyVmlldyBzZXRIaWRkZW46W3BsYXllckNvbnRyb2xsZXIoKSBpc0V4dGVybmFsUGxh
eWJhY2tBY3RpdmVdXTsKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9y
OmNsZWFyVUlDb2xvcigpXTsKKworICAgIGlmICghaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlKSB7
CisgICAgICAgIFttX3BsYXllckxheWVyVmlldyBzZXRWaWRlb1ZpZXc6JnZpZGVvVmlld107Cisg
ICAgICAgIFttX3BsYXllckxheWVyVmlldyBhZGRTdWJ2aWV3OiZ2aWRlb1ZpZXddOworICAgIH0K
KworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIg
KilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOworCisgICAgW3BsYXllckxheWVyIHNl
dE1vZGVsVmlkZW9MYXllckZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgaW5pdGlhbFJlY3Qud2lkdGgo
KSwgaW5pdGlhbFJlY3QuaGVpZ2h0KCkpXTsKKyAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1l
bnNpb25zOltwbGF5ZXJDb250cm9sbGVyKCkgY29udGVudERpbWVuc2lvbnNdXTsKKyAgICBwbGF5
ZXJMYXllci5mdWxsc2NyZWVuSW50ZXJmYWNlID0gdGhpczsKKworICAgIGlmICghbV9wbGF5ZXJW
aWV3Q29udHJvbGxlcikKKyAgICAgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMo
W2FsbG9jQVZQbGF5ZXJWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhQbGF5ZXJMYXll
clZpZXc6bV9wbGF5ZXJMYXllclZpZXcuZ2V0KCldKTsKKworICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107CisgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVy
Q29udHJvbGxlcigpXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpt
X3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOworICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHNldEFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazptX2FsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFja107CisKKyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldFBpY3R1
cmVJblBpY3R1cmVQb3NzaWJsZTptX2FsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFja107CisK
KyAgICBpZiAobV92aWV3Q29udHJvbGxlcikgeworICAgICAgICBbbV92aWV3Q29udHJvbGxlciBh
ZGRDaGlsZFZpZXdDb250cm9sbGVyOm1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCldOworICAg
ICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciB2aWV3XV07CisgICAgfSBlbHNlCisgICAgICAgIFtwYXJlbnRWaWV3IGFkZFN1YnZp
ZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld11dOworCisgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10uZnJhbWUgPSBbcGFyZW50VmlldyBjb252ZXJ0UmVjdDppbml0aWFsUmVj
dCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKKworICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJV
SUNvbG9yKCldOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRBdXRvcmVz
aXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUJvdHRvbU1hcmdpbiB8IFVJVmll
d0F1dG9yZXNpemluZ0ZsZXhpYmxlUmlnaHRNYXJnaW4pXTsKKworICAgIFtbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XSBzZXROZWVkc0xheW91dF07CisgICAgW1ttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1p
dF07CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNl
dHVwRnVsbHNjcmVlbigpOworICAgIH0pOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsK
KworICAgIG1fZXhpdENvbXBsZXRlZCA9IGZhbHNlOworICAgIG1fZXhpdFJlcXVlc3RlZCA9IGZh
bHNlOworICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSB0cnVlOworCisgICAgaWYgKG1vZGUoKSA9PSBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJl
KQorICAgICAgICBlbnRlclBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICBlbHNlIGlmIChtb2RlKCkg
PT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCisg
ICAgICAgIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7CisgICAgZWxzZQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZW50ZXJQaWN0dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhp
cyk7CisgICAgCisgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVyZUluUGlj
dHVyZVBvc3NpYmxlXSkKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RhcnRQaWN0
dXJlSW5QaWN0dXJlXTsKKyAgICBlbHNlCisgICAgICAgIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVy
RnVsbHNjcmVlblN0YW5kYXJkKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCglcCkiLCB0aGlzKTsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisKKyAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0
dXJlQWN0aXZlXSkgeworICAgICAgICAvLyBOT1RFOiBUaGUgZnVsbHNjcmVlbiBtb2RlIHdpbGwg
YmUgcmVzdG9yZWQgaW4gcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRp
b25IYW5kbGVyKCkuCisgICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3Bw
aW5nUGlQID0gdHJ1ZTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1
cmVJblBpY3R1cmVdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVy
Olt0aGlzLCBwcm90ZWN0ZWRUaGlzXSAoQk9PTCBzdWNjZWVkZWQsIE5TRXJyb3IqKSB7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShzdWNjZWVkZWQpOworICAgICAgICBMT0coRnVsbHNjcmVlbiwgIlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCAtIGxh
bWJkYSglcCkgLSBzdWNjZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0cmluZyhzdWNjZWVkZWQpKTsK
KyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xz
OllFU107CisKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAg
ICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwor
ICAgIH1dOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVs
bHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCit7CisgICAgbV93YXRj
aGRvZ1RpbWVyLnN0b3AoKTsKKworICAgIG1fZXhpdFJlcXVlc3RlZCA9IHRydWU7CisgICAgaWYg
KG1fZXhpdENvbXBsZXRlZCkgeworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCisgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxz
Y3JlZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBMT0coRnVsbHNjcmVl
biwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbiglcCkiLCB0
aGlzKTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJv
bHM6Tk9dOworICAgIAorICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0g
W21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJlY3QgdG9WaWV3OlttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5
ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxh
eWVyXTsKKyAgICBpZiAoW3BsYXllckxheWVyIHZpZGVvR3Jhdml0eV0gIT0gZ2V0QVZMYXllclZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpKQorICAgICAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9H
cmF2aXR5OmdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKV07CisgICAgW1ttX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKKworICAgIGlmIChpc01v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSkpIHsKKyAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQ
aVAgPSBmYWxzZTsKKyAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKKyAgICB9IGVsc2Ug
aWYgKGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0
dXJlSW5QaWN0dXJlIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
ZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhp
cywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBjbGVhck1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAgICAgICAg
ICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAgICAgIH1dOworICAgIH0gZWxzZSBp
ZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5k
YXJkKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHBy
b3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRG
dWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0
aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRy
dWU7CisKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAgICAgICAgIFtD
QVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgICAgICAgICBbbV9wbGF5
ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKKyAgICAgICAg
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xl
YXJVSUNvbG9yKCldOworICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAg
ICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3Rl
Y3RlZFRoaXMsIHRoaXNdKCkgeworICAgICAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfV07Cisg
ICAgfTsKK30KKworQGludGVyZmFjZSBVSUFwcGxpY2F0aW9uICgpCistICh2b2lkKV9zZXRTdGF0
dXNCYXJPcmllbnRhdGlvbjooVUlJbnRlcmZhY2VPcmllbnRhdGlvbilvOworQGVuZAorCitAaW50
ZXJmYWNlIFVJV2luZG93ICgpCistIChVSUludGVyZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9y
aWVudGF0aW9uOworQGVuZAorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpj
bGVhbnVwRnVsbHNjcmVlbigpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisgICAgaWYg
KG1fd2luZG93KSB7CisgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAg
W21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOworICAgICAgICBpZiAobV9wYXJl
bnRXaW5kb3cpCisgICAgICAgICAgICBbW2dldFVJQXBwbGljYXRpb25DbGFzcygpIHNoYXJlZEFw
cGxpY2F0aW9uXSBfc2V0U3RhdHVzQmFyT3JpZW50YXRpb246W21fcGFyZW50V2luZG93IGludGVy
ZmFjZU9yaWVudGF0aW9uXV07CisgICAgfQorICAgIAorICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxh
eWVyQ29udHJvbGxlcjpuaWxdOworICAgIAorICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQorICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisgICAgaWYgKGhh
c01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQp
KQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVk
Ok5PIGNvbXBsZXRpb25IYW5kbGVyOltdIChCT09MLCBOU0Vycm9yICopIHsgfV07CisgICAgCisg
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOwor
ICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciByZW1vdmVGcm9tUGFyZW50Vmlld0NvbnRyb2xsZXJdOworICAgIAorICAgIFttX3BsYXllckxh
eWVyVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBbW21fdmlld0NvbnRyb2xsZXIgdmll
d10gcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBtX3BsYXllckxheWVyVmlldyA9IG5pbDsK
KyAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gbmlsOworICAgIG1fd2luZG93ID0gbmlsOwor
ICAgIG1fcGFyZW50VmlldyA9IG5pbDsKKyAgICBtX3BhcmVudFdpbmRvdyA9IG5pbDsKKyAgICAK
KyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOworCisgICAgbV9lbnRlclJl
cXVlc3RlZCA9IGZhbHNlOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjppbnZhbGlkYXRlKCkKK3sKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmlsOworICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gbmlsOworICAgIAorICAgIGNsZWFudXBGdWxs
c2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlmICghbV9lbnRlclJlcXVlc3RlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIFtt
X3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmll
d10gc2V0SGlkZGVuOllFU107CisKKyAgICBpZiAocGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsICYmICFtX2V4aXRSZXF1ZXN0ZWQpIHsKKyAgICAgICAgcGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5N
b2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZU5vbmUpOworICAgIH0KK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3Qg
SW50UmVjdCYgaW5saW5lUmVjdCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApIC0gdmlzaWJs
ZSglcykiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpKTsKKyAgICBpZiAobV9wcmVwYXJlVG9J
bmxpbmVDYWxsYmFjaykgeworICAgICAgICAKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmlubGluZVJlY3QgdG9W
aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107CisKKyAgICAgICAg
V1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURk1vdmUobV9wcmVwYXJlVG9J
bmxpbmVDYWxsYmFjayk7CisgICAgICAgIGNhbGxiYWNrKHZpc2libGUpOworICAgIH0KK30KKwor
Ym9vbCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxseVNob3dW
aWRlb1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAoreworICAgIHJldHVybiBbcGxheWVyQ29udHJv
bGxlcigpIGlzUGxheWluZ10gJiYgbV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkICYmIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOwor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQoreworICAg
IG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKKyAgICBpZiAo
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKK30KKwordm9pZCBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit7Cisg
ICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0
YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBzZXRNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOworfQorCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1
cmUoKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKKyAgICBtX3Nob3VsZFJl
dHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kID0gW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5k
XTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6
WUVTXTsKKworICAgIGlmIChtX21vZGUgJiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVTdGFuZGFyZCkgeworICAgICAgICBpZiAoIVttX3BsYXllclZpZXdDb250cm9s
bGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZF0pIHsK
KyAgICAgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRG
dWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0
aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlk
ZGVuOllFU107CisgICAgICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IHNldEhpZGRlbjpZRVNdOworICAgICAgICAgICAgfV07CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKKyAgICB9CisKKyAgICBpZiAobV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKQoreworICAgIExPRyhG
dWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQ
aWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworCisgICAgaWYgKGhhc01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOworCisgICAgaWYgKG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+
ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkK
KyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUo
KQoreworICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFs
c2U7CisgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5nRm9yZWdyb3Vu
ZCA9IGZhbHNlOworCisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIGlmICho
YXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJk
KSB8fCBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107CisgICAgW1ttX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107CisKKyAgICBpZiAobV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5v
bmUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGlj
dHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAg
aWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wKSB7
CisgICAgICAgIC8vIEFTU1VNUFRJT046IHdlIGFyZSBleGl0aW5nIHBpcCBiZWNhdXNlIHdlIGFy
ZSBlbnRlcmluZyBmdWxsc2NyZWVuCisgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOworCisgICAg
W21fcGxheWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Cisg
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpjbGVh
clVJQ29sb3IoKV07CisKKyAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisgICAgCisgICAgaWYgKG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+
ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVy
KHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCit7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1
cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMpOworICAgIGlm
IChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB8fCBtX3Nob3VsZFJl
dHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kKSB7CisgICAgICAgIG1fc2hv
dWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGlQID0gZmFsc2U7CisgICAgICAgIG1f
c2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBmYWxzZTsK
KyAgICAgICAgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUluUGljdHVyZVN0b3AgPSB0
cnVlOworCisgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgICAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKKworICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhh
bmRsZXI6XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBtX3Jlc3Rvcmlu
Z0Z1bGxzY3JlZW5Gb3JQaWN0dXJlSW5QaWN0dXJlU3RvcCA9IGZhbHNlOworICAgICAgICAgICAg
c2V0TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFy
ZCk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsKKyAgICAgICAgICAg
IGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisgICAgICAgIH1dOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJldGFpblB0cjxpZD4gc3Ryb25n
Q29tcGxldGlvbkhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7Cisg
ICAgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFtwcm90ZWN0ZWRUaGlzLCBzdHJvbmdDb21w
bGV0aW9uSGFuZGxlcl0oYm9vbCByZXN0b3JlZCkgIHsKKyAgICAgICAgTE9HKEZ1bGxzY3JlZW4s
ICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1
cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyIGxhbWJkYSglcCkgLSByZXN0b3JlZCglcykiLCBw
cm90ZWN0ZWRUaGlzLmdldCgpLCBib29sU3RyaW5nKHJlc3RvcmVkKSk7CisgICAgICAgIHZvaWQg
KF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkgPSBzdHJvbmdDb21wbGV0aW9uSGFu
ZGxlci5nZXQoKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdG9yZWQpOworICAgIH0p
OworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzaG91bGRFeGl0RnVs
bHNjcmVlbldpdGhSZWFzb24oVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxs
U2NyZWVuUmVhc29uIHJlYXNvbikKK3sKKyAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVuTW9kZWwp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVl
blJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKFttX3BsYXll
clZpZXdDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFj
a2dyb3VuZF0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9zaG91bGRS
ZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICAgICAgY2xlYXJNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkgJiYgKHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZCB8
fCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRS
ZWNlaXZlZCkpCisgICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisKKyAg
ICBCT09MIGZpbmlzaGVkID0gcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25lQnV0
dG9uVGFwcGVkIHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGluY2hHZXN0dXJl
SGFuZGxlZDsKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSwgZmluaXNo
ZWQpOworCisgICAgaWYgKCFtX3dhdGNoZG9nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV93
YXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1lckZpcmVkKCkKK3sKKyAg
ICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3YXRjaGRv
Z1RpbWVyRmlyZWQoJXApIC0gbm8gZXhpdCBmdWxsc2NyZWVuIHJlc3BvbnNlIGluICVnczsgZm9y
Y2luZyBmdWxsc2NyZWVuIGhpZGRlbi4iLCB0aGlzLCBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVy
dmFsLnZhbHVlKCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFttX3dpbmRvdyBz
ZXRIaWRkZW46WUVTXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlk
ZGVuOllFU107Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldE1v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7Cisg
ICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5ld01vZGUgPSBt
X21vZGUgfCBtb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KG1fbW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFy
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sK
KyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9
IG1fbW9kZSAmIH5tb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5N
b2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKG1fbW9kZSk7Cit9CisKKyNlbmRpZiAvLyBIQVZFKEFWS0lUKQorCitib29sIFdlYkNvcmU6
OnN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpCit7CisjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZF
KEFWS0lUKQorICAgIHJldHVybiBbZ2V0QVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlckNsYXNz
KCkgaXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydGVkXTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgKaW5kZXggZTVjZmYx
MmJiYWZhZTY5MTE4MzEyN2JmMjgwZmE5M2NlOTBmMjUxMi4uMWIxMGZiYTBkNDIxOWYwOTFmNzNi
OGM3OTcwNjA0YmI1ZDIwYzBlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIuaApAQCAtMjgsOCArMjgsOCBAQAogI2ltcG9ydCAi
QVZLaXRTUEkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWw7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDsKK2NsYXNz
IFBsYXliYWNrU2Vzc2lvbk1vZGVsOworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ7CiB9CiAKIEBpbnRlcmZhY2UgV2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiA6IE5TT2JqZWN0
CkBAIC00NCw4ICs0NCw4IEBAIGNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
OwogfQogCiBAcHJvcGVydHkgKHJldGFpbikgQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250
cm9sbGVyUHJveHk7Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNz
aW9uTW9kZWwqIGRlbGVnYXRlOwotQHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OldlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CitAcHJv
cGVydHkgKGFzc2lnbikgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWwqIGRlbGVnYXRlOwor
QHByb3BlcnR5IChhc3NpZ24pIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CiAKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wg
Y2FuU2NhbkZvcndhcmQ7CiBAcHJvcGVydHkgQk9PTCBjYW5TY2FuQmFja3dhcmQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkFWUGxheWVyQ29udHJvbGxlci5tbQpp
bmRleCA2YmZjNWNhMWFhMjZiMjNlNWU4YTQ3YTJmNjhjMjI4N2YzMThhYTAxLi44NTAzMDZhYzE1
ZWQwYTE4YmM4ZjE3YjRmMmI3YTY0YzEwZGVkMzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJBVlBsYXllckNvbnRyb2xsZXIubW0KQEAgLTMxLDkgKzMxLDkg
QEAKIAogI2ltcG9ydCAiQVZLaXRTUEkuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
IlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Np
b25Nb2RlbC5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
LmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktp
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMzdkNGU1NjMxODkx
MDEwYWE4YTdiYTVkYjk2OTgxNjJjMjdjZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0j
aW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlICJXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbC5oIgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8b2Jq
Yy9vYmpjLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1PQkpDX0NMQVNTIFdlYkFWUGxh
eWVyQ29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKLU9CSkNf
Q0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKLU9CSkNfQ0xBU1MgVUlXaW5kb3c7Ci1PQkpDX0NMQVNT
IFVJVmlldzsKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkNoYW5nZU9ic2VydmVyOwotCi1jbGFzcyBXRUJD
T1JFX0VYUE9SVCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdAotICAgIDogcHVibGlj
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAgICwgcHVibGljIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsQ2xpZW50Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VBVktpdD4gewotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJiBt
b2RlbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0KG1vZGVsKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KCk7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwq
IHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Np
b25Nb2RlbDsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKLQotICAgIC8vIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJh
dGlvbkNoYW5nZWQoZG91YmxlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1
cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91
YmxlKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wg
aXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgb3ZlcnJpZGU7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wpIG92
ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVu
YWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29s
KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG11dGVkQ2hhbmdlZChib29sKSBv
dmVycmlkZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7
Ci0KLSAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXIoKSBjb25zdCB7
IHJldHVybiBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIFdF
QkNPUkVfRVhQT1JUIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsJik7Ci0KLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBt
X3BsYXllckNvbnRyb2xsZXI7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwgeyBudWxscHRyIH07Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQVZLaXQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZDE2
ZGIxZWY0ZGRmYTNlZmIwNTNlZTBmODUwYjk1OWJmZTJiMzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjEy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQuaCIKLQotI2lmIFBMQVRGT1JNKElPUykKLSNpZiBIQVZFKEFWS0lUKQotCi0j
aW1wb3J0ICJBVktpdFNQSS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFT
ZWxlY3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldlYkFW
UGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIK
LSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi0jaW1wb3J0ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotCi1TT0ZUX0xJTktfRlJB
TUVXT1JLX09QVElPTkFMKEFWS2l0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBB
VlZhbHVlVGltaW5nKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUFWS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdChXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi0gICAgOiBtX3BsYXllckNvbnRyb2xsZXIoYWRvcHRO
UyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF0pKQotICAgICwgbV9wbGF5YmFj
a1Nlc3Npb25Nb2RlbCgmbW9kZWwpCi17Ci0gICAgbW9kZWwuYWRkQ2xpZW50KCp0aGlzKTsKLSAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTp0aGlzXTsK
LSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOiZtb2RlbF07Ci0KLSAgICBkdXJh
dGlvbkNoYW5nZWQobW9kZWwuZHVyYXRpb24oKSk7Ci0gICAgY3VycmVudFRpbWVDaGFuZ2VkKG1v
ZGVsLmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0
aW1lXSk7Ci0gICAgYnVmZmVyZWRUaW1lQ2hhbmdlZChtb2RlbC5idWZmZXJlZFRpbWUoKSk7Ci0g
ICAgcmF0ZUNoYW5nZWQobW9kZWwuaXNQbGF5aW5nKCksIG1vZGVsLnBsYXliYWNrUmF0ZSgpKTsK
LSAgICBzZWVrYWJsZVJhbmdlc0NoYW5nZWQobW9kZWwuc2Vla2FibGVSYW5nZXMoKSwgbW9kZWwu
c2Vla2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpLCBtb2RlbC5saXZlVXBkYXRlSW50
ZXJ2YWwoKSk7Ci0gICAgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtb2RlbC5jYW5QbGF5RmFz
dFJldmVyc2UoKSk7Ci0gICAgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVs
LmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCksIG1vZGVsLmF1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4KCkpOwotICAgIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1vZGVsLmxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgbW9kZWwubGVnaWJsZU1lZGlhU2VsZWN0ZWRJ
bmRleCgpKTsKLSAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtb2RlbC5leHRlcm5hbFBsYXli
YWNrRW5hYmxlZCgpLCBtb2RlbC5leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpLCBtb2RlbC5l
eHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpKTsKLSAgICB3aXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZENoYW5nZWQobW9kZWwud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQoKSk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojp+V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQoKQotewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOm51bGxwdHJdOwotICAgIFttX3BsYXllckNvbnRyb2xs
ZXIgc2V0RXh0ZXJuYWxQbGF5YmFja0FjdGl2ZTpmYWxzZV07Ci0KLSAgICBpbnZhbGlkYXRlKCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFT
dGF0ZSgpCi17Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciByZXNldE1lZGlhU3RhdGVdOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpkdXJhdGlvbkNoYW5nZWQo
ZG91YmxlIGR1cmF0aW9uKQotewotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29u
dHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKLQotICAgIHBsYXllckNvbnRyb2xs
ZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgcGxheWVyQ29udHJvbGxlci5jb250
ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOwotCi0gICAgLy8gRklYTUU6IHdl
IHRha2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCi0gICAg
cGxheWVyQ29udHJvbGxlci5jYW5QbGF5ID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIuY2Fu
UGF1c2UgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlF
UzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKLSAgICBwbGF5
ZXJDb250cm9sbGVyLmNhblNlZWsgPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMg
PSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKLX0KLQotdm9pZCBXZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCi17Ci0gICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9y
VGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1l
OwotICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2
YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQotICAgICAgICBhbmNob3JUaW1l
U3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldFRpbWluZzp0aW1pbmddOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAg
V2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9s
bGVyLmdldCgpOwotICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVu
dER1cmF0aW9uOwotICAgIGRvdWJsZSBub3JtYWxpemVkQnVmZmVyZWRUaW1lOwotICAgIGlmICgh
ZHVyYXRpb24pCi0gICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOwotICAgIGVsc2UK
LSAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZSAvIGR1cmF0aW9u
OwotICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFs
aXplZEJ1ZmZlcmVkVGltZSldOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQot
ewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1Jh
dGUgOiAwLl07Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OnNl
ZWthYmxlUmFuZ2VzQ2hhbmdlZChjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzLCBkb3VibGUg
bGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkKLXsKLSAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IHNlZWthYmxlUmFuZ2VzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGlt
ZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGRvdWJsZSBzdGFydCA9IHRpbWVSYW5n
ZXMuc3RhcnQoaSkucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGRvdWJsZSBlbmQgPSB0
aW1lUmFuZ2VzLmVuZChpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLQotICAgICAgICBDTVRpbWVS
YW5nZSByYW5nZSA9IENNVGltZVJhbmdlTWFrZShDTVRpbWVNYWtlV2l0aFNlY29uZHMoc3RhcnQs
IDEwMDApLCBDTVRpbWVNYWtlV2l0aFNlY29uZHMoZW5kLXN0YXJ0LCAxMDAwKSk7Ci0gICAgICAg
IFtzZWVrYWJsZVJhbmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6
cmFuZ2VdXTsKLSAgICB9Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGlt
ZVJhbmdlczpzZWVrYWJsZVJhbmdlcy5nZXQoKV07Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRTZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lOiBsYXN0TW9kaWZpZWRUaW1lXTsK
LSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExpdmVVcGRhdGVJbnRlcnZhbDpsaXZlVXBkYXRl
SW50ZXJ2YWxdOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Ojpj
YW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQotewotICAg
IFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlGYXN0UmV2ZXJz
ZV07Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9u
T3B0aW9ucyhjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQotewot
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV0pOwotICAg
IGZvciAoYXV0byYgb3B0aW9uIDogb3B0aW9ucykgewotICAgICAgICBSZXRhaW5QdHI8V2ViQVZN
ZWRpYVNlbGVjdGlvbk9wdGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFWTWVkaWFTZWxl
Y3Rpb25PcHRpb24gYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3dlYk9wdGlvbiBzZXRMb2NhbGl6
ZWREaXNwbGF5TmFtZTpvcHRpb24uZGlzcGxheU5hbWVdOwotICAgICAgICBbd2ViT3B0aW9ucyBh
ZGRPYmplY3Q6d2ViT3B0aW9uLmdldCgpXTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYk9wdGlvbnM7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsK
LSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndl
Yk9wdGlvbnMuZ2V0KCldOwotICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291
bnRdKQotICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50
ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNl
bGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRMZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAgIGlmIChzZWxl
Y3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQotICAgICAgICBbbV9wbGF5ZXJDb250cm9s
bGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2Jq
ZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpleHRlcm5hbFBsYXliYWNr
Q2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmlj
ZU5hbWUpCi17Ci0gICAgQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGUgZXh0
ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJFeHRlcm5hbFBsYXliYWNrVHlw
ZU5vbmU7Ci0gICAgaWYgKHRhcmdldFR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRh
cmdldFR5cGVBaXJQbGF5KQotICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVy
Q29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlQWlyUGxheTsKLSAgICBlbHNlIGlmICh0YXJn
ZXRUeXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlVFZPdXQpCi0gICAg
ICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5
YmFja1R5cGVUVk91dDsKLQotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJv
bGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmV4
dGVybmFsUGxheWJhY2tBaXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2FsaXplZERldmlj
ZU5hbWU7Ci0gICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4dGVy
bmFsUGxheWJhY2tUeXBlOwotICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0Fj
dGl2ZSA9IGVuYWJsZWQ7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2FibGVkKQot
ewotICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0QWxsb3dzRXh0ZXJuYWxQbGF5YmFjazohZGlz
YWJsZWRdOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjptdXRl
ZENoYW5nZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldE11dGVk
Om11dGVkXTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6aW52
YWxpZGF0ZSgpCi17Ci0gICAgaWYgKCFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm51bGxwdHJdOwot
ICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0gICAgbV9w
bGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEhBVkUo
QVZLSVQpCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQubW0KaW5kZXggZWJjOWE2NzY2NDFjOTc5YWI3ODNhMGRlMWNkNTEwZTRlZjk4M2QxNi4uMjY4
NGRkZGIyZmYyOTE3N2FkOTRiNzdlZTAyYTQxNzc2ZTJkNzVkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckFWS2l0Lm1tCkBAIC0zMSwxMyArMzEsMTMgQEAKIAogI2ltcG9ydCAiTG9nZ2luZy5o
IgogI2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5oIgogI2ltcG9ydCAiUXVhcnR6Q29yZVNQSS5oIgogI2ltcG9ydCAiVGltZVJhbmdl
cy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBv
cnQgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0ICJXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50LmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oIgor
I2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKyNpbXBvcnQgIlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVB
bmltYXRpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZVZpZXcuaD4KQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMgSW50UmVjdCBlbGVtZW50UmVj
dEluV2luZG93KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKICAgICByZXR1cm4gdmll
dy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoKSk7CiB9CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OworY2xhc3MgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ7CiAKIEBpbnRlcmZhY2Ug
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAoZGVsZWdhdGUpCi0tKHZvaWQpZGlkRmluaXNo
RnVsbHNjcmVlbjooV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQ7
CistKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjooVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQqKWNvbnRleHQ7CiBAZW5kCiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0IGZpbmFsCi0gICAgOiBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCi0g
ICAgLCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgLCBwcml2YXRl
IFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCi0gICAgLCBwcml2YXRlIFdlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsCi0gICAgLCBwcml2YXRlIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xp
ZW50Ci0gICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0IGZpbmFsCisgICAgOiBwcml2YXRlIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgLCBwcml2
YXRlIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50CisgICAgLCBwcml2YXRlIFZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyCisgICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsCisg
ICAgLCBwcml2YXRlIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAgLCBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHsKIAog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQpOwogICAgIH0KIAogICAgIHZv
aWQgc2V0Q29udHJvbGxlcihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiBjb250cm9sbGVy
KSB7IG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KQEAgLTExOSwyMiArMTE5LDIyIEBAIHB1
YmxpYzoKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCgpIHsgfQorICAgIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0KCkgeyB9CiAKLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcgorICAgIC8vIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCiAgICAgdm9pZCBkaWRT
ZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigp
IG92ZXJyaWRlIHsgfQogICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ2xpZW50CisgICAgLy8gVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKICAgICB2
b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIHZpZGVvRGltZW5z
aW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbAotICAgIHZvaWQgYWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2Rl
bAorICAgIHZvaWQgYWRkQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCByZW1vdmVDbGllbnQoUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKSBv
dmVycmlkZTsKICAgICB2b2lkIHBsYXkoKSBvdmVycmlkZTsKICAgICB2b2lkIHBhdXNlKCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKQEAgLTE3MCw3ICsx
NzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9nZ2xlTXV0ZWQoKSBvdmVycmlkZTsKICAgICB2
b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwogCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWxDbGllbnQKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAogICAgIHZvaWQgZHVy
YXRpb25DaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjdXJyZW50VGltZUNoYW5n
ZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSkgb3ZlcnJpZGU7CkBAIC0xNzksMzkgKzE3
OSwzOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29s
KSBvdmVycmlkZTsKICAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KSBvdmVycmlkZTsKICAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFj
a0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3Ry
aW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKICAgICB2b2lkIHdpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIG11dGVk
Q2hhbmdlZChib29sKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Ci0gICAgdm9pZCBhZGRDbGllbnQoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVu
dCYpIG92ZXJyaWRlOworICAgIC8vIFZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgdm9pZCBhZGRD
bGllbnQoVmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJl
bW92ZUNsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNlKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKICAgICB2b2lkIGZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJy
aWRlOwogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBoYXNW
aWRlbygpIGNvbnN0IG92ZXJyaWRlOwogICAgIEZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBj
b25zdCBvdmVycmlkZTsKICAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IEhhc2hTZXQ8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX3BsYXliYWNrQ2xpZW50
czsKLSAgICBIYXNoU2V0PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Kj4gbV9mdWxsc2Ny
ZWVuQ2xpZW50czsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IG1faW50ZXJmYWNlOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gbV9mdWxsc2NyZWVuTW9kZWw7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50PiBtX3BsYXliYWNrTW9kZWw7CisgICAgSGFzaFNldDxQbGF5YmFja1Nl
c3Npb25Nb2RlbENsaWVudCo+IG1fcGxheWJhY2tDbGllbnRzOworICAgIEhhc2hTZXQ8VmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2Z1bGxzY3JlZW5DbGllbnRzOworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7CisgICAgUmVmUHRyPFZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtX2Z1bGxzY3JlZW5Nb2RlbDsKKyAgICBS
ZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1fcGxheWJhY2tNb2RlbDsK
ICAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgUmV0YWlu
UHRyPFVJVmlldz4gbV92aWRlb0Z1bGxzY3JlZW5WaWV3OwogICAgIFJldGFpblB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyPiBtX2NvbnRyb2xsZXI7CiB9OwogCi0jcHJhZ21hIG1hcmsg
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyNwcmFnbWEgbWFyayBWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcgogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSBbbV92
aWRlb0Z1bGxzY3JlZW5WaWV3IGxheWVyXTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdl
YlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpcywgdmlkZW9GdWxsc2NyZWVuTGF5ZXJdIHsK
ICAgICAgICAgW3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNoZWRD
R0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudCldOwogICAgICAgICBtX2Z1bGxzY3Jl
ZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CkBAIC0yMjIsMTAgKzIyMiwxMCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQog
ICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpk
aWRFeGl0RnVsbHNjcmVlbigpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpkaWRFeGl0RnVsbHNjcmVlbigpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNd
IHsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5p
bCwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CkBAIC0yMzUs
MTUgKzIzNSwxNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpk
aWRFeGl0RnVsbHNjcmVlbigpCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwobnVsbHB0cik7Ci0gICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKG51bGxwdHIpOworICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbChudWxscHRyKTsKKyAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIobnVsbHB0cik7CiAgICAgbV9pbnRlcmZhY2UgPSBudWxscHRyOwogICAg
IG1fdmlkZW9GdWxsc2NyZWVuVmlldyA9IG5pbDsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAgICAgICAgIG1fZnVsbHNj
cmVlbk1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwogICAgICAgICBtX2Z1bGxz
Y3JlZW5Nb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwpAQCAtMjU2LDEwICsyNTYsMTAg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1
bGxzY3JlZW4oKQogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKIHsK
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdl
YlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBJbnRSZWN0IGNsaWVu
dFJlY3QgPSBlbGVtZW50UmVjdEluV2luZG93KG1fdmlkZW9FbGVtZW50LmdldCgpKTsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRo
aXMsIHRoaXMsIGNsaWVudFJlY3RdIHsKQEAgLTI2OCwxMiArMjY4LDEyIEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpCiAgICAgfSk7CiB9CiAKLSNwcmFnbWEgbWFyayBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudAorI3ByYWdtYSBtYXJrIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUg
ZHVyYXRpb24pCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkdXJhdGlv
bkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQo
KSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGR1cmF0aW9uXSB7
CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwog
ICAgICAgICB9KTsKQEAgLTI4NCwxMCArMjg0LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uQ2hhbmdlZChkb3VibGUgZHVyYXRpb24pCiAgICAg
ICAgIGNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKGR1cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBj
dXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3Vi
bGUgYW5jaG9yVGltZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjdXJyZW50VGltZSwgYW5jaG9yVGlt
ZV0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJl
bnRUaW1lLCBhbmNob3JUaW1lKTsKICAgICAgICAgfSk7CkBAIC0yOTgsMTAgKzI5OCwxMCBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjdXJyZW50VGltZUNoYW5n
ZWQoZG91YmxlIGN1cnJlbnRUaW1lLAogICAgICAgICBjbGllbnQtPmN1cnJlbnRUaW1lQ2hhbmdl
ZChjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGlt
ZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZUNo
YW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50
KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBidWZmZXJlZFRp
bWVdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVm
ZmVyZWRUaW1lKTsKICAgICAgICAgfSk7CkBAIC0zMTIsMTAgKzMxMiwxMCBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpidWZmZXJlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSBidWZmZXJlZFRpbQogICAgICAgICBjbGllbnQtPmJ1ZmZlcmVkVGltZUNoYW5nZWQoYnVmZmVy
ZWRUaW1lKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgaXNQbGF5aW5nLCBwbGF5
YmFja1JhdGVdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnJhdGVDaGFuZ2VkKGlzUGxh
eWluZywgcGxheWJhY2tSYXRlKTsKICAgICAgICAgfSk7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyYXRlQ2hhbmdlZChib29s
IGlzUGxheWluZywgZmxvYXQgcGxheQogICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxh
eWluZywgcGxheWJhY2tSYXRlKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit2b2lkIFZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykK
IHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
ICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtwcm90ZWN0ZWRUaGlzLCBoYXNWaWRlb10gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+aGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKICAgICAgICAgfSk7CkBAIC0zNDAsMTAgKzM0
MCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRl
b0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKICAgICAgICAgY2xpZW50LT5oYXNWaWRlb0NoYW5nZWQo
aGFzVmlkZW8pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25z
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dmlkZW9EaW1lbnNpb25z
Q2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKIHsKICAgICBpZiAoV2Vi
VGhyZWFkSXNDdXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8Vmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRU
aGlzLCB2aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lvbnNdIHsKICAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsKICAg
ICAgICAgfSk7CkBAIC0zNTQsMTAgKzM1NCwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZQog
ICAgICAgICBjbGllbnQtPnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVS
YW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9k
aWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQordm9pZCBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5n
ZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0
ZUludGVydmFsKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHBsYXRmb3JtVGltZVJhbmdlcyA9IHRpbWVS
YW5nZXMucmFuZ2VzKCksIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbF0gewog
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKFRpbWVSYW5n
ZXM6OmNyZWF0ZShwbGF0Zm9ybVRpbWVSYW5nZXMpLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBk
YXRlSW50ZXJ2YWwpOwogICAgICAgICB9KTsKQEAgLTM2OCwxMCArMzY4LDEwIEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChj
b25zdCBUaW1lUmFuZ2VzCiAgICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHRp
bWVSYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGJvb2wgY2FuUGxheUZh
c3RSZXZlcnNlKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGNhblBsYXlGYXN0UmV2ZXJzZV0gewogICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChjYW5QbGF5
RmFzdFJldmVyc2UpOwogICAgICAgICB9KTsKQEAgLTM5MSwxMCArMzkxLDEwIEBAIHN0YXRpYyBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGlzb2xhdGVkQ29weShjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpCiAgICAgcmV0dXJuIG9wdGlvbnNDb3B5OwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
c0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFT
ZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAg
IGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJl
ZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3By
b3RlY3RlZFRoaXMsIG9wdGlvbnMgPSBpc29sYXRlZENvcHkob3B0aW9ucyksIHNlbGVjdGVkSW5k
ZXhdIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKICAgICAgICAgfSk7CkBAIC00MDUs
MTAgKzQwNSwxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojph
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29ucwogICAgICAgICBjbGllbnQtPmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0
aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpCiB7CiAgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKSB7Ci0gICAgICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgb3B0aW9ucyA9IGlzb2xhdGVkQ29weShv
cHRpb25zKSwgc2VsZWN0ZWRJbmRleF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7
CiAgICAgICAgIH0pOwpAQCAtNDE5LDcgKzQxOSw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNv
CiAgICAgICAgIGNsaWVudC0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQob3B0
aW9ucywgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJh
Y2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50
KCkpIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCB0aGlzLCBlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lID0gbG9jYWxp
emVkRGV2aWNlTmFtZS5pc29sYXRlZENvcHkoKV0gewpAQCAtNDMzLDEwICs0MzMsMTAgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja0No
YW5nZWQoYm9vbCBlbmFibGVkLAogICAgICAgICBjbGllbnQtPmV4dGVybmFsUGxheWJhY2tDaGFu
Z2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZENoYW5nZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRpc2Fi
bGVkKQogewogICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIGRpc2FibGVkXSB7CiAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpOwog
ICAgICAgICB9KTsKQEAgLTQ0NywxMCArNDQ3LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChi
CiAgICAgICAgIGNsaWVudC0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGRp
c2FibGVkKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKIHsKICAgICBpZiAoV2ViVGhyZWFkSXND
dXJyZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBtdXRl
ZF0gewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bXV0ZWRDaGFuZ2VkKG11dGVkKTsKICAg
ICAgICAgfSk7CkBAIC00NjEsMzQgKzQ2MSwzNCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkKICAgICAgICAgY2xpZW50
LT5tdXRlZENoYW5nZWQobXV0ZWQpOwogfQogCi0jcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwKKyNwcmFnbWEgbWFyayBWaWRlb0Z1bGxzY3JlZW5Nb2RlbAogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQoV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDbGllbnQmIGNsaWVudCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQogewog
ICAgIEFTU0VSVCghbV9mdWxsc2NyZWVuQ2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAg
bV9mdWxsc2NyZWVuQ2xpZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlbW92ZUNsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENsaWVudCYgY2xpZW50KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6cmVtb3ZlQ2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAg
ICAgQVNTRVJUKG1fZnVsbHNjcmVlbkNsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1f
ZnVsbHNjcmVlbkNsaWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRo
TWVkaWEpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0RnVs
bHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMs
IHRoaXMsIG1vZGUsIGZpbmlzaGVkV2l0aE1lZGlhXSB7CiAgICAgICAgIGlmIChtX2Z1bGxzY3Jl
ZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVl
bk1vZGUobW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRS
ZWN0IGZyYW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Vmlk
ZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFJldGFpblB0cjxDQUxheWVyPiB2aWRlb0Z1
bGxzY3JlZW5MYXllciA9IFttX3ZpZGVvRnVsbHNjcmVlblZpZXcgbGF5ZXJdOwogICAgIAogICAg
IFt2aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTpbdmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIgdHJhbnNmb3JtXV07CkBAIC01MDgsMTA1ICs1MDgsMTA1IEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJl
Y3QgZnJhbWUpCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSB2aWRlb0dyYXZpdHkpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXMs
IHZpZGVvR3Jhdml0eV0gewogICAgICAgICBpZiAobV9mdWxsc2NyZWVuTW9kZWwpCiAgICAgICAg
ICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkodmlkZW9HcmF2aXR5
KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBtb2RlXSB7
CiAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5Nb2RlbCkKICAgICAgICAgICAgIG1fZnVsbHNjcmVl
bk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobW9kZSk7CiAgICAgfSk7CiB9CiAKLWJvb2wg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0Citi
b29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc1Zpc2libGUoKSBjb25zdAog
ewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Nb2Rl
bCA/IG1fZnVsbHNjcmVlbk1vZGVsLT5pc1Zpc2libGUoKSA6IGZhbHNlOwogfQogCi1ib29sIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlbygpIGNvbnN0Citib29s
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpoYXNWaWRlbygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGVsID8g
bV9mdWxsc2NyZWVuTW9kZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZTsKIH0KIAotYm9vbCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6aXNNdXRlZCgpIGNvbnN0Citib29sIFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojppc011dGVkKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFj
a01vZGVsLT5pc011dGVkKCkgOiBmYWxzZTsKIH0KIAotRmxvYXRTaXplIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMoKSBjb25zdAorRmxvYXRTaXpl
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp2aWRlb0RpbWVuc2lvbnMoKSBjb25z
dAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5N
b2RlbCA/IG1fZnVsbHNjcmVlbk1vZGVsLT52aWRlb0RpbWVuc2lvbnMoKSA6IEZsb2F0U2l6ZSgp
OwogfQogCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbAorI3ByYWdtYSBt
YXJrIC0gUGxheWJhY2tTZXNzaW9uTW9kZWwKIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6YWRkQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBj
bGllbnQpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjphZGRDbGllbnQo
UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQoIW1fcGxh
eWJhY2tDbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX3BsYXliYWNrQ2xpZW50cy5h
ZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnJlbW92ZUNsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFBsYXli
YWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fcGxheWJhY2tD
bGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKICAgICBtX3BsYXliYWNrQ2xpZW50cy5yZW1vdmUo
JmNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnBsYXkoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSgpCiB7
CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJh
Y2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+cGxheSgpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRS
dW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkK
ICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+cGF1c2UoKTsKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgp
CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxh
eWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+dG9nZ2xlUGxheVN0YXRl
KCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnRvZ2dsZU11dGVkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnRvZ2dsZU11dGVkKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAg
ICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT50
b2dnbGVNdXRlZCgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZXRNdXRlZChib29sIG11dGVkKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKIHsKICAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRy
KHRoaXMpLCB0aGlzLCBtdXRlZF0gewpAQCAtNjE1LDE1MSArNjE1LDE1MSBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRNdXRlZChib29sIG11dGVkKQogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdp
blNjcnViYmluZygpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdp
blNjcnViYmluZygpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKICAgICAg
ICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+YmVn
aW5TY3J1YmJpbmcoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmVuZFNjcnViYmluZygpCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMs
IHRoaXNdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAgICAgICAgICAgIG1fcGxh
eWJhY2tNb2RlbC0+ZW5kU2NydWJiaW5nKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lk
IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1l
KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCB0aW1lXSB7CiAgICAgICAgIGlm
IChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwtPnNlZWtUb1Rp
bWUodGltZSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3Rl
Y3RlZFRoaXMsIHRoaXMsIHRpbWVdIHsKICAgICAgICAgaWYgKG1fcGxheWJhY2tNb2RlbCkKICAg
ICAgICAgICAgIG1fcGxheWJhY2tNb2RlbC0+ZmFzdFNlZWsodGltZSk7CiAgICAgfSk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdG
b3J3YXJkKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nh
bm5pbmdGb3J3YXJkKCkKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAg
ICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5i
ZWdpblNjYW5uaW5nRm9yd2FyZCgpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQordm9pZCBWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKIHsK
ICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIFdl
YlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcywgdGhpc10gewogICAgICAgICBpZiAobV9wbGF5YmFj
a01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5iZWdpblNjYW5uaW5nQmFja3dh
cmQoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6ZW5kU2Nhbm5pbmcoKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZW5kU2Nhbm5pbmcoKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzXSB7CiAg
ICAgICAgIGlmIChtX3BsYXliYWNrTW9kZWwpCiAgICAgICAgICAgICBtX3BsYXliYWNrTW9kZWwt
PmVuZFNjYW5uaW5nKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2
b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0
aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBp
bmRleF0gewogICAgICAgICBpZiAobV9wbGF5YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5
YmFja01vZGVsLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAg
IEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgV2ViVGhy
ZWFkUnVuKFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBpbmRleF0gewogICAgICAgICBpZiAobV9wbGF5
YmFja01vZGVsKQogICAgICAgICAgICAgbV9wbGF5YmFja01vZGVsLT5zZWxlY3RMZWdpYmxlTWVk
aWFPcHRpb24oaW5kZXgpOwogICAgIH0pOwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmR1cmF0aW9uKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZHVyYXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwt
PmR1cmF0aW9uKCkgOiAwOwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmN1cnJlbnRUaW1lKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6Y3VycmVudFRpbWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmN1
cnJlbnRUaW1lKCkgOiAwOwogfQogCi1kb3VibGUgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmJ1ZmZlcmVkVGltZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2RlbC0+
YnVmZmVyZWRUaW1lKCkgOiAwOwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0Ojppc1BsYXlpbmcoKSBjb25zdAorYm9vbCBWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6aXNQbGF5aW5nKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5pc1BsYXlp
bmcoKSA6IGZhbHNlOwogfQogCi1mbG9hdCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6cGxheWJhY2tSYXRlKCkgY29uc3QKK2Zsb2F0IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpwbGF5YmFja1JhdGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFk
KCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPnBsYXli
YWNrUmF0ZSgpIDogMDsKIH0KIAotUmVmPFRpbWVSYW5nZXM+IFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZWVrYWJsZVJhbmdlcygpIGNvbnN0CitSZWY8VGltZVJhbmdlcz4g
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlUmFuZ2VzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVs
ID8gbV9wbGF5YmFja01vZGVsLT5zZWVrYWJsZVJhbmdlcygpIDogVGltZVJhbmdlczo6Y3JlYXRl
KCk7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vl
a2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0Citkb3VibGUgVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2RpZmllZFRp
bWUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3Bs
YXliYWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPnNlZWthYmxlVGltZVJhbmdlc0xhc3RNb2Rp
ZmllZFRpbWUoKSA6IDA7CiB9CiAKLWRvdWJsZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKK2RvdWJsZSBWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6bGl2ZVVwZGF0ZUludGVydmFsKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5
YmFja01vZGVsLT5saXZlVXBkYXRlSW50ZXJ2YWwoKSA6IDA7CiB9CiAKLWJvb2wgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZSgpIGNvbnN0Citi
b29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjYW5QbGF5RmFzdFJldmVyc2Uo
KSBjb25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXli
YWNrTW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmNhblBsYXlGYXN0UmV2ZXJzZSgpIDogZmFsc2U7
CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKK1ZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKICAgICBpZiAobV9wbGF5YmFja01vZGVsKQpAQCAtNzY3LDEzICs3NjcsMTMgQEAg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6YXVkaW9NZWRpYVNlbGUKICAgICByZXR1cm4geyB9OwogfQogCi11aW50NjRfdCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdAordWludDY0X3QgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmF1
ZGlvTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5hdWRpb01l
ZGlhU2VsZWN0ZWRJbmRleCgpIDogLTE7CiB9CiAKLVZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoKSBjb25zdAorVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucygp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgaWYgKG1fcGxheWJhY2tN
b2RlbCkKQEAgLTc4MSwzMSArNzgxLDMxIEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4g
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotdWludDY0X3QgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdAordWludDY0X3QgVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBj
b25zdAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNr
TW9kZWwgPyBtX3BsYXliYWNrTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSA6IC0x
OwogfQogCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleHRlcm5h
bFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0Citib29sIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpleHRlcm5hbFBsYXliYWNrRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tNb2RlbCA/IG1fcGxheWJhY2tNb2Rl
bC0+ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSA6IGZhbHNlOwogfQogCi1XZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QKK1Bs
YXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUoKSBjb25z
dAogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHJldHVybiBtX3BsYXliYWNrTW9k
ZWwgPyBtX3BsYXliYWNrTW9kZWwtPmV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkgOiBUYXJn
ZXRUeXBlTm9uZTsKIH0KIAotU3RyaW5nIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0CitTdHJpbmcg
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4dGVybmFsUGxheWJhY2tMb2NhbGl6
ZWREZXZpY2VOYW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBy
ZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT5leHRlcm5hbFBsYXliYWNr
TG9jYWxpemVkRGV2aWNlTmFtZSgpIDogU3RyaW5nKCk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkg
Y29uc3QKK2Jvb2wgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
ICAgICByZXR1cm4gbV9wbGF5YmFja01vZGVsID8gbV9wbGF5YmFja01vZGVsLT53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCgpIDogdHJ1ZTsKQEAgLTgxMywxNiArODEzLDE2IEBAIGJvb2wg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFj
a0Rpc2FibGVkKCkgY29uc3QKIAogI3ByYWdtYSBtYXJrIE90aGVyCiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVsbHNjcmVlbihIVE1MVmlkZW9FbGVt
ZW50JiB2aWRlb0VsZW1lbnQsIFVJVmlldyAqdmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit2b2lkIFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBV
SVZpZXcgKnZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgUmV0YWluUHRyPFVJVmll
dz4gdmlld1JlZiA9IHZpZXc7CiAgICAgbV92aWRlb0VsZW1lbnQgPSAmdmlkZW9FbGVtZW50Owot
ICAgIG1fcGxheWJhY2tNb2RlbCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
OjpjcmVhdGUoKTsKKyAgICBtX3BsYXliYWNrTW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudDo6Y3JlYXRlKCk7CiAgICAgbV9wbGF5YmFja01vZGVsLT5hZGRDbGllbnQoKnRo
aXMpOwogICAgIG1fcGxheWJhY2tNb2RlbC0+c2V0TWVkaWFFbGVtZW50KG1fdmlkZW9FbGVtZW50
LmdldCgpKTsKIAotICAgIG1fZnVsbHNjcmVlbk1vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOworICAgIG1fZnVsbHNjcmVlbk1vZGVsID0gVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOwogICAgIG1fZnVsbHNjcmVlbk1v
ZGVsLT5hZGRDbGllbnQoKnRoaXMpOwogICAgIG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0Vs
ZW1lbnQobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwogCkBAIC04MzIsMTUgKzgzMiwxNSBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRN
TFZpZGVvRWxlbWVudCYgdmlkZQogICAgIEZsb2F0UmVjdCB2aWRlb0xheWVyRnJhbWUgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCB2aWRlb0VsZW1lbnRDbGllbnRSZWN0LnNpemUoKSk7CiAgICAg
bV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZSh2aWRlb0xheWVyRnJhbWUpOwog
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpcywgdmlkZW9FbGVtZW50Q2xpZW50UmVj
dCwgdmlld1JlZiwgbW9kZSwgYWxsb3dzUGljdHVyZUluUGljdHVyZV0gewogICAgICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKIAotICAgICAgICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQ+IHNlc3Npb25JbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdDo6Y3JlYXRlKCp0aGlzKTsKLSAgICAgICAgbV9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKHNlc3Npb25JbnRlcmZhY2UuZ2V0KCkpOwotICAg
ICAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhp
cyk7Ci0gICAgICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlz
KTsKLSAgICAgICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKHRoaXMpOworICAgICAgICBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ+IHNl
c3Npb25JbnRlcmZhY2UgPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCp0
aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UgPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6Y3JlYXRlKHNlc3Npb25JbnRlcmZhY2UuZ2V0KCkpOworICAgICAgICBtX2ludGVyZmFjZS0+
c2V0VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CisgICAgICAgIG1faW50ZXJm
YWNlLT5zZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2Ut
PnNldFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOwogCiAgICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuVmlldyA9IGFkb3B0TlMoW2FsbG9jVUlWaWV3SW5zdGFuY2UoKSBpbml0XSk7
CiAgICAgICAgIApAQCAtODQ4LDI1ICs4NDgsMjUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGUK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZXhpdEZ1bGxzY3JlZW4oKQordm9pZCBWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6
ZXhpdEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCBp
c01haW5UaHJlYWQoKSk7CiAgICAgSW50UmVjdCBjbGllbnRSZWN0ID0gZWxlbWVudFJlY3RJbldp
bmRvdyhtX3ZpZGVvRWxlbWVudC5nZXQoKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywg
dGhpcywgY2xpZW50UmVjdF0gewogICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICAg
ICAgbV9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKGNsaWVudFJlY3QpOwogICAgIH0pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQogewogICAgIEFTU0VSVChpc1VJVGhyZWFk
KCkpOwogICAgIG1faW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CiB9
CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHsKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IF9jb250ZXh0OworICAg
IFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gX2NvbnRleHQ7CiAgICAg
UmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IF92aWRlb0VsZW1lbnQ7CiB9CiAKQEAgLTg5MSw3ICs4
OTEsNyBAQCAtIChIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIC0gKHZvaWQpZW50ZXJG
dWxsc2NyZWVuOihVSVZpZXcgKil2aWV3IG1vZGU6KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSltb2RlCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBfY29udGV4dCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjcmVhdGUo
KTsKKyAgICBfY29udGV4dCA9IFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjcmVh
dGUoKTsKICAgICBfY29udGV4dC0+c2V0Q29udHJvbGxlcihzZWxmKTsKICAgICBfY29udGV4dC0+
c2V0VXBGdWxsc2NyZWVuKCpfdmlkZW9FbGVtZW50LmdldCgpLCB2aWV3LCBtb2RlKTsKIH0KQEAg
LTkwOSw3ICs5MDksNyBAQCAtICh2b2lkKXJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4KICAg
ICAgICAgX2NvbnRleHQtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAotLSAo
dm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dCopY29udGV4dAorLSAodm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dAogewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1
cnJlbnQoKSk7CiAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0ID09IF9jb250ZXh0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDRhYzcwNDdhYjcyY2IzNGRmNjE4YzY0ZTA2NjMyOTI1YjZkZTc4ZGUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlICJF
dmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0LmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbmNs
dWRlIDxvYmpjL29iamMuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotT0JKQ19DTEFTUyBBVlBs
YXllclZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBVSVZpZXdDb250cm9sbGVyOwotT0JKQ19D
TEFTUyBVSVdpbmRvdzsKLU9CSkNfQ0xBU1MgVUlWaWV3OwotT0JKQ19DTEFTUyBDQUxheWVyOwot
T0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFdlYkFWUGxheWVy
TGF5ZXJWaWV3OwotT0JKQ19DTEFTUyBXZWJBVlBsYXllckxheWVyOwotT0JKQ19DTEFTUyBXZWJB
VlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3Mg
U3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3Mg
RmxvYXRTaXplOwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw7Ci1jbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcjsKLSAgICAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IGZpbmFsCi0gICAgOiBwdWJsaWMgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudAotICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0PiB7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQmKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKik7Ci0gICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0KLQotICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ2xpZW50Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNv
bnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
bGllbnQKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wgZW5hYmxlZCwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFsOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihVSVZpZXcmLCBjb25z
dCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVj
dCYgZmluYWxSZWN0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xlYW51cEZ1
bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxs
c2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpOwotCi0g
ICAgZW51bSBjbGFzcyBFeGl0RnVsbFNjcmVlblJlYXNvbiB7Ci0gICAgICAgIERvbmVCdXR0b25U
YXBwZWQsCi0gICAgICAgIEZ1bGxTY3JlZW5CdXR0b25UYXBwZWQsCi0gICAgICAgIFBpbmNoR2Vz
dHVyZUhhbmRsZWQsCi0gICAgICAgIFJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZCwKLSAg
ICAgICAgUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQKLSAgICB9OwotCi0gICAgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwqIG1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bDsgfQotICAgIGJvb2wgc2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKEV4aXRGdWxsU2Ny
ZWVuUmVhc29uKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIGJvb2wgYWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NQaWN0dXJlSW5QaWN0
dXJlUGxheWJhY2s7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIG1heUF1dG9tYXRpY2FsbHlT
aG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUoV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKTsKLSAg
ICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBh
cHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwotCi0gICAgdm9pZCB3aWxsU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2
b2lkIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCB3aWxsU3RvcFBp
Y3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIGRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci0g
ICAgdm9pZCBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRs
ZXIodm9pZCAoXikoQk9PTCkpOwotCi0gICAgdm9pZCBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICBib29sIGhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZSAmIG1vZGU7IH0KLSAgICBib29sIGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09IG1v
ZGU7IH0KLQotcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Jik7Ci0gICAg
dm9pZCBiZWdpblNlc3Npb24oKTsKLSAgICB2b2lkIGVudGVyUGljdHVyZUluUGljdHVyZSgpOwot
ICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKLSAgICB2b2lkIHdhdGNoZG9nVGlt
ZXJGaXJlZCgpOwotICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcigp
IGNvbnN0OwotCi0gICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0PiBtX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7Ci0gICAgUmV0
YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0NvbnRyb2xsZXI7Ci0g
ICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgeyBudWxs
cHRyIH07Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIqIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyIHsgbnVsbHB0ciB9OwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNl
ZCB3aGVuIGZ1bGxzY3JlZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2luZG93LgotICAg
IFJldGFpblB0cjxVSVdpbmRvdz4gbV93aW5kb3c7Ci0gICAgUmV0YWluUHRyPFVJVmlld0NvbnRy
b2xsZXI+IG1fdmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFVJVmlldz4gbV9wYXJlbnRW
aWV3OwotICAgIFJldGFpblB0cjxVSVdpbmRvdz4gbV9wYXJlbnRXaW5kb3c7Ci0gICAgUmV0YWlu
UHRyPFdlYkFWUGxheWVyTGF5ZXJWaWV3PiBtX3BsYXllckxheWVyVmlldzsKLSAgICBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OwotICAgIFdURjo6RnVuY3Rpb248
dm9pZChib29sKT4gbV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjazsKLSAgICBSdW5Mb29wOjpUaW1l
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gbV93YXRjaGRvZ1RpbWVyOwotICAg
IGJvb2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9leGl0UmVxdWVzdGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZXhpdENvbXBsZXRlZCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2VudGVyUmVxdWVzdGVkIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX3No
b3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpUCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3JlZ3JvdW5kIHsgZmFs
c2UgfTsKLSAgICBib29sIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVT
dG9wIHsgZmFsc2UgfTsKLQotICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4oKTsKLX07Ci0KLX0K
LQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWVlY2MwMDBlZjdkOTAzNjg1ZjIxZTI5M2YzY2E3ODFkODc3MzQyNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KKysr
IC9kZXYvbnVsbApAQCAtMSwxMDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExB
VEZPUk0oSU9TKQotCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
IgotCi0jaWYgSEFWRShBVktJVCkKLQotI2ltcG9ydCAiQVZLaXRTUEkuaCIKLSNpbXBvcnQgIkdl
b21ldHJ5VXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJSdW50aW1l
QXBwbGljYXRpb25DaGVja3MuaCIKLSNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIldl
YkFWUGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQg
IldlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oIgotI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KLSNpbXBvcnQgPG9iamMv
bWVzc2FnZS5oPgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFNvZnQtbGlua2lu
ZyBoZWFkZXJzIG11c3QgYmUgaW5jbHVkZWQgbGFzdCBzaW5jZSB0aGV5ICNkZWZpbmUgZnVuY3Rp
b25zLCBjb25zdGFudHMsIGV0Yy4KLSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNP
RlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQotU09GVF9MSU5LX0NMQVNTKEFWRm91bmRh
dGlvbiwgQVZQbGF5ZXJMYXllcikKLVNPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFW
TGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfQ09OU1RBTlQo
QVZGb3VuZGF0aW9uLCBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBOU1N0cmluZyAq
KQotU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZMYXllclZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwsIE5TU3RyaW5nICopCi0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9O
QUwoQVZLaXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGljdHVyZUluUGlj
dHVyZUNvbnRyb2xsZXIpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGxheWVy
Vmlld0NvbnRyb2xsZXIpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIF9fQVZQbGF5
ZXJMYXllclZpZXcpCi0KLVNPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCi1TT0ZUX0xJTktfQ0xB
U1MoVUlLaXQsIFVJQXBwbGljYXRpb24pCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJU2NyZWVu
KQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVdpbmRvdykKLVNPRlRfTElOS19DTEFTUyhVSUtp
dCwgVUlWaWV3KQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVZpZXdDb250cm9sbGVyKQotU09G
VF9MSU5LX0NMQVNTKFVJS2l0LCBVSUNvbG9yKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJS2l0LCBV
SVRleHRFZmZlY3RzQmVuZWF0aFN0YXR1c0JhcldpbmRvd0xldmVsLCBVSVdpbmRvd0xldmVsKQot
Ci1zdGF0aWMgVUlDb2xvciAqY2xlYXJVSUNvbG9yKCkKLXsKLSAgICByZXR1cm4gKFVJQ29sb3Ig
KilbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl07Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVE
Ci1zdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAgICByZXR1cm4g
dmFsID8gInRydWUiIDogImZhbHNlIjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgU2Vjb25k
cyBkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsIHsgMV9zIH07Ci0KLUBjbGFzcyBXZWJBVk1l
ZGlhU2VsZWN0aW9uT3B0aW9uOwotCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGVfV2Vi
S2l0T25seT4gewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
X2Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci19Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQqIGZ1bGxzY3JlZW5JbnRlcmZhY2U7Ci0tIChCT09MKXBsYXll
clZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRy
b2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9s
bGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVhc29uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlCi0tIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQotewotICAgIHJldHVybiBfZnVsbHNj
cmVlbkludGVyZmFjZS5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRGdWxsc2NyZWVuSW50ZXJmYWNl
OihXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCopZnVsbHNjcmVlbkludGVyZmFjZQot
ewotICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gZnVsbHNjcmVlbkludGVyZmFjZTsKLX0KLQot
LSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcldpbGxTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFW
UGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNF
RF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJm
YWNlLT53aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmll
d0NvbnRyb2xsZXJEaWRTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xs
ZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3
Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRTdGFydFBpY3R1
cmVJblBpY3R1cmUoKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckZhaWxlZFRv
U3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmll
d0NvbnRyb2xsZXIgd2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBVTlVTRURfUEFS
QU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAg
c2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5mYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgp
OwotfQotCi0tICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0b3BQaWN0dXJlSW5QaWN0
dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIHNlbGYuZnVsbHNjcmVl
bkludGVyZmFjZS0+d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0gKHZvaWQpcGxh
eWVyVmlld0NvbnRyb2xsZXJEaWRTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29u
dHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXll
clZpZXdDb250cm9sbGVyKTsKLSAgICBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0b3BQ
aWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLXN0YXRpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFz
b24oQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uIHJlYXNvbikKLXsK
LSAgICBzd2l0Y2ggKHJlYXNvbikgewotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4
aXRGdWxsU2NyZWVuUmVhc29uRG9uZUJ1dHRvblRhcHBlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RG9uZUJ1
dHRvblRhcHBlZDsKLSAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVl
blJlYXNvbkZ1bGxTY3JlZW5CdXR0b25UYXBwZWQ6Ci0gICAgICAgIHJldHVybiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OkZ1bGxTY3JlZW5C
dXR0b25UYXBwZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3Jl
ZW5SZWFzb25QaWN0dXJlSW5QaWN0dXJlU3RhcnRlZDoKLSAgICAgICAgcmV0dXJuIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6UGljdHVyZUlu
UGljdHVyZVN0YXJ0ZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxT
Y3JlZW5SZWFzb25QaW5jaEdlc3R1cmVIYW5kbGVkOgotICAgICAgICByZXR1cm4gV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1
cmVIYW5kbGVkOwotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVu
UmVhc29uUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkOgotICAgICAgICByZXR1cm4gV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpSZW1v
dGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ7Ci0gICAgfQotfQotCi0tIChCT09MKXBsYXllclZp
ZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xs
ZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVy
RXhpdEZ1bGxTY3JlZW5SZWFzb24pcmVhc29uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZp
ZXdDb250cm9sbGVyKTsKLSAgICByZXR1cm4gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5zaG91
bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24o
cmVhc29uKSk7Ci19Ci0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVyVmll
d0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciByZXN0b3JlVXNlckludGVyZmFjZUZv
clBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09M
IHJlc3RvcmVkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJW
aWV3Q29udHJvbGxlcik7Ci0gICAgc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlLT5wcmVwYXJlRm9y
UGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRs
ZXIpOwotfQotQGVuZAotCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyTGF5ZXIgOiBDQUxheWVyCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBOU1N0cmluZyAqdmlkZW9HcmF2aXR5OwotQHBy
b3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1JlYWR5Rm9yRGlzcGxheSkgQk9PTCByZWFkeUZv
ckRpc3BsYXk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdCogZnVsbHNjcmVlbkludGVyZmFjZTsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4pIEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcjsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIENBTGF5ZXIgKnZpZGVvU3VibGF5ZXI7Ci1AcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSwgbnVsbGFibGUpIE5TRGljdGlvbmFyeSAqcGl4ZWxCdWZmZXJB
dHRyaWJ1dGVzOwotQHByb3BlcnR5IENHU2l6ZSB2aWRlb0RpbWVuc2lvbnM7Ci1AcHJvcGVydHkg
Q0dSZWN0IG1vZGVsVmlkZW9MYXllckZyYW1lOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2Vi
QVZQbGF5ZXJMYXllciB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBfZnVsbHNjcmVlbkludGVyZmFjZTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250
cm9sbGVyPiBfYXZQbGF5ZXJDb250cm9sbGVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBfdmlk
ZW9TdWJsYXllcjsKLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF92aWRlb0dyYXZpdHk7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoc2VsZikgewotICAgICAgICBbc2VsZiBzZXRNYXNrc1RvQm91bmRzOllFU107Ci0gICAgICAg
IF92aWRlb0dyYXZpdHkgPSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCk7Ci0g
ICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbTlNP
YmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpuaWxdOwotICAgIFtfcGl4ZWxCdWZm
ZXJBdHRyaWJ1dGVzIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxzY3JlZW5JbnRlcmZhY2UKLXsKLSAg
ICByZXR1cm4gX2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0RnVs
bHNjcmVlbkludGVyZmFjZTooV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqKWZ1bGxz
Y3JlZW5JbnRlcmZhY2UKLXsKLSAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IGZ1bGxzY3JlZW5J
bnRlcmZhY2U7Ci19Ci0KLS0gKEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIK
LXsKLSAgICByZXR1cm4gKEFWUGxheWVyQ29udHJvbGxlciAqKV9hdlBsYXllckNvbnRyb2xsZXIu
Z2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9s
bGVyICopcGxheWVyQ29udHJvbGxlcgotewotICAgIEFTU0VSVCghcGxheWVyQ29udHJvbGxlciB8
fCBbcGxheWVyQ29udHJvbGxlciBpc0tpbmRPZkNsYXNzOltXZWJBVlBsYXllckNvbnRyb2xsZXIg
Y2xhc3NdXSk7Ci0gICAgX2F2UGxheWVyQ29udHJvbGxlciA9IChXZWJBVlBsYXllckNvbnRyb2xs
ZXIgKilwbGF5ZXJDb250cm9sbGVyOwotfQotCi0tICh2b2lkKXNldFZpZGVvU3VibGF5ZXI6KENB
TGF5ZXIgKil2aWRlb1N1YmxheWVyCi17Ci0gICAgX3ZpZGVvU3VibGF5ZXIgPSB2aWRlb1N1Ymxh
eWVyOwotfQotCi0tIChDQUxheWVyKil2aWRlb1N1YmxheWVyCi17Ci0gICAgcmV0dXJuIF92aWRl
b1N1YmxheWVyLmdldCgpOwotfQotCi0tICh2b2lkKWxheW91dFN1YmxheWVycwotewotICAgIGlm
IChbX3ZpZGVvU3VibGF5ZXIgc3VwZXJsYXllcl0gIT0gc2VsZikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZV0pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtfdmlkZW9TdWJsYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZShDR1JlY3RH
ZXRNaWRYKHNlbGYuYm91bmRzKSwgQ0dSZWN0R2V0TWlkWShzZWxmLmJvdW5kcykpXTsKLQotICAg
IGlmIChzZWxmLnZpZGVvRGltZW5zaW9ucy5oZWlnaHQgPD0gMCB8fCBzZWxmLnZpZGVvRGltZW5z
aW9ucy53aWR0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNl
VmlkZW9GcmFtZTsKLSAgICBGbG9hdFJlY3QgdGFyZ2V0VmlkZW9GcmFtZTsKLSAgICBmbG9hdCB2
aWRlb0FzcGVjdFJhdGlvID0gc2VsZi52aWRlb0RpbWVuc2lvbnMud2lkdGggLyBzZWxmLnZpZGVv
RGltZW5zaW9ucy5oZWlnaHQ7Ci0gICAgCi0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5
UmVzaXplKCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgewotICAgICAgICBz
b3VyY2VWaWRlb0ZyYW1lID0gc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZTsKLSAgICAgICAgdGFy
Z2V0VmlkZW9GcmFtZSA9IHNlbGYuYm91bmRzOwotICAgIH0gZWxzZSBpZiAoW2dldEFWTGF5ZXJW
aWRlb0dyYXZpdHlSZXNpemVBc3BlY3QoKSBpc0VxdWFsVG9TdHJpbmc6c2VsZi52aWRlb0dyYXZp
dHldKSB7Ci0gICAgICAgIHNvdXJjZVZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RS
YXRpb0luc2lkZVJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFt
ZSk7Ci0gICAgICAgIHRhcmdldFZpZGVvRnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRp
b0luc2lkZVJlY3QodmlkZW9Bc3BlY3RSYXRpbywgc2VsZi5ib3VuZHMpOwotICAgIH0gZWxzZSBp
ZiAoW2dldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKCkgaXNFcXVhbFRvU3Ry
aW5nOnNlbGYudmlkZW9HcmF2aXR5XSkgewotICAgICAgICBzb3VyY2VWaWRlb0ZyYW1lID0gc21h
bGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdCh2aWRlb0FzcGVjdFJhdGlvLCBzZWxm
Lm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFt
ZSA9IENHUmVjdE1ha2UoMCwgMCwgc291cmNlVmlkZW9GcmFtZS53aWR0aCgpLCBzb3VyY2VWaWRl
b0ZyYW1lLmhlaWdodCgpKTsKLSAgICAgICAgQVNTRVJUKF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5t
b2RlbCgpKTsKLSAgICAgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCktPnNldFZpZGVv
TGF5ZXJGcmFtZShzZWxmLm1vZGVsVmlkZW9MYXllckZyYW1lKTsKLSAgICAgICAgdGFyZ2V0Vmlk
ZW9GcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QodmlkZW9Bc3Bl
Y3RSYXRpbywgc2VsZi5ib3VuZHMpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLQotICAgIFVJVmlldyAqdmlldyA9IChVSVZpZXcgKilbX3ZpZGVvU3VibGF5ZXIg
ZGVsZWdhdGVdOwotICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJh
bnNmb3JtTWFrZVNjYWxlKHRhcmdldFZpZGVvRnJhbWUud2lkdGgoKSAvIHNvdXJjZVZpZGVvRnJh
bWUud2lkdGgoKSwgdGFyZ2V0VmlkZW9GcmFtZS5oZWlnaHQoKSAvIHNvdXJjZVZpZGVvRnJhbWUu
aGVpZ2h0KCkpOwotICAgIFt2aWV3IHNldFRyYW5zZm9ybTp0cmFuc2Zvcm1dOwotICAgIAotICAg
IE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gW0NBVHJhbnNhY3Rpb24gYW5pbWF0
aW9uRHVyYXRpb25dOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF4gewotICAgICAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNX
aXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHJlc29sdmVCb3VuZHMpIG9iamVjdDpu
aWxdOwotCi0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVzb2x2ZUJv
dW5kcykgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTphbmltYXRpb25EdXJhdGlvbiArIDAuMV07
Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpcmVzb2x2ZUJvdW5kcwotewotICAgIFtOU09iamVjdCBj
YW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2Vs
ZWN0b3IocmVzb2x2ZUJvdW5kcykgb2JqZWN0Om5pbF07Ci0gICAgaWYgKCFbX2F2UGxheWVyQ29u
dHJvbGxlciBkZWxlZ2F0ZV0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoW192aWRl
b1N1YmxheWVyIHN1cGVybGF5ZXJdICE9IHNlbGYpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpZiAoQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSwgW3NlbGYg
Ym91bmRzXSkgJiYgQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KFsoVUlWaWV3ICopW192aWRl
b1N1YmxheWVyIGRlbGVnYXRlXSB0cmFuc2Zvcm1dKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRp
b25EdXJhdGlvbjowXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNd
OwotICAgIAotICAgIGlmICghQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5tb2RlbFZpZGVvTGF5ZXJG
cmFtZSwgW3NlbGYgYm91bmRzXSkpIHsKLSAgICAgICAgc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFt
ZSA9IFtzZWxmIGJvdW5kc107Ci0gICAgICAgIEFTU0VSVChfZnVsbHNjcmVlbkludGVyZmFjZS0+
bW9kZWwoKSk7Ci0gICAgICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRl
b0xheWVyRnJhbWUoc2VsZi5tb2RlbFZpZGVvTGF5ZXJGcmFtZSk7Ci0gICAgfQotICAgIFsoVUlW
aWV3ICopW192aWRlb1N1YmxheWVyIGRlbGVnYXRlXSBzZXRUcmFuc2Zvcm06Q0dBZmZpbmVUcmFu
c2Zvcm1JZGVudGl0eV07Ci0gICAgCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQot
LSAodm9pZClzZXRWaWRlb0dyYXZpdHk6KE5TU3RyaW5nICopdmlkZW9HcmF2aXR5Ci17Ci0gICAg
X3ZpZGVvR3Jhdml0eSA9IHZpZGVvR3Jhdml0eTsKLSAgICAKLSAgICBpZiAoIVtfYXZQbGF5ZXJD
b250cm9sbGVyIGRlbGVnYXRlXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5ID0gV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAo
dmlkZW9HcmF2aXR5ID09IGdldEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemUoKSkKLSAgICAgICAg
Z3Jhdml0eSA9IFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlS
ZXNpemU7Ci0gICAgaWYgKHZpZGVvR3Jhdml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0KCkpCi0gICAgICAgIGdyYXZpdHkgPSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwotICAgIGVsc2UgaWYgKHZpZGVvR3Jh
dml0eSA9PSBnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCgpKQotICAgICAg
ICBncmF2aXR5ID0gV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdEZpbGw7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAKLSAgICBBU1NFUlQoX2Z1bGxzY3JlZW5JbnRlcmZhY2UtPm1vZGVsKCkpOwotICAg
IF9mdWxsc2NyZWVuSW50ZXJmYWNlLT5tb2RlbCgpLT5zZXRWaWRlb0xheWVyR3Jhdml0eShncmF2
aXR5KTsKLX0KLQotLSAoTlNTdHJpbmcgKil2aWRlb0dyYXZpdHkKLXsKLSAgICByZXR1cm4gX3Zp
ZGVvR3Jhdml0eS5nZXQoKTsKLX0KLQotLSAoQ0dSZWN0KXZpZGVvUmVjdAotewotICAgIGlmIChz
ZWxmLnZpZGVvRGltZW5zaW9ucy53aWR0aCA8PSAwIHx8IHNlbGYudmlkZW9EaW1lbnNpb25zLmhl
aWdodCA8PSAwKQotICAgICAgICByZXR1cm4gc2VsZi5ib3VuZHM7Ci0gICAgCi0gICAgZmxvYXQg
dmlkZW9Bc3BlY3RSYXRpbyA9IHNlbGYudmlkZW9EaW1lbnNpb25zLndpZHRoIC8gc2VsZi52aWRl
b0RpbWVuc2lvbnMuaGVpZ2h0OwotCi0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVz
aXplQXNwZWN0KCkgaXNFcXVhbFRvU3RyaW5nOnNlbGYudmlkZW9HcmF2aXR5XSkKLSAgICAgICAg
cmV0dXJuIGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdCh2aWRlb0FzcGVjdFJh
dGlvLCBzZWxmLmJvdW5kcyk7Ci0gICAgaWYgKFtnZXRBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0RmlsbCgpIGlzRXF1YWxUb1N0cmluZzpzZWxmLnZpZGVvR3Jhdml0eV0pCi0gICAgICAg
IHJldHVybiBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KHZpZGVvQXNwZWN0
UmF0aW8sIHNlbGYuYm91bmRzKTsKLQotICAgIHJldHVybiBzZWxmLmJvdW5kczsKLX0KLQotKyAo
TlNTZXQgKilrZXlQYXRoc0ZvclZhbHVlc0FmZmVjdGluZ1ZpZGVvUmVjdAotewotICAgIHJldHVy
biBbTlNTZXQgc2V0V2l0aE9iamVjdHM6QCJ2aWRlb0RpbWVuc2lvbnMiLCBAInZpZGVvR3Jhdml0
eSIsIG5pbF07Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJBVlBpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXcgOiBVSVZpZXcKLUBlbmQKLQotc3RhdGljIENsYXNzIFdlYkFWUGljdHVy
ZUluUGljdHVyZVBsYXllckxheWVyVmlld19sYXllckNsYXNzKGlkLCBTRUwpCi17Ci0gICAgcmV0
dXJuIFtXZWJBVlBsYXllckxheWVyIGNsYXNzXTsKLX0KLQotc3RhdGljIFdlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyAqYWxsb2NXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXdJbnN0YW5jZSgpCi17Ci0gICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0gbmlsOwot
ICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2Uo
Jm9uY2VUb2tlbiwgXiB7Ci0gICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFp
cihnZXRVSVZpZXdDbGFzcygpLCAiV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3
IiwgMCk7Ci0gICAgICAgIG9iamNfcmVnaXN0ZXJDbGFzc1BhaXIodGhlQ2xhc3MpOwotICAgICAg
ICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFDbGFzcygiV2ViQVZQaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZChtZXRhQ2xhc3Ms
IEBzZWxlY3RvcihsYXllckNsYXNzKSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOwotICAgIH0pOwotICAgIAotICAgIHJldHVybiAo
V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW3RoZUNsYXNzIGFsbG9jXTsK
LX0KLQotQGludGVyZmFjZSBXZWJBVlBsYXllckxheWVyVmlldyA6IF9fQVZQbGF5ZXJMYXllclZp
ZXcKLUBwcm9wZXJ0eSAocmV0YWluKSBVSVZpZXcqIHZpZGVvVmlldzsKLUBlbmQKLQotc3RhdGlj
IENsYXNzIFdlYkFWUGxheWVyTGF5ZXJWaWV3X2xheWVyQ2xhc3MoaWQsIFNFTCkKLXsKLSAgICBy
ZXR1cm4gW1dlYkFWUGxheWVyTGF5ZXIgY2xhc3NdOwotfQotCi1zdGF0aWMgQVZQbGF5ZXJDb250
cm9sbGVyICpXZWJBVlBsYXllckxheWVyVmlld19wbGF5ZXJDb250cm9sbGVyKGlkIGFTZWxmLCBT
RUwpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5ZXIgPSBhU2VsZjsKLSAg
ICBXZWJBVlBsYXllckxheWVyICp3ZWJBVlBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIg
KilbcGxheWVyTGF5ZXIgcGxheWVyTGF5ZXJdOwotICAgIHJldHVybiBbd2ViQVZQbGF5ZXJMYXll
ciBwbGF5ZXJDb250cm9sbGVyXTsKLX0KLQotc3RhdGljIHZvaWQgV2ViQVZQbGF5ZXJMYXllclZp
ZXdfc2V0UGxheWVyQ29udHJvbGxlcihpZCBhU2VsZiwgU0VMLCBBVlBsYXllckNvbnRyb2xsZXIg
KnBsYXllckNvbnRyb2xsZXIpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVyTGF5
ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9
IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0gICAg
W3dlYkFWUGxheWVyTGF5ZXIgc2V0UGxheWVyQ29udHJvbGxlcjogcGxheWVyQ29udHJvbGxlcl07
Ci19Ci0KLXN0YXRpYyBVSVZpZXcgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldyhpZCBh
U2VsZiwgU0VMKQotewotICAgIF9fQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyID0gYVNl
bGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXllciA9IChXZWJBVlBsYXll
ckxheWVyICopW3BsYXllckxheWVyIHBsYXllckxheWVyXTsKLSAgICBDQUxheWVyKiB2aWRlb0xh
eWVyID0gW3dlYkFWUGxheWVyTGF5ZXIgdmlkZW9TdWJsYXllcl07Ci0gICAgaWYgKCF2aWRlb0xh
eWVyIHx8ICF2aWRlb0xheWVyLmRlbGVnYXRlKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChbW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdIGlzS2luZE9mQ2xhc3M6Z2V0VUlWaWV3Q2xhc3Mo
KV0pOwotICAgIHJldHVybiAoVUlWaWV3ICopW3ZpZGVvTGF5ZXIgZGVsZWdhdGVdOwotfQotCi1z
dGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zZXRWaWRlb1ZpZXcoaWQgYVNlbGYsIFNF
TCwgVUlWaWV3ICp2aWRlb1ZpZXcpCi17Ci0gICAgX19BVlBsYXllckxheWVyVmlldyAqcGxheWVy
TGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAqd2ViQVZQbGF5ZXJMYXll
ciA9IChXZWJBVlBsYXllckxheWVyICopW3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07Ci0g
ICAgW3dlYkFWUGxheWVyTGF5ZXIgc2V0VmlkZW9TdWJsYXllcjpbdmlkZW9WaWV3IGxheWVyXV07
Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGxheWVyTGF5ZXJWaWV3X3N0YXJ0Um91dGluZ1ZpZGVv
VG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAg
V2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIFdlYkFW
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJ
blBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXddOwotCi0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5ZXIg
PSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwotICAg
IFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilb
cGlwVmlldyBsYXllcl07Ci0gICAgW3BsYXllckxheWVyIHNldFZpZGVvR3Jhdml0eTpnZXRBVkxh
eWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KCldOwotICAgIFtwaXBQbGF5ZXJMYXllciBzZXRW
aWRlb1N1YmxheWVyOnBsYXllckxheWVyLnZpZGVvU3VibGF5ZXJdOwotICAgIFtwaXBQbGF5ZXJM
YXllciBzZXRWaWRlb0RpbWVuc2lvbnM6cGxheWVyTGF5ZXIudmlkZW9EaW1lbnNpb25zXTsKLSAg
ICBbcGlwUGxheWVyTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OnBsYXllckxheWVyLnZpZGVvR3Jhdml0
eV07Ci0gICAgW3BpcFBsYXllckxheWVyIHNldE1vZGVsVmlkZW9MYXllckZyYW1lOnBsYXllckxh
eWVyLm1vZGVsVmlkZW9MYXllckZyYW1lXTsKLSAgICBbcGlwUGxheWVyTGF5ZXIgc2V0UGxheWVy
Q29udHJvbGxlcjpwbGF5ZXJMYXllci5wbGF5ZXJDb250cm9sbGVyXTsKLSAgICBbcGlwUGxheWVy
TGF5ZXIgc2V0RnVsbHNjcmVlbkludGVyZmFjZTpwbGF5ZXJMYXllci5mdWxsc2NyZWVuSW50ZXJm
YWNlXTsKLSAgICBbcGlwVmlldyBhZGRTdWJ2aWV3OnBsYXllckxheWVyVmlldy52aWRlb1ZpZXdd
OwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBsYXllckxheWVyVmlld19zdG9wUm91dGluZ1ZpZGVv
VG9QaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KGlkIGFTZWxmLCBTRUwpCi17Ci0gICAg
V2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGFTZWxmOwotICAgIGlmIChV
SVZpZXcgKnZpZGVvVmlldyA9IHBsYXllckxheWVyVmlldy52aWRlb1ZpZXcpCi0gICAgICAgIFtw
bGF5ZXJMYXllclZpZXcgYWRkU3Vidmlldzp2aWRlb1ZpZXddOwotICAgIFdlYkFWUGljdHVyZUlu
UGljdHVyZVBsYXllckxheWVyVmlldyAqcGlwVmlldyA9IChXZWJBVlBpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXcgKilbcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJM
YXllclZpZXddOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyID0gKFdlYkFWUGxh
eWVyTGF5ZXIgKilbcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKLSAgICBXZWJBVlBsYXll
ckxheWVyICpwaXBQbGF5ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5
ZXJdOwotICAgIFtwbGF5ZXJMYXllciBzZXRNb2RlbFZpZGVvTGF5ZXJGcmFtZTpwaXBQbGF5ZXJM
YXllci5tb2RlbFZpZGVvTGF5ZXJGcmFtZV07Ci19Ci0KLXN0YXRpYyBXZWJBVlBpY3R1cmVJblBp
Y3R1cmVQbGF5ZXJMYXllclZpZXcgKldlYkFWUGxheWVyTGF5ZXJWaWV3X3BpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXcoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBXZWJBVlBsYXllckxheWVy
VmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gYVNlbGY7Ci0gICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJl
UGxheWVyTGF5ZXJWaWV3ICpwaXBWaWV3ID0gW3BsYXllckxheWVyVmlldyB2YWx1ZUZvcktleTpA
Il9waWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3Il07Ci0gICAgaWYgKCFwaXBWaWV3KSB7
Ci0gICAgICAgIHBpcFZpZXcgPSBbYWxsb2NXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXdJbnN0YW5jZSgpIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVyb107Ci0gICAgICAgIFtwbGF5
ZXJMYXllclZpZXcgc2V0VmFsdWU6cGlwVmlldyBmb3JLZXk6QCJfcGljdHVyZUluUGljdHVyZVBs
YXllckxheWVyVmlldyJdOwotICAgIH0KLSAgICByZXR1cm4gcGlwVmlldzsKLX0KLQotc3RhdGlj
IHZvaWQgV2ViQVZQbGF5ZXJMYXllclZpZXdfZGVhbGxvYyhpZCBhU2VsZiwgU0VMKQotewotICAg
IFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcgPSBhU2VsZjsKLSAgICBSZXRh
aW5QdHI8V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3PiBwaXBWaWV3ID0gYWRv
cHROUyhbcGxheWVyTGF5ZXJWaWV3IHZhbHVlRm9yS2V5OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5
ZXJMYXllclZpZXciXSk7Ci0gICAgW3BsYXllckxheWVyVmlldyBzZXRWYWx1ZTpuaWwgZm9yS2V5
OkAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXciXTsKLSAgICBvYmpjX3N1cGVyIHN1
cGVyQ2xhc3MgeyBwbGF5ZXJMYXllclZpZXcsIGdldF9fQVZQbGF5ZXJMYXllclZpZXdDbGFzcygp
IH07Ci0gICAgYXV0byBzdXBlcl9kZWFsbG9jID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKG9i
amNfc3VwZXIqLCBTRUwpPihvYmpjX21zZ1NlbmRTdXBlcik7Ci0gICAgc3VwZXJfZGVhbGxvYygm
c3VwZXJDbGFzcywgQHNlbGVjdG9yKGRlYWxsb2MpKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gTWV0
aG9kcwotCi1zdGF0aWMgV2ViQVZQbGF5ZXJMYXllclZpZXcgKmFsbG9jV2ViQVZQbGF5ZXJMYXll
clZpZXdJbnN0YW5jZSgpCi17Ci0gICAgc3RhdGljIENsYXNzIHRoZUNsYXNzID0gbmlsOwotICAg
IHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9u
Y2VUb2tlbiwgXiB7Ci0gICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxvY2F0ZUNsYXNzUGFpcihn
ZXRfX0FWUGxheWVyTGF5ZXJWaWV3Q2xhc3MoKSwgIldlYkFWUGxheWVyTGF5ZXJWaWV3IiwgMCk7
Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKGRlYWxsb2MpLCAo
SU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X2RlYWxsb2MsICJ2QDoiKTsKLSAgICAgICAgY2xhc3Nf
YWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0UGxheWVyQ29udHJvbGxlcjopLCAoSU1Q
KVdlYkFWUGxheWVyTGF5ZXJWaWV3X3NldFBsYXllckNvbnRyb2xsZXIsICJ2QDpAIik7Ci0gICAg
ICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBsYXllckNvbnRyb2xsZXIp
LCAoSU1QKVdlYkFWUGxheWVyTGF5ZXJWaWV3X3BsYXllckNvbnRyb2xsZXIsICJAQDoiKTsKLSAg
ICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc2V0VmlkZW9WaWV3Oiks
IChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc2V0VmlkZW9WaWV3LCAidkA6QCIpOwotICAgICAg
ICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcih2aWRlb1ZpZXcpLCAoSU1QKVdl
YkFWUGxheWVyTGF5ZXJWaWV3X3ZpZGVvVmlldywgIkBAOiIpOwotICAgICAgICBjbGFzc19hZGRN
ZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihzdGFydFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGlj
dHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfc3RhcnRSb3V0
aW5nVmlkZW9Ub1BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcsICJ2QDoiKTsKLSAgICAg
ICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2VsZWN0b3Ioc3RvcFJvdXRpbmdWaWRlb1Rv
UGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZp
ZXdfc3RvcFJvdXRpbmdWaWRlb1RvUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldywgInZA
OiIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihwaWN0dXJl
SW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3KSwgKElNUClXZWJBVlBsYXllckxheWVyVmlld19waWN0
dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3LCAiQEA6Iik7Ci0gICAgICAgIAotICAgICAgICBj
bGFzc19hZGRJdmFyKHRoZUNsYXNzLCAiX3BpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXci
LCBzaXplb2YoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopLCBsb2cyKHNp
emVvZihXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKikpLCAiQCIpOwotICAg
ICAgICAKLSAgICAgICAgb2JqY19yZWdpc3RlckNsYXNzUGFpcih0aGVDbGFzcyk7Ci0gICAgICAg
IENsYXNzIG1ldGFDbGFzcyA9IG9iamNfZ2V0TWV0YUNsYXNzKCJXZWJBVlBsYXllckxheWVyVmll
dyIpOwotICAgICAgICBjbGFzc19hZGRNZXRob2QobWV0YUNsYXNzLCBAc2VsZWN0b3IobGF5ZXJD
bGFzcyksIChJTVApV2ViQVZQbGF5ZXJMYXllclZpZXdfbGF5ZXJDbGFzcywgIkBAOiIpOwotICAg
IH0pOwotICAgIHJldHVybiAoV2ViQVZQbGF5ZXJMYXllclZpZXcgKilbdGhlQ2xhc3MgYWxsb2Nd
OwotfQotCi1SZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
QVZLaXQmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLXsKLSAgICBSZWY8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKSk7Ci0gICAg
W2ludGVyZmFjZS0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIHNldEZ1bGxzY3JlZW5J
bnRlcmZhY2U6aW50ZXJmYWNlLnB0cigpXTsKLSAgICByZXR1cm4gaW50ZXJmYWNlOwotfQotCi1X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmIHBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZSkKLSAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZSkKLSAgICAsIG1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZShhZG9w
dE5TKFtbV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0XSkpCi0g
ICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCkKLXsKLX0KLQotV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCgpCi17Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0g
dGhpcy0+cGxheWVyQ29udHJvbGxlcigpOwotICAgIGlmIChwbGF5ZXJDb250cm9sbGVyICYmIHBs
YXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSkKLSAgICAgICAgZXh0ZXJuYWxQ
bGF5YmFja0NoYW5nZWQoZmFsc2UsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBl
Tm9uZSwgIiIpOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotfQotCi1XZWJBVlBsYXll
ckNvbnRyb2xsZXIgKldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwbGF5ZXJDb250
cm9sbGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2Ut
PnBsYXllckNvbnRyb2xsZXIoKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwqIG1vZGVsKQotewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotCi0gICAgbV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbCA9IG1vZGVsOwotCi0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7Ci0K
LSAgICBoYXNWaWRlb0NoYW5nZWQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA/IG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwtPmhhc1ZpZGVvKCkgOiBmYWxzZSk7Ci0gICAgdmlkZW9EaW1lbnNpb25zQ2hh
bmdlZChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID8gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+dmlk
ZW9EaW1lbnNpb25zKCkgOiBGbG9hdFNpemUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBvYnNlcnZlcikKLXsKLSAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciA9IG9ic2VydmVyOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKLXsKLSAg
ICBbcGxheWVyQ29udHJvbGxlcigpIHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRlb107Ci0gICAg
W3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNWaWRlbzpoYXNWaWRlb107Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCi17Ci0gICAgV2ViQVZQbGF5ZXJMYXllciAq
cGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5
ZXJMYXllcl07Ci0KLSAgICBbcGxheWVyTGF5ZXIgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGlt
ZW5zaW9uc107Ci0gICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRDb250ZW50RGltZW5zaW9uczp2
aWRlb0RpbWVuc2lvbnNdOwotICAgIFttX3BsYXllckxheWVyVmlldyBzZXROZWVkc0xheW91dF07
Ci0KLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAo
V2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW21fcGxheWVyTGF5ZXJWaWV3
IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXddOwotICAgIFdlYkFWUGxheWVyTGF5ZXIg
KnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07Ci0g
ICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXllci52aWRlb0Rp
bWVuc2lvbnNdOwotICAgIFtwaXBWaWV3IHNldE5lZWRzTGF5b3V0XTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9v
bCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEhpZGRl
bjplbmFibGVkXTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZl
KCVwKSIsIHRoaXMpOwotICAgIGlmIChtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50
ZXJpbmdGb3JlZ3JvdW5kICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbC0+aXNWaXNpYmxlKCkpIHsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gSWYgd2UgYXJlIGJvdGggaW4gUGlQIGFuZCBpbiBGdWxsc2NyZWVuIChpLmUuLCB2aWEgYXV0
by1QaVApLCBhbmQgd2UgZGlkIG5vdCBzdG9wIGZ1bGxzY3JlZW4gdXBvbiByZXR1cm5pbmcsIGl0
IG11c3QgYmUKLSAgICAvLyBiZWNhdXNlIHRoZSBvcmlnaW5hdGluZyB2aWV3IGlzIG5vdCB2aXNp
YmxlLCBzbyBoaWRlIHRoZSBmdWxsc2NyZWVuIHdpbmRvdy4KLSAgICBpZiAoaXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkIHwgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpIHsKLSAg
ICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVl
bkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzLCB0aGlzXSAoQk9P
TCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAg
ICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsK
LSAgICAgICAgfV07Ci0gICAgfQotfQotCi1AaW50ZXJmYWNlIFVJV2luZG93ICgpCi0tIChCT09M
KV9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3M7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlWaWV3Q29u
dHJvbGxlciAoKQotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgc2V0dGVyPV9zZXRJZ25v
cmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6KSBCT09MIF9pZ25vcmVBcHBTdXBwb3J0ZWRPcmll
bnRhdGlvbnM7Ci1AZW5kCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBs
YXliYWNrKQotewotICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKLQotICAg
IG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrID0gYWxsb3dzUGljdHVyZUluUGljdHVy
ZVBsYXliYWNrOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0
aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgYm9vbCBpc0luUGljdHVyZUluUGljdHVy
ZU1vZGUgPSBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVBpY3R1cmVJblBpY3R1cmUpOwotICAgIG1fbW9kZSA9IG1vZGU7Ci0gICAgbV9wYXJlbnRWaWV3
ID0gcGFyZW50VmlldzsKLSAgICBtX3BhcmVudFdpbmRvdyA9IHBhcmVudFZpZXcud2luZG93Owot
Ci0gICAgaWYgKCFbW3BhcmVudFZpZXcgd2luZG93XSBfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNz
XSkgewotICAgICAgICBpZiAoIW1fd2luZG93KQotICAgICAgICAgICAgbV93aW5kb3cgPSBhZG9w
dE5TKFthbGxvY1VJV2luZG93SW5zdGFuY2UoKSBpbml0V2l0aEZyYW1lOltbZ2V0VUlTY3JlZW5D
bGFzcygpIG1haW5TY3JlZW5dIGJvdW5kc11dKTsKLSAgICAgICAgW21fd2luZG93IHNldEJhY2tn
cm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAgIGlmICghbV92aWV3Q29udHJvbGxl
cikKLSAgICAgICAgICAgIG1fdmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY1VJVmlld0Nv
bnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZp
ZXddIHNldEZyYW1lOlttX3dpbmRvdyBib3VuZHNdXTsKLSAgICAgICAgW21fdmlld0NvbnRyb2xs
ZXIgX3NldElnbm9yZUFwcFN1cHBvcnRlZE9yaWVudGF0aW9uczpZRVNdOwotICAgICAgICBbbV93
aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm1fdmlld0NvbnRyb2xsZXIuZ2V0KCldOwotICAg
ICAgICBbbV93aW5kb3cgc2V0V2luZG93TGV2ZWw6Z2V0VUlUZXh0RWZmZWN0c0JlbmVhdGhTdGF0
dXNCYXJXaW5kb3dMZXZlbCgpICsgMV07Ci0gICAgICAgIFttX3dpbmRvdyBtYWtlS2V5QW5kVmlz
aWJsZV07Ci0gICAgfQotCi0gICAgaWYgKCFtX3BsYXllckxheWVyVmlldykKLSAgICAgICAgbV9w
bGF5ZXJMYXllclZpZXcgPSBhZG9wdE5TKFthbGxvY1dlYkFWUGxheWVyTGF5ZXJWaWV3SW5zdGFu
Y2UoKSBpbml0XSk7Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldEhpZGRlbjpbcGxheWVyQ29u
dHJvbGxlcigpIGlzRXh0ZXJuYWxQbGF5YmFja0FjdGl2ZV1dOwotICAgIFttX3BsYXllckxheWVy
VmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotCi0gICAgaWYgKCFpc0lu
UGljdHVyZUluUGljdHVyZU1vZGUpIHsKLSAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldFZp
ZGVvVmlldzomdmlkZW9WaWV3XTsKLSAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZp
ZXc6JnZpZGVvVmlld107Ci0gICAgfQotCi0gICAgV2ViQVZQbGF5ZXJMYXllciAqcGxheWVyTGF5
ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVttX3BsYXllckxheWVyVmlldyBwbGF5ZXJMYXllcl07
Ci0KLSAgICBbcGxheWVyTGF5ZXIgc2V0TW9kZWxWaWRlb0xheWVyRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCBpbml0aWFsUmVjdC53aWR0aCgpLCBpbml0aWFsUmVjdC5oZWlnaHQoKSldOwotICAgIFtw
bGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6W3BsYXllckNvbnRyb2xsZXIoKSBjb250ZW50
RGltZW5zaW9uc11dOwotICAgIHBsYXllckxheWVyLmZ1bGxzY3JlZW5JbnRlcmZhY2UgPSB0aGlz
OwotCi0gICAgaWYgKCFtX3BsYXllclZpZXdDb250cm9sbGVyKQotICAgICAgICBtX3BsYXllclZp
ZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NBVlBsYXllclZpZXdDb250cm9sbGVySW5zdGFu
Y2UoKSBpbml0V2l0aFBsYXllckxheWVyVmlldzptX3BsYXllckxheWVyVmlldy5nZXQoKV0pOwot
Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5P
XTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBs
YXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyKCldOwotICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHNldERlbGVnYXRlOm1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQo
KV07Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0QWxsb3dzUGljdHVyZUluUGljdHVy
ZVBsYXliYWNrOm1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrXTsKLQotICAgIFtwbGF5
ZXJDb250cm9sbGVyKCkgc2V0UGljdHVyZUluUGljdHVyZVBvc3NpYmxlOm1fYWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrXTsKLQotICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKSB7Ci0gICAg
ICAgIFttX3ZpZXdDb250cm9sbGVyIGFkZENoaWxkVmlld0NvbnRyb2xsZXI6bV9wbGF5ZXJWaWV3
Q29udHJvbGxlci5nZXQoKV07Ci0gICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBhZGRT
dWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07
Ci0KLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFtwYXJlbnRWaWV3
IGNvbnZlcnRSZWN0OmluaXRpYWxSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XS5zdXBlcnZpZXddOwotCi0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNl
dEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgW1ttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhp
YmxlQm90dG9tTWFyZ2luIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVSaWdodE1hcmdpbild
OwotCi0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldE5lZWRzTGF5b3V0XTsK
LSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVkZWRdOwotCi0g
ICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgdGhpc10gewotICAg
ICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVuKCk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbigp
Ci17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZW50ZXJGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0gICAgbV9leGl0Q29tcGxldGVkID0g
ZmFsc2U7Ci0gICAgbV9leGl0UmVxdWVzdGVkID0gZmFsc2U7Ci0gICAgbV9lbnRlclJlcXVlc3Rl
ZCA9IHRydWU7Ci0KLSAgICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgIGVudGVyUGljdHVyZUlu
UGljdHVyZSgpOwotICAgIGVsc2UgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkKLSAgICAgICAgZW50ZXJGdWxsc2NyZWVuU3Rh
bmRhcmQoKTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlclBpY3R1cmVJblBpY3R1
cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmVudGVyUGljdHVyZUluUGljdHVyZSglcCkiLCB0aGlzKTsKLSAgICAKLSAgICBpZiAo
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlUG9zc2libGVdKQotICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdGFydFBpY3R1cmVJblBpY3R1cmVdOwotICAg
IGVsc2UKLSAgICAgICAgZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRh
cmQoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCVwKSIsIHRoaXMpOwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQot
ICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVBY3RpdmVd
KSB7Ci0gICAgICAgIC8vIE5PVEU6IFRoZSBmdWxsc2NyZWVuIG1vZGUgd2lsbCBiZSByZXN0b3Jl
ZCBpbiBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIo
KS4KLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAgPSB0
cnVlOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVy
ZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3RoaXMsIHBy
b3RlY3RlZFRoaXNdIChCT09MIHN1Y2NlZWRlZCwgTlNFcnJvciopIHsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKHN1Y2NlZWRlZCk7Ci0gICAgICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkIC0gbGFtYmRhKCVw
KSAtIHN1Y2NlZWRlZCglcykiLCB0aGlzLCBib29sU3RyaW5nKHN1Y2NlZWRlZCkpOwotICAgICAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsK
LQotICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBt
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfV07
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2Ny
ZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsUmVjdCkKLXsKLSAgICBtX3dhdGNoZG9n
VGltZXIuc3RvcCgpOwotCi0gICAgbV9leGl0UmVxdWVzdGVkID0gdHJ1ZTsKLSAgICBpZiAobV9l
eGl0Q29tcGxldGVkKSB7Ci0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikK
LSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVl
bigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKCVwKSIsIHRo
aXMpOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9s
czpOT107Ci0gICAgCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBb
bV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmZpbmFsUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKLQotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXll
ckxheWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5
ZXJdOwotICAgIGlmIChbcGxheWVyTGF5ZXIgdmlkZW9HcmF2aXR5XSAhPSBnZXRBVkxheWVyVmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0KCkpCi0gICAgICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0dy
YXZpdHk6Z2V0QVZMYXllclZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCgpXTsKLSAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVkZWRdOwotCi0gICAgaWYgKGlzTW9k
ZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0
dXJlKSkgewotICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1Bp
UCA9IGZhbHNlOwotICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotICAgIH0gZWxzZSBp
ZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUgfCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRU
aGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIGNsZWFyTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7Ci0gICAgICAg
ICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICAgICAgfV07Ci0gICAgfSBlbHNl
IGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
ZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRo
aXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAgICAgbV9leGl0Q29tcGxldGVk
ID0gdHJ1ZTsKLQotICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgICAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICAgICAgICAgIFtt
X3BsYXllckxheWVyVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAg
ICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xv
cjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwot
Ci0gICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
cHJvdGVjdGVkVGhpcywgdGhpc10oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
XTsKLSAgICB9OwotfQotCi1AaW50ZXJmYWNlIFVJQXBwbGljYXRpb24gKCkKLS0gKHZvaWQpX3Nl
dFN0YXR1c0Jhck9yaWVudGF0aW9uOihVSUludGVyZmFjZU9yaWVudGF0aW9uKW87Ci1AZW5kCi0K
LUBpbnRlcmZhY2UgVUlXaW5kb3cgKCkKLS0gKFVJSW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJm
YWNlT3JpZW50YXRpb247Ci1AZW5kCi0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlz
KTsKLSAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNd
OwotICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm5pbF07Ci0gICAgICAg
IGlmIChtX3BhcmVudFdpbmRvdykKLSAgICAgICAgICAgIFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNz
KCkgc2hhcmVkQXBwbGljYXRpb25dIF9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjpbbV9wYXJlbnRX
aW5kb3cgaW50ZXJmYWNlT3JpZW50YXRpb25dXTsKLSAgICB9Ci0gICAgCi0gICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOm5pbF07Ci0gICAgCi0gICAgaWYgKGhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkp
Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsK
LSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVTdGFuZGFyZCkpCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2Ny
ZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W10gKEJPT0wsIE5TRXJyb3IgKikgeyB9
XTsKLSAgICAKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1
cGVydmlld107Ci0gICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCi0gICAgICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHJlbW92ZUZyb21QYXJlbnRWaWV3Q29udHJvbGxlcl07Ci0gICAgCi0gICAg
W21fcGxheWVyTGF5ZXJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgIFtbbV92aWV3Q29u
dHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLQotICAgIG1fcGxheWVyTGF5ZXJW
aWV3ID0gbmlsOwotICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgbV93aW5k
b3cgPSBuaWw7Ci0gICAgbV9wYXJlbnRWaWV3ID0gbmlsOwotICAgIG1fcGFyZW50V2luZG93ID0g
bmlsOwotICAgIAotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7Ci0KLSAg
ICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQotewotICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZWwgPSBuaWw7Ci0gICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgPSBuaWw7Ci0gICAgCi0g
ICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKCFt
X2VudGVyUmVxdWVzdGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGhhc01vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVy
ZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCVw
KSIsIHRoaXMpOwotCi0gICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgIFtbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLQotICAgIGlmICh3ZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJl
cXVlc3RlZCkgewotICAgICAgICB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwot
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KQotewotICAg
IExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBh
cmVkVG9SZXR1cm5Ub0lubGluZSglcCkgLSB2aXNpYmxlKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmco
dmlzaWJsZSkpOwotICAgIGlmIChtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7Ci0gICAgICAg
IAotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVu
dFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10uc3VwZXJ2aWV3XTsKLQotICAgICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+
IGNhbGxiYWNrID0gV1RGTW92ZShtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKTsKLSAgICAgICAg
Y2FsbGJhY2sodmlzaWJsZSk7Ci0gICAgfQotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFtwbGF5ZXJDb250cm9sbGVyKCkgaXNQbGF5aW5nXSAmJiBt
X21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRh
cmQgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShXVEY6OkZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCi17Ci0gICAgbV9wcmVwYXJlVG9JbmxpbmVD
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVl
biwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCi17Ci0g
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlk
U3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIG1fc2hvdWxkUmV0dXJuVG9G
dWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91bmQgPSBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdOwotICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwot
Ci0gICAgaWYgKG1fbW9kZSAmIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVN0YW5kYXJkKSB7Ci0gICAgICAgIGlmICghW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGlj
dHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXSkgewotICAgICAg
ICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxT
Y3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3Byb3RlY3RlZFRoaXMsIHRoaXNd
IChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46
WUVTXTsKLSAgICAgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0
SGlkZGVuOllFU107Ci0gICAgICAgICAgICB9XTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgW1ttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotICAgIH0KLQotICAgIGlmIChtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIt
PmRpZEVudGVyRnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZmFpbGVkVG9TdGFy
dFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0gICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0KLSAgICBpZiAoaGFzTW9kZShIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLQotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
KQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci19Ci0KLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wUGljdHVyZUluUGlj
dHVyZSgpCi17Ci0gICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAg
PSBmYWxzZTsKLSAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbkFmdGVyRW50ZXJpbmdGb3Jl
Z3JvdW5kID0gZmFsc2U7Ci0KLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7Ci0g
ICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQpIHx8IG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9w
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICBb
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOk5PXTsKLQotICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5y
ZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSglcCki
LCB0aGlzKTsKLSAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVTdGFuZGFyZCkgfHwgbV9yZXN0b3JpbmdGdWxsc2NyZWVuRm9yUGljdHVyZUlu
UGljdHVyZVN0b3ApIHsKLSAgICAgICAgLy8gQVNTVU1QVElPTjogd2UgYXJlIGV4aXRpbmcgcGlw
IGJlY2F1c2Ugd2UgYXJlIGVudGVyaW5nIGZ1bGxzY3JlZW4KLSAgICAgICAgY2xlYXJNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUp
OwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJv
bHM6WUVTXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZXhpdENvbXBsZXRlZCA9
IHRydWU7Ci0KLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFy
VUlDb2xvcigpXTsKLSAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dy
b3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLQotICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLSAgICAKLSAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRo
Q29tcGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVk
KSkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIo
JXApIiwgdGhpcyk7Ci0gICAgaWYgKG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3Bw
aW5nUGlQIHx8IG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuQWZ0ZXJFbnRlcmluZ0ZvcmVncm91
bmQpIHsKLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaVAg
PSBmYWxzZTsKLSAgICAgICAgbV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5BZnRlckVudGVyaW5n
Rm9yZWdyb3VuZCA9IGZhbHNlOwotICAgICAgICBtX3Jlc3RvcmluZ0Z1bGxzY3JlZW5Gb3JQaWN0
dXJlSW5QaWN0dXJlU3RvcCA9IHRydWU7Ci0KLSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpO
T107Ci0gICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46Tk9d
OwotCi0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbkFuaW1h
dGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wgc3VjY2VzcywgTlNFcnJvciopIHsKLSAg
ICAgICAgICAgIG1fcmVzdG9yaW5nRnVsbHNjcmVlbkZvclBpY3R1cmVJblBpY3R1cmVTdG9wID0g
ZmFsc2U7Ci0gICAgICAgICAgICBzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1
Y2Nlc3MpOwotICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAg
ICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3Jl
ZW4oKTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0g
ICAgUmV0YWluUHRyPGlkPiBzdHJvbmdDb21wbGV0aW9uSGFuZGxlciA9IGFkb3B0TlMoW2NvbXBs
ZXRpb25IYW5kbGVyIGNvcHldKTsKLSAgICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoW3By
b3RlY3RlZFRoaXMsIHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyXShib29sIHJlc3RvcmVkKSAgewot
ICAgICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIgbGFt
YmRhKCVwKSAtIHJlc3RvcmVkKCVzKSIsIHByb3RlY3RlZFRoaXMuZ2V0KCksIGJvb2xTdHJpbmco
cmVzdG9yZWQpKTsKLSAgICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3Rv
cmVkKSA9IHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyLmdldCgpOwotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihyZXN0b3JlZCk7Ci0gICAgfSk7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29uKQotewot
ICAgIGlmICghbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJlSW5QaWN0dXJl
U3RhcnRlZCkgewotICAgICAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUlu
UGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9w
cGluZ1BpUCA9IGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlU3RhbmRhcmQpOwotICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAod2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSAmJiAocmVhc29uID09IEV4aXRG
dWxsU2NyZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkIHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNj
cmVlblJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkKSkKLSAgICAgICAgd2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1c2UoKTsKLQotICAgIEJPT0wgZmluaXNoZWQgPSBy
ZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQgfHwgcmVhc29u
ID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5jaEdlc3R1cmVIYW5kbGVkOwotICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lLCBmaW5pc2hlZCk7Ci0KLSAgICBpZiAoIW1f
d2F0Y2hkb2dUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRP
bmVTaG90KGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwpOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1OT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoKQotewotICAgIExPRyhGdWxsc2NyZWVu
LCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCgl
cCkgLSBubyBleGl0IGZ1bGxzY3JlZW4gcmVzcG9uc2UgaW4gJWdzOyBmb3JjaW5nIGZ1bGxzY3Jl
ZW4gaGlkZGVuLiIsIHRoaXMsIGRlZmF1bHRXYXRjaGRvZ1RpbWVySW50ZXJ2YWwudmFsdWUoKSk7
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNd
OwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAgICBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbmV3TW9kZSA9IG1fbW9kZSB8IG1v
ZGU7Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X21vZGUgPSBuZXdNb2RlOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2RlKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYXJNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdNb2RlID0gbV9tb2Rl
ICYgfm1vZGU7Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX21vZGUgPSBuZXdNb2RlOwotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQot
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9t
b2RlKTsKLX0KLQotI2VuZGlmIC8vIEhBVkUoQVZLSVQpCi0KLWJvb2wgV2ViQ29yZTo6c3VwcG9y
dHNQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSNpZiBQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQp
Ci0gICAgcmV0dXJuIFtnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyQ2xhc3MoKSBpc1Bp
Y3R1cmVJblBpY3R1cmVTdXBwb3J0ZWRdOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41YjgxMmRhNmQ2YTJhY2QwYmI2NWNmYWQ0OTYxMDk4ZWFjNDZiZTJiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
CisKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oIgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0Owor
Y2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWw7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyBmaW5hbAorICAgIDogcHVibGljIFBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZQorICAgICwgcHVibGljIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50CisgICAg
LCBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gY3JlYXRlKFBs
YXliYWNrU2Vzc2lvbk1vZGVsJik7CisgICAgdmlydHVhbCB+UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjKCk7CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkgY29uc3QgeyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsgfQorCisgICAgLy8gUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldE1lZGlh
U3RhdGUoKSBmaW5hbCB7IH0KKworICAgIC8vIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgLypjdXJyZW50
VGltZSovLCBkb3VibGUgLyphbmNob3JUaW1lKi8pIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCAvKmlzUGxheWluZyovLCBmbG9hdCAvKnBsYXliYWNrUmF0
ZSovKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZChjb25zdCBUaW1lUmFuZ2VzJiwgZG91YmxlIC8qbGFzdE1vZGlmaWVkVGltZSovLCBkb3VibGUg
LypsaXZlVXBkYXRlSW50ZXJ2YWwqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgLypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyovLCB1
aW50NjRfdCAvKnNlbGVjdGVkSW5kZXgqLykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hh
bmdlZChib29sIC8qIGVuYWJsZWQgKi8sIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBs
YXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJiAvKiBsb2NhbGl6ZWREZXZpY2VOYW1lICov
KSBmaW5hbDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7CisjaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKnBsYXlCYWNrQ29u
dHJvbHNNYW5hZ2VyKCk7CisjZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luU2Ny
dWJiaW5nKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRTY3J1YmJpbmcoKTsKKworcHJp
dmF0ZToKKyAgICBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uTW9k
ZWwmKTsKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCB7
IG51bGxwdHIgfTsKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisg
ICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIg
IHsgbnVsbHB0ciB9OworCisgICAgdm9pZCB1cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRp
bWluZyhkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJh
Y2tSYXRlLCBib29sIGlzUGxheWluZyk7CisjZW5kaWYKKworfTsKKworfQorCisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWVmMjIzMDY5YTljZWU5ZjExMjUxM2JiZmVmMGIxMmM2
N2IyNGUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKQorCisjaW1wb3J0ICJBVktpdFNQSS5oIgorI2ltcG9ydCAiSW50UmVjdC5oIgor
I2ltcG9ydCAiTWVkaWFTZWxlY3Rpb25PcHRpb24uaCIKKyNpbXBvcnQgIk1lZGlhVGltZUFWRm91
bmRhdGlvbi5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlRp
bWVSYW5nZXMuaCIKKyNpbXBvcnQgIldlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmgiCisjaW1w
b3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CisKKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5r
LmgiCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZLaXQpCitTT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFsdWVUaW1pbmcpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM+IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKFBsYXliYWNrU2Vzc2lv
bk1vZGVsJiBtb2RlbCkKK3sKKyAgICBhdXRvIGludGVyZmFjZSA9IGFkb3B0UmVmKCpuZXcgUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKG1vZGVsKSk7CisgICAgbW9kZWwuYWRkQ2xpZW50KGlu
dGVyZmFjZSk7CisgICAgcmV0dXJuIGludGVyZmFjZTsKK30KKworUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMoUGxheWJhY2tTZXNzaW9uTW9k
ZWwmIG1vZGVsKQorICAgIDogbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCgmbW9kZWwpCit7Cit9CisK
K1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6flBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YygpCit7CisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSBkdXJhdGlvbikKK3sKKyNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgV2ViUGxheWJhY2tDb250cm9sc01h
bmFnZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisKKyAg
ICBjb250cm9sc01hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247CisKKyAgICAvLyBG
SVhNRTogV2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFk
eSwgYnV0IHRoYXQgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUuCisgICAgY29udHJvbHNNYW5hZ2Vy
Lmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKKyAgICBjb250cm9sc01hbmFnZXIuaGFzRW5hYmxlZFZp
ZGVvID0gWUVTOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZHVyYXRpb24pOworI2VuZGlmCit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQo
ZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sKKyNpZiBFTkFCTEUoV0VC
X1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFn
ZXIqIGNvbnRyb2xzTWFuYWdlciA9IHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgdXBk
YXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoY3VycmVudFRpbWUsIGFuY2hvclRpbWUs
IGNvbnRyb2xzTWFuYWdlci5yYXRlLCBjb250cm9sc01hbmFnZXIucGxheWluZyk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjdXJyZW50VGltZSk7CisgICAgVU5VU0VEX1BBUkFNKGFuY2hvclRp
bWUpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRl
Q2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBXZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAg
ICBbY29udHJvbHNNYW5hZ2VyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDogMC5d
OworICAgIFtjb250cm9sc01hbmFnZXIgc2V0UGxheWluZzppc1BsYXlpbmddOworICAgIHVwZGF0
ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgPyBt
X3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIDogMCwgW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdLCBwbGF5YmFja1JhdGUsIGlzUGxheWluZyk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShpc1BsYXlpbmcpOworICAgIFVOVVNFRF9QQVJBTShwbGF5
YmFja1JhdGUpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OjpiZWdpblNjcnViYmluZygpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQorICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwgPyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIDog
MCwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdLCAwLCBmYWxzZSk7
CisjZW5kaWYKKyAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5iZWdpblNjcnViYmluZygpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZW5kU2NydWJiaW5nKCkKK3sK
KyAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5lbmRTY3J1YmJpbmcoKTsKK30KKworI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKK3N0YXRpYyBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHRpbWVSYW5nZXNUb0FycmF5KGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5n
ZXMpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiByYW5nZUFycmF5ID0gYWRvcHRO
UyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFBsYXRm
b3JtVGltZVJhbmdlcyYgcmFuZ2VzID0gdGltZVJhbmdlcy5yYW5nZXMoKTsKKyAgICAgICAgQ01U
aW1lUmFuZ2UgcmFuZ2UgPSBDTVRpbWVSYW5nZU1ha2UodG9DTVRpbWUocmFuZ2VzLnN0YXJ0KGkp
KSwgdG9DTVRpbWUocmFuZ2VzLmVuZChpKSkpOworICAgICAgICBbcmFuZ2VBcnJheSBhZGRPYmpl
Y3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcmFuZ2VBcnJheTsKK30KKyNlbmRpZgorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5n
ZXMsIGRvdWJsZSwgZG91YmxlKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKKyAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRTZWVrYWJsZVRpbWVS
YW5nZXM6dGltZVJhbmdlc1RvQXJyYXkodGltZVJhbmdlcykuZ2V0KCldOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odGltZVJhbmdlcyk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBb
cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczpv
cHRpb25zIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVk
SW5kZXgpXTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOworICAgIFVOVVNFRF9Q
QVJBTShzZWxlY3RlZEluZGV4KTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVj
dG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW3Bs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczpv
cHRpb25zIHdpdGhTZWxlY3RlZEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVk
SW5kZXgpXTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOworICAgIFVOVVNFRF9Q
QVJBTShzZWxlY3RlZEluZGV4KTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
KyAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRBdWRpb01lZGlhU2VsZWN0aW9uSW5k
ZXg6c2VsZWN0ZWRJbmRleF07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4
KTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7Cisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4OnNlbGVjdGVkSW5k
ZXhdOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisjZW5kaWYKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFu
Z2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09O
VFJPTFNfTUFOQUdFUikKKyAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRDYW5Ub2dn
bGVQaWN0dXJlSW5QaWN0dXJlOiFlbmFibGVkXTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVu
YWJsZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpp
bnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhp
cyk7CisgICAgbV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQoreworI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBwbGF5QmFja0NvbnRy
b2xzTWFuYWdlcigpOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisKK1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4g
bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKFdlYlBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyICptYW5hZ2VyKQoreworICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgPSBtYW5h
Z2VyOworCisgICAgaWYgKCFtYW5hZ2VyIHx8ICFtX3BsYXliYWNrU2Vzc2lvbk1vZGVsKQorICAg
ICAgICByZXR1cm47CisKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW21h
bmFnZXIgcmF0ZV0gPyBOQU4gOiBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVw
dGltZV07CisgICAgbWFuYWdlci50aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFs
dWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+Y3VycmVudFRp
bWUoKSBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07CisgICAgZG91Ymxl
IGR1cmF0aW9uID0gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+ZHVyYXRpb24oKTsKKyAgICBtYW5h
Z2VyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIG1hbmFnZXIuaGFzRW5hYmxlZEF1
ZGlvID0gZHVyYXRpb24gPiAwOworICAgIG1hbmFnZXIuaGFzRW5hYmxlZFZpZGVvID0gZHVyYXRp
b24gPiAwOworICAgIG1hbmFnZXIucmF0ZSA9IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxh
eWluZygpID8gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+cGxheWJhY2tSYXRlKCkgOiAwLjsKKyAg
ICBtYW5hZ2VyLnNlZWthYmxlVGltZVJhbmdlcyA9IHRpbWVSYW5nZXNUb0FycmF5KG1fcGxheWJh
Y2tTZXNzaW9uTW9kZWwtPnNlZWthYmxlUmFuZ2VzKCkpLmdldCgpOworICAgIG1hbmFnZXIuY2Fu
VG9nZ2xlUGxheWJhY2sgPSBZRVM7CisgICAgbWFuYWdlci5wbGF5aW5nID0gbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbC0+aXNQbGF5aW5nKCk7CisgICAgW21hbmFnZXIgc2V0QXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnM6bV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsLT5hdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpKV07CisgICAgW21hbmFn
ZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vzc2lvbk1vZGVs
LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGlj
X2Nhc3Q8TlNVSW50ZWdlcj4obV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+bGVnaWJsZU1lZGlhU2Vs
ZWN0ZWRJbmRleCgpKV07Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjp1
cGRhdGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclRpbWluZyhkb3VibGUgY3VycmVudFRpbWUsIGRv
dWJsZSBhbmNob3JUaW1lLCBkb3VibGUgcGxheWJhY2tSYXRlLCBib29sIGlzUGxheWluZykKK3sK
KyAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IHBsYXlCYWNrQ29udHJv
bHNNYW5hZ2VyKCk7CisgICAgaWYgKCFtYW5hZ2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBQ
bGF5YmFja1Nlc3Npb25Nb2RlbCAqbW9kZWwgPSBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpOworICAg
IGlmICghbW9kZWwpCisgICAgICAgIHJldHVybjsKKworICAgIGRvdWJsZSBlZmZlY3RpdmVBbmNo
b3JUaW1lID0gcGxheWJhY2tSYXRlID8gYW5jaG9yVGltZSA6IE5BTjsKKyAgICBkb3VibGUgZWZm
ZWN0aXZlUGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOworICAgIGlmICghaXNQbGF5aW5nCisg
ICAgICAgIHx8IG1vZGVsLT5pc1NjcnViYmluZygpCisgICAgICAgIHx8IChtYW5hZ2VyLnJhdGUg
PiAwICYmIG1vZGVsLT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCkgPj0gY3VycmVudFRpbWUpCisgICAg
ICAgIHx8IChtYW5hZ2VyLnJhdGUgPCAwICYmIG1vZGVsLT5wbGF5YmFja1N0YXJ0ZWRUaW1lKCkg
PD0gY3VycmVudFRpbWUpKQorICAgICAgICBlZmZlY3RpdmVQbGF5YmFja1JhdGUgPSAwOworCisg
ICAgbWFuYWdlci50aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFsdWVUaW1pbmdX
aXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUgYW5jaG9yVGltZVN0YW1wOmVmZmVjdGl2ZUFuY2hv
clRpbWUgcmF0ZTplZmZlY3RpdmVQbGF5YmFja1JhdGVdOworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorCit9CisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xYzc0Yjg0OGZhZjliMjkwZWVmODZhNzI5MDJiNjMwZGRkYmVjMThlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKworI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnRFbnVtcy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIgorI2luY2x1ZGUgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCisjaW5jbHVkZSAiVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworT0JK
Q19DTEFTUyBOU1dpbmRvdzsKK09CSkNfQ0xBU1MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjT2JqQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEZs
b2F0U2l6ZTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKK2NsYXNzIFZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMKKyAgICA6IHB1YmxpYyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENs
aWVudAorICAgICwgcHJpdmF0ZSBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgICwgcHVi
bGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjPiB7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gY3JlYXRlKFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
KHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5WaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMoKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogdmlkZW9G
dWxsc2NyZWVuTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9
CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3Qg
eyByZXR1cm4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbk1vZGVsKFZp
ZGVvRnVsbHNjcmVlbk1vZGVsKik7CisgICAgVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIq
IHZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXI7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKik7CisK
KyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
ICBlbmFibGVkLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisKKyAgICAv
LyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFz
VmlkZW9DaGFuZ2VkKGJvb2wpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlkZW9E
aW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0dXBGdWxsc2NyZWVuKE5TVmlldyYgbGF5ZXJIb3N0ZWRWaWV3LCBjb25z
dCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdywgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmVQbGF5YmFjayk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbnRlckZ1bGxzY3JlZW4o
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3Qm
IGZpbmFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdyk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
ZWFudXBGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CisgICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkgeyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25z
dCBJbnRSZWN0JiBpbmxpbmVSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGVuc3VyZUNvbnRyb2xzTWFuYWdlcigpOworCisgICAgSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBt
X21vZGU7IH0KKyAgICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSAmIG1vZGU7IH0KKyAgICBi
b29sIGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09IG1vZGU7IH0KKyAgICB2b2lkIHNldE1vZGUoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGNsZWFy
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworCisgICAg
Ym9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7CisKKyAgICBi
b29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkgeyB9
CisKKyAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpD
ICp2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCk7CisKK3ByaXZhdGU6CisgICAgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYpOworICAg
IFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlOworICAgIFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsg
bnVsbHB0ciB9OworICAgIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlciB7IG51bGxwdHIgfTsKKyAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9tb2RlIHsgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OworICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWNPYmpDPiBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakM7Cit9Owor
Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTQwZTM5Y2Jh
ZGExNGVlYzA5YmQ5MjA0MWI3ZWI0ODlmMjRmNmJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQpAQCAt
MCwwICsxLDU3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkKKworI2ltcG9ydCAiQVZLaXRTUEkuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgorI2ltcG9y
dCAiUElQU1BJLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKKyNp
bXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgorI2ltcG9ydCAiV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4K
KworI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19P
UFRJT05BTChBVktpdCkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRp
bWluZykKKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKFBJUCkKK1NPRlRf
TElOS19DTEFTU19PUFRJT05BTChQSVAsIFBJUFZpZXdDb250cm9sbGVyKQorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworQGNsYXNzIFdlYlZpZGVvVmlld0NvbnRhaW5lcjsKKworQHByb3Rv
Y29sIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIDxOU09iamVjdD4KKworLSAodm9pZCli
b3VuZHNEaWRDaGFuZ2VGb3JWaWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5l
ciAqKXZpZGVvVmlld0NvbnRhaW5lcjsKKy0gKHZvaWQpc3VwZXJ2aWV3RGlkQ2hhbmdlRm9yVmlk
ZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2aWRlb1ZpZXdDb250YWlu
ZXI7CisKK0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb1ZpZXdDb250YWluZXIgOiBOU1ZpZXcg
eworICAgIGlkIDxXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZT4gX3ZpZGVvVmlld0NvbnRh
aW5lckRlbGVnYXRlOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpZCA8V2Vi
VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb1ZpZXdDb250YWluZXIKKworQHN5bnRo
ZXNpemUgdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU9X3ZpZGVvVmlld0NvbnRhaW5lckRlbGVn
YXRlOworCistICh2b2lkKXJlc2l6ZVdpdGhPbGRTdXBlcnZpZXdTaXplOihOU1NpemUpb2xkQm91
bmRzU2l6ZQoreworICAgIFtzdXBlciByZXNpemVXaXRoT2xkU3VwZXJ2aWV3U2l6ZTpvbGRCb3Vu
ZHNTaXplXTsKKworICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUgYm91bmRzRGlkQ2hh
bmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOnNlbGZdOworfQorCistICh2b2lkKXZpZXdEaWRNb3Zl
VG9TdXBlcnZpZXcKK3sKKyAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1N1cGVydmlld107CisKKyAg
ICBbX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIHN1cGVydmlld0RpZENoYW5nZUZvclZpZGVv
Vmlld0NvbnRhaW5lcjpzZWxmXTsKK30KKworQGVuZAorCitlbnVtIGNsYXNzIFBJUFN0YXRlIHsK
KyAgICBOb3RJblBJUCwKKyAgICBJblBJUCwKKyAgICBFeGl0aW5nUElQCit9OworCitAaW50ZXJm
YWNlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgOiBOU09iamVjdCA8UElQVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSwgV2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IHsKKyAg
ICBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMqIF92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM7CisgICAgTlNTaXplIF92aWRlb0RpbWVuc2lvbnM7CisgICAgUmV0YWluUHRy
PFBJUFZpZXdDb250cm9sbGVyPiBfcGlwVmlld0NvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPE5T
Vmlld0NvbnRyb2xsZXI+IF92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyOworICAgIFJldGFp
blB0cjxXZWJWaWRlb1ZpZXdDb250YWluZXI+IF92aWRlb1ZpZXdDb250YWluZXI7CisgICAgUElQ
U3RhdGUgX3BpcFN0YXRlOworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gX3JldHVybmluZ1dpbmRv
dzsKKyAgICBOU1JlY3QgX3JldHVybmluZ1JlY3Q7CisgICAgQk9PTCBfcGxheWluZzsKKyAgICBC
T09MIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUDsKKyAgICBCT09MIF9leGl0aW5nVG9TdGFuZGFyZEZ1
bGxzY3JlZW47Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzooV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil2aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM7CistICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGU7
CistICh2b2lkKWludmFsaWRhdGU7CisKKy8vIFRyYWNraW5nIHZpZGVvIHBsYXliYWNrIHN0YXRl
CitAcHJvcGVydHkgKG5vbmF0b21pYykgTlNTaXplIHZpZGVvRGltZW5zaW9uczsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNQbGF5aW5nKSBCT09MIHBsYXlpbmc7CistICh2b2lkKXVw
ZGF0ZUlzUGxheWluZzooQk9PTClpc1BsYXlpbmcgbmV3UGxheWJhY2tSYXRlOihmbG9hdClwbGF5
YmFja1JhdGU7CisKKy8vIEhhbmRsaW5nIFBJUCB0cmFuc2l0aW9ucworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBCT09MIGRpZFJlcXVlc3RFeGl0aW5nUElQOworQHByb3BlcnR5IChu
b25hdG9taWMsIGdldHRlcj1pc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikgQk9PTCBleGl0
aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47CisKKy0gKHZvaWQpc2V0VXBQSVBGb3JWaWRlb1ZpZXc6
KE5TVmlldyAqKXZpZGVvVmlldyB3aXRoRnJhbWU6KE5TUmVjdClmcmFtZSBpbldpbmRvdzooTlNX
aW5kb3cgKil3aW5kb3c7CistICh2b2lkKWVudGVyUElQOworLSAodm9pZClleGl0UElQOworLSAo
dm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpcmVjdCBpbldpbmRvdzooTlNXaW5k
b3cgKil3aW5kb3c7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hY09iakMKKworQHN5bnRoZXNpemUgcGxheWluZz1fcGxheWluZzsKK0BzeW50
aGVzaXplIHZpZGVvRGltZW5zaW9ucz1fdmlkZW9EaW1lbnNpb25zOworQHN5bnRoZXNpemUgZGlk
UmVxdWVzdEV4aXRpbmdQSVA9X2RpZFJlcXVlc3RFeGl0aW5nUElQOworQHN5bnRoZXNpemUgZXhp
dGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuPV9leGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW47CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzooV2Vi
Q29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKil2aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSB2aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM7CisgICAgX3BpcFN0YXRlID0gUElQU3RhdGU6Ok5vdEluUElQOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZUZ1bGxzY3JlZW5TdGF0ZQor
eworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBfcGlwVmll
d0NvbnRyb2xsZXIgPSBuaWw7CisgICAgW192aWRlb1ZpZXdDb250YWluZXIgcmVtb3ZlRnJvbVN1
cGVydmlld107CisgICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0VmlkZW9WaWV3Q29udGFpbmVy
RGVsZWdhdGU6bmlsXTsKKyAgICBfdmlkZW9WaWV3Q29udGFpbmVyID0gbmlsOworICAgIF92aWRl
b1ZpZXdDb250YWluZXJDb250cm9sbGVyID0gbmlsOworICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRl
OjpOb3RJblBJUDsKKyAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBOTzsKKyAgICBfZXhpdGlu
Z1RvU3RhbmRhcmRGdWxsc2NyZWVuID0gTk87CisgICAgX3JldHVybmluZ1dpbmRvdyA9IG5pbDsK
KyAgICBfcmV0dXJuaW5nUmVjdCA9IE5TWmVyb1JlY3Q7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0
ZQoreworICAgIFtzZWxmIGludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGVdOworICAgIF92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMgPSBudWxscHRyOworICAgIF92aWRlb0RpbWVuc2lvbnMgPSBO
U1plcm9TaXplOworfQorCistICh2b2lkKXVwZGF0ZUlzUGxheWluZzooQk9PTClpc1BsYXlpbmcg
bmV3UGxheWJhY2tSYXRlOihmbG9hdClwbGF5YmFja1JhdGUKK3sKKyAgICBfcGxheWluZyA9IGlz
UGxheWluZyAmJiBwbGF5YmFja1JhdGU7CisKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFBs
YXlpbmc6X3BsYXlpbmddOworfQorCistICh2b2lkKXNldFZpZGVvRGltZW5zaW9uczooTlNTaXpl
KXZpZGVvRGltZW5zaW9ucworeworICAgIF92aWRlb0RpbWVuc2lvbnMgPSB2aWRlb0RpbWVuc2lv
bnM7CisKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldEFzcGVjdFJhdGlvOl92aWRlb0RpbWVu
c2lvbnNdOworfQorCistICh2b2lkKXNldFVwUElQRm9yVmlkZW9WaWV3OihOU1ZpZXcgKil2aWRl
b1ZpZXcgd2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93
Cit7CisgICAgQVNTRVJUKCFfcGlwVmlld0NvbnRyb2xsZXIpOworICAgIEFTU0VSVCghX3ZpZGVv
Vmlld0NvbnRhaW5lckNvbnRyb2xsZXIpOworICAgIEFTU0VSVCghX3ZpZGVvVmlld0NvbnRhaW5l
cik7CisKKyAgICBfcGlwVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY1BJUFZpZXdDb250
cm9sbGVySW5zdGFuY2UoKSBpbml0XSk7CisgICAgW19waXBWaWV3Q29udHJvbGxlciBzZXREZWxl
Z2F0ZTpzZWxmXTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFVzZXJDYW5SZXNpemU6WUVT
XTsKKyAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFBsYXlpbmc6X3BsYXlpbmddOworICAgIFtz
ZWxmIHNldFZpZGVvRGltZW5zaW9uczpOU0VxdWFsU2l6ZXMoX3ZpZGVvRGltZW5zaW9ucywgTlNa
ZXJvU2l6ZSkgPyBmcmFtZS5zaXplIDogX3ZpZGVvRGltZW5zaW9uc107CisgICAgaWYgKF92aWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+
dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKKyAgICAgICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9G
dWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdEZpbGwpOworCisgICAgX3Zp
ZGVvVmlld0NvbnRhaW5lciA9IGFkb3B0TlMoW1tXZWJWaWRlb1ZpZXdDb250YWluZXIgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6ZnJhbWVdKTsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBzZXRWaWRl
b1ZpZXdDb250YWluZXJEZWxlZ2F0ZTpzZWxmXTsKKyAgICBbX3ZpZGVvVmlld0NvbnRhaW5lciBh
ZGRTdWJ2aWV3OnZpZGVvVmlld107CisgICAgdmlkZW9WaWV3LmZyYW1lID0gW192aWRlb1ZpZXdD
b250YWluZXIgYm91bmRzXTsKKyAgICB2aWRlb1ZpZXcuYXV0b3Jlc2l6aW5nTWFzayA9IE5TVmll
d1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGU7CisKKyAgICBfdmlkZW9WaWV3Q29u
dGFpbmVyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tOU1ZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0
XSk7CisgICAgW192aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHNldFZpZXc6X3ZpZGVvVmll
d0NvbnRhaW5lci5nZXQoKV07CisgICAgW3dpbmRvdy5jb250ZW50VmlldyBhZGRTdWJ2aWV3Ol92
aWRlb1ZpZXdDb250YWluZXIuZ2V0KCkgcG9zaXRpb25lZDpOU1dpbmRvd0Fib3ZlIHJlbGF0aXZl
VG86bmlsXTsKK30KKworLSAodm9pZCllbnRlclBJUAoreworICAgIGlmIChfcGlwU3RhdGUgPT0g
UElQU3RhdGU6OkluUElQKQorICAgICAgICByZXR1cm47CisKKyAgICBbX3ZpZGVvVmlld0NvbnRh
aW5lckNvbnRyb2xsZXIgdmlld10ubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gQ0dDb2xvckdldENv
bnN0YW50Q29sb3Ioa0NHQ29sb3JCbGFjayk7CisgICAgW19waXBWaWV3Q29udHJvbGxlciBwcmVz
ZW50Vmlld0NvbnRyb2xsZXJBc1BpY3R1cmVJblBpY3R1cmU6X3ZpZGVvVmlld0NvbnRhaW5lckNv
bnRyb2xsZXIuZ2V0KCldOworICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpJblBJUDsKK30KKwor
LSAodm9pZClleGl0UElQCit7CisgICAgaWYgKF9waXBTdGF0ZSAhPSBQSVBTdGF0ZTo6SW5QSVAg
fHwgIV9waXBWaWV3Q29udHJvbGxlciB8fCAhX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIF9kaWRSZXF1ZXN0RXhpdGluZ1BJUCA9IFlFUzsKKyAg
ICBbX3ZpZGVvVmlld0NvbnRhaW5lckNvbnRyb2xsZXIgdmlld10ubGF5ZXIuYmFja2dyb3VuZENv
bG9yID0gQ0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JDbGVhcik7CisgICAgW19waXBW
aWV3Q29udHJvbGxlciBkaXNtaXNzVmlld0NvbnRyb2xsZXI6X3ZpZGVvVmlld0NvbnRhaW5lckNv
bnRyb2xsZXIuZ2V0KCldOworICAgIF9waXBTdGF0ZSA9IFBJUFN0YXRlOjpFeGl0aW5nUElQOwor
fQorCistICh2b2lkKWV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6KE5TUmVjdClyZWN0IGluV2luZG93
OihOU1dpbmRvdyAqKXdpbmRvdworeworICAgIF9yZXR1cm5pbmdXaW5kb3cgPSB3aW5kb3c7Cisg
ICAgX3JldHVybmluZ1JlY3QgPSByZWN0OworICAgIAorICAgIFtfcGlwVmlld0NvbnRyb2xsZXIg
c2V0UmVwbGFjZW1lbnRSZWN0OnJlY3RdOworICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0UmVw
bGFjZW1lbnRXaW5kb3c6d2luZG93XTsKKworICAgIFtzZWxmIGV4aXRQSVBdOworfQorCisvLyBX
ZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZQorCistICh2b2lkKWJvdW5kc0RpZENoYW5nZUZv
clZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29u
dGFpbmVyCit7CisgICAgaWYgKCFfdmlkZW9WaWV3Q29udGFpbmVyIHx8ICFfcGlwVmlld0NvbnRy
b2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9VTlVTRUQodmlkZW9WaWV3Q29u
dGFpbmVyLCB2aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7CisKKyAg
ICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKQorICAgICAgICBfdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpLT5zZXRWaWRlb0xheWVyRnJh
bWUoW192aWRlb1ZpZXdDb250YWluZXIgYm91bmRzXSk7Cit9CisKKy0gKHZvaWQpc3VwZXJ2aWV3
RGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250YWluZXIgKil2
aWRlb1ZpZXdDb250YWluZXIKK3sKKyAgICBpZiAoIV92aWRlb1ZpZXdDb250YWluZXIgfHwgIV9w
aXBWaWV3Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHZpZGVvVmll
d0NvbnRhaW5lciA9PSBfdmlkZW9WaWV3Q29udGFpbmVyKTsKKworICAgIGlmICghW3ZpZGVvVmll
d0NvbnRhaW5lciBpc0Rlc2NlbmRhbnRPZjpbX3BpcFZpZXdDb250cm9sbGVyIHZpZXddXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gT25jZSB0aGUgdmlldyBpcyBtb3ZlZCBpbnRvIHRoZSBw
aXAgdmlldywgbWFrZSBzdXJlIGl0IHJlc2l6ZXMgd2l0aCB0aGUgcGlwIHZpZXcuCisgICAgdmlk
ZW9WaWV3Q29udGFpbmVyLmZyYW1lID0gW3ZpZGVvVmlld0NvbnRhaW5lciBzdXBlcnZpZXddLmJv
dW5kczsKKyAgICB2aWRlb1ZpZXdDb250YWluZXIuYXV0b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dp
ZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGU7Cit9CisKKy8vIFBJUFZpZXdDb250cm9s
bGVyRGVsZWdhdGUKKworLSAoQk9PTClwaXBTaG91bGRDbG9zZTooUElQVmlld0NvbnRyb2xsZXIg
KilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxl
cik7CisKKyAgICBpZiAoIV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgfHwgIV92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkpCisg
ICAgICAgIHJldHVybiBZRVM7CisKKyAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBZRVM7Cisg
ICAgX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIoKS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7CisKKyAgICByZXR1cm4gTk87
Cit9CisKKy0gKHZvaWQpcGlwRGlkQ2xvc2U6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCit7Cisg
ICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOworCisgICAg
aWYgKF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKSAmJiBfdmlkZW9WaWV3Q29udGFpbmVyICYm
IF9yZXR1cm5pbmdXaW5kb3cgJiYgIU5TRXF1YWxSZWN0cyhfcmV0dXJuaW5nUmVjdCwgTlNaZXJv
UmVjdCkpIHsKKyAgICAgICAgW05TQW5pbWF0aW9uQ29udGV4dCBydW5BbmltYXRpb25Hcm91cDpe
KE5TQW5pbWF0aW9uQ29udGV4dCAqY29udGV4dCkgeworICAgICAgICAgICAgY29udGV4dC5hbGxv
d3NJbXBsaWNpdEFuaW1hdGlvbiA9IE5POworICAgICAgICAgICAgW192aWRlb1ZpZXdDb250YWlu
ZXIgc2V0RnJhbWU6X3JldHVybmluZ1JlY3RdOworICAgICAgICAgICAgX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckZyYW1l
KFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOworICAgICAgICAgICAgX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy0+dmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0VmlkZW9MYXllckdy
YXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7CisK
KyAgICAgICAgICAgIFtbX3JldHVybmluZ1dpbmRvdyBjb250ZW50Vmlld10gYWRkU3Vidmlldzpf
dmlkZW9WaWV3Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxhdGl2
ZVRvOm5pbF07CisgICAgICAgIH0gY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB9CisKKyAg
ICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYykgeworICAgICAgICBpZiAoIXNlbGYu
aXNFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW4pIHsKKyAgICAgICAgICAgIGlmIChWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCogdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBfdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5Nb2RlbCgpKSB7CisgICAgICAgICAgICAgICAgdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICAgICAgICAgICAgICB2aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkoVmlkZW9GdWxsc2NyZWVuTW9kZWw6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5jbGVhck1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisKKyAg
ICAgICAgaWYgKFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBmdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgPSBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT52aWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcigpKQorICAgICAgICAgICAgZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRFeGl0RnVsbHNjcmVlbigpOworICAgIH0KK30KKworLSAodm9pZClwaXBBY3Rpb25QbGF5OihQ
SVBWaWV3Q29udHJvbGxlciAqKXBpcAoreworICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0g
X3BpcFZpZXdDb250cm9sbGVyKTsKKworICAgIGlmIChfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjICYmIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkpCisgICAgICAgIF92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lv
bk1vZGVsKCktPnBsYXkoKTsKK30KKworLSAodm9pZClwaXBBY3Rpb25QYXVzZTooUElQVmlld0Nv
bnRyb2xsZXIgKilwaXAKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3
Q29udHJvbGxlcik7CisKKyAgICBpZiAoX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBf
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQorICAg
ICAgICBfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgp
LT5wYXVzZSgpOworfQorCistICh2b2lkKXBpcEFjdGlvblN0b3A6KFBJUFZpZXdDb250cm9sbGVy
ICopcGlwCit7CisgICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xs
ZXIpOworCisgICAgaWYgKCFfdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1v
ZGVsID0gX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwo
KSkKKyAgICAgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnBhdXNlKCk7CisKKyAgICAvLyBGSVhN
RSAyNTA5NjE3MDogU2hvdWxkIGFuaW1hdGUgb25seSBpZiB0aGUgcGFnZSB3aXRoIHRoZSB2aWRl
byBpcyB1bm9ic2N1cmVkLiBGb3Igbm93LCBhbHdheXMgY2xvc2Ugd2l0aG91dCBhbmltYXRpb24u
CisgICAgW3NlbGYgZXhpdFBJUF07Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
YyhQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMmIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkK
KyAgICA6IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKHBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSkKK3sKKyAgICBBU1NFUlQobV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vz
c2lvbk1vZGVsKCkpOworICAgIGF1dG8gbW9kZWwgPSBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKTsKKyAgICBtb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsK
KyAgICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzptb2Rl
bC0+aXNQbGF5aW5nKCkgbmV3UGxheWJhY2tSYXRlOm1vZGVsLT5wbGF5YmFja1JhdGUoKV07Cit9
CisKK1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6flZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYygpCit7CisgICAgaWYgKG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nl
c3Npb25Nb2RlbCgpKQorICAgICAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICBpZiAobV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVtb3ZlQ2xp
ZW50KCp0aGlzKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldFZp
ZGVvRnVsbHNjcmVlbk1vZGVsKFZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKK3sKKyAgICBp
ZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbW9k
ZWw7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwtPmFkZENsaWVudCgqdGhpcyk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjOjpzZXRWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCit7CisgICAgbV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIgPSBvYnNlcnZlcjsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWM6OnNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5l
d01vZGUgPSBtX21vZGUgfCBtb2RlOworICAgIGlmIChtX21vZGUgPT0gbmV3TW9kZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9tb2RlID0gbmV3TW9kZTsKKyAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKG1fbW9kZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG5l
d01vZGUgPSBtX21vZGUgJiB+bW9kZTsKKyAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbW9kZSA9IG5ld01vZGU7CisgICAgaWYgKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZChtX21vZGUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6cmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAg
ICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHVwZGF0ZUlzUGxheWluZzppc1BsYXlp
bmcgbmV3UGxheWJhY2tSYXRlOnBsYXliYWNrUmF0ZV07Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjOjplbnN1cmVDb250cm9sc01hbmFnZXIoKQoreworICAgIG1fcGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlLT5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKK30KKworV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjT2JqQyAqVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Ojp2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCkKK3sKKyAgICBpZiAoIW1fd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlT2JqQykKKyAgICAgICAgbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDID0gYWRvcHROUyhbW1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMg
YWxsb2NdIGluaXRXaXRoVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOnRoaXNdKTsKKworICAg
IHJldHVybiBtX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMuZ2V0KCk7Cit9CisKK3Zv
aWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXR1cEZ1bGxzY3JlZW4oTlNWaWV3JiBs
YXllckhvc3RlZFZpZXcsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBOU1dpbmRvdyAqcGFy
ZW50V2luZG93LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spCit7CisgICAgTE9HKEZ1bGxz
Y3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnNldHVwRnVsbHNjcmVlbiglcCks
IGluaXRpYWxSZWN0OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCwgbW9kZTolZCIs
IHRoaXMsIGluaXRpYWxSZWN0LngoKSwgaW5pdGlhbFJlY3QueSgpLCBpbml0aWFsUmVjdC53aWR0
aCgpLCBpbml0aWFsUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93LCBtb2RlKTsKKworICAgIFVO
VVNFRF9QQVJBTShhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOworICAgIEFTU0VSVCht
b2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJ
blBpY3R1cmUpOworCisgICAgbV9tb2RlID0gbW9kZTsKKworICAgIFt2aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VPYmpDKCkgc2V0VXBQSVBGb3JWaWRlb1ZpZXc6JmxheWVySG9zdGVkVmlldyB3aXRo
RnJhbWU6KE5TUmVjdClpbml0aWFsUmVjdCBpbldpbmRvdzpwYXJlbnRXaW5kb3ddOworCisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVk
VGhpcywgdGhpc10geworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisg
ICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkU2V0dXBGdWxsc2NyZWVu
KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjplbnRl
ckZ1bGxzY3JlZW4oKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjplbnRlckZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CisKKyAgICBpZiAobW9kZSgp
ID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBp
Y3R1cmUpIHsKKyAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBlbnRl
clBJUF07CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAg
ICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIo
KSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOllFU107CisjZW5kaWYKKworICAgICAgICBpZiAo
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisgICAgfQorfQorCit2b2lkIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgSW50UmVjdCYgZmlu
YWxSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2luZG93KQoreworICAgIExPRyhGdWxsc2NyZWVuLCAi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleGl0RnVsbHNjcmVlbiglcCksIGZpbmFsUmVj
dDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRXaW5kb3c6JXAiLCB0aGlzLCBmaW5hbFJlY3QueCgp
LCBmaW5hbFJlY3QueSgpLCBmaW5hbFJlY3Qud2lkdGgoKSwgZmluYWxSZWN0LmhlaWdodCgpLCBw
YXJlbnRXaW5kb3cpOworCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VS
KQorICAgIFttX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFn
ZXIoKSBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKKyNlbmRpZgorCisgICAgaWYgKFtt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZGlkUmVxdWVzdEV4aXRpbmdQSVBdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZmluYWxSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
W21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKKyAgICBlbHNlCisg
ICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGlu
Z1RvUmVjdDpmaW5hbFJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRv
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sK
KyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXhpdEZ1
bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2RlKCVwKSwgbW9kZTolZCIsIHRoaXMsIG1vZGUp
OworCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFttX3Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRQaWN0
dXJlSW5QaWN0dXJlQWN0aXZlOk5PXTsKKyNlbmRpZgorCisgICAgaWYgKFttX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU9iakMgZGlkUmVxdWVzdEV4aXRpbmdQSVBdKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIGlzRXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuID0gbW9kZSA9PSBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZDsKKyAgICAv
LyBPbiBNYWMsIHN0YW5kYXJkIGZ1bGxzY3JlZW4gaXMgaGFuZGxlZCBieSB0aGUgRnVsbHNjcmVl
biBBUEkgYW5kIG5vdCBieSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLgorICAgIC8vIEp1c3QgdXBk
YXRlIG1fbW9kZSBkaXJlY3RseSB0byBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGVTdGFuZGFyZCBpbiB0aGF0IGNhc2UgdG8ga2VlcAorICAgIC8vIG1fbW9kZSBpbiBz
eW5jIHdpdGggdGhlIGZ1bGxzY3JlZW4gbW9kZSBpbiBIVE1MTWVkaWFFbGVtZW50LgorICAgIGlm
IChpc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbikKKyAgICAgICAgbV9tb2RlID0gSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQ7CisKKyAgICBbbV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIHNldEV4aXRpbmdUb1N0YW5kYXJkRnVsbHNj
cmVlbjppc0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbl07CisgICAgW21fd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhp
cyk7CisKKyAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBdOwor
ICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaW52YWxpZGF0ZUZ1bGxzY3Jl
ZW5TdGF0ZV07CisKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aW52YWxpZGF0ZSgpCit7CisgICAg
TE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUo
JXApIiwgdGhpcyk7CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbmlsOworICAgIG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gbmlsOworCisgICAgY2xlYW51cEZ1bGxzY3JlZW4o
KTsKKworICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgaW52YWxpZGF0ZV07
CisgICAgbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDID0gbmlsOworfQorCisjaWYg
IUxPR19ESVNBQkxFRAorc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCit7
CisgICAgcmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Cit9CisjZW5kaWYKKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29s
IHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QsIE5TV2luZG93ICpwYXJlbnRXaW5k
b3cpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSglcCksIHZpc2libGU6JXMsIGlubGluZVJlY3Q6eyVk
LCAlZCwgJWQsICVkfSwgcGFyZW50V2luZG93OiVwIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxl
KSwgaW5saW5lUmVjdC54KCksIGlubGluZVJlY3QueSgpLCBpbmxpbmVSZWN0LndpZHRoKCksIGlu
bGluZVJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRvdyk7CisKKyAgICBpZiAoIXZpc2libGUpIHsK
KyAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChwYXJlbnRXaW5kb3cpOworICAgIFtt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDoo
TlNSZWN0KWlubGluZVJlY3QgaW5XaW5kb3c6cGFyZW50V2luZG93XTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5h
YmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBj
b25zdCBTdHJpbmcmKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZCglcCksIGVuYWJsZWQ6JXMiLCB0aGlz
LCBib29sU3RyaW5nKGVuYWJsZWQpKTsKKworICAgIGlmIChlbmFibGVkICYmIG1fbW9kZSA9PSBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJl
KQorICAgICAgICBleGl0RnVsbHNjcmVlbihJbnRSZWN0KCksIG5pbCk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykK
K3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFz
VmlkZW9DaGFuZ2VkKCVwKTolcyIsIHRoaXMsIGJvb2xTdHJpbmcoaGFzVmlkZW8pKTsKKworICAg
IGlmICghaGFzVmlkZW8pCisgICAgICAgIGV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRv
TW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRGltZW5zaW9uc0NoYW5n
ZWQoY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMpCit7CisgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OnZpZGVvRGltZW5zaW9uc0NoYW5nZWQo
JXApLCB3aWR0aDolLjBmLCBoZWlnaHQ6JS4wZiIsIHRoaXMsIHZpZGVvRGltZW5zaW9ucy53aWR0
aCgpLCB2aWRlb0RpbWVuc2lvbnMuaGVpZ2h0KCkpOworCisgICAgLy8gV2lkdGggYW5kIGhlaWdo
dCBjYW4gYmUgemVybyB3aGVuIHdlIGFyZSB0cmFuc2l0aW9uaW5nIGZyb20gb25lIHZpZGVvIHRv
IGFub3RoZXIuIElnbm9yZSB6ZXJvIHZhbHVlcy4KKyAgICBpZiAoIXZpZGVvRGltZW5zaW9ucy5p
c1plcm8oKSkKKyAgICAgICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBzZXRW
aWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6OmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25z
dAoreworICAgIHJldHVybiBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpICYmIFttX3dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU9iakMgaXNQbGF5aW5nXTsKK30KKworYm9vbCBzdXBwb3J0c1BpY3R1cmVJ
blBpY3R1cmUoKQoreworICAgIHJldHVybiBQSVBMaWJyYXJ5KCkgJiYgZ2V0UElQVmlld0NvbnRy
b2xsZXJDbGFzcygpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaAppbmRleCA3MDVk
NjNiNDhhOTlhZWUxZTg5Mzk2NTYyNDAxMzIyNDNlNDcyYzRkLi43NjdmMDEyODczMDAwMWFiNGQ3
OWZlNjAzYzEyMjc3NGFmNzEzZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaApAQCAtMzAsNyArMzAsNyBA
QAogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBX
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM7CiBzdHJ1Y3QgTWVkaWFTZWxlY3Rpb25PcHRpb247CiB9CiAKQEAgLTU4LDEwICs1
OCwxMCBAQCBXRUJDT1JFX0VYUE9SVAogICAgIGZsb2F0IF9yYXRlOwogICAgIEJPT0wgX2NhblRv
Z2dsZVBsYXliYWNrOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYz4gX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjPiBfcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOwogfQogCi1AcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjKiB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CitAcHJv
cGVydHkgKGFzc2lnbikgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKiBwbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiBAcHJvcGVydHkgKHJlYWR3cml0ZSkgTlNUaW1lSW50
ZXJ2YWwgY29udGVudER1cmF0aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgcmVh
ZHdyaXRlKSBBVlZhbHVlVGltaW5nICp0aW1pbmc7CiBAcHJvcGVydHkgKG5vbmF0b21pYykgTlNU
aW1lSW50ZXJ2YWwgc2Vla1RvVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQppbmRleCA3YjQ0YTA3NGRm
Mjk4MDYyZjgwNTNlOWViYzdkMzE0NTFlODJlNWU1Li5hYmJkYjUyNzcyMDcyNGFmZTU0NzMxMTc0
MDhiNDM3YTA5NDkyYWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCkBAIC0yOSw4ICsyOSw4IEBACiAj
aWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpICYmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKIAogI2ltcG9ydCAiTWVkaWFTZWxl
Y3Rpb25PcHRpb24uaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5o
IgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKKyNpbXBvcnQgIlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIK
ICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKQEAgLTU5LDggKzU5LDggQEAgQHN5bnRoZXNpemUgY2FuVG9nZ2xlUGljdHVyZUluUGlj
dHVyZTsKIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNl
dFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxwdHIpOworICAgIGlmIChfcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5z
ZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihudWxscHRyKTsKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgLSAodm9pZClzZWVrVG9UaW1lOihOU1RpbWVJbnRlcnZh
bCl0aW1lIHRvbGVyYW5jZUJlZm9yZTooTlNUaW1lSW50ZXJ2YWwpdG9sZXJhbmMKIHsKICAgICBV
TlVTRURfUEFSQU0odG9sZXJhbmNlQmVmb3JlKTsKICAgICBVTlVTRURfUEFSQU0odG9sZXJhbmNl
QWZ0ZXIpOwotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPnNlZWtUb1RpbWUodGltZSk7CisgICAgX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2Vla1RvVGltZSh0aW1lKTsKIH0K
IAogLSAodm9pZCljYW5jZWxUaHVtYm5haWxBbmRBdWRpb0FtcGxpdHVkZVNhbXBsZUdlbmVyYXRp
b24KQEAgLTEyNSwxMiArMTI1LDEyIEBAIC0gKEJPT0wpY2FuQmVnaW5Ub3VjaEJhclNjcnViYmlu
ZwogCiAtICh2b2lkKWJlZ2luVG91Y2hCYXJTY3J1YmJpbmcKIHsKLSAgICBfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLT5iZWdpblNjcnViYmluZygpOworICAgIF9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWMtPmJlZ2luU2NydWJiaW5nKCk7CiB9CiAKIC0gKHZvaWQpZW5kVG91Y2hC
YXJTY3J1YmJpbmcKIHsKLSAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5lbmRT
Y3J1YmJpbmcoKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5lbmRTY3J1YmJp
bmcoKTsKIH0KIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDAK
QEAgLTE5Miw3ICsxOTIsNyBAQCAtICh2b2lkKXNldEN1cnJlbnRBdWRpb1RvdWNoQmFyTWVkaWFT
ZWxlY3Rpb25PcHRpb246KEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdAogICAgIGlmIChhdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uICYmIF9hdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRp
b25zKQogICAgICAgICBpbmRleCA9IFtfYXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9u
cyBpbmRleE9mT2JqZWN0OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25dOwogCi0gICAgX3dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5UNjRf
TUFYKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25N
b2RlbCgpLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4ICE9IE5TTm90Rm91bmQgPyBpbmRl
eCA6IFVJTlQ2NF9NQVgpOwogfQogCiAtIChOU0FycmF5PEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlv
bk9wdGlvbiAqPiAqKWxlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucwpAQCAtMjIy
LDcgKzIyMiw3IEBAIC0gKHZvaWQpc2V0Q3VycmVudExlZ2libGVUb3VjaEJhck1lZGlhU2VsZWN0
aW9uT3B0aW9uOihBVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PCiAgICAgaWYgKGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbiAmJiBfbGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25z
KQogICAgICAgICBpbmRleCA9IFtfbGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25z
IGluZGV4T2ZPYmplY3Q6bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uXTsKIAotICAgIF93ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCAhPSBOU05vdEZvdW5kID8gaW5kZXggOiBVSU5U
NjRfTUFYKTsKKyAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXggIT0gTlNOb3RGb3VuZCA/
IGluZGV4IDogVUlOVDY0X01BWCk7CiB9CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTMwMApAQCAtMjkyLDQ3ICsyOTIsNDcgQEAgLSAodm9pZClzZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiAgICAgW3NlbGYg
ZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJjdXJyZW50TGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rp
b25PcHRpb24iXTsKIH0KIAotLSAoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKil3ZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKKy0gKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YyopcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjCiB7Ci0gICAgcmV0dXJuIF93ZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWMuZ2V0KCk7CisgICAgcmV0dXJuIF9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMuZ2V0KCk7CiB9CiAKLS0gKHZvaWQpc2V0V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOihXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYworLSAodm9pZClzZXRQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
KFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
CiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPT0gd2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjKQorICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjID09IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCi0gICAgICAgIF93ZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnNldFBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKG51bGxw
dHIpOworICAgIGlmIChfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQorICAgICAgICBfcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihudWxs
cHRyKTsKIAotICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgPSB3ZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM7CisgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9
IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKIAotICAgIGlmIChfd2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LT5zZXRQbGF5QmFja0NvbnRyb2xzTWFuYWdlcihzZWxmKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYykKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoc2VsZik7CiB9CiAKIC0gKHZvaWQpdG9nZ2xlUGxh
eWJhY2sKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAmJiBfd2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQot
ICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbCgpLT50b2dnbGVQbGF5U3RhdGUoKTsKKyAgICBpZiAoX3BsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZU1hYyAmJiBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Np
b25Nb2RlbCgpKQorICAgICAgICBfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpLT50b2dnbGVQbGF5U3RhdGUoKTsKIH0KIAogLSAodm9pZClzZXRQbGF5
aW5nOihCT09MKXBsYXlpbmcKIHsKLSAgICBpZiAoIV93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWMgfHwgIV93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsKCkpCisgICAgaWYgKCFfcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjIHx8ICFf
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBCT09MIGlzQ3VycmVudGx5UGxheWluZyA9IHNlbGYucGxheWlu
ZzsKICAgICBpZiAoIWlzQ3VycmVudGx5UGxheWluZyAmJiBwbGF5aW5nKQotICAgICAgICBfd2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5w
bGF5KCk7CisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vz
c2lvbk1vZGVsKCktPnBsYXkoKTsKICAgICBlbHNlIGlmIChpc0N1cnJlbnRseVBsYXlpbmcgJiYg
IXBsYXlpbmcpCi0gICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAgICAgIF9wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWMtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CiB9CiAKIC0gKEJP
T0wpaXNQbGF5aW5nCiB7Ci0gICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMg
JiYgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9k
ZWwoKSkKLSAgICAgICAgcmV0dXJuIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmlzUGxheWluZygpOworICAgIGlmIChfcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjICYmIF9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPnBsYXli
YWNrU2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIHJldHVybiBfcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5pc1BsYXlpbmcoKTsKIAogICAgIHJldHVy
biBOTzsKIH0KQEAgLTM0MCw4ICszNDAsOCBAQCAtIChCT09MKWlzUGxheWluZwogI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCiAtICh2b2lkKXRvZ2dsZVBpY3R1
cmVJblBpY3R1cmUKIHsKLSAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyAm
JiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bCgpKQotICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbCgpLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgaWYgKF9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgX3BsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOwog
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjgxMjRjMWUxYmZlMDE1YmQyOWMwZWYwN2E3MGUzNzFjMTliNTFlNi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotCi0jaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudEVudW1zLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwuaCIKLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotT0JKQ19DTEFTUyBXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlcjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOwotCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgZmluYWwKLSAgICA6IHB1YmxpYyBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENs
aWVudAotICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM+IGNyZWF0ZShXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYpOwotICAgIHZpcnR1YWwgfldl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYygpOwotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiB3ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tT
ZXNzaW9uTW9kZWw7IH0KLQotICAgIC8vIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgZmluYWwgeyB9Ci0KLSAgICAv
LyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
dXJyZW50VGltZUNoYW5nZWQoZG91YmxlIC8qY3VycmVudFRpbWUqLywgZG91YmxlIC8qYW5jaG9y
VGltZSovKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wg
Lyppc1BsYXlpbmcqLywgZmxvYXQgLypwbGF5YmFja1JhdGUqLykgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYsIGRv
dWJsZSAvKmxhc3RNb2RpZmllZFRpbWUqLywgZG91YmxlIC8qbGl2ZVVwZGF0ZUludGVydmFsKi8p
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIC8qb3B0aW9ucyov
LCB1aW50NjRfdCAvKnNlbGVjdGVkSW5kZXgqLykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiAvKm9wdGlvbnMqLywgdWludDY0X3QgLypzZWxlY3RlZEluZGV4
Ki8pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCAvKiBlbmFibGVkICov
LCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNv
bnN0IFN0cmluZyYgLyogbG9jYWxpemVkRGV2aWNlTmFtZSAqLykgZmluYWw7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVu
c3VyZUNvbnRyb2xzTWFuYWdlcigpOwotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICopOwotICAgIFdFQkNPUkVfRVhQT1JUIFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotI2Vu
ZGlmCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNjcnViYmluZygpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZW5kU2NydWJiaW5nKCk7Ci0KLXByaXZhdGU6Ci0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsJik7Ci0gICAgV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9uTW9kZWwgeyBudWxscHRyIH07
Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyICptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyICB7IG51bGxwdHIg
fTsKLQotICAgIHZvaWQgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcoZG91Ymxl
IGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91YmxlIHBsYXliYWNrUmF0ZSwgYm9v
bCBpc1BsYXlpbmcpOwotI2VuZGlmCi0KLX07Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNDRhNjFjNTBlMDE2MmMzYzEw
ZTcxNzVkODFjNmYyYTI0ODRjZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYy5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCi0KLSNpbXBvcnQgIkFWS2l0U1BJLmgiCi0jaW1wb3J0ICJJbnRSZWN0
LmgiCi0jaW1wb3J0ICJNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIgotI2ltcG9ydCAiTWVkaWFUaW1l
QVZGb3VuZGF0aW9uLmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwu
aCIKLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLQotI2ltcG9ydCAiQ29yZU1lZGlh
U29mdExpbmsuaCIKLQotU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVktpdCkKLVNPRlRf
TElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZWYWx1ZVRpbWluZykKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPFdlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYz4gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUo
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwmIG1vZGVsKQotewotICAgIGF1dG8gaW50ZXJmYWNlID0g
YWRvcHRSZWYoKm5ldyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMobW9kZWwpKTsKLSAg
ICBtb2RlbC5hZGRDbGllbnQoaW50ZXJmYWNlKTsKLSAgICByZXR1cm4gaW50ZXJmYWNlOwotfQot
Ci1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OldlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYyhXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCYgbW9kZWwpCi0gICAgOiBtX3BsYXliYWNr
U2Vzc2lvbk1vZGVsKCZtb2RlbCkKLXsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjOjp+V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKCkKLXsKLSAgICBpbnZhbGlkYXRl
KCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJhdGlvbkNo
YW5nZWQoZG91YmxlIGR1cmF0aW9uKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5h
Z2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLQotICAgIGNvbnRyb2xzTWFuYWdlci5j
b250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKLQotICAgIC8vIEZJWE1FOiBXZSB0YWtlIHRoaXMg
YXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LCBidXQgdGhhdCBpcyBub3Qg
bmVjZXNzYXJpbHkgdHJ1ZS4KLSAgICBjb250cm9sc01hbmFnZXIuaGFzRW5hYmxlZEF1ZGlvID0g
WUVTOwotICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFibGVkVmlkZW8gPSBZRVM7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShkdXJhdGlvbik7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRp
bWUsIGRvdWJsZSBhbmNob3JUaW1lKQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJP
TFNfTUFOQUdFUikKLSAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJvbHNNYW5h
Z2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSAgICB1cGRhdGVQbGF5YmFja0NvbnRy
b2xzTWFuYWdlclRpbWluZyhjdXJyZW50VGltZSwgYW5jaG9yVGltZSwgY29udHJvbHNNYW5hZ2Vy
LnJhdGUsIGNvbnRyb2xzTWFuYWdlci5wbGF5aW5nKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGN1cnJlbnRUaW1lKTsKLSAgICBVTlVTRURfUEFSQU0oYW5jaG9yVGltZSk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wg
aXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQotICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKiBjb250
cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIFtjb250cm9sc01h
bmFnZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07Ci0gICAgW2NvbnRy
b2xzTWFuYWdlciBzZXRQbGF5aW5nOmlzUGxheWluZ107Ci0gICAgdXBkYXRlUGxheWJhY2tDb250
cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25Nb2RlbCA/IG1fcGxheWJhY2tTZXNz
aW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9d
IHN5c3RlbVVwdGltZV0sIHBsYXliYWNrUmF0ZSwgaXNQbGF5aW5nKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKGlzUGxheWluZyk7Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXliYWNrUmF0ZSk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2luU2Ny
dWJiaW5nKCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0g
ICAgdXBkYXRlUGxheWJhY2tDb250cm9sc01hbmFnZXJUaW1pbmcobV9wbGF5YmFja1Nlc3Npb25N
b2RlbCA/IG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmN1cnJlbnRUaW1lKCkgOiAwLCBbW05TUHJv
Y2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0sIDAsIGZhbHNlKTsKLSNlbmRpZgot
ICAgIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmJlZ2luU2NydWJiaW5nKCk7Ci19Ci0KLXZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjplbmRTY3J1YmJpbmcoKQotewotICAg
IHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmVuZFNjcnViYmluZygpOwotfQotCi0jaWYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotc3RhdGljIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gdGltZVJhbmdlc1RvQXJyYXkoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdl
cykKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJhbmdlQXJyYXkgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgUGxhdGZv
cm1UaW1lUmFuZ2VzJiByYW5nZXMgPSB0aW1lUmFuZ2VzLnJhbmdlcygpOwotICAgICAgICBDTVRp
bWVSYW5nZSByYW5nZSA9IENNVGltZVJhbmdlTWFrZSh0b0NNVGltZShyYW5nZXMuc3RhcnQoaSkp
LCB0b0NNVGltZShyYW5nZXMuZW5kKGkpKSk7Ci0gICAgICAgIFtyYW5nZUFycmF5IGFkZE9iamVj
dDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOwotICAgIH0KLQotICAgIHJl
dHVybiByYW5nZUFycmF5OwotfQotI2VuZGlmCi0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgVGltZVJhbmdlcyYgdGltZVJh
bmdlcywgZG91YmxlLCBkb3VibGUpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldFNlZWthYmxlVGlt
ZVJhbmdlczp0aW1lUmFuZ2VzVG9BcnJheSh0aW1lUmFuZ2VzKS5nZXQoKV07Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTSh0aW1lUmFuZ2VzKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYzo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQot
ICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2Vs
ZWN0ZWRJbmRleCldOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgVU5V
U0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQotewotI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
LSAgICBbcGxheUJhY2tDb250cm9sc01hbmFnZXIoKSBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zOm9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4o
c2VsZWN0ZWRJbmRleCldOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNlbGVjdGVkSW5kZXgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9M
U19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpIHNldEF1ZGlvTWVkaWFT
ZWxlY3Rpb25JbmRleDpzZWxlY3RlZEluZGV4XTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNl
bGVjdGVkSW5kZXgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlTWFjOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKLXsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0g
ICAgW3BsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXg6c2VsZWN0ZWRJbmRleF07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3RlZEluZGV4
KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZXh0
ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpCi17Ci0jaWYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIFtwbGF5QmFja0NvbnRyb2xz
TWFuYWdlcigpIHNldENhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmU6IWVuYWJsZWRdOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQotewotICAgIGlmICghbV9wbGF5YmFj
a1Nlc3Npb25Nb2RlbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbGF5YmFja1Nlc3Npb25N
b2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsID0g
bnVsbHB0cjsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmVuc3Vy
ZUNvbnRyb2xzTWFuYWdlcigpCi17Ci0jaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQotICAgIHBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0jZW5kaWYKLX0KLQotI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLQotV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIgKldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6cGxheUJhY2tDb250
cm9sc01hbmFnZXIoKQotewotICAgIHJldHVybiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6c2V0UGxheUJhY2tDb250
cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIpCi17Ci0gICAg
bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciA9IG1hbmFnZXI7Ci0KLSAgICBpZiAoIW1hbmFnZXIg
fHwgIW1fcGxheWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TVGlt
ZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbbWFuYWdlciByYXRlXSA/IE5BTiA6IFtbTlNQ
cm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXTsKLSAgICBtYW5hZ2VyLnRpbWlu
ZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpt
X3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIGFuY2hvclRpbWVTdGFtcDphbmNo
b3JUaW1lU3RhbXAgcmF0ZTowXTsKLSAgICBkb3VibGUgZHVyYXRpb24gPSBtX3BsYXliYWNrU2Vz
c2lvbk1vZGVsLT5kdXJhdGlvbigpOwotICAgIG1hbmFnZXIuY29udGVudER1cmF0aW9uID0gZHVy
YXRpb247Ci0gICAgbWFuYWdlci5oYXNFbmFibGVkQXVkaW8gPSBkdXJhdGlvbiA+IDA7Ci0gICAg
bWFuYWdlci5oYXNFbmFibGVkVmlkZW8gPSBkdXJhdGlvbiA+IDA7Ci0gICAgbWFuYWdlci5yYXRl
ID0gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+aXNQbGF5aW5nKCkgPyBtX3BsYXliYWNrU2Vzc2lv
bk1vZGVsLT5wbGF5YmFja1JhdGUoKSA6IDAuOwotICAgIG1hbmFnZXIuc2Vla2FibGVUaW1lUmFu
Z2VzID0gdGltZVJhbmdlc1RvQXJyYXkobV9wbGF5YmFja1Nlc3Npb25Nb2RlbC0+c2Vla2FibGVS
YW5nZXMoKSkuZ2V0KCk7Ci0gICAgbWFuYWdlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKLSAg
ICBtYW5hZ2VyLnBsYXlpbmcgPSBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5pc1BsYXlpbmcoKTsK
LSAgICBbbWFuYWdlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczptX3BsYXliYWNrU2Vz
c2lvbk1vZGVsLT5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIHdpdGhTZWxlY3RlZEluZGV4
OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmF1ZGlvTWVk
aWFTZWxlY3RlZEluZGV4KCkpXTsKLSAgICBbbWFuYWdlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zOm1fcGxheWJhY2tTZXNzaW9uTW9kZWwtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoKSB3aXRoU2VsZWN0ZWRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX3BsYXli
YWNrU2Vzc2lvbk1vZGVsLT5sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpXTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnVwZGF0ZVBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyVGltaW5nKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUsIGRvdWJs
ZSBwbGF5YmFja1JhdGUsIGJvb2wgaXNQbGF5aW5nKQotewotICAgIFdlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyICptYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKLSAgICBpZiAo
IW1hbmFnZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
ICptb2RlbCA9IHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7Ci0gICAgaWYgKCFtb2RlbCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZG91YmxlIGVmZmVjdGl2ZUFuY2hvclRpbWUgPSBwbGF5YmFj
a1JhdGUgPyBhbmNob3JUaW1lIDogTkFOOwotICAgIGRvdWJsZSBlZmZlY3RpdmVQbGF5YmFja1Jh
dGUgPSBwbGF5YmFja1JhdGU7Ci0gICAgaWYgKCFpc1BsYXlpbmcKLSAgICAgICAgfHwgbW9kZWwt
PmlzU2NydWJiaW5nKCkKLSAgICAgICAgfHwgKG1hbmFnZXIucmF0ZSA+IDAgJiYgbW9kZWwtPnBs
YXliYWNrU3RhcnRlZFRpbWUoKSA+PSBjdXJyZW50VGltZSkKLSAgICAgICAgfHwgKG1hbmFnZXIu
cmF0ZSA8IDAgJiYgbW9kZWwtPnBsYXliYWNrU3RhcnRlZFRpbWUoKSA8PSBjdXJyZW50VGltZSkp
Ci0gICAgICAgIGVmZmVjdGl2ZVBsYXliYWNrUmF0ZSA9IDA7Ci0KLSAgICBtYW5hZ2VyLnRpbWlu
ZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpj
dXJyZW50VGltZSBhbmNob3JUaW1lU3RhbXA6ZWZmZWN0aXZlQW5jaG9yVGltZSByYXRlOmVmZmVj
dGl2ZVBsYXliYWNrUmF0ZV07Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCi0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODUxYjJjZTNhMmU5ZTQ1NTlhMTIxMzYwNGQxMjYwYmZl
OTMwYjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLQotI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnRFbnVtcy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy5oIgotI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCi0jaW5jbHVkZSAiV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotT0JKQ19DTEFTUyBOU1dpbmRvdzsKLU9CSkNfQ0xBU1MgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjT2JqQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNs
YXNzIEZsb2F0U2l6ZTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKLWNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyOwotCi1jbGFzcyBXRUJDT1JFX0VY
UE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMKLSAgICA6IHB1YmxpYyBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgICwgcHJpdmF0ZSBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudAotICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjPiB7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYz4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyYgcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKHBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMo
KTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogd2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwo
KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOyB9Ci0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uTW9kZWwqIHdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsKik7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIqIHdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCkgY29uc3QgeyByZXR1cm4gbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXI7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdl
YlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKik7Ci0KLSAgICAvLyBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXli
YWNrUmF0ZSkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChib29sICBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJu
YWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGV2aWNlTmFtZSkg
b3ZlcnJpZGU7Ci0KLSAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmKSBm
aW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0dXBGdWxsc2NyZWVuKE5TVmlldyYg
bGF5ZXJIb3N0ZWRWaWV3LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgTlNXaW5kb3cgKnBh
cmVudFdpbmRvdywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBi
b29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjayk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4aXRGdWxs
c2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdyk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25U
b01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2Ny
ZWVuKCkgeyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9Jbmxp
bmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0LCBOU1dpbmRvdyAqcGFy
ZW50V2luZG93KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuc3VyZUNvbnRyb2xzTWFuYWdl
cigpOwotCi0gICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICBib29sIGhhc01vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZSAmIG1vZGU7IH0KLSAgICBib29sIGlzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09IG1vZGU7IH0K
LSAgICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKTsKLSAgICB2b2lkIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUpOwotCi0gICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2Ny
ZWVuKCkgY29uc3Q7Ci0KLSAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJl
SW5QaWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGFwcGxpY2F0aW9u
RGlkQmVjb21lQWN0aXZlKCkgeyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWNPYmpDICp2aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDKCk7Ci0K
LXByaXZhdGU6Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZU1hYyYpOwotICAgIFJlZjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM+IG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlOwotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsIHsgbnVsbHB0ciB9OwotICAgIFdlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKiBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7IG51
bGxwdHIgfTsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bV9tb2RlIHsgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9
OwotICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDPiBtX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakM7Ci19OwotCi19Ci0KLSNlbmRpZgotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlNjQy
YzhlYzBjYmY5NDc1ZTg0OTZkZjdjODcwMmMyNDg2NTUzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTczICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5o
IgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
Ci0KLSNpbXBvcnQgIkFWS2l0U1BJLmgiCi0jaW1wb3J0ICJJbnRSZWN0LmgiCi0jaW1wb3J0ICJM
b2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKLSNpbXBvcnQgIlBJ
UFNQSS5oIgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIuaCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5o
IgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCIKLSNpbXBvcnQg
IldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1l
Lmg+Ci0KLSNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0KLVNPRlRfTElOS19GUkFNRVdP
UktfT1BUSU9OQUwoQVZLaXQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWVmFs
dWVUaW1pbmcpCi0KLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChQSVApCi1T
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUElQLCBQSVBWaWV3Q29udHJvbGxlcikKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUBjbGFzcyBXZWJWaWRlb1ZpZXdDb250YWluZXI7Ci0KLUBw
cm90b2NvbCBXZWJWaWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0KLS0gKHZv
aWQpYm91bmRzRGlkQ2hhbmdlRm9yVmlkZW9WaWV3Q29udGFpbmVyOihXZWJWaWRlb1ZpZXdDb250
YWluZXIgKil2aWRlb1ZpZXdDb250YWluZXI7Ci0tICh2b2lkKXN1cGVydmlld0RpZENoYW5nZUZv
clZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3Q29udGFpbmVyICopdmlkZW9WaWV3Q29u
dGFpbmVyOwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViVmlkZW9WaWV3Q29udGFpbmVyIDogTlNW
aWV3IHsKLSAgICBpZCA8V2ViVmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGU+IF92aWRlb1ZpZXdD
b250YWluZXJEZWxlZ2F0ZTsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaWQg
PFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB2aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0
ZTsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9WaWV3Q29udGFpbmVyCi0KLUBz
eW50aGVzaXplIHZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPV92aWRlb1ZpZXdDb250YWluZXJE
ZWxlZ2F0ZTsKLQotLSAodm9pZClyZXNpemVXaXRoT2xkU3VwZXJ2aWV3U2l6ZTooTlNTaXplKW9s
ZEJvdW5kc1NpemUKLXsKLSAgICBbc3VwZXIgcmVzaXplV2l0aE9sZFN1cGVydmlld1NpemU6b2xk
Qm91bmRzU2l6ZV07Ci0KLSAgICBbX3ZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlIGJvdW5kc0Rp
ZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjpzZWxmXTsKLX0KLQotLSAodm9pZCl2aWV3RGlk
TW92ZVRvU3VwZXJ2aWV3Ci17Ci0gICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9TdXBlcnZpZXddOwot
Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXJEZWxlZ2F0ZSBzdXBlcnZpZXdEaWRDaGFuZ2VGb3JW
aWRlb1ZpZXdDb250YWluZXI6c2VsZl07Ci19Ci0KLUBlbmQKLQotZW51bSBjbGFzcyBQSVBTdGF0
ZSB7Ci0gICAgTm90SW5QSVAsCi0gICAgSW5QSVAsCi0gICAgRXhpdGluZ1BJUAotfTsKLQotQGlu
dGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDIDogTlNPYmplY3QgPFBJ
UFZpZXdDb250cm9sbGVyRGVsZWdhdGUsIFdlYlZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlPiB7
Ci0gICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjKiBfd2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlTWFjOwotICAgIE5TU2l6ZSBfdmlkZW9EaW1lbnNpb25zOwotICAg
IFJldGFpblB0cjxQSVBWaWV3Q29udHJvbGxlcj4gX3BpcFZpZXdDb250cm9sbGVyOwotICAgIFJl
dGFpblB0cjxOU1ZpZXdDb250cm9sbGVyPiBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlcjsK
LSAgICBSZXRhaW5QdHI8V2ViVmlkZW9WaWV3Q29udGFpbmVyPiBfdmlkZW9WaWV3Q29udGFpbmVy
OwotICAgIFBJUFN0YXRlIF9waXBTdGF0ZTsKLSAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IF9yZXR1
cm5pbmdXaW5kb3c7Ci0gICAgTlNSZWN0IF9yZXR1cm5pbmdSZWN0OwotICAgIEJPT0wgX3BsYXlp
bmc7Ci0gICAgQk9PTCBfZGlkUmVxdWVzdEV4aXRpbmdQSVA7Ci0gICAgQk9PTCBfZXhpdGluZ1Rv
U3RhbmRhcmRGdWxsc2NyZWVuOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYyopd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwotLSAodm9pZClpbnZhbGlk
YXRlRnVsbHNjcmVlblN0YXRlOwotLSAodm9pZClpbnZhbGlkYXRlOwotCi0vLyBUcmFja2luZyB2
aWRlbyBwbGF5YmFjayBzdGF0ZQotQHByb3BlcnR5IChub25hdG9taWMpIE5TU2l6ZSB2aWRlb0Rp
bWVuc2lvbnM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzUGxheWluZykgQk9PTCBw
bGF5aW5nOwotLSAodm9pZCl1cGRhdGVJc1BsYXlpbmc6KEJPT0wpaXNQbGF5aW5nIG5ld1BsYXli
YWNrUmF0ZTooZmxvYXQpcGxheWJhY2tSYXRlOwotCi0vLyBIYW5kbGluZyBQSVAgdHJhbnNpdGlv
bnMKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBkaWRSZXF1ZXN0RXhpdGlu
Z1BJUDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNFeGl0aW5nVG9TdGFuZGFyZEZ1
bGxzY3JlZW4pIEJPT0wgZXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuOwotCi0tICh2b2lkKXNl
dFVwUElQRm9yVmlkZW9WaWV3OihOU1ZpZXcgKil2aWRlb1ZpZXcgd2l0aEZyYW1lOihOU1JlY3Qp
ZnJhbWUgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93OwotLSAodm9pZCllbnRlclBJUDsKLS0g
KHZvaWQpZXhpdFBJUDsKLS0gKHZvaWQpZXhpdFBJUEFuaW1hdGluZ1RvUmVjdDooTlNSZWN0KXJl
Y3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93OwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWNPYmpDCi0KLUBzeW50aGVzaXplIHBsYXlp
bmc9X3BsYXlpbmc7Ci1Ac3ludGhlc2l6ZSB2aWRlb0RpbWVuc2lvbnM9X3ZpZGVvRGltZW5zaW9u
czsKLUBzeW50aGVzaXplIGRpZFJlcXVlc3RFeGl0aW5nUElQPV9kaWRSZXF1ZXN0RXhpdGluZ1BJ
UDsKLUBzeW50aGVzaXplIGV4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbj1fZXhpdGluZ1RvU3Rh
bmRhcmRGdWxsc2NyZWVuOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VNYWM6KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yyopd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjID0gd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOwotICAgIF9w
aXBTdGF0ZSA9IFBJUFN0YXRlOjpOb3RJblBJUDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGUKLXsKLSAgICBbX3BpcFZpZXdDb250cm9s
bGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgX3BpcFZpZXdDb250cm9sbGVyID0gbmlsOwotICAg
IFtfdmlkZW9WaWV3Q29udGFpbmVyIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgIFtfdmlkZW9W
aWV3Q29udGFpbmVyIHNldFZpZGVvVmlld0NvbnRhaW5lckRlbGVnYXRlOm5pbF07Ci0gICAgX3Zp
ZGVvVmlld0NvbnRhaW5lciA9IG5pbDsKLSAgICBfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxl
ciA9IG5pbDsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6Tm90SW5QSVA7Ci0gICAgX2RpZFJl
cXVlc3RFeGl0aW5nUElQID0gTk87Ci0gICAgX2V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbiA9
IE5POwotICAgIF9yZXR1cm5pbmdXaW5kb3cgPSBuaWw7Ci0gICAgX3JldHVybmluZ1JlY3QgPSBO
U1plcm9SZWN0OwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBbc2VsZiBpbnZhbGlk
YXRlRnVsbHNjcmVlblN0YXRlXTsKLSAgICBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
ID0gbnVsbHB0cjsKLSAgICBfdmlkZW9EaW1lbnNpb25zID0gTlNaZXJvU2l6ZTsKLX0KLQotLSAo
dm9pZCl1cGRhdGVJc1BsYXlpbmc6KEJPT0wpaXNQbGF5aW5nIG5ld1BsYXliYWNrUmF0ZTooZmxv
YXQpcGxheWJhY2tSYXRlCi17Ci0gICAgX3BsYXlpbmcgPSBpc1BsYXlpbmcgJiYgcGxheWJhY2tS
YXRlOwotCi0gICAgW19waXBWaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKLX0K
LQotLSAodm9pZClzZXRWaWRlb0RpbWVuc2lvbnM6KE5TU2l6ZSl2aWRlb0RpbWVuc2lvbnMKLXsK
LSAgICBfdmlkZW9EaW1lbnNpb25zID0gdmlkZW9EaW1lbnNpb25zOwotCi0gICAgW19waXBWaWV3
Q29udHJvbGxlciBzZXRBc3BlY3RSYXRpbzpfdmlkZW9EaW1lbnNpb25zXTsKLX0KLQotLSAodm9p
ZClzZXRVcFBJUEZvclZpZGVvVmlldzooTlNWaWV3ICopdmlkZW9WaWV3IHdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lIGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwotewotICAgIEFTU0VSVCghX3Bp
cFZpZXdDb250cm9sbGVyKTsKLSAgICBBU1NFUlQoIV92aWRlb1ZpZXdDb250YWluZXJDb250cm9s
bGVyKTsKLSAgICBBU1NFUlQoIV92aWRlb1ZpZXdDb250YWluZXIpOwotCi0gICAgX3BpcFZpZXdD
b250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NQSVBWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5p
dF0pOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW19w
aXBWaWV3Q29udHJvbGxlciBzZXRVc2VyQ2FuUmVzaXplOllFU107Ci0gICAgW19waXBWaWV3Q29u
dHJvbGxlciBzZXRQbGF5aW5nOl9wbGF5aW5nXTsKLSAgICBbc2VsZiBzZXRWaWRlb0RpbWVuc2lv
bnM6TlNFcXVhbFNpemVzKF92aWRlb0RpbWVuc2lvbnMsIE5TWmVyb1NpemUpID8gZnJhbWUuc2l6
ZSA6IF92aWRlb0RpbWVuc2lvbnNdOwotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKCkpCi0gICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKTsKLQotICAgIF92aWRl
b1ZpZXdDb250YWluZXIgPSBhZG9wdE5TKFtbV2ViVmlkZW9WaWV3Q29udGFpbmVyIGFsbG9jXSBp
bml0V2l0aEZyYW1lOmZyYW1lXSk7Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXIgc2V0VmlkZW9W
aWV3Q29udGFpbmVyRGVsZWdhdGU6c2VsZl07Ci0gICAgW192aWRlb1ZpZXdDb250YWluZXIgYWRk
U3Vidmlldzp2aWRlb1ZpZXddOwotICAgIHZpZGVvVmlldy5mcmFtZSA9IFtfdmlkZW9WaWV3Q29u
dGFpbmVyIGJvdW5kc107Ci0gICAgdmlkZW9WaWV3LmF1dG9yZXNpemluZ01hc2sgPSBOU1ZpZXdX
aWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOwotCi0gICAgX3ZpZGVvVmlld0NvbnRh
aW5lckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbTlNWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0p
OwotICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyQ29udHJvbGxlciBzZXRWaWV3Ol92aWRlb1ZpZXdD
b250YWluZXIuZ2V0KCldOwotICAgIFt3aW5kb3cuY29udGVudFZpZXcgYWRkU3Vidmlldzpfdmlk
ZW9WaWV3Q29udGFpbmVyLmdldCgpIHBvc2l0aW9uZWQ6TlNXaW5kb3dBYm92ZSByZWxhdGl2ZVRv
Om5pbF07Ci19Ci0KLS0gKHZvaWQpZW50ZXJQSVAKLXsKLSAgICBpZiAoX3BpcFN0YXRlID09IFBJ
UFN0YXRlOjpJblBJUCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW192aWRlb1ZpZXdDb250YWlu
ZXJDb250cm9sbGVyIHZpZXddLmxheWVyLmJhY2tncm91bmRDb2xvciA9IENHQ29sb3JHZXRDb25z
dGFudENvbG9yKGtDR0NvbG9yQmxhY2spOwotICAgIFtfcGlwVmlld0NvbnRyb2xsZXIgcHJlc2Vu
dFZpZXdDb250cm9sbGVyQXNQaWN0dXJlSW5QaWN0dXJlOl92aWRlb1ZpZXdDb250YWluZXJDb250
cm9sbGVyLmdldCgpXTsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6SW5QSVA7Ci19Ci0KLS0g
KHZvaWQpZXhpdFBJUAotewotICAgIGlmIChfcGlwU3RhdGUgIT0gUElQU3RhdGU6OkluUElQIHx8
ICFfcGlwVmlld0NvbnRyb2xsZXIgfHwgIV92aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBfZGlkUmVxdWVzdEV4aXRpbmdQSVAgPSBZRVM7Ci0gICAg
W192aWRlb1ZpZXdDb250YWluZXJDb250cm9sbGVyIHZpZXddLmxheWVyLmJhY2tncm91bmRDb2xv
ciA9IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQ2xlYXIpOwotICAgIFtfcGlwVmll
d0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250cm9sbGVyOl92aWRlb1ZpZXdDb250YWluZXJDb250
cm9sbGVyLmdldCgpXTsKLSAgICBfcGlwU3RhdGUgPSBQSVBTdGF0ZTo6RXhpdGluZ1BJUDsKLX0K
LQotLSAodm9pZClleGl0UElQQW5pbWF0aW5nVG9SZWN0OihOU1JlY3QpcmVjdCBpbldpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3cKLXsKLSAgICBfcmV0dXJuaW5nV2luZG93ID0gd2luZG93OwotICAg
IF9yZXR1cm5pbmdSZWN0ID0gcmVjdDsKLSAgICAKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNl
dFJlcGxhY2VtZW50UmVjdDpyZWN0XTsKLSAgICBbX3BpcFZpZXdDb250cm9sbGVyIHNldFJlcGxh
Y2VtZW50V2luZG93OndpbmRvd107Ci0KLSAgICBbc2VsZiBleGl0UElQXTsKLX0KLQotLy8gV2Vi
VmlkZW9WaWV3Q29udGFpbmVyRGVsZWdhdGUKLQotLSAodm9pZClib3VuZHNEaWRDaGFuZ2VGb3JW
aWRlb1ZpZXdDb250YWluZXI6KFdlYlZpZGVvVmlld0NvbnRhaW5lciAqKXZpZGVvVmlld0NvbnRh
aW5lcgotewotICAgIGlmICghX3ZpZGVvVmlld0NvbnRhaW5lciB8fCAhX3BpcFZpZXdDb250cm9s
bGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlRfVU5VU0VEKHZpZGVvVmlld0NvbnRh
aW5lciwgdmlkZW9WaWV3Q29udGFpbmVyID09IF92aWRlb1ZpZXdDb250YWluZXIpOwotCi0gICAg
aWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkKLSAgICAgICAgX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKS0+c2V0
VmlkZW9MYXllckZyYW1lKFtfdmlkZW9WaWV3Q29udGFpbmVyIGJvdW5kc10pOwotfQotCi0tICh2
b2lkKXN1cGVydmlld0RpZENoYW5nZUZvclZpZGVvVmlld0NvbnRhaW5lcjooV2ViVmlkZW9WaWV3
Q29udGFpbmVyICopdmlkZW9WaWV3Q29udGFpbmVyCi17Ci0gICAgaWYgKCFfdmlkZW9WaWV3Q29u
dGFpbmVyIHx8ICFfcGlwVmlld0NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVCh2aWRlb1ZpZXdDb250YWluZXIgPT0gX3ZpZGVvVmlld0NvbnRhaW5lcik7Ci0KLSAgICBp
ZiAoIVt2aWRlb1ZpZXdDb250YWluZXIgaXNEZXNjZW5kYW50T2Y6W19waXBWaWV3Q29udHJvbGxl
ciB2aWV3XV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9uY2UgdGhlIHZpZXcgaXMgbW92
ZWQgaW50byB0aGUgcGlwIHZpZXcsIG1ha2Ugc3VyZSBpdCByZXNpemVzIHdpdGggdGhlIHBpcCB2
aWV3LgotICAgIHZpZGVvVmlld0NvbnRhaW5lci5mcmFtZSA9IFt2aWRlb1ZpZXdDb250YWluZXIg
c3VwZXJ2aWV3XS5ib3VuZHM7Ci0gICAgdmlkZW9WaWV3Q29udGFpbmVyLmF1dG9yZXNpemluZ01h
c2sgPSBOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlOwotfQotCi0vLyBQ
SVBWaWV3Q29udHJvbGxlckRlbGVnYXRlCi0KLS0gKEJPT0wpcGlwU2hvdWxkQ2xvc2U6KFBJUFZp
ZXdDb250cm9sbGVyICopcGlwCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlw
Vmlld0NvbnRyb2xsZXIpOwotCi0gICAgaWYgKCFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjIHx8ICFfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcigpKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgX2RpZFJlcXVl
c3RFeGl0aW5nUElQID0gWUVTOwotICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMt
PndlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCktPmZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSgpOwotCi0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKXBpcERpZENsb3NlOihQ
SVBWaWV3Q29udHJvbGxlciAqKXBpcAotewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0g
X3BpcFZpZXdDb250cm9sbGVyKTsKLQotICAgIGlmIChfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjICYmIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsKCkgJiYgX3ZpZGVvVmlld0NvbnRhaW5lciAmJiBfcmV0dXJuaW5nV2luZG93ICYm
ICFOU0VxdWFsUmVjdHMoX3JldHVybmluZ1JlY3QsIE5TWmVyb1JlY3QpKSB7Ci0gICAgICAgIFtO
U0FuaW1hdGlvbkNvbnRleHQgcnVuQW5pbWF0aW9uR3JvdXA6XihOU0FuaW1hdGlvbkNvbnRleHQg
KmNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnRleHQuYWxsb3dzSW1wbGljaXRBbmltYXRpb24g
PSBOTzsKLSAgICAgICAgICAgIFtfdmlkZW9WaWV3Q29udGFpbmVyIHNldEZyYW1lOl9yZXR1cm5p
bmdSZWN0XTsKLSAgICAgICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJGcmFtZShbX3ZpZGVvVmlld0Nv
bnRhaW5lciBib3VuZHNdKTsKLSAgICAgICAgICAgIF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMtPndlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKCktPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpOwotCi0gICAg
ICAgICAgICBbW19yZXR1cm5pbmdXaW5kb3cgY29udGVudFZpZXddIGFkZFN1YnZpZXc6X3ZpZGVv
Vmlld0NvbnRhaW5lci5nZXQoKSBwb3NpdGlvbmVkOk5TV2luZG93QWJvdmUgcmVsYXRpdmVUbzpu
aWxdOwotICAgICAgICB9IGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Ci0gICAgfQotCi0gICAgaWYg
KF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMpIHsKLSAgICAgICAgaWYgKCFzZWxmLmlz
RXhpdGluZ1RvU3RhbmRhcmRGdWxsc2NyZWVuKSB7Ci0gICAgICAgICAgICBpZiAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwqIHZpZGVvRnVsbHNjcmVlbk1vZGVsID0gX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+d2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoKSkgewotICAgICAgICAgICAg
ICAgIHZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgICAgICAgICAgICAg
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+Y2xlYXJN
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBp
Y3R1cmUpOwotCi0gICAgICAgIGlmIChXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciog
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyID0gX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy0+d2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgICAgIGZ1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpcGlwQWN0aW9uUGxheTooUElQVmlld0NvbnRyb2xsZXIgKilwaXAKLXsKLSAgICBBU1NF
UlRfVU5VU0VEKHBpcCwgcGlwID09IF9waXBWaWV3Q29udHJvbGxlcik7Ci0KLSAgICBpZiAoX3dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYyAmJiBfd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKQotICAgICAgICBfd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wbGF5KCk7Ci19
Ci0KLS0gKHZvaWQpcGlwQWN0aW9uUGF1c2U6KFBJUFZpZXdDb250cm9sbGVyICopcGlwCi17Ci0g
ICAgQVNTRVJUX1VOVVNFRChwaXAsIHBpcCA9PSBfcGlwVmlld0NvbnRyb2xsZXIpOwotCi0gICAg
aWYgKF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMgJiYgX3dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgX3dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cGF1
c2UoKTsKLX0KLQotLSAodm9pZClwaXBBY3Rpb25TdG9wOihQSVBWaWV3Q29udHJvbGxlciAqKXBp
cAotewotICAgIEFTU0VSVF9VTlVTRUQocGlwLCBwaXAgPT0gX3BpcFZpZXdDb250cm9sbGVyKTsK
LQotICAgIGlmICghX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25N
b2RlbCA9IF93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsKCkpCi0gICAgICAgIHBsYXliYWNrU2Vzc2lvbk1vZGVsLT5wYXVzZSgpOwotCi0gICAg
Ly8gRklYTUUgMjUwOTYxNzA6IFNob3VsZCBhbmltYXRlIG9ubHkgaWYgdGhlIHBhZ2Ugd2l0aCB0
aGUgdmlkZW8gaXMgdW5vYnNjdXJlZC4gRm9yIG5vdywgYWx3YXlzIGNsb3NlIHdpdGhvdXQgYW5p
bWF0aW9uLgotICAgIFtzZWxmIGV4aXRQSVBdOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWMoV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjJiBwbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UpCi0gICAgOiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UpCi17Ci0gICAgQVNTRVJUKG1fcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpKTsKLSAgICBhdXRvIG1vZGVsID0gbV9wbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7Ci0gICAgbW9k
ZWwtPmFkZENsaWVudCgqdGhpcyk7Ci0gICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMo
KSB1cGRhdGVJc1BsYXlpbmc6bW9kZWwtPmlzUGxheWluZygpIG5ld1BsYXliYWNrUmF0ZTptb2Rl
bC0+cGxheWJhY2tSYXRlKCldOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6
On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMoKQotewotICAgIGlmIChtX3BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZS0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKLSAgICAgICAgbV9w
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnJlbW92
ZUNsaWVudCgqdGhpcyk7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCi17Ci0gICAgaWYgKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlbW92ZUNsaWVu
dCgqdGhpcyk7Ci0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG1vZGVsOwotICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5h
ZGRDbGllbnQoKnRoaXMpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIqIG9ic2VydmVyKQotewotICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyID0gb2JzZXJ2ZXI7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
KQotewotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBuZXdN
b2RlID0gbV9tb2RlIHwgbW9kZTsKLSAgICBpZiAobV9tb2RlID09IG5ld01vZGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fbW9kZSA9IG5ld01vZGU7Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPmZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZChtX21vZGUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yzo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlKQotewotICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBu
ZXdNb2RlID0gbV9tb2RlICYgfm1vZGU7Ci0gICAgaWYgKG1fbW9kZSA9PSBuZXdNb2RlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX21vZGUgPSBuZXdNb2RlOwotICAgIGlmIChtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVu
TW9kZUNoYW5nZWQobV9tb2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWM6OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCi17
Ci0gICAgW3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMoKSB1cGRhdGVJc1BsYXlpbmc6aXNQ
bGF5aW5nIG5ld1BsYXliYWNrUmF0ZTpwbGF5YmFja1JhdGVdOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCkKLXsKLSAgICBt
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+ZW5zdXJlQ29udHJvbHNNYW5hZ2VyKCk7Ci19Ci0K
LVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hY09iakMgKldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYzo6dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpCi17Ci0gICAgaWYgKCFt
X3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMpCi0gICAgICAgIG1fd2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlT2JqQyA9IGFkb3B0TlMoW1tXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWNPYmpDIGFsbG9jXSBpbml0V2l0aFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzp0
aGlzXSk7Ci0KLSAgICByZXR1cm4gbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDLmdl
dCgpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6c2V0dXBGdWxs
c2NyZWVuKE5TVmlldyYgbGF5ZXJIb3N0ZWRWaWV3LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVj
dCwgTlNXaW5kb3cgKnBhcmVudFdpbmRvdywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpz
ZXR1cEZ1bGxzY3JlZW4oJXApLCBpbml0aWFsUmVjdDp7JWQsICVkLCAlZCwgJWR9LCBwYXJlbnRX
aW5kb3c6JXAsIG1vZGU6JWQiLCB0aGlzLCBpbml0aWFsUmVjdC54KCksIGluaXRpYWxSZWN0Lnko
KSwgaW5pdGlhbFJlY3Qud2lkdGgoKSwgaW5pdGlhbFJlY3QuaGVpZ2h0KCksIHBhcmVudFdpbmRv
dywgbW9kZSk7Ci0KLSAgICBVTlVTRURfUEFSQU0oYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXli
YWNrKTsKLSAgICBBU1NFUlQobW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKLQotICAgIG1fbW9kZSA9IG1vZGU7Ci0KLSAg
ICBbdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQygpIHNldFVwUElQRm9yVmlkZW9WaWV3OiZs
YXllckhvc3RlZFZpZXcgd2l0aEZyYW1lOihOU1JlY3QpaW5pdGlhbFJlY3QgaW5XaW5kb3c6cGFy
ZW50V2luZG93XTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHRoaXNdIHsKLSAgICAgICAgaWYgKG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZW50ZXJGdWxsc2NyZWVuKCVw
KSIsIHRoaXMpOwotCi0gICAgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSB7Ci0gICAgICAgIFttX3dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU9iakMgZW50ZXJQSVBdOwotCi0jaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgICAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpZ
RVNdOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQot
ICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVl
bigpOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4
aXRGdWxsc2NyZWVuKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCwgTlNXaW5kb3cgKnBhcmVudFdp
bmRvdykKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYzo6ZXhpdEZ1bGxzY3JlZW4oJXApLCBmaW5hbFJlY3Q6eyVkLCAlZCwgJWQsICVkfSwgcGFy
ZW50V2luZG93OiVwIiwgdGhpcywgZmluYWxSZWN0LngoKSwgZmluYWxSZWN0LnkoKSwgZmluYWxS
ZWN0LndpZHRoKCksIGZpbmFsUmVjdC5oZWlnaHQoKSwgcGFyZW50V2luZG93KTsKLQotI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbbV9wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVy
ZUFjdGl2ZTpOT107Ci0jZW5kaWYKLQotICAgIGlmIChbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VPYmpDIGRpZFJlcXVlc3RFeGl0aW5nUElQXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGZpbmFsUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU9iakMgZXhpdFBJUF07Ci0gICAgZWxzZQotICAgICAgICBbbV93ZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1JlY3Q6ZmluYWxSZWN0IGluV2lu
ZG93OnBhcmVudFdpbmRvd107Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4s
ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmV4aXRGdWxsc2NyZWVuV2l0aG91dEFu
aW1hdGlvblRvTW9kZSglcCksIG1vZGU6JWQiLCB0aGlzLCBtb2RlKTsKLQotI2lmIEVOQUJMRShX
RUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBbbV9wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCkgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2
ZTpOT107Ci0jZW5kaWYKLQotICAgIGlmIChbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VP
YmpDIGRpZFJlcXVlc3RFeGl0aW5nUElQXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBp
c0V4aXRpbmdUb1N0YW5kYXJkRnVsbHNjcmVlbiA9IG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQ7Ci0gICAgLy8gT24gTWFjLCBzdGFuZGFy
ZCBmdWxsc2NyZWVuIGlzIGhhbmRsZWQgYnkgdGhlIEZ1bGxzY3JlZW4gQVBJIGFuZCBub3QgYnkg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci4KLSAgICAvLyBKdXN0IHVwZGF0ZSBtX21vZGUgZGly
ZWN0bHkgdG8gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRh
cmQgaW4gdGhhdCBjYXNlIHRvIGtlZXAKLSAgICAvLyBtX21vZGUgaW4gc3luYyB3aXRoIHRoZSBm
dWxsc2NyZWVuIG1vZGUgaW4gSFRNTE1lZGlhRWxlbWVudC4KLSAgICBpZiAoaXNFeGl0aW5nVG9T
dGFuZGFyZEZ1bGxzY3JlZW4pCi0gICAgICAgIG1fbW9kZSA9IEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkOwotCi0gICAgW21fd2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlT2JqQyBzZXRFeGl0aW5nVG9TdGFuZGFyZEZ1bGxzY3JlZW46aXNFeGl0aW5n
VG9TdGFuZGFyZEZ1bGxzY3JlZW5dOwotICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU9iakMgZXhpdFBJUF07Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
OjpjbGVhbnVwRnVsbHNjcmVlbigpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmNsZWFudXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwotCi0g
ICAgW21fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBleGl0UElQXTsKLSAgICBbbV93
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGludmFsaWRhdGVGdWxsc2NyZWVuU3RhdGVd
OwotCi0gICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWM6OmludmFsaWRhdGUoKQotewotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppbnZhbGlkYXRlKCVw
KSIsIHRoaXMpOwotCi0gICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKLSAgICBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKLQotICAgIGNsZWFudXBGdWxsc2NyZWVuKCk7
Ci0KLSAgICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGludmFsaWRhdGVdOwot
ICAgIG1fd2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyA9IG5pbDsKLX0KLQotI2lmICFM
T0dfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyKiBib29sU3RyaW5nKGJvb2wgdmFsKQotewot
ICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwotfQotI2VuZGlmCi0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9v
bCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0LCBOU1dpbmRvdyAqcGFyZW50V2lu
ZG93KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
TWFjOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoJXApLCB2aXNpYmxlOiVzLCBpbmxpbmVSZWN0
OnslZCwgJWQsICVkLCAlZH0sIHBhcmVudFdpbmRvdzolcCIsIHRoaXMsIGJvb2xTdHJpbmcodmlz
aWJsZSksIGlubGluZVJlY3QueCgpLCBpbmxpbmVSZWN0LnkoKSwgaW5saW5lUmVjdC53aWR0aCgp
LCBpbmxpbmVSZWN0LmhlaWdodCgpLCBwYXJlbnRXaW5kb3cpOwotCi0gICAgaWYgKCF2aXNpYmxl
KSB7Ci0gICAgICAgIFttX3dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU9iakMgZXhpdFBJUF07
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQocGFyZW50V2luZG93KTsKLSAg
ICBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGV4aXRQSVBBbmltYXRpbmdUb1Jl
Y3Q6KE5TUmVjdClpbmxpbmVSZWN0IGluV2luZG93OnBhcmVudFdpbmRvd107Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChi
b29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYzo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoJXApLCBlbmFi
bGVkOiVzIiwgdGhpcywgYm9vbFN0cmluZyhlbmFibGVkKSk7Ci0KLSAgICBpZiAoZW5hYmxlZCAm
JiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGlj
dHVyZUluUGljdHVyZSkKLSAgICAgICAgZXhpdEZ1bGxzY3JlZW4oSW50UmVjdCgpLCBuaWwpOwot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYzo6aGFzVmlkZW9DaGFuZ2Vk
KGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VNYWM6Omhhc1ZpZGVvQ2hhbmdlZCglcCk6JXMiLCB0aGlzLCBib29sU3RyaW5n
KGhhc1ZpZGVvKSk7Ci0KLSAgICBpZiAoIWhhc1ZpZGVvKQotICAgICAgICBleGl0RnVsbHNjcmVl
bldpdGhvdXRBbmltYXRpb25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25z
KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Ojp2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKCVwKSwgd2lkdGg6JS4wZiwgaGVpZ2h0OiUuMGYiLCB0
aGlzLCB2aWRlb0RpbWVuc2lvbnMud2lkdGgoKSwgdmlkZW9EaW1lbnNpb25zLmhlaWdodCgpKTsK
LQotICAgIC8vIFdpZHRoIGFuZCBoZWlnaHQgY2FuIGJlIHplcm8gd2hlbiB3ZSBhcmUgdHJhbnNp
dGlvbmluZyBmcm9tIG9uZSB2aWRlbyB0byBhbm90aGVyLiBJZ25vcmUgemVybyB2YWx1ZXMuCi0g
ICAgaWYgKCF2aWRlb0RpbWVuc2lvbnMuaXNaZXJvKCkpCi0gICAgICAgIFttX3dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZU9iakMgc2V0VmlkZW9EaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107
Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjOjppc1BsYXlpbmdWaWRl
b0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzTW9kZShXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5Q
aWN0dXJlKSAmJiBbbV93ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VPYmpDIGlzUGxheWluZ107
Ci19Ci0KLWJvb2wgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICByZXR1cm4gUElQ
TGlicmFyeSgpICYmIGdldFBJUFZpZXdDb250cm9sbGVyQ2xhc3MoKTsKLX0KLQotfQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA4MTZmNjBlNzNjNzhhNzFiZjk3NWY3
ZTIyYmFkN2E2ZDAwMWVmZGRmLi4zMmQ3ZTg4MDBlNTJiOWFiNDI5Y2YyZGNhMTYxYjZkY2IwMDAy
ZTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xNTQsOCArMTU0LDggQEAgTUVT
U0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViUGFzdGVib2FyZFByb3h5IFwKICAgICBXZWJQYXlt
ZW50Q29vcmRpbmF0b3IgXAogICAgIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5IFwKLSAgICBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIFwKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkgXAorICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgXAorICAgIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSBcCiAgICAgV2ViUHJvY2VzcyBcCiAgICAgV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24gXAogICAgIFdlYlByb2Nlc3NQb29sIFwKQEAgLTE2OCw4ICsxNjgsOCBAQCBNRVNTQUdFX1JF
Q0VJVkVSUyA9IFwKICAgICBXZWJTb2NrZXRTdHJlYW0gXAogICAgIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlciBcCiAgICAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkgXAotICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIgXAotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eSBcCisgICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBcCisgICAgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5IFwKICMKIAogU0NSSVBUUyA9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDQ0ODExYTAyZDRmNGU2OTE5M2Y0OWYyNTNj
ODY5ODhmMDMwNWM5Y2IuLmEyYzBhYjM4NGQ1NjViYmFjZTIwNmIwNTUzYTUxZTViNGYzZWQ2YjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpA
QCAtMTI2LDEyICsxMjYsMTIgQEAKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkuaCIKICNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCIKICNp
bXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHku
aCIKICNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIgogI2ltcG9ydCAiV0tQREZW
aWV3LmgiCiAjaW1wb3J0ICJXS1Bhc3N3b3JkVmlldy5oIgogI2ltcG9ydCAiV0tTY3JvbGxWaWV3
LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeS5oIgotI2ltcG9y
dCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJfV0tXZWJWaWV3
UHJpbnRGb3JtYXR0ZXIuaCIKICNpbXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb24uaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ29yZUdyYXBoaWNzU1BJLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE1ODBmOTU3N2YwNDQzMGNjYzY0Y2YzM2NlZTdlN2E4OWI5NTNmNjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01l
ZGlhU2VsZWN0aW9uT3B0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVZpZXcuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbk1vZGVsLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lUmFuZ2VzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgUExBVEZP
Uk0oSU9TKQorI2luY2x1ZGUgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aD4KKyNlbHNlCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
aD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQordHlwZWRlZiBXZWJDb3JlOjpQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsK
KyNlbHNlCit0eXBlZGVmIFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyBQbGF0
Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBS
ZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpQ
bGF5YmFja1Nlc3Npb25Nb2RlbCAgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0PiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBt
YW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7
CisgICAgfQorICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCgpIHsgfQor
CisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisKKyAgICAv
LyBQbGF5YmFja1Nlc3Npb25Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50KFdlYkNvcmU6OlBsYXli
YWNrU2Vzc2lvbk1vZGVsQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCByZW1vdmVDbGllbnQoV2Vi
Q29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQmKWZpbmFsOworCisgICAgdm9pZCBkdXJh
dGlvbkNoYW5nZWQoZG91YmxlKTsKKyAgICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUp
OworICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUpOworICAgIHZvaWQgcGxheWJh
Y2tTdGFydGVkVGltZUNoYW5nZWQoZG91YmxlKTsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wg
aXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXND
aGFuZ2VkKFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91
YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCk7CisgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFu
Z2VkKGJvb2wpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2
NF90IGluZGV4KTsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBleHRlcm5hbFBs
YXliYWNrQ2hhbmdlZChib29sLCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7
CisKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQoUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5JiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgICAgIDogbV9tYW5hZ2Vy
KCZtYW5hZ2VyKQorICAgICAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKKyAgICB7CisgICAg
fQorCisgICAgLy8gUGxheWJhY2tTZXNzaW9uTW9kZWwKKyAgICB2b2lkIHBsYXkoKSBmaW5hbDsK
KyAgICB2b2lkIHBhdXNlKCkgZmluYWw7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBmaW5h
bDsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKCkgZmluYWw7CisgICAgdm9pZCBlbmRTY3J1YmJp
bmcoKSBmaW5hbDsKKyAgICB2b2lkIHNlZWtUb1RpbWUoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lk
IGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBmaW5hbDsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3
YXJkKCkgZmluYWw7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBmaW5hbDsKKyAg
ICB2b2lkIGVuZFNjYW5uaW5nKCkgZmluYWw7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0
aW9uKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1
aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkgZmluYWw7
CisgICAgdm9pZCB0b2dnbGVNdXRlZCgpIGZpbmFsOworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkg
ZmluYWw7CisKKyAgICBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fcGxheWJhY2tTdGFydGVkVGltZTsgfQorICAgIGRvdWJsZSBkdXJhdGlvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2N1cnJlbnRUaW1lOyB9CisgICAgZG91YmxlIGJ1ZmZl
cmVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYnVmZmVyZWRUaW1lOyB9CisgICAgYm9v
bCBpc1BsYXlpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzUGxheWluZzsgfQorICAgIGJv
b2wgaXNTY3J1YmJpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzU2NydWJiaW5nOyB9Cisg
ICAgZmxvYXQgcGxheWJhY2tSYXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wbGF5YmFja1Jh
dGU7IH0KKyAgICBSZWY8V2ViQ29yZTo6VGltZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3NlZWthYmxlUmFuZ2VzLmNvcHlSZWYoKTsgfQorICAgIGRvdWJs
ZSBzZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9zZWVrYWJsZVRpbWVSYW5nZXNMYXN0TW9kaWZpZWRUaW1lOyB9CisgICAgZG91YmxlIGxp
dmVVcGRhdGVJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZVVwZGF0ZUludGVydmFsOyB9
CisgICAgYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Nh
blBsYXlGYXN0UmV2ZXJzZTsgfQorICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9w
dGlvbj4gYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2F1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOyB9CisgICAgdWludDY0X3QgYXVkaW9NZWRpYVNl
bGVjdGVkSW5kZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F1ZGlvTWVkaWFTZWxlY3RlZElu
ZGV4OyB9CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zOyB9CisgICAgdWludDY0X3QgbGVnaWJsZU1lZGlhU2VsZWN0ZWRJ
bmRleCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsg
fQorICAgIGJvb2wgZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V4dGVybmFsUGxheWJhY2tFbmFibGVkOyB9CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIGV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZTsgfQorICAg
IFN0cmluZyBleHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWU7IH0KKyAgICBi
b29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV93aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsgfQorICAgIGJvb2wgaXNNdXRlZCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fbXV0ZWQ7IH0KKworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eSogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90IG1fY29udGV4dElkOworICAgIEhhc2hT
ZXQ8V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAg
ZG91YmxlIG1fcGxheWJhY2tTdGFydGVkVGltZSB7IDAgfTsKKyAgICBib29sIG1fcGxheWJhY2tT
dGFydGVkVGltZU5lZWRzVXBkYXRlIHsgZmFsc2UgfTsKKyAgICBkb3VibGUgbV9kdXJhdGlvbiB7
IDAgfTsKKyAgICBkb3VibGUgbV9jdXJyZW50VGltZSB7IDAgfTsKKyAgICBkb3VibGUgbV9idWZm
ZXJlZFRpbWUgeyAwIH07CisgICAgYm9vbCBtX2lzUGxheWluZyB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2lzU2NydWJiaW5nIHsgZmFsc2UgfTsKKyAgICBmbG9hdCBtX3BsYXliYWNrUmF0ZSB7IDAg
fTsKKyAgICBSZWY8V2ViQ29yZTo6VGltZVJhbmdlcz4gbV9zZWVrYWJsZVJhbmdlcyB7IFdlYkNv
cmU6OlRpbWVSYW5nZXM6OmNyZWF0ZSgpIH07CisgICAgZG91YmxlIG1fc2Vla2FibGVUaW1lUmFu
Z2VzTGFzdE1vZGlmaWVkVGltZSB7IDAgfTsKKyAgICBkb3VibGUgbV9saXZlVXBkYXRlSW50ZXJ2
YWwgeyAwIH07CisgICAgYm9vbCBtX2NhblBsYXlGYXN0UmV2ZXJzZSB7IGZhbHNlIH07CisgICAg
VmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBtX2F1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zOworICAgIHVpbnQ2NF90IG1fYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXggeyAwIH07
CisgICAgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBtX2xlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnM7CisgICAgdWludDY0X3QgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4IHsgMCB9OworICAgIGJvb2wgbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCB7IGZhbHNlIH07
CisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIG1f
ZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgeyBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6VGFyZ2V0
VHlwZU5vbmUgfTsKKyAgICBTdHJpbmcgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNl
TmFtZTsKKyAgICBib29sIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07Cit9OworCitjbGFzcyBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94
eSYpOworICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSgpOworCisgICAg
dm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSogY29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCk7CisgICAgdm9pZCByZXF1ZXN0Q29udHJvbGxl
ZEVsZW1lbnRJRCgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTsKKworICAgIGV4cGxpY2l0IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQYWdl
UHJveHkmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIGZpbmFsOworCisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxQbGF5
YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBSZWZQdHI8UGxhdGZvcm1QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2U+PiBNb2RlbEludGVyZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUg
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2RlbElu
dGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgZW5zdXJlTW9kZWwodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICBQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgZW5zdXJl
SW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBhZGRDbGllbnRGb3JDb250
ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIKKyAgICB2b2lkIHNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQo
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFn
ZXIoKTsKKyAgICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpOworICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpOworICAgIHZvaWQgc2Vla2Fi
bGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFp
cjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJs
ZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6
Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsK
KyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRl
eENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAg
ICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja1By
b3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJf
dCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9pZCB3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
KTsKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBk
dXJhdGlvbik7CisgICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKKyAgICB2b2lkIHJhdGVDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKTsKKyAg
ICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCwgU3RyaW5n
KSBjb25zdDsKKyAgICB2b2lkIG11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
bXV0ZWQpOworCisgICAgLy8gTWVzc2FnZXMgdG8gUGxheWJhY2tTZXNzaW9uTWFuYWdlcgorICAg
IHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcGF1c2UodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2Vla1RvVGltZSh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGZhc3RTZWVrKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0Zvcndh
cmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4
dElkKTsKKyAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElk
LCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWlu
dDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCB0b2dnbGVQaWN0dXJl
SW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVNdXRlZCh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBi
b29sKTsKKworICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOworICAgIEhhc2hNYXA8dWludDY0X3Qs
IE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKKyAgICB1aW50NjRfdCBtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCB7IDAgfTsKKyAgICBIYXNoQ291bnRlZFNldDx1aW50NjRfdD4g
bV9jbGllbnRDb3VudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zYWM4Zjc5ZDFiMjQ1NWE3ODBmODIyN2EzZWZhNDkxNjlmZDA1ZWE5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorbWVzc2FnZXMg
LT4gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5IHsKKyAgICBSZXNldE1lZGlhU3RhdGUodWlu
dDY0X3QgY29udGV4dElkKQorICAgIEN1cnJlbnRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQorICAgIEJ1ZmZlcmVkVGlt
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQorICAgIFNl
ZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6
OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBk
b3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQorICAgIENhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQorICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNl
bGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBMZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKKyAgICBBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBMZWdpYmxlTWVkaWFTZWxlY3Rp
b25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQorICAgIEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERl
dmljZU5hbWUpCisgICAgV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKKyAgICBEdXJhdGlvbkNoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCisgICAgUGxheWJhY2tTdGFydGVkVGltZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKKyAg
ICBSYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUg
cmF0ZSkKKyAgICBNdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsK
KyAgICBTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKKyAgICBDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkKKworICAgIEhhbmRsZUNvbnRy
b2xsZWRFbGVtZW50SURSZXNwb25zZSh1aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZCkKK30K
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyYzM5OWU4ZGI4NmE5
MTUwNWEyYWRkNjY0NGRkODkwMzYyMjdlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KQEAgLTAs
MCArMSw1NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisKKyNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKKyNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIgorI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5o
IgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisjcHJhZ21hIG1hcmsgLSBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQKKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmFkZENsaWVudChQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGll
bnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworfQorCit2b2lkIFBsYXliYWNrU2Vz
c2lvbk1vZGVsQ29udGV4dDo6cmVtb3ZlQ2xpZW50KFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Cisg
ICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OnBsYXkoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFu
YWdlci0+cGxheShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5wYXVzZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250
ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+dG9nZ2xlUGxheVN0YXRlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBpZiAobV9tYW5h
Z2VyKQorICAgICAgICBtX21hbmFnZXItPmJlZ2luU2NydWJiaW5nKG1fY29udGV4dElkKTsKKwor
ICAgIG1faXNTY3J1YmJpbmcgPSB0cnVlOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6ZW5kU2NydWJiaW5nKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPmVuZFNjcnViYmluZyhtX2NvbnRleHRJZCk7CisKKyAgICBtX2lzU2NydWJiaW5n
ID0gZmFsc2U7CisgICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgPSBpc1BsYXlp
bmcoKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWtUb1RpbWUo
ZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5z
ZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWsobV9jb250ZXh0SWQsIHRpbWUpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YmVnaW5TY2FubmluZ0Zv
cndhcmQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZChtX2NvbnRleHRJZCk7Cit9CisKK3Zv
aWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY2FubmluZygpCit7CisgICAgaWYg
KG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY2FubmluZyhtX2NvbnRleHRJZCk7
Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAg
ICAgIG1fbWFuYWdlci0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRp
b25JZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0
dXJlSW5QaWN0dXJlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlTXV0ZWQoKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlTXV0ZWQobV9jb250ZXh0SWQpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAg
ICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldE11dGVkKG1fY29udGV4dElk
LCBtdXRlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5YmFj
a1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBt
X3BsYXliYWNrU3RhcnRlZFRpbWUgPSBwbGF5YmFja1N0YXJ0ZWRUaW1lOworICAgIG1fcGxheWJh
Y2tTdGFydGVkVGltZU5lZWRzVXBkYXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQoreworICAg
IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKKyAgICAgICAgY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBj
dXJyZW50VGltZSkKK3sKKyAgICBtX2N1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7CisgICAgYXV0
byBhbmNob3JUaW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVd
OworICAgIGlmIChtX3BsYXliYWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSkKKyAgICAgICAgcGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY3VycmVudFRpbWUpOworCisgICAgZm9yIChhdXRvKiBj
bGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1
cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBt
X2J1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZTsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1f
Y2xpZW50cykKKyAgICAgICAgY2xpZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGlt
ZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChi
b29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIG1faXNQbGF5aW5nID0g
aXNQbGF5aW5nOworICAgIG1fcGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOworICAgIGZvciAo
YXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlz
UGxheWluZywgcGxheWJhY2tSYXRlKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiBzZWVrYWJs
ZVJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2
YWwpCit7CisgICAgbV9zZWVrYWJsZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2VzOworICAgIG1fc2Vl
a2FibGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IGxhc3RNb2RpZmllZFRpbWU7CisgICAg
bV9saXZlVXBkYXRlSW50ZXJ2YWwgPSBsaXZlVXBkYXRlSW50ZXJ2YWw7CisgICAgZm9yIChhdXRv
KiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFu
Z2VkKHNlZWthYmxlUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZl
cnNlQ2hhbmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKK3sKKyAgICBtX2NhblBsYXlGYXN0
UmV2ZXJzZSA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1f
Y2xpZW50cykKKyAgICAgICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBs
YXlGYXN0UmV2ZXJzZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojph
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiYgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMsIHVpbnQ2NF90IGF1ZGlvTWVk
aWFTZWxlY3RlZEluZGV4KQoreworICAgIG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBh
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczsKKyAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4
ID0gYXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCisgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4KQoreworICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnM7CisgICAgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGll
bnRzKQorICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMsIGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNlbGVj
dGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIG1fYXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4OworCisgICAgZm9yIChhdXRvKiBjbGll
bnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbkluZGV4
Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENv
bnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQoreworICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5k
ZXg7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50
LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdl
ZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZE5hbWUpCit7CisgICAgbV9leHRl
cm5hbFBsYXliYWNrRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgbV9leHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSA9IHR5cGU7CisgICAgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxpemVkRGV2aWNlTmFt
ZSA9IGxvY2FsaXplZE5hbWU7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykK
KyAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFibGVkLCB0eXBlLCBs
b2NhbGl6ZWROYW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6Ondp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIHdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKQoreworICAgIG1fd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgPSB3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1f
Y2xpZW50cykKKyAgICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENo
YW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOworfQorCit2b2lkIFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCit7CisgICAgbV9t
dXRlZCA9IG11dGVkOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICBjbGllbnQtPm11dGVkQ2hhbmdlZChtdXRlZCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eQorCitSZWZQdHI8UGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5PiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBh
Z2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkocGFnZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBtX3BhZ2UoJnBhZ2Up
Cit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdl
LT5wYWdlSUQoKSwgKnRoaXMpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6On5Q
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkoKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlID0gbnVs
bHB0cjsKKworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsK
KyAgICAgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAg
ICAgIFJlZlB0cjxQbGF0Zm9ybVBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlOwor
ICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOworCisgICAgICAgIGlu
dGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigp
OworICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Cit9CisKK1BsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWY8
UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIFJlZjxQbGF0Zm9ybVBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2U6OmNyZWF0ZShtb2RlbCk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdU
Rk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJm
YWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0JiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1v
ZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitQbGF0Zm9ybVBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZSYgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZh
Y2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkKTsKK30KKwordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4
dElkKQoreworICAgIGlmICghbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmludmFsaWRhdGUo
KTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Cit9CisKKyNwcmFnbWEgbWFy
ayBNZXNzYWdlcyBmcm9tIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKwordm9pZCBQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWlu
dDY0X3QgY29udGV4dElkKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAobV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQgPT0gY29udGV4dElkKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAgICAgIHJlbW92ZUNsaWVudEZvckNv
bnRleHQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOworCisgICAgbV9jb250cm9sc01hbmFn
ZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7CisgICAgZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKS5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKKyAgICBhZGRDbGllbnRG
b3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKworICAgIG1fcGFnZS0+dmlk
ZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNv
bnRleHRJZCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6
OmNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBpZiAoIW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICByZXR1cm47CisKKyAg
ICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAg
ICBtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7CisgICAgbV9wYWdlLT52aWRlb0NvbnRy
b2xzTWFuYWdlckRpZENoYW5nZSgpOworI2VuZGlmCit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQoreworICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFTdGF0ZSgpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCit7CisgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1ZlY3RvckNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91Ymxl
Pj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRhdGVJbnRl
cnZhbCkKK3sKKyAgICBSZWY8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNy
ZWF0ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKKyAgICAgICAg
QVNTRVJUKGlzZmluaXRlKHJhbmdlLmZpcnN0KSk7CisgICAgICAgIEFTU0VSVChpc2Zpbml0ZShy
YW5nZS5zZWNvbmQpKTsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnNlY29uZCA+PSByYW5nZS5maXJz
dCk7CisgICAgICAgIHRpbWVSYW5nZXMtPmFkZChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsK
KyAgICB9CisKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWthYmxlUmFuZ2VzQ2hhbmdl
ZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCit7CisgICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHZhbHVlKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPE1lZGlh
U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5n
ZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25J
bmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQor
eworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhD
aGFuZ2VkKHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTo6ZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2
aWNlTmFtZSkKK3sKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7CisgICAgQVNTRVJUKHR5cGUgPT0gUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gUGxheWJhY2tT
ZXNzaW9uTW9kZWw6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBlID09IFBsYXliYWNrU2Vzc2lvbk1v
ZGVsOjpUYXJnZXRUeXBlTm9uZSk7CisKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmV4dGVy
bmFsUGxheWJhY2tDaGFuZ2VkKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKK3sK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
Q2hhbmdlZChkaXNhYmxlZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjptdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQoreworICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkubXV0ZWRDaGFuZ2VkKG11dGVkKTsKK30KKwordm9pZCBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmR1cmF0
aW9uQ2hhbmdlZChkdXJhdGlvbik7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxh
eWJhY2tTdGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGltZSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcmF0ZSk7Cit9CisKKwordm9pZCBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1
aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZGVudGlmaWVyKSBjb25zdAoreworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBpZiAoY29udGV4dElkID09IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KQorICAgICAgICBtX3BhZ2UtPmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShpZGVu
dGlmaWVyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7CisgICAgVU5VU0VE
X1BBUkFNKGlkZW50aWZpZXIpOworI2VuZGlmCit9CisKKworI3ByYWdtYSBtYXJrIE1lc3NhZ2Vz
IHRvIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnBhdXNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OlBhdXNlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQor
Cit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5n
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJi
aW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVuZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1Rp
bWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElkLCB0
aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQoreworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RmFzdFNlZWso
Y29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0
SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
Kwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nQmFja3dhcmQoY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpl
bmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY2FubmluZyhjb250ZXh0SWQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNl
bGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkK
K3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlNl
bGVjdEF1ZGlvTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2
b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGljdHVyZUluUGljdHVyZSh1
aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJlSW5QaWN0dXJlKGNvbnRleHRJZCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9n
Z2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6VG9nZ2xlTXV0ZWQoY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRN
dXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpTZXRNdXRlZChjb250ZXh0SWQsIG11
dGVkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5OjpyZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpCit7CisgICAgaWYgKG1fY29udHJv
bHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK1BsYXRmb3Jt
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNv
bnRyb2xzTWFuYWdlckludGVyZmFjZSgpCit7CisgICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBpbnRlcmZhY2Ug
PSBlbnN1cmVJbnRlcmZhY2UobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAgIHJldHVy
biAmaW50ZXJmYWNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE3NzI1NmU0YWVlODFl
ZDQ2Y2NhZDZmZGUyNjA5YjNlYmM0OTZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCkBAIC0wLDAg
KzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiAoUExBVEZPUk0oSU9T
KSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisj
aW5jbHVkZSA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oPgorI2Vsc2UK
KyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oPgorI2VuZGlm
CisKKyNpZiBQTEFURk9STShJT1MpCit0eXBlZGVmIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0IFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworI2Vsc2UKK3R5
cGVkZWYgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjIFBsYXRmb3JtVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJQYWdlUHJveHk7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk7CitjbGFz
cyBQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ7CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk7CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCBmaW5hbAorICAg
IDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PgorICAgICwg
cHVibGljIFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAgLCBwdWJsaWMgV2ViQ29y
ZTo6VmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gY3JlYXRlKFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eSYgbWFuYWdlciwgUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFj
a1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KG1hbmFnZXIsIHBsYXli
YWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+VmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFu
YWdlciA9IG51bGxwdHI7IH0KKworICAgIFBsYXRmb3JtVmlldyAqbGF5ZXJIb3N0VmlldygpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXJIb3N0Vmlldy5nZXQoKTsgfQorICAgIHZvaWQgc2V0TGF5ZXJI
b3N0VmlldyhSZXRhaW5QdHI8UGxhdGZvcm1WaWV3PiYmIGxheWVySG9zdFZpZXcpIHsgbV9sYXll
ckhvc3RWaWV3ID0gV1RGTW92ZShsYXllckhvc3RWaWV3KTsgfQorCitwcml2YXRlOgorICAgIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmLCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQmLCB1aW50NjRfdCk7CisKKyAgICAvLyBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbAorICAgIHZvaWQgYWRkQ2xpZW50KFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ2xpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVDbGllbnQoV2ViQ29yZTo6
VmlkZW9GdWxsc2NyZWVuTW9kZWxDbGllbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RG
dWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEgPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmlzaWJsZSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2hhc1ZpZGVvOyB9CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHZpZGVvRGltZW5zaW9ucygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9EaW1lbnNpb25zOyB9CisKKyAgICAvLyBW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDbGVhbnVw
RnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKCkgb3ZlcnJpZGU7CisKKyAgICBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIG1fbWFu
YWdlcjsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtX3BsYXliYWNrU2Vz
c2lvbk1vZGVsOworICAgIHVpbnQ2NF90IG1fY29udGV4dElkOworICAgIFJldGFpblB0cjxQbGF0
Zm9ybVZpZXcgKj4gbV9sYXllckhvc3RWaWV3OworICAgIEhhc2hTZXQ8V2ViQ29yZTo6VmlkZW9G
dWxsc2NyZWVuTW9kZWxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgV2ViQ29yZTo6RmxvYXRTaXpl
IG1fdmlkZW9EaW1lbnNpb25zOworICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07Cit9Owor
CitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYpOwor
ICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpOworCisgICAgdm9pZCBp
bnZhbGlkYXRlKCk7CisKKyAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsK
KyAgICBib29sIGhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlKSBjb25zdDsKKyAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9Q
aWN0dXJlSW5QaWN0dXJlKCkgY29uc3Q7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFj
dGl2ZSgpOworICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Q7CisKKyNpZiBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKKyAgICBib29sIGlzUGxheWluZ1Zp
ZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7CisKKyAgICBleHBsaWNp
dCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiwgUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBs
ZTxSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiwgUmVmUHRyPFBsYXRmb3JtVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbElu
dGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIGVuc3VyZU1v
ZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYWRk
Q2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcmVtb3ZlQ2xp
ZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgLy8gTWVzc2FnZXMgZnJv
bSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisgICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW5XaXRoSUQo
dWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlKTsKKyAgICB2b2lkIHNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElk
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCk7CisgICAgdm9pZCBjbGVhbnVwRnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0
IGlubGluZVJlY3QpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKQorICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9Nb2Rl
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKKyNlbmRpZgorCisgICAgLy8gTWVzc2FnZXMgdG8gVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcgorICAgIHZvaWQgcmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhID0gZmFsc2UpOworICAgIHZvaWQgZGlkU2V0dXBG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6RmxvYXRSZWN0KTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSk7CisgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwor
ICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisKKyAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5PiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7CisgICAgdWludDY0X3Qg
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwg
aW50PiBtX2NsaWVudENvdW50czsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVmYzNiNTA0N2VmNDdhYmExOTU3MWU3NjQzYTA3MmVjZTgyMjBh
ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzNiBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgKFBMQVRGT1JNKElPUykg
JiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5U
QVRJT05fTU9ERSkpCittZXNzYWdlcyAtPiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgewor
ICAgIFNldEhhc1ZpZGVvKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbykKKyAgICBT
ZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFNpemUg
dmlkZW9EaW1lbnNpb25zKQorICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0aWFsUmVj
dCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlKQorICAgIEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
CisgICAgRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0
IGZpbmFsUmVjdCkKKyAgICBDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisg
ICAgUHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNp
YmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCisgICAgRXhpdEZ1bGxzY3JlZW5XaXRob3V0
QW5pbWF0aW9uVG9Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCisjZW5k
aWYKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjY2I5YjI5
MjE5NjgyNjg2NGYwMDkxMDA4ZjkzMDg5ODg4YTE4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0K
QEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgorCisjaWYgUExBVEZPUk0oSU9TKSAm
JiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpKQorCisjaW1wb3J0ICJBUElVSUNsaWVudC5oIgorI2ltcG9ydCAiRHJhd2luZ0Fy
ZWFQcm94eS5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisjaW1w
b3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIK
KyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5p
bWF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvTWVkaWFQbGF5ZXJFbnVtcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9RdWFydHpDb3JlU1BJ
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3Rl
bUludGVyZmFjZS5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNlbmRpZgorCitA
aW50ZXJmYWNlIFdLTGF5ZXJIb3N0VmlldyA6IFBsYXRmb3JtVmlldworQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgdWludDMyX3QgY29udGV4dElEOworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gV0tMYXllckhvc3RWaWV3CisKKyNpZiBQTEFURk9STShJT1MpCisrIChDbGFzcylsYXllckNs
YXNzIHsKKyAgICByZXR1cm4gW0NBTGF5ZXJIb3N0IGNsYXNzXTsKK30KKyNlbHNlCistIChDQUxh
eWVyICopbWFrZUJhY2tpbmdMYXllcgoreworICAgIHJldHVybiBbW1tDQUxheWVySG9zdCBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOworfQorI2VuZGlmCisKKy0gKHVpbnQzMl90KWNvbnRleHRJ
RCB7CisgICAgcmV0dXJuIFtbc2VsZiBsYXllckhvc3RdIGNvbnRleHRJZF07Cit9CisKKy0gKHZv
aWQpc2V0Q29udGV4dElEOih1aW50MzJfdCljb250ZXh0SUQgeworICAgIFtbc2VsZiBsYXllckhv
c3RdIHNldENvbnRleHRJZDpjb250ZXh0SURdOworfQorCistIChDQUxheWVySG9zdCAqKWxheWVy
SG9zdCB7CisgICAgcmV0dXJuIChDQUxheWVySG9zdCAqKVtzZWxmIGxheWVyXTsKK30KKworQGVu
ZAorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNp
ZiBQTEFURk9STShJT1MpICYmICFIQVZFKEFWS0lUKQorCitSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5PiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdl
UHJveHkmKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7Cit9CisKK2Jvb2wgVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGlj
dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit7CisKK30K
Kwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21l
QWN0aXZlKCkKK3sKKworfQorI2Vsc2UKKworI3ByYWdtYSBtYXJrIC0gVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0CisKK1ZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0KFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3Qg
Y29udGV4dElkKQorICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAgICwgbV9wbGF5YmFja1Nl
c3Npb25Nb2RlbChwbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAsIG1fY29udGV4dElkKGNvbnRl
eHRJZCkKK3sKK30KKworVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+VmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0KCkKK3sKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmFkZENsaWVudChWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQoreworICAg
IEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRk
KCZjbGllbnQpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVtb3Zl
Q2xpZW50KFZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJU
KG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xp
ZW50KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlcXVlc3RGdWxs
c2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtX2NvbnRleHRJZCwgbW9kZSwgZmlu
aXNoZWRXaXRoTWVkaWEpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKK3sKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJGcmFtZShtX2NvbnRl
eHRJZCwgZnJhbWUpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0
VmlkZW9MYXllckdyYXZpdHkoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSBncmF2aXR5KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
c2V0VmlkZW9MYXllckdyYXZpdHkobV9jb250ZXh0SWQsIGdyYXZpdHkpOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KG1fY29udGV4dElkLCBtb2RlKTsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFuYWdlciA/IG1fbWFuYWdl
ci0+aXNWaXNpYmxlKCkgOiBmYWxzZTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5kaWRTZXR1cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lk
IFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAg
ICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNjcmVlbiht
X2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRF
eGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5kaWRFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFu
YWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRleHRJ
ZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29udGV4dElkKTsKK30KKworI3ByYWdt
YSBtYXJrIC0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisKK1JlZlB0cjxWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk+IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdl
YlBhZ2VQcm94eSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KSk7Cit9
CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCisgICAgOiBtX3BhZ2UoJnBhZ2UpCisgICAgLCBtX3Bs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCit7
CisgICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5w
YWdlSUQoKSwgKnRoaXMpOworfQorCitWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6On5WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7CisgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlID0gbnVsbHB0
cjsKKworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CisgICAgICAg
IFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOworICAg
ICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOworCisgICAgICAgIGludGVy
ZmFjZS0+aW52YWxpZGF0ZSgpOworICAgICAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0
cik7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV9jbGllbnRDb3Vu
dHMuY2xlYXIoKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nv
bnRleHRNYXAudmFsdWVzKCkpCisgICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbigpOworfQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6aGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmhhc01vZGUobW9kZSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRl
b1BpY3R1cmVJblBpY3R1cmUoKSBjb25zdAoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nv
bnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+bWF5
QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKK2Jvb2wgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29u
c3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Cisg
ICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1
bGxzY3JlZW4oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQorICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPmFw
cGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNy
ZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvJiBw
bGF5YmFja1Nlc3Npb25Nb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1
cmVNb2RlbChjb250ZXh0SWQpOworICAgIFJlZjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+
IG1vZGVsID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIHBsYXli
YWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpOworICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVJbnRlcmZhY2Uo
Y29udGV4dElkKTsKKyAgICBSZWY8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGlu
dGVyZmFjZSA9IFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpjcmVhdGUocGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKTsKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS0+
YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkpOworICAgIGludGVyZmFjZS0+c2V0VmlkZW9G
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6
Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1Zp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJ
ZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwor
fQorCitWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3Rk
OjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1BsYXRm
b3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6
OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwordm9pZCBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3Qg
Y29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNv
bnRleHRJZCwgMSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOworCisgICAgaW50
IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7CisgICAgQVNTRVJU
KGNsaWVudENvdW50ID4gMCk7CisgICAgY2xpZW50Q291bnQtLTsKKworICAgIGlmIChjbGllbnRD
b3VudCA8PSAwKSB7CisgICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5yZW1v
dmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7CisgICAgICAgIG1fY2xpZW50Q291bnRzLnJl
bW92ZShjb250ZXh0SWQpOworICAgICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4
dElkLCBjbGllbnRDb3VudCk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIKKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNl
dHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdE
ZXZpY2VTY2FsZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKK3sK
KyAgICBBU1NFUlQodmlkZW9MYXllcklEKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxhdGZvcm1WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U+IGludGVyZmFjZTsKKworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICBhZGRDbGllbnRGb3JDb250ZXh0
KGNvbnRleHRJZCk7CisKKyAgICBSZXRhaW5QdHI8V0tMYXllckhvc3RWaWV3PiB2aWV3ID0gc3Rh
dGljX2Nhc3Q8V0tMYXllckhvc3RWaWV3Kj4obW9kZWwtPmxheWVySG9zdFZpZXcoKSk7CisgICAg
aWYgKCF2aWV3KSB7CisgICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tMYXllckhvc3RWaWV3IGFs
bG9jXSBpbml0XSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBbdmlldyBzZXRXYW50c0xh
eWVyOllFU107CisjZW5kaWYKKyAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcodmlldyk7
CisgICAgfQorICAgIFt2aWV3IHNldENvbnRleHRJRDp2aWRlb0xheWVySURdOworICAgIGlmICho
b3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IgIT0gMSkgeworICAgICAgICAvLyBJbnZlcnQgdGhlIHNj
YWxlIHRyYW5zZm9ybSBhZGRlZCBpbiB0aGUgV2ViUHJvY2VzcyB0byBmaXggPHJkYXI6Ly9wcm9i
bGVtLzE4MzE2NTQyPi4KKyAgICAgICAgZmxvYXQgaW52ZXJzZVNjYWxlID0gMSAvIGhvc3RpbmdE
ZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAgW1t2aWV3IGxheWVyXSBzZXRTdWJsYXllclRyYW5z
Zm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VTY2FsZSwgaW52ZXJzZVNjYWxlLCAx
KV07CisgICAgfQorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVJVmlldyAqcGFyZW50VmlldyA9
IGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UtPmRyYXdp
bmdBcmVhKCkpLnJlbW90ZUxheWVyVHJlZUhvc3QoKS5yb290TGF5ZXIoKTsKKyAgICBpbnRlcmZh
Y2UtPnNldHVwRnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5pdGlhbFJlY3Qs
IHBhcmVudFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93c1BpY3R1cmVJblBpY3R1cmUp
OworI2Vsc2UKKyAgICBJbnRSZWN0IGluaXRpYWxXaW5kb3dSZWN0OworICAgIG1fcGFnZS0+cm9v
dFZpZXdUb1dpbmRvdyhpbml0aWFsUmVjdCwgaW5pdGlhbFdpbmRvd1JlY3QpOworICAgIGludGVy
ZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCptb2RlbC0+bGF5ZXJIb3N0VmlldygpLCBpbml0aWFsV2lu
ZG93UmVjdCwgbV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpLCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBh
bGxvd3NQaWN0dXJlSW5QaWN0dXJlKTsKKyNlbmRpZgorICAgIG1fcGFnZS0+dWlDbGllbnQoKS5o
YXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIHZpZGVvRnVsbHNjcmVl
bk1vZGUgJiBNZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRIYXNWaWRl
byh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit7CisgICAgZW5zdXJlSW50ZXJm
YWNlKGNvbnRleHRJZCkuaGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250
ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIGVuc3VyZUlu
dGVyZmFjZShjb250ZXh0SWQpLnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25z
KTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50
ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgaW50ZXJmYWNlLmVudGVyRnVsbHNjcmVlbigpOworCisg
ICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBnaXZlbiBmdWxsIHNjcmVlbiBtb2Rl
IGF0IGEgdGltZToKKyAgICBmb3IgKGF1dG8mIGNvbnRleHRQYWlyIDogbV9jb250ZXh0TWFwKSB7
CisgICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29udGV4dFBhaXIua2V5OworICAgICAg
ICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBzdGQ6OmdldDwxPihjb250ZXh0UGFp
ci52YWx1ZSk7CisgICAgICAgIGlmIChvdGhlckludGVyZmFjZS0+aGFzTW9kZShpbnRlcmZhY2Uu
bW9kZSgpKSkKKyAgICAgICAgICAgIG90aGVySW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRG
dWxsc2NyZWVuKCk7CisgICAgfQorfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6ZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZp
bmFsUmVjdCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsKKyNlbHNlCisgICAgSW50UmVjdCBmaW5h
bFdpbmRvd1JlY3Q7CisgICAgbV9wYWdlLT5yb290Vmlld1RvV2luZG93KGZpbmFsUmVjdCwgZmlu
YWxXaW5kb3dSZWN0KTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVsbHNj
cmVlbihmaW5hbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7CisjZW5kaWYK
K30KKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KQordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuV2l0aG91
dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQoreworICAgIGVuc3Vy
ZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9k
ZSh0YXJnZXRNb2RlKTsKK30KKyNlbmRpZgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3Vy
ZUludGVyZmFjZShjb250ZXh0SWQpLmNsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodWludDY0
X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCkK
K3sKKyAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxpbmVSZWN0KTsKKyNlbHNlCisgICAgSW50UmVjdCBpbmxp
bmVXaW5kb3dSZWN0OworICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhpbmxpbmVSZWN0LCBp
bmxpbmVXaW5kb3dSZWN0KTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5wcmVwYXJl
ZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lV2luZG93UmVjdCwgbV9wYWdlLT5wbGF0
Zm9ybVdpbmRvdygpKTsKKyNlbmRpZgorfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgdG8gVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgZmluaXNoZWRX
aXRoTWVkaWEpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpSZXF1ZXN0RnVsbHNjcmVlbk1vZGUoY29udGV4dElkLCBtb2RlLCBmaW5pc2hlZFdp
dGhNZWRpYSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNldHVw
RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OkRpZEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFbnRl
ckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5k
aWRFbnRlckZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWZQ
dHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQdHI8UGxhdGZv
cm1WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKKworICAgIHN0ZDo6dGllKG1v
ZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKwor
ICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKKyAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0VmlldyhudWxscHRy
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRp
ZENsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworCisgICAg
aW50ZXJmYWNlLT5zZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZU5vbmUpOworICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKK30KKwor
dm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZSh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKK3sKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1hY2hfcG9ydF9uYW1lX3Qg
ZmVuY2VQb3J0ID0gW1VJV2luZG93IF9zeW5jaHJvbml6ZURyYXdpbmdBY3Jvc3NQcm9jZXNzZXNd
OworI2Vsc2UKKyAgICAgICAgTWFjaFNlbmRSaWdodCBmZW5jZVNlbmRSaWdodDsKKyAgICAgICAg
aWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgp
KQorICAgICAgICAgICAgZmVuY2VTZW5kUmlnaHQgPSBkcmF3aW5nQXJlYS0+Y3JlYXRlRmVuY2Uo
KTsKKyAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBvcnQgPSBmZW5jZVNlbmRSaWdodC5s
ZWFrU2VuZFJpZ2h0KCk7CisjZW5kaWYKKworICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250ZXh0
SWQsIGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01PVkVf
U0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQs
IFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZp
ZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQsICh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdl
LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxs
c2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBtX3BhZ2UtPnVp
Q2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UobV9wYWdlLCBtb2Rl
ICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUp
OworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCitib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aXNWaXNpYmxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCkgJiYgbV9wYWdlLT5pc0luV2lu
ZG93KCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKQoreworICAgIGJvb2wgaXNWaWV3
VmlzaWJsZSA9IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KGNvbnRleHRJZCwgaXNWaWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCisjZW5k
aWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzMz
YmU2NWE5OGMyMTljMGRiOTFkMDMyODQyOTVlY2U1ZjU0NzNkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1WaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1l
UmFuZ2VzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxX
ZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lmg+Ci0jZWxzZQotI2luY2x1
ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKElPUykKLXR5cGVkZWYgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQVZLaXQgUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0jZWxzZQot
dHlwZWRlZiBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgUGxhdGZvcm1X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTsKLQotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0IGZpbmFsOiBwdWJs
aWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ+LCBwdWJsaWMgV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWwgIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gY3JlYXRlKFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0KG1h
bmFnZXIsIGNvbnRleHRJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQoKSB7IH0KLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2Vy
ID0gbnVsbHB0cjsgfQotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwKLSAgICB2b2lk
IGFkZENsaWVudChXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYpIGZpbmFs
OwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50JilmaW5hbDsKLQotICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGRvdWJsZSk7Ci0gICAg
dm9pZCBjdXJyZW50VGltZUNoYW5nZWQoZG91YmxlKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNo
YW5nZWQoZG91YmxlKTsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJs
ZSk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2Vz
JiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpOwot
ICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIGF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVkaWFT
ZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBh
dWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwot
ICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpOwotICAgIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCwgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJp
bmcmKTsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29s
KTsKLSAgICB2b2lkIG11dGVkQ2hhbmdlZChib29sKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OwotCi0gICAgV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxDb250ZXh0KFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSYgbWFuYWdl
ciwgdWludDY0X3QgY29udGV4dElkKQotICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAg
ICAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCi0gICAgewotICAgIH0KLQotICAgIC8vIFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsCi0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAgdm9pZCBw
YXVzZSgpIGZpbmFsOwotICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgZmluYWw7Ci0gICAgdm9p
ZCBiZWdpblNjcnViYmluZygpIGZpbmFsOwotICAgIHZvaWQgZW5kU2NydWJiaW5nKCkgZmluYWw7
Ci0gICAgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSkgZmluYWw7Ci0gICAgdm9pZCBmYXN0U2Vlayhk
b3VibGUgdGltZSkgZmluYWw7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIGZpbmFs
OwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgZmluYWw7Ci0gICAgdm9pZCBlbmRT
Y2FubmluZygpIGZpbmFsOwotICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRf
dCkgZmluYWw7Ci0gICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QpIGZp
bmFsOwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSgpIGZpbmFsOwotICAgIHZvaWQg
dG9nZ2xlTXV0ZWQoKSBmaW5hbDsKLSAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwotCi0g
ICAgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Bs
YXliYWNrU3RhcnRlZFRpbWU7IH0KLSAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9jdXJyZW50VGltZTsgfQotICAgIGRvdWJsZSBidWZmZXJlZFRpbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2J1ZmZlcmVkVGltZTsgfQotICAgIGJvb2wgaXNQbGF5aW5n
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KLSAgICBib29sIGlzU2NydWJi
aW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1NjcnViYmluZzsgfQotICAgIGZsb2F0IHBs
YXliYWNrUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGxheWJhY2tSYXRlOyB9Ci0gICAg
UmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IHNlZWthYmxlUmFuZ2VzKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9zZWVrYWJsZVJhbmdlcy5jb3B5UmVmKCk7IH0KLSAgICBkb3VibGUgc2Vla2FibGVU
aW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Vla2Fi
bGVUaW1lUmFuZ2VzTGFzdE1vZGlmaWVkVGltZTsgfQotICAgIGRvdWJsZSBsaXZlVXBkYXRlSW50
ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2xpdmVVcGRhdGVJbnRlcnZhbDsgfQotICAgIGJvb2wg
Y2FuUGxheUZhc3RSZXZlcnNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jYW5QbGF5RmFzdFJl
dmVyc2U7IH0KLSAgICBWZWN0b3I8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9uczsgfQotICAgIHVpbnQ2NF90IGF1ZGlvTWVkaWFTZWxlY3RlZEluZGV4
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb01lZGlhU2VsZWN0ZWRJbmRleDsgfQotICAg
IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9uczsgfQotICAgIHVpbnQ2NF90IGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2xlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXg7IH0KLSAgICBib29s
IGV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9leHRlcm5h
bFBsYXliYWNrRW5hYmxlZDsgfQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSBleHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fZXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGU7IH0KLSAgICBTdHJpbmcg
ZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERldmljZU5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V4dGVybmFsUGxheWJhY2tMb2NhbGl6ZWREZXZpY2VOYW1lOyB9Ci0gICAgYm9vbCB3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fd2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7IH0KLSAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX211dGVkOyB9Ci0KLSAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkqIG1fbWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLSAgICBIYXNoU2V0PFdl
YkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIGRv
dWJsZSBtX3BsYXliYWNrU3RhcnRlZFRpbWUgeyAwIH07Ci0gICAgYm9vbCBtX3BsYXliYWNrU3Rh
cnRlZFRpbWVOZWVkc1VwZGF0ZSB7IGZhbHNlIH07Ci0gICAgZG91YmxlIG1fZHVyYXRpb24geyAw
IH07Ci0gICAgZG91YmxlIG1fY3VycmVudFRpbWUgeyAwIH07Ci0gICAgZG91YmxlIG1fYnVmZmVy
ZWRUaW1lIHsgMCB9OwotICAgIGJvb2wgbV9pc1BsYXlpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wg
bV9pc1NjcnViYmluZyB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAwIH07
Ci0gICAgUmVmPFdlYkNvcmU6OlRpbWVSYW5nZXM+IG1fc2Vla2FibGVSYW5nZXMgeyBXZWJDb3Jl
OjpUaW1lUmFuZ2VzOjpjcmVhdGUoKSB9OwotICAgIGRvdWJsZSBtX3NlZWthYmxlVGltZVJhbmdl
c0xhc3RNb2RpZmllZFRpbWUgeyAwIH07Ci0gICAgZG91YmxlIG1fbGl2ZVVwZGF0ZUludGVydmFs
IHsgMCB9OwotICAgIGJvb2wgbV9jYW5QbGF5RmFzdFJldmVyc2UgeyBmYWxzZSB9OwotICAgIFZl
Y3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9hdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uczsKLSAgICB1aW50NjRfdCBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4IHsgMCB9Owot
ICAgIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbV9sZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zOwotICAgIHVpbnQ2NF90IG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRl
eCB7IDAgfTsKLSAgICBib29sIG1fZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQgeyBmYWxzZSB9Owot
ICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSBt
X2V4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHsgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRh
cmdldFR5cGVOb25lIH07Ci0gICAgU3RyaW5nIG1fZXh0ZXJuYWxQbGF5YmFja0xvY2FsaXplZERl
dmljZU5hbWU7Ci0gICAgYm9vbCBtX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIHsgZmFs
c2UgfTsKLSAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OwotfTsKLQotY2xhc3MgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IGNyZWF0
ZShXZWJQYWdlUHJveHkmKTsKLSAgICB2aXJ0dWFsIH5XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgUGxhdGZvcm1XZWJQbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2UqIGNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpOwotICAgIHZv
aWQgcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk7Ci0KLSAgICBleHBsaWNpdCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5Jik7Ci0gICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKLQotICAgIHR5
cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Piwg
UmVmUHRyPFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlPj4gTW9kZWxJbnRlcmZh
Y2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNl
KHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbENvbnRleHQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgUGxh
dGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UmIGVuc3VyZUludGVyZmFjZSh1aW50NjRf
dCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250
ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0
SWQpOwotCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyCi0g
ICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKHVpbnQ2NF90IGNvbnRl
eHRJZCk7Ci0gICAgdm9pZCBjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0gICAgdm9p
ZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGN1cnJlbnRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGhvc3RUaW1lKTsKLSAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKLSAgICB2b2lkIHNlZWthYmxlUmFuZ2VzVmVjdG9y
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3Vi
bGU+PiByYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUlu
dGVydmFsKTsKLSAgICB2b2lkIGNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQodWludDY0X3QgY29u
dGV4dElkLCBib29sIHZhbHVlKTsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBsZWdpYmxl
TWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwg
U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOwotICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWRDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0gICAgdm9pZCBk
dXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pOwotICAg
IHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgcGxheWJhY2tTdGFydGVkVGltZSk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZCh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSk7Ci0gICAgdm9pZCBoYW5kbGVD
b250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UodWludDY0X3QsIFN0cmluZykgY29uc3Q7Ci0gICAg
dm9pZCBtdXRlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKTsKLQotICAg
IC8vIE1lc3NhZ2VzIHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLSAgICB2b2lkIHBsYXko
dWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBlbmRTY3J1YmJp
bmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgdGltZSk7Ci0gICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSB0aW1lKTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAg
dm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qg
aW5kZXgpOwotICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpOwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4
dElkKTsKLSAgICB2b2lkIHNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0KLSAg
ICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVy
ZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fY2xpZW50Q291
bnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MzZhODMyNzNlYjhlMTQ0YTZhMTAzNTA1NTc4OWMyM2Uw
OTEyN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1tZXNzYWdl
cyAtPiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkgewotICAgIFJlc2V0TWVkaWFTdGF0
ZSh1aW50NjRfdCBjb250ZXh0SWQpCi0gICAgQ3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCi0gICAgQnVmZmVy
ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCi0g
ICAgU2Vla2FibGVSYW5nZXNWZWN0b3JDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9y
PHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcywgZG91YmxlIGxhc3RNb2RpZmllZFRp
bWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi0gICAgQ2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi0gICAgQXVkaW9NZWRpYVNlbGVj
dGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFdlYkNvcmU6Ok1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotICAg
IExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
VmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQotICAgIEF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotICAgIExlZ2libGVNZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCi0gICAgRXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxp
emVkRGV2aWNlTmFtZSkKLSAgICBXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQo
dWludDY0X3QgY29udGV4dElkLCBib29sIGRpc2FibGVkKQotICAgIER1cmF0aW9uQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikKLSAgICBQbGF5YmFja1N0YXJ0ZWRU
aW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1l
KQotICAgIFJhdGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRv
dWJsZSByYXRlKQotICAgIE11dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0
ZWQpOwotICAgIFNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29u
dGV4dElkKQotICAgIENsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKQotCi0gICAgSGFuZGxl
Q29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgU3RyaW5nIGlk
KQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGRmOWQzM2Y5ZmMwODkzYTgyMDk3YTVlZWM4Zjg2ZjVhYTg2NTNjZmYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCisr
KyAvZGV2L251bGwKQEAgLTEsNTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCi0K
LSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi0KLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5Lmgi
Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jcHJhZ21hIG1hcmsgLSBXZWJQbGF5YmFj
a1Nlc3Npb25Nb2RlbENvbnRleHQKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRl
eHQ6OmFkZENsaWVudChXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCYgY2xpZW50KQotewot
ICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMu
YWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6
cmVtb3ZlQ2xpZW50KFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0g
ICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLnJl
bW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6
OnBsYXkoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cGxheSht
X2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojpw
YXVzZSgpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5wYXVzZSht
X2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0Ojp0
b2dnbGVQbGF5U3RhdGUoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdl
ci0+dG9nZ2xlUGxheVN0YXRlKG1fY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPmJlZ2luU2NydWJiaW5nKG1fY29udGV4dElkKTsKLQotICAg
IG1faXNTY3J1YmJpbmcgPSB0cnVlOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
Q29udGV4dDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBt
X21hbmFnZXItPmVuZFNjcnViYmluZyhtX2NvbnRleHRJZCk7Ci0KLSAgICBtX2lzU2NydWJiaW5n
ID0gZmFsc2U7Ci0gICAgbV9wbGF5YmFja1N0YXJ0ZWRUaW1lTmVlZHNVcGRhdGUgPSBpc1BsYXlp
bmcoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNlZWtUb1Rp
bWUoZG91YmxlIHRpbWUpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2Vy
LT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQotewotICAgIGlmIChtX21h
bmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWsobV9jb250ZXh0SWQsIHRpbWUpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YmVnaW5T
Y2FubmluZ0ZvcndhcmQobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZChtX2NvbnRleHRJ
ZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjplbmRTY2Fubmlu
ZygpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY2Fubmlu
ZyhtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0
OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQotewotICAgIGlmICht
X21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihtX2Nv
bnRleHRJZCwgb3B0aW9uSWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29u
dGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQotewotICAg
IGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
TW9kZWxDb250ZXh0Ojp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUobV9jb250ZXh0
SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6dG9nZ2xlTXV0
ZWQoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlTXV0
ZWQobV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4
dDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBt
X21hbmFnZXItPnNldE11dGVkKG1fY29udGV4dElkLCBtdXRlZCk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZChkb3Vi
bGUgcGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWUgPSBw
bGF5YmFja1N0YXJ0ZWRUaW1lOwotICAgIG1fcGxheWJhY2tTdGFydGVkVGltZU5lZWRzVXBkYXRl
ID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpkdXJh
dGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQotewotICAgIG1fZHVyYXRpb24gPSBkdXJhdGlv
bjsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5k
dXJhdGlvbkNoYW5nZWQoZHVyYXRpb24pOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSkKLXsKLSAg
ICBtX2N1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgYXV0byBhbmNob3JUaW1lID0gW1tO
U1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwotICAgIGlmIChtX3BsYXli
YWNrU3RhcnRlZFRpbWVOZWVkc1VwZGF0ZSkKLSAgICAgICAgcGxheWJhY2tTdGFydGVkVGltZUNo
YW5nZWQoY3VycmVudFRpbWUpOwotCi0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMp
Ci0gICAgICAgIGNsaWVudC0+Y3VycmVudFRpbWVDaGFuZ2VkKGN1cnJlbnRUaW1lLCBhbmNob3JU
aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OmJ1ZmZlcmVk
VGltZUNoYW5nZWQoZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBtX2J1ZmZlcmVkVGltZSA9
IGJ1ZmZlcmVkVGltZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAg
ICAgY2xpZW50LT5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Ci19Ci0KLXZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKQotewotICAgIG1faXNQbGF5aW5nID0gaXNQbGF5aW5nOwot
ICAgIG1fcGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwotICAgIGZvciAoYXV0byogY2xpZW50
IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcGxh
eWJhY2tSYXRlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbENvbnRleHQ6OnNl
ZWthYmxlUmFuZ2VzQ2hhbmdlZChXZWJDb3JlOjpUaW1lUmFuZ2VzJiBzZWVrYWJsZVJhbmdlcywg
ZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCi17Ci0g
ICAgbV9zZWVrYWJsZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2VzOwotICAgIG1fc2Vla2FibGVUaW1l
UmFuZ2VzTGFzdE1vZGlmaWVkVGltZSA9IGxhc3RNb2RpZmllZFRpbWU7Ci0gICAgbV9saXZlVXBk
YXRlSW50ZXJ2YWwgPSBsaXZlVXBkYXRlSW50ZXJ2YWw7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQg
OiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHNlZWth
YmxlUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotfQotCi12
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hh
bmdlZChib29sIGNhblBsYXlGYXN0UmV2ZXJzZSkKLXsKLSAgICBtX2NhblBsYXlGYXN0UmV2ZXJz
ZSA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKLSAgICAgICAgY2xpZW50LT5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKGNhblBsYXlGYXN0
UmV2ZXJzZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjphdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMsIHVpbnQ2NF90IGF1ZGlvTWVkaWFT
ZWxlY3RlZEluZGV4KQotewotICAgIG1fYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBhdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uczsKLSAgICBtX2F1ZGlvTWVkaWFTZWxlY3RlZEluZGV4ID0g
YXVkaW9NZWRpYVNlbGVjdGVkSW5kZXg7Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVu
dHMpCi0gICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zLCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCk7Ci19Ci0K
LXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBsZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zLCB1aW50NjRfdCBsZWdpYmxlTWVkaWFTZWxlY3RlZElu
ZGV4KQotewotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IGxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnM7Ci0gICAgbV9sZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4ID0gbGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleDsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGll
bnRzKQotICAgICAgICBjbGllbnQtPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMsIGxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6YXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIG1fYXVk
aW9NZWRpYVNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4OwotCi0gICAgZm9yIChhdXRvKiBj
bGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+YXVkaW9NZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZChzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQotewotICAgIG1fbGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCA9IHNlbGVj
dGVkSW5kZXg7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAg
Y2xpZW50LT5sZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2VsZWN0ZWRJbmRleCk7
Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0OjpleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZE5hbWUpCi17
Ci0gICAgbV9leHRlcm5hbFBsYXliYWNrRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgbV9leHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSA9IHR5cGU7Ci0gICAgbV9leHRlcm5hbFBsYXliYWNrTG9jYWxp
emVkRGV2aWNlTmFtZSA9IGxvY2FsaXplZE5hbWU7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChlbmFi
bGVkLCB0eXBlLCBsb2NhbGl6ZWROYW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbENvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIHdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKQotewotICAgIG1fd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQgPSB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDsKLSAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT53aXJlbGVzc1ZpZGVvUGxh
eWJhY2tEaXNhYmxlZENoYW5nZWQod2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOwotfQot
Ci12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dDo6bXV0ZWRDaGFuZ2VkKGJvb2wg
bXV0ZWQpCi17Ci0gICAgbV9tdXRlZCA9IG11dGVkOwotICAgIGZvciAoYXV0byogY2xpZW50IDog
bV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPm11dGVkQ2hhbmdlZChtdXRlZCk7Ci19Ci0KLSNw
cmFnbWEgbWFyayAtIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQotCi1SZWZQdHI8V2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5PiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkocGFnZSkpOwotfQotCi1XZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShXZWJQ
YWdlUHJveHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UoJnBhZ2UpCi17Ci0gICAgbV9wYWdlLT5wcm9j
ZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMp
OwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6On5XZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkoKQotewotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0g
ICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsK
LQotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAg
ICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgICAg
IFJlZlB0cjxQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlOwot
ICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotCi0gICAgICAgIGlu
dGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIG1fY29udGV4dE1hcC5jbGVhcigp
OwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAg
ICBSZWY8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0PiBtb2RlbCA9IFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOwotICAgIFJlZjxQ
bGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZT4gaW50ZXJmYWNlID0gUGxhdGZvcm1X
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U6OmNyZWF0ZShtb2RlbCk7Ci0KLSAgICByZXR1cm4g
c3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwotfQot
Ci1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFk
ZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKLX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJ
ZCkpOwotfQotCi1QbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSYgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphZGRD
bGllbnRGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX2NsaWVudENvdW50
cy5hZGQoY29udGV4dElkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIGlm
ICghbV9jbGllbnRDb3VudHMucmVtb3ZlKGNvbnRleHRJZCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmludmFsaWRhdGUoKTsKLSAgICBtX2NvbnRl
eHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9t
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJXaXRoSUQodWludDY0X3QgY29u
dGV4dElkKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAobV9jb250cm9sc01hbmFnZXJD
b250ZXh0SWQgPT0gY29udGV4dElkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb250
cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAgICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQobV9j
b250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotCi0gICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0
SWQgPSBjb250ZXh0SWQ7Ci0gICAgZW5zdXJlSW50ZXJmYWNlKG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkKS5lbnN1cmVDb250cm9sc01hbmFnZXIoKTsKLSAgICBhZGRDbGllbnRGb3JDb250ZXh0
KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLQotICAgIG1fcGFnZS0+dmlkZW9Db250cm9s
c01hbmFnZXJEaWRDaGFuZ2UoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNsZWFy
UGxheWJhY2tDb250cm9sc01hbmFnZXIoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAo
IW1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZW1v
dmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKLSAgICBtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCA9IDA7Ci0gICAgbV9wYWdlLT52aWRlb0NvbnRyb2xzTWFu
YWdlckRpZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQotewotICAgIGVu
c3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFTdGF0ZSgpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCi17Ci0gICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5jdXJyZW50VGltZUNoYW5nZWQoY3VycmVudFRpbWUpOwot
fQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6YnVmZmVyZWRUaW1lQ2hh
bmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCi17Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5idWZmZXJlZFRpbWVDaGFuZ2VkKGJ1ZmZlcmVkVGltZSk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZWVrYWJsZVJhbmdlc1Zl
Y3RvckNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwg
ZG91YmxlPj4gcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVVcGRh
dGVJbnRlcnZhbCkKLXsKLSAgICBSZWY8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVSYW5n
ZXM6OmNyZWF0ZSgpOwotICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKLSAg
ICAgICAgQVNTRVJUKGlzZmluaXRlKHJhbmdlLmZpcnN0KSk7Ci0gICAgICAgIEFTU0VSVChpc2Zp
bml0ZShyYW5nZS5zZWNvbmQpKTsKLSAgICAgICAgQVNTRVJUKHJhbmdlLnNlY29uZCA+PSByYW5n
ZS5maXJzdCk7Ci0gICAgICAgIHRpbWVSYW5nZXMtPmFkZChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vj
b25kKTsKLSAgICB9Ci0KLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWthYmxlUmFuZ2Vz
Q2hhbmdlZCh0aW1lUmFuZ2VzLCBsYXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y2FuUGxheUZhc3RS
ZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCi17Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5jYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHZhbHVlKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChvcHRpb25z
LCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjphdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoc2Vs
ZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojps
ZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkubGVnaWJs
ZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHNlbGVjdGVkSW5kZXgpOwotfQotCi12b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6ZXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXND
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRU
eXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKLXsKLSAgICBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdl
YlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0
VHlwZSk7Ci0gICAgQVNTRVJUKHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdl
dFR5cGVBaXJQbGF5IHx8IHR5cGUgPT0gV2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OlRhcmdldFR5
cGVUVk91dCB8fCB0eXBlID09IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpUYXJnZXRUeXBlTm9u
ZSk7Ci0KLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmV4dGVybmFsUGxheWJhY2tDaGFuZ2Vk
KGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChkaXNhYmxl
ZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjptdXRlZENoYW5n
ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11dGVkKQotewotICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkubXV0ZWRDaGFuZ2VkKG11dGVkKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHk6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSBkdXJhdGlvbikKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmR1cmF0aW9uQ2hhbmdl
ZChkdXJhdGlvbik7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Ojpw
bGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBwbGF5
YmFja1N0YXJ0ZWRUaW1lKQotewotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxheWJhY2tT
dGFydGVkVGltZUNoYW5nZWQocGxheWJhY2tTdGFydGVkVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyYXRlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKLXsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLnJhdGVDaGFuZ2VkKGlzUGxheWluZywgcmF0ZSk7Ci19Ci0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZSh1
aW50NjRfdCBjb250ZXh0SWQsIFN0cmluZyBpZGVudGlmaWVyKSBjb25zdAotewotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBpZiAoY29udGV4dElkID09IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KQotICAgICAgICBtX3BhZ2UtPmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShpZGVu
dGlmaWVyKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHRJZCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGlkZW50aWZpZXIpOwotI2VuZGlmCi19Ci0KLQotI3ByYWdtYSBtYXJrIE1lc3NhZ2Vz
IHRvIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQotewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlBhdXNlKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9n
Z2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZShjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkJlZ2luU2NydWJi
aW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OkVu
ZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUgdGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpmYXN0U2Vl
ayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQotewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6RmFzdFNlZWsoY29udGV4dElkLCB0
aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdp
blNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9p
ZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1
aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpCZWdpblNjYW5uaW5nQmFja3dhcmQoY29udGV4dElkKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpFbmRTY2FubmluZyhjb250ZXh0SWQp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRf
dCBpbmRleCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFn
ZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5k
ZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9n
Z2xlUGljdHVyZUluUGljdHVyZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpUb2dnbGVQaWN0dXJlSW5Q
aWN0dXJlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6dG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
VG9nZ2xlTXV0ZWQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpTZXRNdXRlZChjb250ZXh0SWQsIG11dGVkKSwgbV9wYWdlLT5wYWdlSUQo
KSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpyZXF1ZXN0Q29u
dHJvbGxlZEVsZW1lbnRJRCgpCi17Ci0gICAgaWYgKG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXF1ZXN0KG1fY29udHJvbHNNYW5hZ2VyQ29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLVBsYXRmb3JtV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OmNvbnRyb2xzTWFu
YWdlckludGVyZmFjZSgpCi17Ci0gICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJ
bnRlcmZhY2UobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOwotICAgIHJldHVybiAmaW50ZXJm
YWNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVlMDQwY2EwNTExNDUzY2E3MDkwNGE1YTRkY2RlZmU5ZDllZjUyMWMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgKFBMQVRGT1JN
KElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
Vmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgUExBVEZP
Uk0oSU9TKQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VNYWMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKQotdHlwZWRlZiBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZTsKLSNlbHNlCi10eXBlZGVmIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYyBQbGF0Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxD
b250ZXh0OwotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OwotCi1jbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWwKLSAgICA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4KLSAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyICB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkmIG1hbmFnZXIsIFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsQ29udGV4dCYgcGxheWJh
Y2tTZXNzaW9uTW9kZWwsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5hZ2VyLCBw
bGF5YmFja1Nlc3Npb25Nb2RlbCwgY29udGV4dElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkg
eyBtX21hbmFnZXIgPSBudWxscHRyOyB9Ci0KLSAgICBQbGF0Zm9ybVZpZXcgKmxheWVySG9zdFZp
ZXcoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdFZpZXcuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dExheWVySG9zdFZpZXcoUmV0YWluUHRyPFBsYXRmb3JtVmlldz4mJiBsYXllckhvc3RWaWV3KSB7
IG1fbGF5ZXJIb3N0VmlldyA9IFdURk1vdmUobGF5ZXJIb3N0Vmlldyk7IH0KLQotcHJpdmF0ZToK
LSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5JiwgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDb250ZXh0JiwgdWludDY0X3QpOwot
Ci0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKLSAgICB2b2lkIGFkZENsaWVudChXZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVtb3ZlQ2xpZW50KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlh
ID0gZmFsc2UpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6
OkZsb2F0UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRl
b0dyYXZpdHkpIG92ZXJyaWRlOwotICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc1ZpZGVv
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQotICAgIFdlYkNvcmU6OkZs
b2F0U2l6ZSB2aWRlb0RpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVv
RGltZW5zaW9uczsgfQotCi0gICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIK
LSAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkRW50
ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2
b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOwotCi0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7Ci0gICAgUmVmPFdlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsQ29udGV4dD4gbV9wbGF5YmFja1Nlc3Npb25Nb2RlbDsKLSAgICB1aW50NjRf
dCBtX2NvbnRleHRJZDsKLSAgICBSZXRhaW5QdHI8UGxhdGZvcm1WaWV3ICo+IG1fbGF5ZXJIb3N0
VmlldzsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50
Kj4gbV9jbGllbnRzOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3ZpZGVvRGltZW5zaW9uczsK
LSAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OwotfTsKLQotY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IGNyZWF0ZShX
ZWJQYWdlUHJveHkmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkmKTsKLSAgICB2aXJ0
dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKTsKLQotICAgIHZvaWQgaW52YWxp
ZGF0ZSgpOwotCi0gICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAg
Ym9vbCBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSkgY29uc3Q7Ci0gICAgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVy
ZUluUGljdHVyZSgpIGNvbnN0OwotICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUo
KTsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCi0gICAgYm9vbCBpc1BsYXlpbmdWaWRlb0lu
RW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OwotCi0gICAgZXhwbGljaXQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94eSYsIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eSYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxQbGF0
Zm9ybVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7Ci0g
ICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFBsYXRmb3JtV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLQotICAg
IC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgotICAgIHZvaWQgc2V0
dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXll
cklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1Nj
YWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSk7Ci0gICAgdm9pZCBzZXRIYXNWaWRl
byh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25z
KHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci0gICAgdm9p
ZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGV4aXRGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOwot
ICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJs
ZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KTsKLSNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuV2l0
aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0jZW5kaWYKLQotICAgIC8vIE1l
c3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKLSAgICB2b2lkIHJlcXVlc3RGdWxs
c2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSA9IGZhbHNl
KTsKLSAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAg
IHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGRp
ZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgZGlkQ2xlYW51
cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJG
cmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7Ci0gICAgdm9pZCBz
ZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOwotICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1z
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lu
bGluZSh1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7Ci0g
ICAgUmVmPFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4g
bV9jb250ZXh0TWFwOwotICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsg
MCB9OwotICAgIEhhc2hNYXA8dWludDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7Ci19OwotICAg
IAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjI4MTVkNjcyMzhlOWQzYWZmY2YwMWY0ZjRkYmQ0MDUyNDA4NDRjZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkg
fHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLW1l
c3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSB7Ci0gICAgU2V0SGFzVmlk
ZW8odWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQotICAgIFNldFZpZGVvRGltZW5z
aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWRlb0RpbWVuc2lv
bnMpCi0gICAgU2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMy
X3QgdmlkZW9MYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBmbG9hdCBob3N0
aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1
cmUpCi0gICAgRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBFeGl0RnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQot
ICAgIENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBQcmVwYXJlZFRv
UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6
OkludFJlY3QgaW5saW5lUmVjdCkKLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkKLSAgICBFeGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRpb25Ub01v
ZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLSNlbmRpZgotfQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDYxMjlhZDlhMTQxZDQxNmIxYjliZWQyZTMzN2FlNmFhZTFkYWUxYzUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCisrKyAvZGV2L251bGwK
QEAgLTEsNTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgotCi0jaWYgUExBVEZPUk0oSU9T
KSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VO
VEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJBUElVSUNsaWVudC5oIgotI2ltcG9ydCAiRHJhd2lu
Z0FyZWFQcm94eS5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgot
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCA8UXVhcnR6
Q29yZS9Db3JlQW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5ZXJFbnVtcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9R
dWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBvcnQg
PFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2ltcG9ydCAi
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgotI2ltcG9ydCAiVUlLaXRTUEkuaCIK
LSNlbmRpZgotCi1AaW50ZXJmYWNlIFdLTGF5ZXJIb3N0VmlldyA6IFBsYXRmb3JtVmlldwotQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgdWludDMyX3QgY29udGV4dElEOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gV0tMYXllckhvc3RWaWV3Ci0KLSNpZiBQTEFURk9STShJT1MpCi0rIChD
bGFzcylsYXllckNsYXNzIHsKLSAgICByZXR1cm4gW0NBTGF5ZXJIb3N0IGNsYXNzXTsKLX0KLSNl
bHNlCi0tIChDQUxheWVyICopbWFrZUJhY2tpbmdMYXllcgotewotICAgIHJldHVybiBbW1tDQUxh
eWVySG9zdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotfQotI2VuZGlmCi0KLS0gKHVpbnQz
Ml90KWNvbnRleHRJRCB7Ci0gICAgcmV0dXJuIFtbc2VsZiBsYXllckhvc3RdIGNvbnRleHRJZF07
Ci19Ci0KLS0gKHZvaWQpc2V0Q29udGV4dElEOih1aW50MzJfdCljb250ZXh0SUQgewotICAgIFtb
c2VsZiBsYXllckhvc3RdIHNldENvbnRleHRJZDpjb250ZXh0SURdOwotfQotCi0tIChDQUxheWVy
SG9zdCAqKWxheWVySG9zdCB7Ci0gICAgcmV0dXJuIChDQUxheWVySG9zdCAqKVtzZWxmIGxheWVy
XTsKLX0KLQotQGVuZAotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLSNpZiBQTEFURk9STShJT1MpICYmICFIQVZFKEFWS0lUKQotCi1SZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmKQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci19Ci0K
LWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0
aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0KLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKLXsKLQotfQotI2Vsc2UK
LQotI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ci0KLVdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwgV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxDb250ZXh0JiBwbGF5YmFja1Nlc3Npb25Nb2RlbCwgdWludDY0X3QgY29udGV4dElk
KQotICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgICwgbV9wbGF5YmFja1Nlc3Npb25Nb2Rl
bChwbGF5YmFja1Nlc3Npb25Nb2RlbCkKLSAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKLXsK
LX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmFkZENsaWVudChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENsaWVudCYgY2xpZW50KQotewot
ICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBtX2NsaWVudHMu
YWRkKCZjbGllbnQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
cmVtb3ZlQ2xpZW50KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50JiBjbGllbnQpCi17Ci0g
ICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLnJl
bW92ZSgmY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OnJlcXVlc3RGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNj
cmVlbk1vZGUgbW9kZSwgYm9vbCBmaW5pc2hlZFdpdGhNZWRpYSkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RGdWxsc2NyZWVuTW9kZShtX2NvbnRleHRJ
ZCwgbW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFt
ZSkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5
ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJhbWUpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViQ29yZTo6V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewotICAgIGlmIChtX21hbmFnZXIp
Ci0gICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckdyYXZpdHkobV9jb250ZXh0SWQsIGdy
YXZpdHkpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdl
ci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fY29udGV4dElkLCBtb2RlKTsKLX0KLQotYm9vbCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fbWFuYWdlciA/IG1fbWFuYWdlci0+aXNWaXNpYmxlKCkgOiBmYWxzZTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigp
Ci17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kaWRTZXR1cEZ1bGxz
Y3JlZW4obV9jb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAg
ICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCi17Ci0g
ICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5kaWRFeGl0RnVsbHNjcmVlbiht
X2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpk
aWRDbGVhbnVwRnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKG1fY29udGV4dElkKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ci0KLVJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQ
cm94eSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5JiBwbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkocGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KSk7Ci19
Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5JiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkpCi0gICAgOiBtX3BhZ2UoJnBhZ2UpCi0g
ICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eShwbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkpCi17Ci0gICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQotewotICAgIGlmICgh
bV9wYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgbV9wYWdl
LT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQo
KSk7Ci0gICAgbV9wYWdlID0gbnVsbHB0cjsKLQotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nv
bnRleHRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dD4gbW9kZWw7Ci0gICAgICAgIFJlZlB0cjxQbGF0Zm9ybVdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJm
YWNlKSA9IHR1cGxlOwotCi0gICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgICAg
ICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAg
bW9kZWwtPnNldExheWVySG9zdFZpZXcobnVsbHB0cik7Ci0gICAgfQotCi0gICAgbV9jb250ZXh0
TWFwLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRDb3VudHMuY2xlYXIoKTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4o
KQotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpCi0gICAg
ICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwot
fQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFzTW9kZShIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKLXsKLSAgICBm
b3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChz
dGQ6OmdldDwxPih0dXBsZSktPmhhc01vZGUobW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUo
KSBjb25zdAotewotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkp
IHsKLSAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+bWF5QXV0b21hdGljYWxseVNob3dW
aWRlb1BpY3R1cmVJblBpY3R1cmUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkKLWJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICBmb3Ig
KGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChzdGQ6
OmdldDwxPih0dXBsZSktPmlzUGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmFwcGxpY2F0
aW9uRGlkQmVjb21lQWN0aXZlKCkKLXsKLSAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0
TWFwLnZhbHVlcygpKQotICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSktPmFwcGxpY2F0aW9uRGlk
QmVjb21lQWN0aXZlKCk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9k
ZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1v
ZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBhdXRvJiBwbGF5YmFj
a1Nlc3Npb25Nb2RlbCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVNb2Rl
bChjb250ZXh0SWQpOwotICAgIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1v
ZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpjcmVhdGUoKnRoaXMsIHBsYXli
YWNrU2Vzc2lvbk1vZGVsLCBjb250ZXh0SWQpOwotICAgIGF1dG8mIHBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5lbnN1cmVJbnRlcmZhY2Uo
Y29udGV4dElkKTsKLSAgICBSZWY8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+
IGludGVyZmFjZSA9IFBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpjcmVhdGUo
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOwotCi0gICAgaW50ZXJmYWNlLT5z
ZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkpOwotICAgIGludGVyZmFjZS0+
c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsKLQotICAg
IHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUoaW50ZXJmYWNl
KSk7Ci19Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VU
dXBsZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZEludGVy
ZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRl
eHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKLSAgICBpZiAoYWRk
UmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBj
cmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4
dElkKQotewotICAgIHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKSk7Ci19Ci0KLVBsYXRmb3JtV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlJiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpCi17Ci0gICAgcmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmFkZENsaWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCwgMSk7Ci0gICAgaWYgKCFh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsr
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVtb3ZlQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50Q291
bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotCi0gICAgaW50IGNsaWVudENvdW50ID0gbV9jbGll
bnRDb3VudHMuZ2V0KGNvbnRleHRJZCk7Ci0gICAgQVNTRVJUKGNsaWVudENvdW50ID4gMCk7Ci0g
ICAgY2xpZW50Q291bnQtLTsKLQotICAgIGlmIChjbGllbnRDb3VudCA8PSAwKSB7Ci0gICAgICAg
IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LT5yZW1vdmVDbGllbnRGb3JDb250ZXh0KGNv
bnRleHRJZCk7Ci0gICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpOwotICAg
ICAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGllbnRDb3VudCk7Ci19
Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIK
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldp
dGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3Rv
ciwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNj
cmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZSkKLXsKLSAgICBBU1NFUlQodmlk
ZW9MYXllcklEKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBt
b2RlbDsKLSAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U+IGlu
dGVyZmFjZTsKLQotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxB
bmRJbnRlcmZhY2UoY29udGV4dElkKTsKLSAgICBhZGRDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJ
ZCk7Ci0KLSAgICBSZXRhaW5QdHI8V0tMYXllckhvc3RWaWV3PiB2aWV3ID0gc3RhdGljX2Nhc3Q8
V0tMYXllckhvc3RWaWV3Kj4obW9kZWwtPmxheWVySG9zdFZpZXcoKSk7Ci0gICAgaWYgKCF2aWV3
KSB7Ci0gICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tMYXllckhvc3RWaWV3IGFsbG9jXSBpbml0
XSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBbdmlldyBzZXRXYW50c0xheWVyOllFU107
Ci0jZW5kaWYKLSAgICAgICAgbW9kZWwtPnNldExheWVySG9zdFZpZXcodmlldyk7Ci0gICAgfQot
ICAgIFt2aWV3IHNldENvbnRleHRJRDp2aWRlb0xheWVySURdOwotICAgIGlmIChob3N0aW5nRGV2
aWNlU2NhbGVGYWN0b3IgIT0gMSkgewotICAgICAgICAvLyBJbnZlcnQgdGhlIHNjYWxlIHRyYW5z
Zm9ybSBhZGRlZCBpbiB0aGUgV2ViUHJvY2VzcyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzE4MzE2
NTQyPi4KLSAgICAgICAgZmxvYXQgaW52ZXJzZVNjYWxlID0gMSAvIGhvc3RpbmdEZXZpY2VTY2Fs
ZUZhY3RvcjsKLSAgICAgICAgW1t2aWV3IGxheWVyXSBzZXRTdWJsYXllclRyYW5zZm9ybTpDQVRy
YW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VTY2FsZSwgaW52ZXJzZVNjYWxlLCAxKV07Ci0gICAg
fQotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFVJVmlldyAqcGFyZW50VmlldyA9IGRvd25jYXN0
PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UtPmRyYXdpbmdBcmVhKCkp
LnJlbW90ZUxheWVyVHJlZUhvc3QoKS5yb290TGF5ZXIoKTsKLSAgICBpbnRlcmZhY2UtPnNldHVw
RnVsbHNjcmVlbigqbW9kZWwtPmxheWVySG9zdFZpZXcoKSwgaW5pdGlhbFJlY3QsIHBhcmVudFZp
ZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93c1BpY3R1cmVJblBpY3R1cmUpOwotI2Vsc2UK
LSAgICBJbnRSZWN0IGluaXRpYWxXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dp
bmRvdyhpbml0aWFsUmVjdCwgaW5pdGlhbFdpbmRvd1JlY3QpOwotICAgIGludGVyZmFjZS0+c2V0
dXBGdWxsc2NyZWVuKCptb2RlbC0+bGF5ZXJIb3N0VmlldygpLCBpbml0aWFsV2luZG93UmVjdCwg
bV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpLCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd3NQaWN0
dXJlSW5QaWN0dXJlKTsKLSNlbmRpZgotICAgIG1fcGFnZS0+dWlDbGllbnQoKS5oYXNWaWRlb0lu
UGljdHVyZUluUGljdHVyZURpZENoYW5nZShtX3BhZ2UsIHZpZGVvRnVsbHNjcmVlbk1vZGUgJiBN
ZWRpYVBsYXllckVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRIYXNWaWRlbyh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkuaGFzVmlkZW9DaGFuZ2VkKGhhc1ZpZGVvKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0
SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQotewotICAgIGVuc3VyZUludGVy
ZmFjZShjb250ZXh0SWQpLnZpZGVvRGltZW5zaW9uc0NoYW5nZWQodmlkZW9EaW1lbnNpb25zKTsK
LX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50
ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgaW50ZXJmYWNlLmVudGVyRnVsbHNjcmVlbigpOwotCi0g
ICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBnaXZlbiBmdWxsIHNjcmVlbiBtb2Rl
IGF0IGEgdGltZToKLSAgICBmb3IgKGF1dG8mIGNvbnRleHRQYWlyIDogbV9jb250ZXh0TWFwKSB7
Ci0gICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29udGV4dFBhaXIua2V5OwotICAgICAg
ICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBzdGQ6OmdldDwxPihjb250ZXh0UGFp
ci52YWx1ZSk7Ci0gICAgICAgIGlmIChvdGhlckludGVyZmFjZS0+aGFzTW9kZShpbnRlcmZhY2Uu
bW9kZSgpKSkKLSAgICAgICAgICAgIG90aGVySW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRG
dWxsc2NyZWVuKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0
IGZpbmFsUmVjdCkKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsKLSNlbHNlCi0gICAgSW50UmVjdCBm
aW5hbFdpbmRvd1JlY3Q7Ci0gICAgbV9wYWdlLT5yb290Vmlld1RvV2luZG93KGZpbmFsUmVjdCwg
ZmluYWxXaW5kb3dSZWN0KTsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVs
bHNjcmVlbihmaW5hbFdpbmRvd1JlY3QsIG1fcGFnZS0+cGxhdGZvcm1XaW5kb3coKSk7Ci0jZW5k
aWYKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVu
V2l0aG91dEFuaW1hdGlvblRvTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB0YXJnZXRNb2RlKQotewotICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlv
blRvTW9kZSh0YXJnZXRNb2RlKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQotewot
ICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmNsZWFudXBGdWxsc2NyZWVuKCk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9J
bmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3Qg
aW5saW5lUmVjdCkKLXsKLSAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgp
OwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxpbmVSZWN0KTsKLSNlbHNlCi0gICAg
SW50UmVjdCBpbmxpbmVXaW5kb3dSZWN0OwotICAgIG1fcGFnZS0+cm9vdFZpZXdUb1dpbmRvdyhp
bmxpbmVSZWN0LCBpbmxpbmVXaW5kb3dSZWN0KTsKLSAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lV2luZG93UmVjdCwg
bV9wYWdlLT5wbGF0Zm9ybVdpbmRvdygpKTsKLSNlbmRpZgotfQotCi0jcHJhZ21hIG1hcmsgTWVz
c2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0RnVsbHNjcmVlbk1vZGUoY29udGV4
dElkLCBtb2RlLCBmaW5pc2hlZFdpdGhNZWRpYSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRp
ZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEV4aXRGdWxsc2NyZWVuKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZS0+ZGlkRXhpdEZ1bGxzY3Jl
ZW4oKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEVudGVy
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFbnRlckZ1bGxzY3JlZW4oY29udGV4
dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5kaWRFbnRlckZ1bGxzY3JlZW4o
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKLSAgICBSZWZQdHI8UGxhdGZvcm1XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2U+IGludGVyZmFjZTsKLQotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIFtDQVRy
YW5zYWN0aW9uIGZsdXNoXTsKLSAgICBbbW9kZWwtPmxheWVySG9zdFZpZXcoKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKLSAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0VmlldyhudWxscHRyKTsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZENsZWFu
dXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwotCi0gICAgaW50ZXJm
YWNlLT5zZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5v
bmUpOwotICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKLX0KLQotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKLXsKLSAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgZmVu
Y2VQb3J0ID0gW1VJV2luZG93IF9zeW5jaHJvbml6ZURyYXdpbmdBY3Jvc3NQcm9jZXNzZXNdOwot
I2Vsc2UKLSAgICAgICAgTWFjaFNlbmRSaWdodCBmZW5jZVNlbmRSaWdodDsKLSAgICAgICAgaWYg
KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgpKQot
ICAgICAgICAgICAgZmVuY2VTZW5kUmlnaHQgPSBkcmF3aW5nQXJlYS0+Y3JlYXRlRmVuY2UoKTsK
LSAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBvcnQgPSBmZW5jZVNlbmRSaWdodC5sZWFr
U2VuZFJpZ2h0KCk7Ci0jZW5kaWYKLQotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250ZXh0
SWQsIGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01PVkVf
U0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0
eSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQsICh1bnNpZ25lZClncmF2aXR5
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKLXsKLSAg
ICBtX3BhZ2UtPnVpQ2xpZW50KCkuaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2Uo
bV9wYWdlLCBtb2RlICYgTWVkaWFQbGF5ZXJFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1
cmVJblBpY3R1cmUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwotfQotCi1ib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCkg
JiYgbV9wYWdlLT5pc0luV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElk
KQotewotICAgIGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpOwot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNWaWV3VmlzaWJsZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwotfQotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZXdJbXBsLm1tCmluZGV4IDdmMWU5ODU5ODZlNTM1OGM0NTQ4Y2E1OTkzZWFhNjNlYzFiYTljMDMu
LjlhZWRlNzBhZTE3MTM3ZmFhMTIzY2I1MGU4ZTYzODQ5YTVlMjJkODUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCkBAIC00MSw2ICs0MSw3IEBACiAj
aW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgogI2ltcG9y
dCAiUGFzdGVib2FyZFR5cGVzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKICNpbXBv
cnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJSZW1vdGVPYmplY3RSZWdpc3Ry
eU1lc3NhZ2VzLmgiCkBAIC02Miw3ICs2Myw2IEBACiAjaW1wb3J0ICJXZWJFdmVudEZhY3Rvcnku
aCIKICNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHku
aCIKLSNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAi
V2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAi
X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJbnRlcm5hbC5oIgpAQCAtMTE3MCw4ICsxMTcwLDggQEAg
dm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJhcigpCiAgICAgICAgIFttX3BsYXli
YWNrQ29udHJvbHNNYW5hZ2VyIHNldENhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmU6WUVTXTsKICAg
ICB9CiAKLSAgICBpZiAoUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGludGVy
ZmFjZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250cm9sc01hbmFnZXJJ
bnRlcmZhY2UoKSkKLSAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CisgICAgaWYgKFBsYXRmb3JtUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBpbnRlcmZhY2UgPSBtX3BhZ2UtPnBsYXliYWNrU2Vzc2lv
bk1hbmFnZXIoKS0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkpCisgICAgICAgIFttX3BsYXli
YWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzppbnRlcmZh
Y2VdOwogCiAgICAgW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHND
b250cm9sbGVyOm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCldOwogICAgIFttX21lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5
YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAppbmRleCAzMzE1MmZlMWE5ZjYwYzJlMzhkZjM0ZjVjMmU1YzdiZDhhYzA5Njhi
Li44YjA2ZWRjODhlZDY5MjYwNzU1ZWVmNGFlZDVlMjM4NTMyYzk2NDAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE1Miw5ICsxNTIsOSBAQAogI2lmIFBM
QVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHku
aCIKICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaCIK
KyNpbmNsdWRlICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlZpZXdTbmFwc2hv
dFN0b3JlLmgiCi0jaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCi0j
aW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3BP
YnNlcnZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvcldpbmRvdy5oPgpAQCAt
MTgwLDcgKzE4MCw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSNpbmNsdWRlICJXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKQEAgLTM5
NCw4ICszOTQsOCBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwYWdl
Q2xpZW50LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIHVpbgogICAgIG1fZnVsbFNjcmVlbk1h
bmFnZXIgPSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsIG1fcGFnZUNs
aWVudC5mdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkpOwogI2VuZGlmCiAjaWYgUExBVEZP
Uk0oSU9TKSAmJiBIQVZFKEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQotICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsKLSAgICBtX3ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgq
dGhpcywgKm1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcik7CisgICAgbV9wbGF5YmFja1Nlc3Npb25N
YW5hZ2VyID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpOworICAg
IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Y3JlYXRlKCp0aGlzLCAqbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKEFQUExFX1BBWSkKQEAgLTYzNiw4ICs2MzYsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
cmVhdHRhY2hUb1dlYlByb2Nlc3MoKQogICAgIG1fZnVsbFNjcmVlbk1hbmFnZXIgPSBXZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMsIG1fcGFnZUNsaWVudC5mdWxsU2NyZWVu
TWFuYWdlclByb3h5Q2xpZW50KCkpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBIQVZF
KEFWS0lUKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpKQotICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKTsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcywgKm1fcGxheWJh
Y2tTZXNzaW9uTWFuYWdlcik7CisgICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpOworICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzLCAq
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BB
WSkKQEAgLTQzMjUsMTIgKzQzMjUsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEZ1bGxzY3Jl
ZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RnVsbHNjcmVlbkNsaWVudD4mJgogI2VuZGlm
CiAgICAgCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi1XZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCitQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIFdlYlBhZ2VQcm94eTo6cGxheWJhY2tTZXNzaW9u
TWFuYWdlcigpCiB7CiAgICAgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci5nZXQoKTsK
IH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBXZWJQYWdlUHJveHk6OnZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIoKQorVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBXZWJQYWdl
UHJveHk6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewogICAgIHJldHVybiBtX3ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCmluZGV4IGJkZThjMjY5ZDcyNWFkYjI0NmYyYTY5MjUwNWE4Y2U2YjM3ZWVkNDIuLjM2MTll
NDNjMzY2MmVkNTAyNzExYWVhYzJiNzNhMTI4MGJjMjMzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0yMDEsOSArMjAxLDkgQEAgY2xhc3MgV2ViQmFja0Zvcndh
cmRMaXN0SXRlbTsKIGNsYXNzIFdlYkNvbnRleHRNZW51UHJveHk7CiBjbGFzcyBXZWJFZGl0Q29t
bWFuZFByb3h5OwogY2xhc3MgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTsKLWNsYXNzIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eTsKIGNsYXNzIFdlYk5hdmlnYXRpb25TdGF0ZTsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKIGNsYXNz
IFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJVUkxTY2hlbWVIYW5kbGVyOwogY2xhc3MgV2Vi
TW91c2VFdmVudDsKQEAgLTM0Myw4ICszNDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGdWxs
c2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZ1bGxzY3JlZW5DbGllbnQ+JiYpOwog
I2VuZGlmCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7Ci0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CisgICAg
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7Cisg
ICAgVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTE2ODAsOCArMTY4MCw4IEBAIHByaXZh
dGU6CiAjZW5kaWYKIAogI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIFJlZlB0
cjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdl
cjsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBtX3ZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eT4g
bV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQ
cm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0KaW5kZXggYzQzYzc2NWU0ZDdhYjNjZGJkZGVhOWZjY2FiMmRjNWIwNzU5ODdmYS4uMzMxMmRj
YWNmZWMwNTBjYjgwOWQ3OGQ5ZTFlNGEzNTA5NmMzMjdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC00MSwxMSArNDEsMTEgQEAKICNp
bXBvcnQgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5o
IgogI2ltcG9ydCAiVXNlckRhdGEuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5oIgogI2ltcG9ydCAiVmlld1VwZGF0ZURpc3BhdGNoZXJNZXNzYWdlcy5oIgogI2ltcG9y
dCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW1wb3J0ICJXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtU2NyZWVuLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA3N2Q5ZTE3NTIwYjJjODBmMjJlYjdjMjk3YWQ2ZTA5ZjZiZjJi
MDM0Li43Mzc1ZjFjNDYwMzhkZTI3Yzg2NGQ1ODI2MzI5YzRlNDE0OGYwNmE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg3MSw4ICs4
NzEsOCBAQAogCQkzN0ZDMTk0NzE4NTBGQkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRM
b2FkRGVsZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0ZDMTk0NjE4NTBGQkYyMDA4Q0ZBNDcgLyogV0tCcm93c2luZ0NvbnRleHRM
b2FkRGVsZWdhdGVQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMzdGQzE5NEExODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDM3RkMxOTQ4MTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UubW0gKi87IH07CiAJCTM3RkMxOTRCMTg1MTBENkEwMDhDRkE0NyAvKiBXS05T
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkMxOTQ5MTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuaCAqLzsgfTsKLQkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZE
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjUxODg3QkQ5NzAw
Mjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
OyB9OwotCQkzRjQxOEVGQjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkzRjQxOEVG
OTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQx
OEVGNTE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHAgKi87IH07CisJCTNGNDE4RUZCMTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MThFRjcxODg3QkQ5NzAwMjc5NUZEIC8qIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTNG
ODdCOUJEMTU4OTQwMTIwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y4N0I5QkExNTg5M0Y2MzAwOTBG
RjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgKi87IH07CiAJCTNGODdCOUJFMTU4OTQwMTkwMDkw
RkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDNGODdCOUJCMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29z
ZXIuaCAqLzsgfTsKIAkJM0Y4N0I5QzAxNTg5NDBEODAwOTBGRjYyIC8qIFdlYkNvbG9yUGlja2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjg3QjlC
RjE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQaWNrZXIuaCAqLzsgfTsKQEAgLTExMDksOSAr
MTEwOSw5IEBACiAJCTUyNzJENEM5MUU3MzVGMDkwMEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFj
ZU5TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Mjcy
RDRDNzFFNzM1RjA5MDBFQjQyOTAgLyogV0tQcm90ZWN0aW9uU3BhY2VOUy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNzJENENBMUU3MzVGMDkw
MEVCNDI5MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkQ0QzgxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJv
dGVjdGlvblNwYWNlTlMubW0gKi87IH07CiAJCTUyOEMzN0MxMTk1Q0JCMUEwMEQ4QjlDQyAvKiBX
S0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBOUYyODEwMTk1OEY0NzgwMDhDQUM3MiAvKiBXS0JhY2tGb3J3YXJk
TGlzdFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5LmggKi87IH07Ci0JCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lm1tICovOyB9OwotCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLm1tICovOyB9OworCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmggKi87IH07CisJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9OworCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMg
LyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLm1tICovOyB9OwogCQk1MzAyNTgzQjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVS
ZXNvdXJjZS5jcHAgKi87IH07CiAJCTUzMDI1ODNDMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJj
ZS5oICovOyB9OwogCQk1MzAyNTgzRDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVF
dmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzAyNTgzMDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi87IH07
CkBAIC0xOTIzLDE0ICsxOTIzLDE0IEBACiAJCUNENzhFMTE3MURCN0RDMEEwMDE0QTJERSAvKiBB
UElGdWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDc4RTExNjFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVu
dC5oICovOyB9OwogCQlDRDc4RTExOTFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRl
bGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RDc4RTExODFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RBMDQxRjQxQUNF
MjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwNDFGMzFBQ0UyMTA1MDA0QTEzRUMgLyog
QmFja0JvYXJkU2VydmljZXNTUEkuaCAqLzsgfTsKLQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLzsgfTsKLQkJQ0RBMjlBMUIxQ0JEQkY0MTAwOTAxQ0NG
IC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyLmggKi87IH07Ci0JCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLzsgfTsKLQkJQ0RBMjlBMjExQ0JFQjVGQjAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTFGMUNCRUI1RkIwMDkwMUND
RiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi87IH07Ci0JCUNEQTI5QTI4
MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OwotCQlDREEyOUEyQTFDQkVCNjdBMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI2
MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwotCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovOyB9OworCQlDREEyOUExQTFD
QkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE4MUNCREJGNDEwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tICovOyB9OworCQlDREEyOUExQjFDQkRCRjQx
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLzsgfTsKKwkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovOyB9OworCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKKwkJQ0RBMjlBMjgxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjQxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
OyB9OworCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
ck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmggKi87IH07CisJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCUNEQTI5
QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlB
MjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
LmggKi87IH07CiAJCUNEQzM4MkZFMTcyMTE3OTkwMDhBMkZDMyAvKiBTZWNJdGVtU2hpbUxpYnJh
cnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFG
OEE3ODEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tICovOyB9OwogCQlD
REMzODMwNzE3MjExN0REMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MkY5MTcy
MTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlD
REMzODMwQzE3MjEyMjgyMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwQjE3MjEy
MUNFMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggKi87IH07CkBAIC0zMDg4
LDEwICszMDg4LDEwIEBACiAJCTM3RkMxOTQ2MTg1MEZCRjIwMDhDRkE0NyAvKiBXS0Jyb3dzaW5n
Q29udGV4dExvYWREZWxlZ2F0ZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVQcml2YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTM3RkMxOTQ4MTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXS05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM3RkMxOTQ5MTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tO
U1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTNGNDE4RUY1MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzRjQxOEVGNjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkzRjQxOEVGNzE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNGNDE4RUY4MTg4N0JEOTcw
MDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjQxOEVGNTE4ODdC
RDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0
MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y0MThFRjcxODg3QkQ5
NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJM0Y4N0I5QkExNTg5M0Y2MzAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb2xvckNob29zZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjg3QjlCQjE1ODkzRjYzMDA5MEZGNjIgLyogV2Vi
Q29sb3JDaG9vc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9y
Q2hvb3Nlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjg3QjlCRjE1ODk0MEQ4
MDA5MEZGNjIgLyogV2ViQ29sb3JQaWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29sb3JQaWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMz
NzAsMTIgKzMzNzAsMTIgQEAKIAkJNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3Rp
Y3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpc3RpY3NEYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNzJENEM3MUU3MzVGMDkwMEVCNDI5
MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdLUHJvdGVjdGlvblNwYWNlTlMuaDsgcGF0aCA9IG1hYy9XS1Byb3RlY3Rpb25TcGFjZU5T
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNzJENEM4MUU3MzVGMDkwMEVCNDI5
MCAvKiBXS1Byb3RlY3Rpb25TcGFjZU5TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV0tQcm90ZWN0aW9uU3BhY2VOUy5tbTsgcGF0aCA9IG1hYy9XS1Byb3RlY3Rp
b25TcGFjZU5TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBQTFDNTc0
OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkQ1QTFC
NDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUFBMUM1NzQ5NEUwMERF
MzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUFCMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAv
KiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwMjU4
MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIg
LyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVFdmVudC5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI1NSwxNiArNDI1NSwxNiBAQAogCQlD
RDc4RTExNjFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElGdWxsc2NyZWVuQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENzhFMTE4MURCN0U1QUQwMDE0QTJERSAvKiBfV0tGdWxs
c2NyZWVuRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLRnVs
bHNjcmVlbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTA0MUYz
MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDREEyOUExODFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMUMxQ0JEQkY1QjAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQTI5QTI3MUNC
RUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREEyOUEx
ODFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RBMjlBMUMxQ0JEQkY1QjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVz
c2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlci5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMUUxQ0JFQjVG
QjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODJGNzE3MjExNTA2MDA4QTJGQzMgLyogQ0ZOZXR3
b3JrLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ0ZOZXR3b3JrLmZyYW1ld29yazsgcGF0
aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NGTmV0d29yay5mcmFtZXdvcms7IHNvdXJj
ZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUNEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBD
b29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29va2llU3Rv
cmFnZVNoaW1MaWJyYXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDMzgz
MDYxNzIxMTc5OTAwOEEyRkMzIC8qIFdlYlByb2Nlc3NTaGltLmR5bGliICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGli
IjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViUHJvY2Vzc1NoaW0uZHlsaWI7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC01MTk2LDE3ICs1MTk2LDE3IEBACiAJ
CQkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNz
YWdlcy5pbiAqLywKIAkJCQkxQUMwMjczRTE5NjYyMkQ2MDBDMTJCNzUgLyogV2ViUGFnZVByb3h5
Q29jb2EubW0gKi8sCiAJCQkJN0M0Njk0Q0IxQTRCNTEwQTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9h
cmRQcm94eUNvY29hLm1tICovLAotCQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKLQkJCQlDREEyOUEyMjFDQkVCNjFBMDA5
MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAot
CQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkubW0gKi8sCisJCQkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eS5oICovLAorCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJQ0RBMjlBMUYx
Q0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywKIAkJ
CQk3Q0U0RDIxNTFBNDkxNDg0MDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSAqLywK
IAkJCQkxQTA0RjYxNzFBNEEzQTdBMDBBMjFCNkUgLyogV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0g
Ki8sCiAJCQkJN0FBRDE3NUUxRUE2QUYzNzAwM0IwODk0IC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZUNvY29hLm1tICovLAogCQkJCTUxRDEyNDMxMUU2REU1MjEwMDJCMjgyMCAvKiBX
ZWJVUkxTY2hlbWVIYW5kbGVyQ29jb2EuaCAqLywKIAkJCQk1MUQxMjQzMjFFNkRFNTIxMDAyQjI4
MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlckNvY29hLm1tICovLAotCQkJCTUyRDVBMUFBMUM1NzQ5
NEUwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLywKLQkJCQk1
MkQ1QTFBQjFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluICovLAotCQkJCTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi8sCisJCQkJNTJENUExQUExQzU3NDk0RTAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovLAorCQkJCTUyRDVBMUFCMUM1
NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4g
Ki8sCisJCQkJNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eS5tbSAqLywKIAkJCQkyREZDN0RCOTFCQ0NDMTk1MDBDMTU0OEMgLyogV2ViVmlld0lt
cGwuaCAqLywKIAkJCQkyREZDN0RCQTFCQ0NDMTk1MDBDMTU0OEMgLyogV2ViVmlld0ltcGwubW0g
Ki8sCiAJCQkJMUFEMDFCQ0IxOTA1RDU0OTAwQzlDNDVGIC8qIFdLUmVsb2FkRnJhbWVFcnJvclJl
Y292ZXJ5QXR0ZW1wdGVyLmggKi8sCkBAIC02MzkwLDE0ICs2MzkwLDE0IEBACiAJCQkJQ0Q0OTFC
MDUxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNwcCAqLywKIAkJ
CQlDRDQ5MUIwNjFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAq
LywKIAkJCQlDRDQ5MUIwQTFFNzMyRDEyMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFn
ZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAqLywKLQkJCQlDREEyOUExQzFDQkRCRjVCMDA5MDFDQ0Yg
LyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKLQkJCQlDREEyOUEx
ODFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbSAqLywKKwkJ
CQlDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICov
LAorCQkJCUNEQTI5QTFDMUNCREJGNUIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
Lm1lc3NhZ2VzLmluICovLAorCQkJCUNEQTI5QTE4MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLm1tICovLAogCQkJCUVDQTY4MEQ3MUU2OTBERjgwMDczMUQyMCAvKiBX
ZWJQcm9jZXNzQ29jb2EuaCAqLywKIAkJCQk3QzZFNzBGOTE4QjJENEEwMDBGMjRFMkUgLyogV2Vi
UHJvY2Vzc0NvY29hLm1tICovLAotCQkJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8sCi0JCQkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEz
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJNTJENUEx
QjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8sCisJ
CQkJNTJENUExQjIxQzU3NDlGMjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAq
LywKKwkJCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzg3OSwxMCArNzg3OSwxMCBAQAogCQkJCTFBQjFGNzkz
MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oICovLAog
CQkJCTFBQjFGNzk0MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUFCMUY3OTUxRDFCMzYxMzAwN0M5QkQxIC8q
IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCAqLywKLQkJCQlDREEyOUEyNDFD
QkVCNjdBMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCi0JCQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlcy5oICovLAotCQkJCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAv
KiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAot
CQkJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oICovLAorCQkJCUNEQTI5QTI0MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQlDREEyOUEyNTFD
QkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8sCisJ
CQkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJMUEwNDNGNjcx
MjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNw
cCAqLywKIAkJCQkxQTA0M0Y2ODEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlcy5oICovLAogCQkJCUJDMzA2NkJDMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9j
ZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTc5MDQsMTAgKzc5MDQsMTAgQEAKIAkJCQkx
QUFGMDhCNjE5MjY5RTZEMDBCNjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2Fn
ZXMuaCAqLywKIAkJCQk3QzM2MUQ3NjE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTdDMzYxRDc3MTkyODAz
QkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi8s
Ci0JCQkJM0Y0MThFRjUxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTNGNDE4RUY2MTg4N0JEOTcwMDI3OTVGRCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLywKLQkJCQkzRjQxOEVGNzE4
ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLywKLQkJCQkzRjQxOEVGODE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKKwkJCQkzRjQxOEVGNTE4ODdCRDk3
MDAyNzk1RkQgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8s
CisJCQkJM0Y0MThFRjYxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJN
ZXNzYWdlcy5oICovLAorCQkJCTNGNDE4RUY3MTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTNGNDE4RUY4MTg4
N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICov
LAogCQkJKTsKIAkJCW5hbWUgPSAiRGVyaXZlZCBTb3VyY2VzIjsKIAkJCXBhdGggPSBEZXJpdmVk
U291cmNlcy9XZWJLaXQyOwpAQCAtODczOSwxMCArODczOSwxMCBAQAogCQkJCTFBQjFGNzk5MUQx
QjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjg1MEZFNzFFRDdDMzlGMDBGQjc3QTcgLyogV2ViUGVyZm9ybWFu
Y2VMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNFNzM2MTExQ0MyNjU5MDA3
QkQ1MzkgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlDREEy
OUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQ0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBMjlBMjAxQ0JFQjVG
QjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREEyOUExQjFDQkRCRjQx
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Q0RBMjlBMjkxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RBMjlBMkIxQ0JF
QjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUQ1OTI5RjE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzU3NDRGMDEyNjM4RkIzMDA2RjBGMTIgLyogV2Vi
UG9wdXBJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlEM0I5NDg0NzExRkY0QjY1MDAwMzJCMzkg
LyogV2ViUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKQEAgLTg3OTUsNyArODc5NSw3IEBACiAJ
CQkJN0MzNjFENzkxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThD
MSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRUU1NzVDMURC
N0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEz
IC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRG
QzdEQkIxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyOUNENTVBQTEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5MjMyREY0MThCMjlENjgwMEQwNTk2RiAvKiBX
S0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzQ3
LDEwICsxMDM0NywxMCBAQAogCQkJCTFBM0U3MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEREQxMjdBNTIxQzAw
OEZGNEY0IC8qIFdlYlBsYXRmb3JtVG91Y2hQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
REE5NDRBMjE4ODRFNEYwMDBFRDg2REIgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUNEQTI5QTFBMUNCREJGNDEwMDkwMUNDRiAvKiBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjgxQ0JFQjY3QTAw
OTAxQ0NGIC8qIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQ0RBMjlBMjExQ0JFQjVGQjAwOTAxQ0NGIC8qIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUNEQTI5QTJBMUNCRUI2
N0EwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMUExQ0JEQkY0MTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyODFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDREEyOUEyMTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RBMjlBMkExQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUQ1OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1
Z0luQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDhGRUU0MUQ1OTNFMkEwMDhCQThD
QiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0
RUYxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTEwNDI0LDEwICsxMDQyNCwxMCBAQAogCQkJCTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAvKiBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNTczOUJCRTFCNDIwNDY2MDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzRUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJW
YWxpZGF0aW9uTWVzc2FnZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MkQ1QTFCNzFD
NTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUyRDVBMUIxMUM1
NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291
cmNlcyAqLywKLQkJCQkzRjQxOEVGQjE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUy
RDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJENUExQjEx
QzU3NDk2MjAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTNGNDE4RUZCMTg4N0JEOTcwMDI3OTVGRCAvKiBWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGQzdE
QkMxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzAzMzdERDExMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODY4MTYwRDAxODc2NDU1NzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rp
b24ubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggNGQyMmFmZjEy
ODlmNzAyZThlNTg0YTY3MjNiNWM2YWU5ZWRkOWI4Zi4uZmVlMGQyODY3N2QwMDBhNWE3OTcwZGFk
NDlhNTE5MGY0ZDI4YWRhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTc4LDggKzc4LDgg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKICNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW5j
bHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCisj
aW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAppbmRleCBiMjAyNWI4NTM1MDQyODhkYjhiZmU5MGRiYTVlYjg5YWJjMTI1MzJlLi4x
YzdhOGZlY2RlNmVhMzA5NDY2NDFlZWQ0NGQyMTI2YmZhYjQ5NTY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMjE4LDEwICsyMTgsMTAgQEAK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIlBERlBsdWdpbi5oIgorI2luY2x1ZGUg
IlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbi5oIgorI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRl
ICJXS1N0cmluZ0NGLmgiCi0jaW5jbHVkZSAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIgot
I2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0xlZ2FjeVdlYkFyY2hpdmUuaD4KICNlbmRpZgogCkBAIC0zNDcxLDE3ICszNDcxLDE3IEBAIFJl
bW90ZVdlYkluc3BlY3RvclVJKiBXZWJQYWdlOjpyZW1vdGVJbnNwZWN0b3JVSSgpCiB9CiAKICNp
ZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIm
IFdlYlBhZ2U6OnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKQorUGxheWJhY2tTZXNzaW9uTWFuYWdl
ciYgV2ViUGFnZTo6cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpCiB7CiAgICAgaWYgKCFtX3BsYXli
YWNrU2Vzc2lvbk1hbmFnZXIpCi0gICAgICAgIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fcGxheWJh
Y2tTZXNzaW9uTWFuYWdlciA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNyZWF0ZSgqdGhpcyk7
CiAgICAgcmV0dXJuICptX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CiB9CiAKLVdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXImIFdlYlBhZ2U6OnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQorVmlkZW9G
dWxsc2NyZWVuTWFuYWdlciYgV2ViUGFnZTo6dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CiAg
ICAgaWYgKCFtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpCi0gICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZSgqdGhpcywgcGxh
eWJhY2tTZXNzaW9uTWFuYWdlcigpKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
ID0gVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKCp0aGlzLCBwbGF5YmFja1Nlc3Npb25N
YW5hZ2VyKCkpOwogICAgIHJldHVybiAqbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggM2U1
OTE5NjgxZWEwMmM2M2Q2NWRhNjdhYWIzMjgzNDQ4YmQ3Y2FlOS4uYWQxYmVjNDU4N2E3NzMxOWMz
MzRmY2FlZDAwNjk0YjgyN2I5NDk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaApAQCAtMTg2LDExICsxODYsMTEgQEAgY2xhc3MgV2ViTm90aWZpY2F0aW9u
Q2xpZW50OwogY2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7CiBjbGFzcyBXZWJQYWdl
R3JvdXBQcm94eTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5OwotY2xhc3MgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7CiBjbGFzcyBXZWJQb3B1
cE1lbnU7CiBjbGFzcyBXZWJVbmRvU3RlcDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CitjbGFzcyBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOwogY2xhc3MgV2ViV2hlZWxFdmVudDsKIGVudW0gRmluZE9wdGlvbnMgOiB1aW50
MTZfdDsKIHN0cnVjdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjsKQEAgLTI2Niw4ICsyNjYsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0luc3BlY3RvclBhZ2UoKSB7IHJldHVybiAhIW1faW5zcGVj
dG9yVUkgfHwgISFtX3JlbW90ZUluc3BlY3RvclVJOyB9CiAKICNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOwotICAg
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAg
ICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7CisgICAg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgdmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogI2VuZGlm
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZvaWQgc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrKGJvb2wpOwpAQCAtMTQwMCw4ICsxNDAwLDggQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8UmVtb3RlV2ViSW5zcGVjdG9yVUk+IG1fcmVtb3RlSW5zcGVjdG9yVUk7CiAKICNpZiAoUExB
VEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBtX3ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CisgICAgUmVmUHRyPFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI+IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcjsKKyAgICBSZWZQdHI8
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gbV92aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogI2VuZGlm
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGJvb2wgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5l
UGxheWJhY2sgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2YTI4MTdiOTAy
ZGRhMjk2YmEzNmJiMWNlOGFjZTYyNzkwMTNmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgKQEAgLTAsMCAr
MSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FdmVu
dExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50RW51bXMuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXR0YWNo
bWVudDsKK2NsYXNzIENvbm5lY3Rpb247CitjbGFzcyBEZWNvZGVyOworY2xhc3MgTWVzc2FnZVJl
Y2VpdmVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOb2RlOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI7CisKK2NsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQgZmluYWwKKyAg
ICA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+Cisg
ICAgLCBwdWJsaWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisgICAgLCBwdWJs
aWMgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQo
bWFuYWdlciwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgflBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZUNvbnRleHQoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYW5hZ2Vy
ID0gbnVsbHB0cjsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0OworCisgICAgLy8gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCisg
ICAgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbDsKKworICAgIC8vIFBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50CisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAg
ICB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZChkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlcmVkVGltZUNoYW5nZWQoZG91YmxlKSBmaW5h
bDsKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFja1N0
YXJ0ZWRUaW1lKSBmaW5hbDsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBm
bG9hdCBwbGF5YmFja1JhdGUpIGZpbmFsOworICAgIHZvaWQgc2Vla2FibGVSYW5nZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91
YmxlIGxpdmVVcGRhdGVJbnRlcnZhbCkgZmluYWw7CisgICAgdm9pZCBjYW5QbGF5RmFzdFJldmVy
c2VDaGFuZ2VkKGJvb2wgdmFsdWUpIGZpbmFsOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIGZpbmFsOworICAgIHZvaWQgbGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmlu
YWw7CisgICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90KSBm
aW5hbDsKKyAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRf
dCkgZmluYWw7CisgICAgdm9pZCBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQs
IFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXZpY2VOYW1lKSBmaW5hbDsKKyAgICB2b2lkIHdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sKSBmaW5hbDsKKyAgICB2b2lk
IG11dGVkQ2hhbmdlZChib29sKSBmaW5hbDsKKworICAgIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUNvbnRleHQoUGxheWJhY2tTZXNzaW9uTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisK
KyAgICBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9j
b250ZXh0SWQ7Cit9OworCitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UGxheWJhY2tTZXNzaW9uTWFuYWdlcj4g
Y3JlYXRlKFdlYlBhZ2UmKTsKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCk7
CisKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpIGZpbmFsOworCisgICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQmKTsKKyAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250cm9s
c01hbmFnZXIoKTsKKyAgICB1aW50NjRfdCBjb250ZXh0SWRGb3JNZWRpYUVsZW1lbnQoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudCYpOworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIFZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI7CisKKyAgICBleHBsaWNpdCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKFdl
YlBhZ2UmKTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViQ29yZTo6UGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+LCBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dD4+IE1vZGVsSW50ZXJmYWNlVHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBs
ZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVs
SW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIGVuc3Vy
ZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dCYgZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBy
ZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBhZGRDbGllbnRGb3JD
b250ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZW1vdmVDbGllbnRGb3JDb250
ZXh0KHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQ29udGV4dAorICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBkb3VibGUpOworICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSk7CisgICAgdm9pZCBidWZm
ZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7
CisgICAgdm9pZCBwbGF5YmFja1N0YXJ0ZWRUaW1lQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSk7CisgICAg
dm9pZCBzZWVrYWJsZVJhbmdlc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJD
b3JlOjpUaW1lUmFuZ2VzJiwgZG91YmxlIGxhc3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBk
YXRlSW50ZXJ2YWwpOworICAgIHZvaWQgY2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Cisg
ICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250
ZXh0SWQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgYXVkaW9NZWRpYVNlbGVjdGlv
bkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
OworICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6UGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9j
YWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9pZCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sKTsKKyAgICB2b2lkIG11dGVkQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkKKyAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQ
bGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGlt
ZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsK
KyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQg
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5k
ZXgpOworICAgIHZvaWQgaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBzZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpOworCisgICAgV2Vi
UGFnZSogbV9wYWdlOworICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCosIHVp
bnQ2NF90PiBtX21lZGlhRWxlbWVudHM7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRl
cmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVpbnQ2NF90IG1fY29udHJvbHNNYW5hZ2Vy
Q29udGV4dElkIHsgMCB9OworICAgIEhhc2hDb3VudGVkU2V0PHVpbnQ2NF90PiBtX2NsaWVudENv
dW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vz
c2lvbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2Ev
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZTU4ZGM5ODQ3
Y2VkYzkyMjliN2EzZGUyMzIxN2M0N2ZlY2NmMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2FnZXMu
aW4KQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKK21lc3NhZ2VzIC0+IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgewor
ICAgIFBsYXkodWludDY0X3QgY29udGV4dElkKQorICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKKyAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQorICAgIEJlZ2luU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFbmRTY3J1YmJpbmcodWludDY0X3QgY29u
dGV4dElkKQorICAgIFNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkK
KyAgICBGYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBCZWdpblNjYW5uaW5nQmFj
a3dhcmQodWludDY0X3QgY29udGV4dElkKQorICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRl
eHRJZCkKKyAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDY0X3QgaW5kZXgpCisgICAgU2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3QgaW5kZXgpCisgICAgSGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlcXVl
c3QodWludDY0X3QgY29udGV4dElkKQorICAgIFRvZ2dsZVBpY3R1cmVJblBpY3R1cmUodWludDY0
X3QgY29udGV4dElkKQorICAgIFRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBT
ZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCit9CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE0MWUzOGY1NDQ1M2RiMTUyYjMxZDJhYmUxZjRjYmIwNjAz
OGJhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9Q
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCkBAIC0wLDAgKzEsNDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aCIKKworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVP
X1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2ltcG9ydCAiQXR0YWNobWVudC5oIgorI2ltcG9ydCAi
UGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0
IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFu
Z2VzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CisjaW1wb3J0
IDxtYWNoL21hY2hfcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3N0YXRpYyB1aW50NjRfdCBuZXh0Q29udGV4dElkKCkKK3sKKyAgICBz
dGF0aWMgdWludDY0X3QgY29udGV4dElkID0gMDsKKyAgICByZXR1cm4gKytjb250ZXh0SWQ7Cit9
CisKKyNwcmFnbWEgbWFyayAtIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQKKworUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29u
dGV4dChQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQp
CisgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQp
Cit7Cit9CisKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6On5QbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0KCkKK3sKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAg
ICAgIG1fbWFuYWdlci0+cmVzZXRNZWRpYVN0YXRlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBQ
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpkdXJhdGlvbkNoYW5nZWQoZG91YmxlIGR1
cmF0aW9uKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZHVyYXRp
b25DaGFuZ2VkKG1fY29udGV4dElkLCBkdXJhdGlvbik7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6Y3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGlt
ZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9t
YW5hZ2VyLT5jdXJyZW50VGltZUNoYW5nZWQobV9jb250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNo
b3JUaW1lKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpidWZm
ZXJlZFRpbWVDaGFuZ2VkKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5idWZmZXJlZFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBi
dWZmZXJlZFRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OnJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5yYXRlQ2hhbmdlZChtX2NvbnRleHRJ
ZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKGRvdWJsZSBwbGF5YmFj
a1N0YXJ0ZWRUaW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQobV9jb250ZXh0SWQsIHBsYXliYWNrU3RhcnRlZFRp
bWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OnNlZWthYmxl
UmFuZ2VzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiByYW5nZXMsIGRvdWJsZSBs
YXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2Vla2FibGVSYW5nZXNDaGFuZ2VkKG1fY29u
dGV4dElkLCByYW5nZXMsIGxhc3RNb2RpZmllZFRpbWUsIGxpdmVVcGRhdGVJbnRlcnZhbCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y2FuUGxheUZhc3RSZXZl
cnNlQ2hhbmdlZChib29sIHZhbHVlKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChtX2NvbnRleHRJZCwgdmFsdWUpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisg
ICAgICAgIG1fbWFuYWdlci0+YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKG1fY29u
dGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+bGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNl
bGVjdGVkSW5kZXgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6
OmF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmF1ZGlvTWVkaWFTZWxl
Y3Rpb25JbmRleENoYW5nZWQobV9jb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmxlZ2libGVNZWRpYVNlbGVjdGlvbklu
ZGV4Q2hhbmdlZCh1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKG1f
Y29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VDb250ZXh0OjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBjb25zdCBT
dHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5leHRlcm5hbFBsYXliYWNrQ2hhbmdlZChtX2NvbnRleHRJZCwgZW5hYmxl
ZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQ29udGV4dDo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJv
b2wgZGlzYWJsZWQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT53
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQobV9jb250ZXh0SWQsIGRpc2FibGVk
KTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjptdXRlZENoYW5n
ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
Pm11dGVkQ2hhbmdlZChtX2NvbnRleHRJZCwgbXV0ZWQpOworfQorCisjcHJhZ21hIG1hcmsgLSBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyCisKK1JlZjxQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyKHBhZ2UpKTsKK30KKworUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcihXZWJQYWdlJiBwYWdlKQor
ICAgIDogbV9wYWdlKCZwYWdlKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7Cit9CisKK1BsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6On5QbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1
cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgICAgIHN0ZDo6dGllKG1vZGVs
LCBpbnRlcmZhY2UpID0gdHVwbGU7CisgICAgICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVy
ZmFjZSk7CisgICAgICAgIG1vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisKKyAgICAg
ICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNs
ZWFyKCk7CisgICAgbV9tZWRpYUVsZW1lbnRzLmNsZWFyKCk7CisgICAgbV9jbGllbnRDb3VudHMu
Y2xlYXIoKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKworUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9k
ZWxJbnRlcmZhY2VUdXBsZSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZElu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFBsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50PiBtb2RlbCA9IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlID0gUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6Y3JlYXRlKCp0
aGlzLCBjb250ZXh0SWQpOworICAgIG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFjZSk7CisKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFj
ZSkpOworfQorCitQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRl
eHRJZCwgTW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OworfQorCitXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQoreworICAg
IHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7
Cit9CisKK1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQmIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJu
ICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1v
ZGVsOworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZh
Y2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOworCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxl
bWVudCA9IG1vZGVsLT5tZWRpYUVsZW1lbnQoKTsKKyAgICBtb2RlbC0+c2V0TWVkaWFFbGVtZW50
KG51bGxwdHIpOworICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7CisgICAgaW50
ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CisgICAgbV9tZWRpYUVsZW1lbnRzLnJlbW92ZShtZWRpYUVs
ZW1lbnQuZ2V0KCkpOworICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElkKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjphZGRDbGllbnRGb3JDb250ZXh0KHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBtX2NsaWVudENvdW50cy5hZGQoY29udGV4dElkKTsKK30KKwor
dm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpyZW1vdmVDbGllbnRGb3JDb250ZXh0KHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnRDb3VudHMuY29udGFpbnMoY29u
dGV4dElkKSk7CisgICAgaWYgKG1fY2xpZW50Q291bnRzLnJlbW92ZShjb250ZXh0SWQpKQorICAg
ICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50JiBtZWRpYUVsZW1lbnQpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gZm91
bmRJdGVyYXRvciA9IG1fbWVkaWFFbGVtZW50cy5maW5kKCZtZWRpYUVsZW1lbnQpOworICAgIGlm
IChmb3VuZEl0ZXJhdG9yICE9IG1fbWVkaWFFbGVtZW50cy5lbmQoKSkgeworICAgICAgICB1aW50
NjRfdCBjb250ZXh0SWQgPSBmb3VuZEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKG1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkID09IGNvbnRleHRJZCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCisgICAgICAgICAgICBy
ZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICAg
ICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVs
ZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOworICAgICAgICBhdXRvIGNv
bnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmIChtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCkKKyAgICAgICAgICAgIHJlbW92ZUNsaWVudEZvckNvbnRleHQo
bV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpOworICAgICAgICBtX2NvbnRyb2xzTWFuYWdlckNv
bnRleHRJZCA9IGNvbnRleHRJZDsKKyAgICAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZXRN
ZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7CisgICAgfQorCisgICAgYWRkQ2xpZW50Rm9yQ29u
dGV4dChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNldFVwUGxheWJhY2tDb250cm9sc01h
bmFnZXJXaXRoSUQobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyNlbmRpZgorfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNsZWFyUGxheWJh
Y2tDb250cm9sc01hbmFnZXIoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fY29u
dHJvbHNNYW5hZ2VyQ29udGV4dElkKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVDbGll
bnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkKTsKKyAgICBtX2NvbnRyb2xz
TWFuYWdlckNvbnRleHRJZCA9IDA7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OkNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CisjZW5kaWYKK30KKwordWludDY0X3QgUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6Y29udGV4dElkRm9yTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQm
IG1lZGlhRWxlbWVudCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbWVkaWFFbGVtZW50cy5l
bnN1cmUoJm1lZGlhRWxlbWVudCwgWyZdIHsgcmV0dXJuIG5leHRDb250ZXh0SWQoKTsgfSk7Cisg
ICAgdWludDY0X3QgY29udGV4dElkID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLnNldE1lZGlhRWxlbWVudCgmbWVkaWFFbGVtZW50KTsKKyAg
ICByZXR1cm4gY29udGV4dElkOworfQorCisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdl
cjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRl
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJh
dGlvbikKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eTo6RHVyYXRpb25DaGFuZ2VkKGNvbnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKK30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjdXJyZW50VGltZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpDdXJyZW50VGltZUNoYW5nZWQoY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5j
aG9yVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmJ1ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVm
ZmVyZWRUaW1lKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6UGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpCdWZmZXJlZFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgYnVmZmVyZWRUaW1l
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
cGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgcGxh
eWJhY2tTdGFydGVkVGltZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eTo6UGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoY29udGV4dElk
LCBwbGF5YmFja1N0YXJ0ZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6cmF0ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29s
IGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5OjpSYXRlQ2hhbmdlZChjb250ZXh0SWQs
IGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vla2FibGVSYW5nZXNDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdlcywgZG91YmxlIGxh
c3RNb2RpZmllZFRpbWUsIGRvdWJsZSBsaXZlVXBkYXRlSW50ZXJ2YWwpCit7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlc1ZlY3RvcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJs
ZSBzdGFydCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuc3RhcnQoaSkudG9Eb3VibGUoKTsKKyAgICAg
ICAgZG91YmxlIGVuZCA9IHRpbWVSYW5nZXMucmFuZ2VzKCkuZW5kKGkpLnRvRG91YmxlKCk7Cisg
ICAgICAgIHJhbmdlc1ZlY3Rvci5hcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIH0KKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6U2Vla2Fi
bGVSYW5nZXNWZWN0b3JDaGFuZ2VkKGNvbnRleHRJZCwgV1RGTW92ZShyYW5nZXNWZWN0b3IpLCBs
YXN0TW9kaWZpZWRUaW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
K30KKwordm9pZCBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjYW5QbGF5RmFzdFJldmVyc2VDaGFu
Z2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6Q2FuUGxheUZhc3RSZXZlcnNl
Q2hhbmdlZChjb250ZXh0SWQsIHZhbHVlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYg
b3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+
cGFnZUlEKCkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29udGV4dElkLCBvcHRpb25z
LCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6RXh0ZXJu
YWxQbGF5YmFja1Byb3BlcnRpZXNDaGFuZ2VkKGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHRhcmdldFR5cGUpLCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YXVkaW9NZWRpYVNl
bGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQoY29udGV4dElkLCBzZWxl
Y3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9u
TWFuYWdlcjo6bGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5k
ZXhDaGFuZ2VkKGNvbnRleHRJZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZGlzYWJsZWQpCit7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OldpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChjb250ZXh0SWQsIGRpc2FibGVkKSk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6bXV0ZWRDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBtdXRlZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6TXV0ZWRDaGFuZ2VkKGNvbnRleHRJZCwgbXV0ZWQpKTsK
K30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OgorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXkodWludDY0X3QgY29udGV4
dElkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxheSgpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBhdXNlKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBsYXlTdGF0ZSgpOworfQorCit2b2lk
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2NydWJiaW5nKCk7Cit9
CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjcnViYmluZygp
OworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWtUb1RpbWUodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LnNlZWtUb1RpbWUodGltZSk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFz
dFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLmZhc3RTZWVrKHRpbWUpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCk7Cit9CisK
K3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCgpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNj
YW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmVuZFNjYW5uaW5nKCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQor
eworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihp
bmRleCk7Cit9CisKK3ZvaWQgUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOwor
fQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXF1ZXN0KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLm1lZGlhRWxlbWVudCgpOworICAgIGlmIChlbGVtZW50KQorICAg
ICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6
SGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNvbnRleHRJZCwgZWxlbWVudC0+Z2V0
SWRBdHRyaWJ1dGUoKSkpOworfQorCit2b2lkIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQoreworICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkudG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOworfQorCit2b2lkIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZU11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZU11dGVkKCk7Cit9CisKK3ZvaWQgUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0TXV0ZWQodWludDY0X3QgY29udGV4dElkLCBib29sIG11
dGVkKQoreworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TXV0ZWQobXV0ZWQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY4ZDNjMjQ5MjU1MTJiYTMzOGRiMDljMmMxMmY3NWM3NTI5MjNj
ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKKworI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudEVudW1zLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IElQQyB7CitjbGFzcyBBdHRhY2htZW50OworY2xhc3MgQ29ubmVjdGlvbjsKK2NsYXNzIERlY29k
ZXI7CitjbGFzcyBNZXNzYWdlUmVjZWl2ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEZsb2F0U2l6ZTsKK2NsYXNzIE5vZGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBMYXllckhvc3RpbmdDb250ZXh0OworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ7CitjbGFzcyBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOwor
Y2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dAorICAgIDogcHVibGljIFJlZkNvdW50ZWQ8VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBjcmVhdGUoVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0
X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICB9Cisg
ICAgdmlydHVhbCB+VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpOworCisgICAgdm9p
ZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRyOyB9CisKKyAgICBMYXllckhvc3Rp
bmdDb250ZXh0KiBsYXllckhvc3RpbmdDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllckhvc3RpbmdD
b250ZXh0LmdldCgpOyB9CisgICAgdm9pZCBzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5p
cXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiYmKTsKKworICAgIGJvb2wgaXNBbmltYXRpbmco
KSBjb25zdCB7IHJldHVybiBtX2lzQW5pbWF0aW5nOyB9CisgICAgdm9pZCBzZXRJc0FuaW1hdGlu
Zyhib29sIGZsYWcpIHsgbV9pc0FuaW1hdGluZyA9IGZsYWc7IH0KKworICAgIGJvb2wgdGFyZ2V0
SXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRJc0Z1bGxzY3JlZW47IH0KKyAg
ICB2b2lkIHNldFRhcmdldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV90YXJnZXRJc0Z1bGxz
Y3JlZW4gPSBmbGFnOyB9CisKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgZnVsbHNjcmVlbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxz
Y3JlZW5Nb2RlOyB9CisgICAgdm9pZCBzZXRGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgeyBtX2Z1bGxzY3JlZW5N
b2RlID0gbW9kZTsgfQorCisgICAgYm9vbCBpc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBt
X2lzRnVsbHNjcmVlbjsgfQorICAgIHZvaWQgc2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBt
X2lzRnVsbHNjcmVlbiA9IGZsYWc7IH0KKworcHJpdmF0ZToKKyAgICAvLyBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENsaWVudAorICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
KSBvdmVycmlkZTsKKworICAgIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoVmlkZW9G
dWxsc2NyZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7CisgICAg
c3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4
dDsKKyAgICBib29sIG1faXNBbmltYXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV90YXJnZXRJ
c0Z1bGxzY3JlZW4geyBmYWxzZSB9OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX2Z1bGxzY3JlZW5Nb2RlIHsgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OworICAgIGJvb2wgbV9p
c0Z1bGxzY3JlZW4geyBmYWxzZSB9OworfTsKKworY2xhc3MgVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+LCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI+IGNyZWF0ZShXZWJQYWdlJiwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYpOwor
ICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKKyAgICAKKyAgICB2b2lkIGlu
dmFsaWRhdGUoKTsKKyAgICAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSW50ZXJmYWNlIHRvIENo
cm9tZUNsaWVudAorICAgIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25zdDsKKyAgICB2b2lk
IGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50Jik7CisgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2Rl
V2l0aG91dEFuaW1hdGlvbihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKworcHJvdGVjdGVkOgor
ICAgIGZyaWVuZCBjbGFzcyBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OworCisgICAg
ZXhwbGljaXQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihXZWJQYWdlJiwgUGxheWJhY2tTZXNzaW9u
TWFuYWdlciYpOworCisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4sIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbEludGVyZmFjZVR1
cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgTW9k
ZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKTsKKyAgICBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgZW5z
dXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IHJlbW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGFkZENsaWVudEZv
ckNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNv
bnRleHQodWludDY0X3QgY29udGV4dElkKTsKKworICAgIC8vIEludGVyZmFjZSB0byBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisgICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQodWludDY0
X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKTsKKyAgICB2b2lkIHZpZGVvRGltZW5zaW9uc0No
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKwor
ICAgIC8vIE1lc3NhZ2VzIGZyb20gVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisgICAgdm9p
ZCByZXF1ZXN0RnVsbHNjcmVlbk1vZGUodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRo
TWVkaWEpOworICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRD
bGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9M
YXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJv
dW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVy
R3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KTsKKyAgICB2
b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZp
c2libGUpOworICAgIAorICAgIFdlYlBhZ2UqIG1fcGFnZTsKKyAgICBSZWY8UGxheWJhY2tTZXNz
aW9uTWFuYWdlcj4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIEhhc2hNYXA8V2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudCosIHVpbnQ2NF90PiBtX3ZpZGVvRWxlbWVudHM7CisgICAgSGFz
aE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOworICAgIHVp
bnQ2NF90IG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElkIHsgMCB9OworICAgIEhhc2hNYXA8dWlu
dDY0X3QsIGludD4gbV9jbGllbnRDb3VudHM7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJM
RShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWM0YjU2ODk1NTllZTc1ZDk5NDE2ZTgwNGM3ZmNmNjk3YmIwMjUx
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIChQTEFURk9STShJT1MpICYmIEhB
VkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpKQorbWVzc2FnZXMgLT4gVmlkZW9GdWxsc2NyZWVuTWFuYWdlciB7CisgICAgUmVxdWVz
dEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wg
ZmluaXNoZWRXaXRoTWVkaWEpCisgICAgRGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKKyAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlk
RW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRDbGVhbnVwRnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2ht
ZW50IGZlbmNlUG9ydCkKKyAgICBTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29u
dGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQorICAgIEZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQorICAgIEZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK30KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTJiZDI1MDRkYzkzZmE4MTIzMTczY2E5Mjgz
NzFiOTMwOTM4OWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KQEAgLTAsMCArMSw0ODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIuaCIKKworI2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQorCisjaW1wb3J0ICJB
dHRhY2htZW50LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIK
KyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQg
IldlYlByb2Nlc3MuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgorI2lt
cG9ydCA8V2ViQ29yZS9Db2xvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bs
YXRmb3JtQ0FMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
VmlkZW8uaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+CisjaW1wb3J0IDxt
YWNoL21hY2hfcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3N0YXRpYyBJbnRSZWN0IGlubGluZVZpZGVvRnJhbWUoSFRNTFZpZGVvRWxl
bWVudCYgZWxlbWVudCkKK3sKKyAgICBlbGVtZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJl
bmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBh
dXRvIHJlY3QgPSByZW5kZXJlci0+dmlkZW9Cb3goKTsKKyAgICByZWN0Lm1vdmVCeShyZW5kZXJl
ci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gZWxl
bWVudC5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOworfQorCisj
cHJhZ21hIG1hcmsgLSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisKK1ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQo
VmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAg
IDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAgICwgbV9jb250ZXh0SWQoY29udGV4dElkKQorewor
fQorCitWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5n
Q29udGV4dD4mJiBjb250ZXh0KQoreworICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IFdURk1v
dmUoY29udGV4dCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5oYXNWaWRlb0NoYW5nZWQobV9jb250ZXh0SWQsIGhhc1ZpZGVvKTsK
K30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp2aWRlb0RpbWVuc2lv
bnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1lbnNpb25zKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChtX2Nv
bnRleHRJZCwgdmlkZW9EaW1lbnNpb25zKTsKK30KKworI3ByYWdtYSBtYXJrIC0gVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcgorCitSZWY8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UsIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIm
IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlLCBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyKSk7Cit9CisK
K1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoV2ViUGFnZSYg
cGFnZSwgUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKKyAg
ICA6IG1fcGFnZSgmcGFnZSkKKyAgICAsIG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlcihwbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBwYWdlLnBhZ2VJRCgpLCAqdGhpcyk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6On5WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBp
bnRlcmZhY2UpID0gdHVwbGU7CisKKyAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxs
cHRyKTsKKyAgICAgICAgbW9kZWwtPnJlbW92ZUNsaWVudCgqaW50ZXJmYWNlKTsKKworICAgICAg
ICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xl
YXIoKTsKKyAgICBtX3ZpZGVvRWxlbWVudHMuY2xlYXIoKTsKKyAgICBtX2NsaWVudENvdW50cy5j
bGVhcigpOworICAgIAorICAgIGlmIChtX3BhZ2UpCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwordm9p
ZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjppbnZhbGlkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9w
YWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlID0gbnVsbHB0cjsKK30KKworVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVm
UHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbCA9IFZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIG1fcGxheWJhY2tTZXNzaW9u
TWFuYWdlci0+YWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNl
LT5zZXRMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvckV4
dGVybmFsSG9zdGluZ1Byb2Nlc3MoKSk7CisgICAgbW9kZWwtPmFkZENsaWVudCgqaW50ZXJmYWNl
KTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShtb2RlbCksIFdURk1vdmUo
aW50ZXJmYWNlKSk7Cit9CisKK1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNl
VHVwbGUmIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dE1hcC5h
ZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOworICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7Cit9CisKK1dlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
JiBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpKTsKK30KKworVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkp
OworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNvbnRleHQodWludDY0
X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+
IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIt
PnJlbW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKworICAgIFJlZlB0cjxIVE1MVmlk
ZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7CisgICAgbW9k
ZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCpp
bnRlcmZhY2UpOworICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIG1fdmlkZW9FbGVt
ZW50cy5yZW1vdmUodmlkZW9FbGVtZW50LmdldCgpKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3Zl
KGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YWRkQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBt
X2NsaWVudENvdW50cy5hZGQoY29udGV4dElkLCAxKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Cit9CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJ
ZCkpOworCisgICAgaW50IGNsaWVudENvdW50ID0gbV9jbGllbnRDb3VudHMuZ2V0KGNvbnRleHRJ
ZCk7CisgICAgQVNTRVJUKGNsaWVudENvdW50ID4gMCk7CisgICAgY2xpZW50Q291bnQtLTsKKwor
ICAgIGlmIChjbGllbnRDb3VudCA8PSAwKSB7CisgICAgICAgIG1fY2xpZW50Q291bnRzLnJlbW92
ZShjb250ZXh0SWQpOworICAgICAgICByZW1vdmVDb250ZXh0KGNvbnRleHRJZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudENvdW50cy5zZXQoY29udGV4dElkLCBjbGll
bnRDb3VudCk7Cit9CisKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50Ogor
Citib29sIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBj
b25zdAoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAg
cmV0dXJuIFNldHRpbmdzOjphdktpdEVuYWJsZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1vZGUg
PT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGlj
dHVyZSAmJiBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKTsKKyNlbmRpZgorfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50
KEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgQVNT
RVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9u
ZSk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZp
ZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCglcCkiLCB0aGlzKTsKKworICAgIHVpbnQ2NF90
IGNvbnRleHRJZCA9IG1fcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+Y29udGV4dElkRm9yTWVkaWFF
bGVtZW50KHZpZGVvRWxlbWVudCk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZpZGVvRWxlbWVu
dHMuYWRkKCZ2aWRlb0VsZW1lbnQsIGNvbnRleHRJZCk7CisgICAgVU5VU0VEX1BBUkFNKGFkZFJl
c3VsdCk7CisgICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPT0gY29udGV4dElk
KTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
KyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7CisgICAgYWRkQ2xpZW50Rm9yQ29udGV4dChjb250ZXh0SWQpOworICAgIGlm
ICghaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpCisgICAgICAgIGludGVyZmFjZS0+
c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRl
cm5hbEhvc3RpbmdQcm9jZXNzKCkpOworCisgICAgYXV0byB2aWRlb1JlY3QgPSBpbmxpbmVWaWRl
b0ZyYW1lKHZpZGVvRWxlbWVudCk7CisgICAgRmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSA9IEZs
b2F0UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKKwor
ICAgIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBvbGRNb2RlID0g
aW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOworICAgIGludGVyZmFjZS0+c2V0VGFyZ2V0SXNG
dWxsc2NyZWVuKHRydWUpOworICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7
CisgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudCgmdmlkZW9FbGVtZW50KTsKKyAgICBpZiAob2xk
TW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKQor
ICAgICAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKHZpZGVvTGF5ZXJGcmFtZSk7CisKKyAg
ICBpZiAoaW50ZXJmYWNlLT5pc0FuaW1hdGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaW50
ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyh0cnVlKTsKKworICAgIGJvb2wgYWxsb3dzUGljdHVyZUlu
UGljdHVyZSA9IHZpZGVvRWxlbWVudC53ZWJraXRTdXBwb3J0c1ByZXNlbnRhdGlvbk1vZGUoSFRN
TFZpZGVvRWxlbWVudDo6VmlkZW9QcmVzZW50YXRpb25Nb2RlOjpQaWN0dXJlSW5QaWN0dXJlKTsK
KyAgICAKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXllckhv
c3RpbmdDb250ZXh0KCktPmNvbnRleHRJRCgpLCB2aWRlb1JlY3QsIG1fcGFnZS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSwgaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpLCBhbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCVwKSIs
IHRoaXMpOworICAgIEFTU0VSVChtX3BhZ2UpOworICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMu
Y29udGFpbnMoJnZpZGVvRWxlbWVudCkpOworCisgICAgdWludDY0X3QgY29udGV4dElkID0gbV92
aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKKyAgICBhdXRvJiBpbnRlcmZhY2UgPSBl
bnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1
bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYgKGludGVyZmFjZS5pc0FuaW1hdGluZygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbnRlcmZhY2Uuc2V0SXNBbmltYXRpbmcodHJ1ZSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRG
dWxsc2NyZWVuKGNvbnRleHRJZCwgaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpKSwgbV9w
YWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZp
ZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29yZTo6SFRNTFZpZGVvRWxl
bWVudCYgdmlkZW9FbGVtZW50LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0
aW9uKCVwKSIsIHRoaXMpOworCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJF
U0VOVEFUSU9OX01PREUpCisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgQVNTRVJUKG1fdmlkZW9F
bGVtZW50cy5jb250YWlucygmdmlkZW9FbGVtZW50KSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0
SWQgPSBtX3ZpZGVvRWxlbWVudHMuZ2V0KCZ2aWRlb0VsZW1lbnQpOworICAgIGF1dG8mIGludGVy
ZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLnNldFRh
cmdldElzRnVsbHNjcmVlbihmYWxzZSk7CisKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9u
VG9Nb2RlKGNvbnRleHRJZCwgdGFyZ2V0TW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0odmlkZW9FbGVtZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0
TW9kZSk7CisjZW5kaWYKK30KKworI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0OgorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Omhh
c1ZpZGVvQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pCit7CisgICAg
aWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OlNldEhhc1ZpZGVvKGNvbnRleHRJZCwgaGFzVmlkZW8pLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKK30KKwordm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp2aWRlb0RpbWVu
c2lvbnNDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0Rp
bWVuc2lvbnMpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFZpZGVvRGltZW5zaW9ucyhjb250
ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCisjcHJhZ21h
IG1hcmsgTWVzc2FnZXMgZnJvbSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6CisKK3ZvaWQg
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCit7CisgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUobW9kZSwgZmluaXNoZWRXaXRoTWVkaWEpOwor
fQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQoreworICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOworfQor
Cit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7CisKKyAg
ICBBU1NFUlQobV9wYWdlKTsKKyAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NBTGF5
ZXIgbGF5ZXJdOworI2lmbmRlZiBOREVCVUcKKyAgICBbdmlkZW9MYXllciBzZXROYW1lOkAiV2Vi
IHZpZGVvIGZ1bGxzY3JlZW4gbWFuYWdlciBsYXllciJdOworI2VuZGlmCisKKyAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVT
XTsKKworICAgIFt2aWRlb0xheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDAsIDApXTsKKyAg
ICBbdmlkZW9MYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpD
b2xvcjo6dHJhbnNwYXJlbnQpXTsKKworICAgIC8vIFNldCBhIHNjYWxlIGZhY3RvciBoZXJlIHRv
IG1ha2UgY29udmVydFJlY3Q6dG9MYXllcjpuaWwgdGFrZSBzY2FsZSBmYWN0b3IgaW50byBhY2Nv
dW50LiA8cmRhcjovL3Byb2JsZW0vMTgzMTY1NDI+LgorICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9y
IGlzIGludmVydGVkIGluIHRoZSBob3N0aW5nIHByb2Nlc3MuCisgICAgZmxvYXQgaG9zdGluZ1Nj
YWxlRmFjdG9yID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIFt2aWRlb0xheWVy
IHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3Rvciwg
aG9zdGluZ1NjYWxlRmFjdG9yLCAxKV07CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5sYXll
ckhvc3RpbmdDb250ZXh0KCktPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKKworICAgIFJlZlB0
cjxWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIAorICAg
IG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyLCBbcHJvdGVjdGVkVGhp
cywgdGhpcywgY29udGV4dElkXSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB0aGlzLCBjb250ZXh0SWRdIHsKKyAgICAg
ICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UpCisgICAgICAgICAgICAgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNj
cmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAg
ICAgfSk7CisgICAgfSk7CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKyAg
ICAKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbiglcCwgJXgpIiwgdGhpcywgY29udGV4dElkKTsKKwor
ICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAg
UmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBz
dGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRl
cmZhY2UtPnNldElzRnVsbHNjcmVlbihmYWxzZSk7CisKKyAgICBpZiAoaW50ZXJmYWNlLT50YXJn
ZXRJc0Z1bGxzY3JlZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEhUTUxWaWRl
b0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKyAgICBpZiAo
IXZpZGVvRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gZXhpdCBmdWxsc2NyZWVu
IG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4K
KyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVk
VGhpcywgdmlkZW9FbGVtZW50XSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX3BhZ2Up
CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5leGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9F
bGVtZW50KCp2aWRlb0VsZW1lbnQpOworICAgIH0pOworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBM
T0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVu
KCVwLCAleCkiLCB0aGlzLCBjb250ZXh0SWQpOworCisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2Up
ID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICBSZWZQdHI8VmlkZW9G
dWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAKKyAgICBtb2RlbC0+
d2FpdEZvclByZXBhcmVkRm9ySW5saW5lVGhlbihbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBp
bnRlcmZhY2UsIG1vZGVsXSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZSwgbW9kZWxd
IHsKKyAgICAgICAgICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90
ZWN0ZWRUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0geworICAgICAgICAgICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCBjb250
ZXh0SWQsIGludGVyZmFjZV0geworICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJmYWNlLT5s
YXllckhvc3RpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFj
ZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIobnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0
cik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
Pm1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVh
bnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBwcm90ZWN0ZWRUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAg
ICB9KTsKK30KKyAgICAKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oJXAsICV4KSIsIHRoaXMs
IGNvbnRleHRJZCk7CisKKyAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IG1vZGVsOworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhm
YWxzZSk7CisgICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworICAgIEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlID0gaW50ZXJmYWNlLT5m
dWxsc2NyZWVuTW9kZSgpOworICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuID0gaW50ZXJmYWNl
LT50YXJnZXRJc0Z1bGxzY3JlZW4oKTsKKworICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihuaWwpOworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBt
b2RlbC0+dmlkZW9FbGVtZW50KCk7CisKKyAgICBpbnRlcmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOworICAgIHJl
bW92ZUNsaWVudEZvckNvbnRleHQoY29udGV4dElkKTsKKworICAgIGlmICghdmlkZW9FbGVtZW50
IHx8ICF0YXJnZXRJc0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwcm90ZWN0ZWRUaGlzLCB2aWRlb0Vs
ZW1lbnQsIG1vZGVdIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fcGFnZSkKKyAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50
KCp2aWRlb0VsZW1lbnQsIG1vZGUpOworICAgIH0pOworfQorICAgIAordm9pZCBWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElk
LCB1bnNpZ25lZCBncmF2aXR5KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0Vmlk
ZW9MYXllckdyYXZpdHkoKFZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0
eSk7Cit9CisgICAgCit2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKK3sK
KyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgbW9kZWwgPSBl
bnN1cmVNb2RlbChjb250ZXh0SWQpOworCisgICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQorICAgICAg
ICBtb2RlbC52aWRlb0VsZW1lbnQoKS0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2Up
OworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVlLCBpbmxpbmVWaWRlb0Zy
YW1lKCptb2RlbC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKyAgICAK
K3ZvaWQgVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2ht
ZW50IGZlbmNlUG9ydCkKK3sKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCglcCwgJXgpIiwgdGhpcywgY29udGV4dElk
KTsKKworICAgIFJlZlB0cjxWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
CisgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsK
KyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCk7CisKKyAgICBpZiAoc3RkOjppc25hbihib3VuZHMueCgpKSB8fCBzdGQ6Omlz
bmFuKGJvdW5kcy55KCkpIHx8IHN0ZDo6aXNuYW4oYm91bmRzLndpZHRoKCkpIHx8IHN0ZDo6aXNu
YW4oYm91bmRzLmhlaWdodCgpKSkgeworICAgICAgICBhdXRvIHZpZGVvUmVjdCA9IGlubGluZVZp
ZGVvRnJhbWUoKm1vZGVsLT52aWRlb0VsZW1lbnQoKSk7CisgICAgICAgIGJvdW5kcyA9IEZsb2F0
UmVjdCgwLCAwLCB2aWRlb1JlY3Qud2lkdGgoKSwgdmlkZW9SZWN0LmhlaWdodCgpKTsKKyAgICB9
CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNl
dEFuaW1hdGlvbkR1cmF0aW9uOjBdOworICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0Nv
bnRleHQoKSkKKyAgICAgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldEZl
bmNlUG9ydChmZW5jZVBvcnQucG9ydCgpKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1l
KGJvdW5kcyk7CisgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVu
Y2VQb3J0LnBvcnQoKSk7CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUzY2IxNjk4YmRiMTU1Zjk2Njk4MTEx
ZjA1MTVmMjM4ODdmNWRhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50RW51bXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtQ0FMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgQXR0YWNobWVudDsKLWNsYXNzIENvbm5l
Y3Rpb247Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgTWVzc2FnZVJlY2VpdmVyOwotfQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBOb2RlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0KLWNsYXNz
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQgZmluYWwKLSAgICA6IHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+Ci0gICAgLCBwdWJs
aWMgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgV2Vi
Q29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNv
bnRleHQobWFuYWdlciwgY29udGV4dElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsg
bV9tYW5hZ2VyID0gbnVsbHB0cjsgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OwotCi0gICAgLy8gV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlCi0gICAgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBmaW5hbDsKLQotICAgIC8v
IFdlYlBsYXliYWNrTW9kZWxDbGllbnQKLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChkb3VibGUp
IGZpbmFsOwotICAgIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwg
ZG91YmxlIGFuY2hvclRpbWUpIGZpbmFsOwotICAgIHZvaWQgYnVmZmVyZWRUaW1lQ2hhbmdlZChk
b3VibGUpIGZpbmFsOwotICAgIHZvaWQgcGxheWJhY2tTdGFydGVkVGltZUNoYW5nZWQoZG91Ymxl
IHBsYXliYWNrU3RhcnRlZFRpbWUpIGZpbmFsOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBp
c1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkgZmluYWw7Ci0gICAgdm9pZCBzZWVrYWJsZVJh
bmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYsIGRvdWJsZSBsYXN0TW9kaWZp
ZWRUaW1lLCBkb3VibGUgbGl2ZVVwZGF0ZUludGVydmFsKSBmaW5hbDsKLSAgICB2b2lkIGNhblBs
YXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkgZmluYWw7Ci0gICAgdm9pZCBhdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgZmluYWw7Ci0g
ICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8
V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KSBmaW5hbDsKLSAgICB2b2lkIGF1ZGlvTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQo
dWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQgbGVnaWJsZU1lZGlhU2VsZWN0aW9uSW5kZXhDaGFu
Z2VkKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJv
b2wgZW5hYmxlZCwgV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpIGZpbmFs
OwotICAgIHZvaWQgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKGJvb2wpIGZp
bmFsOwotICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpIGZpbmFsOwotCi0gICAgV2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dChXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiwgdWlu
dDY0X3QgY29udGV4dElkKTsKLQotICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIqIG1fbWFu
YWdlcjsKLSAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKLX07Ci0KLWNsYXNzIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZp
cnR1YWwgfldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKTsKLQotICAgIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7Ci0KLSAgICB2
b2lkIHNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dCYpOwotICAgIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOwotICAgIHVpbnQ2
NF90IGNvbnRleHRJZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Jik7
Ci0KLXByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsK
LQotICAgIGV4cGxpY2l0IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoV2ViUGFnZSYpOwotCi0g
ICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudD4sIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250
ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKLSAgICBNb2RlbEludGVyZmFjZVR1cGxlIGNyZWF0
ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgTW9kZWxJbnRlcmZh
Y2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAg
ICBXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudCYgZW5zdXJlTW9k
ZWwodWludDY0X3QgY29udGV4dElkKTsKLSAgICBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VD
b250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJl
bW92ZUNvbnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGFkZENsaWVudEZvckNv
bnRleHQodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudEZvckNvbnRl
eHQodWludDY0X3QgY29udGV4dElkKTsKLQotICAgIC8vIEludGVyZmFjZSB0byBXZWJQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ci0gICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0
X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSk7Ci0gICAgdm9pZCBjdXJyZW50VGltZUNoYW5nZWQodWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKTsKLSAgICB2b2lkIGJ1
ZmZlcmVkVGltZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1l
KTsKLSAgICB2b2lkIHBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQodWlu
dDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKLSAg
ICB2b2lkIHNlZWthYmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdl
YkNvcmU6OlRpbWVSYW5nZXMmLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVV
cGRhdGVJbnRlcnZhbCk7Ci0gICAgdm9pZCBjYW5QbGF5RmFzdFJldmVyc2VDaGFuZ2VkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uc0NoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsK
LSAgICB2b2lkIGxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgdm9pZCBhdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgdm9pZCBsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3Qg
Y29udGV4dElkLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICB2b2lkIGV4dGVybmFsUGxh
eWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFN0cmlu
ZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLSAgICB2b2lkIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wpOwotICAgIHZvaWQgbXV0ZWRD
aGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCk7Ci0KLSAgICAvLyBNZXNzYWdlcyBmcm9t
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eQotICAgIHZvaWQgcGxheSh1aW50NjRfdCBj
b250ZXh0SWQpOwotICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lk
IHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYmVnaW5TY3J1
YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRf
dCBjb250ZXh0SWQpOwotICAgIHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSB0aW1lKTsKLSAgICB2b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IHRpbWUpOwotICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOwot
ICAgIHZvaWQgZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7Ci0g
ICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50
NjRfdCBpbmRleCk7Ci0gICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVxdWVzdCh1
aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh1aW50
NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgdG9nZ2xlTXV0ZWQodWludDY0X3QgY29udGV4dElk
KTsKLSAgICB2b2lkIHNldE11dGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCk7Ci0K
LSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiwgdWludDY0X3Q+IG1fbWVkaWFFbGVtZW50czsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBN
b2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9s
c01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0gICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1f
Y2xpZW50Q291bnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQ
TEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1lc3NhZ2VzLmluCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTY2NmE3MTU0Y2M0YTk0NGQwNGVjYTg2Y2IzMDMwMDZi
ZDc3OGExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1l
c3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLW1lc3NhZ2VzIC0+IFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIgewotICAgIFBsYXkodWludDY0X3QgY29udGV4dElkKQotICAg
IFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0X3Qg
Y29udGV4dElkKQotICAgIEJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBF
bmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQotICAgIFNlZWtUb1RpbWUodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgdGltZSkKLSAgICBGYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSB0aW1lKQotICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICBCZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQotICAgIEVu
ZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9u
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi0gICAgU2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCi0gICAgSGFuZGxl
Q29udHJvbGxlZEVsZW1lbnRJRFJlcXVlc3QodWludDY0X3QgY29udGV4dElkKQotICAgIFRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUodWludDY0X3QgY29udGV4dElkKQotICAgIFRvZ2dsZU11dGVkKHVp
bnQ2NF90IGNvbnRleHRJZCkKLSAgICBTZXRNdXRlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
bXV0ZWQpCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI4NWEyN2U0OGIyYTQyODI5ZmI0NDIyNGMxNzRkOWIyMzgzNTViNWYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KKysrIC9kZXYv
bnVsbApAQCAtMSw0NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgiCi0KLSNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi0KLSNpbXBvcnQgIkF0dGFjaG1lbnQuaCIKLSNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgotI2ltcG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9D
b2xvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2lt
cG9ydCA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgotI2ltcG9ydCA8bWFjaC9tYWNo
X3BvcnQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1zdGF0aWMgdWludDY0X3QgbmV4dENvbnRleHRJZCgpCi17Ci0gICAgc3RhdGljIHVpbnQ2
NF90IGNvbnRleHRJZCA9IDA7Ci0gICAgcmV0dXJuICsrY29udGV4dElkOwotfQotCi0jcHJhZ21h
IG1hcmsgLSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ci0KLVdlYlBsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRl
eHQoV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElk
KQotICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgICwgbV9jb250ZXh0SWQoY29udGV4dElk
KQotewotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0Ojp+V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlQ29udGV4dDo6cmVzZXRNZWRpYVN0YXRlKCkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPnJlc2V0TWVkaWFTdGF0ZShtX2NvbnRleHRJZCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6ZHVyYXRpb25DaGFu
Z2VkKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPmR1cmF0aW9uQ2hhbmdlZChtX2NvbnRleHRJZCwgZHVyYXRpb24pOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmN1cnJlbnRUaW1lQ2hhbmdlZChk
b3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQotewotICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgIG1fbWFuYWdlci0+Y3VycmVudFRpbWVDaGFuZ2VkKG1fY29udGV4dElkLCBj
dXJyZW50VGltZSwgYW5jaG9yVGltZSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dDo6YnVmZmVyZWRUaW1lQ2hhbmdlZChkb3VibGUgYnVmZmVyZWRUaW1lKQot
ewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+YnVmZmVyZWRUaW1lQ2hh
bmdlZChtX2NvbnRleHRJZCwgYnVmZmVyZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VDb250ZXh0OjpyYXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQg
cGxheWJhY2tSYXRlKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+
cmF0ZUNoYW5nZWQobV9jb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjpwbGF5YmFja1N0YXJ0ZWRU
aW1lQ2hhbmdlZChkb3VibGUgcGxheWJhY2tTdGFydGVkVGltZSkKLXsKLSAgICBpZiAobV9tYW5h
Z2VyKQotICAgICAgICBtX21hbmFnZXItPnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKG1fY29u
dGV4dElkLCBwbGF5YmFja1N0YXJ0ZWRUaW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjpzZWVrYWJsZVJhbmdlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6
VGltZVJhbmdlcyYgcmFuZ2VzLCBkb3VibGUgbGFzdE1vZGlmaWVkVGltZSwgZG91YmxlIGxpdmVV
cGRhdGVJbnRlcnZhbCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXIt
PnNlZWthYmxlUmFuZ2VzQ2hhbmdlZChtX2NvbnRleHRJZCwgcmFuZ2VzLCBsYXN0TW9kaWZpZWRU
aW1lLCBsaXZlVXBkYXRlSW50ZXJ2YWwpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZUNvbnRleHQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCB2YWx1ZSkKLXsK
LSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhblBsYXlGYXN0UmV2ZXJz
ZUNoYW5nZWQobV9jb250ZXh0SWQsIHZhbHVlKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29u
c3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0
ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBp
ZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKLX0KLQot
dm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0OjphdWRpb01lZGlhU2VsZWN0
aW9uSW5kZXhDaGFuZ2VkKHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgaWYgKG1fbWFu
YWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5hdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2Vk
KG1fY29udGV4dElkLCBzZWxlY3RlZEluZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VDb250ZXh0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21h
bmFnZXItPmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZChtX2NvbnRleHRJZCwgc2Vs
ZWN0ZWRJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4
dDo6ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBs
b2NhbGl6ZWREZXZpY2VOYW1lKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFu
YWdlci0+ZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQobV9jb250ZXh0SWQsIGVuYWJsZWQsIHR5cGUs
IGxvY2FsaXplZERldmljZU5hbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUNvbnRleHQ6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkQ2hhbmdlZChib29sIGRp
c2FibGVkKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+d2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWRDaGFuZ2VkKG1fY29udGV4dElkLCBkaXNhYmxlZCk7Ci19
Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dDo6bXV0ZWRDaGFuZ2Vk
KGJvb2wgbXV0ZWQpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5t
dXRlZENoYW5nZWQobV9jb250ZXh0SWQsIG11dGVkKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcgotCi1SZWY8V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcj4g
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcihwYWdlKSk7Ci19
Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIo
V2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZSgmcGFnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOwot
fQotCi1XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp+V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdl
cigpCi17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewot
ICAgICAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ+IG1vZGVs
OwotICAgICAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQ29udGV4dD4gaW50
ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotICAg
ICAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCppbnRlcmZhY2UpOwotICAgICAgICBtb2RlbC0+c2V0
TWVkaWFFbGVtZW50KG51bGxwdHIpOwotCi0gICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgp
OwotICAgIH0KLQotICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwotICAgIG1fbWVkaWFFbGVtZW50
cy5jbGVhcigpOwotICAgIG1fY2xpZW50Q291bnRzLmNsZWFyKCk7Ci0KLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7
Ci19Ci0KLVdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIFJlZlB0cjxXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudD4gbW9kZWwgPSBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRl
KCk7Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZSA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywg
Y29udGV4dElkKTsKLSAgICBtb2RlbC0+YWRkQ2xpZW50KCppbnRlcmZhY2UpOwotCi0gICAgcmV0
dXJuIHN0ZDo6bWFrZV90dXBsZShXVEZNb3ZlKG1vZGVsKSwgV1RGTW92ZShpbnRlcmZhY2UpKTsK
LX0KLQotV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBsZSYgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250
ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJ
bnRlcmZhY2UoY29udGV4dElkKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLX0KLQotV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQmIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkK
LXsKLSAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCkpOwotfQotCi1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VDb250ZXh0JiBXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQot
ewotICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4
dElkKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2Up
ID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxIVE1M
TWVkaWFFbGVtZW50PiBtZWRpYUVsZW1lbnQgPSBtb2RlbC0+bWVkaWFFbGVtZW50KCk7Ci0gICAg
bW9kZWwtPnNldE1lZGlhRWxlbWVudChudWxscHRyKTsKLSAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50
KCppbnRlcmZhY2UpOwotICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOwotICAgIG1fbWVkaWFF
bGVtZW50cy5yZW1vdmUobWVkaWFFbGVtZW50LmdldCgpKTsKLSAgICBtX2NvbnRleHRNYXAucmVt
b3ZlKGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YWRk
Q2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9jbGllbnRDb3Vu
dHMuYWRkKGNvbnRleHRJZCk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
cmVtb3ZlQ2xpZW50Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgQVNTRVJU
KG1fY2xpZW50Q291bnRzLmNvbnRhaW5zKGNvbnRleHRJZCkpOwotICAgIGlmIChtX2NsaWVudENv
dW50cy5yZW1vdmUoY29udGV4dElkKSkKLSAgICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQp
OwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldFVwUGxheWJhY2tDb250
cm9sc01hbmFnZXIoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQotewot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBhdXRvIGZvdW5kSXRlcmF0b3IgPSBtX21lZGlhRWxlbWVu
dHMuZmluZCgmbWVkaWFFbGVtZW50KTsKLSAgICBpZiAoZm91bmRJdGVyYXRvciAhPSBtX21lZGlh
RWxlbWVudHMuZW5kKCkpIHsKLSAgICAgICAgdWludDY0X3QgY29udGV4dElkID0gZm91bmRJdGVy
YXRvci0+dmFsdWU7Ci0gICAgICAgIGlmIChtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJZCA9PSBj
b250ZXh0SWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKQotICAgICAgICAgICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2Nv
bnRyb2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgICAgIG1fY29udHJvbHNNYW5hZ2VyQ29udGV4
dElkID0gY29udGV4dElkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9tZWRpYUVsZW1lbnRzLmVuc3VyZSgmbWVkaWFFbGVtZW50LCBbJl0geyByZXR1cm4gbmV4dENv
bnRleHRJZCgpOyB9KTsKLSAgICAgICAgYXV0byBjb250ZXh0SWQgPSBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwotICAgICAgICBpZiAobV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQpCi0gICAg
ICAgICAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KG1fY29udHJvbHNNYW5hZ2VyQ29udGV4dElk
KTsKLSAgICAgICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSBjb250ZXh0SWQ7Ci0gICAg
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQp
OwotICAgIH0KLQotICAgIGFkZENsaWVudEZvckNvbnRleHQobV9jb250cm9sc01hbmFnZXJDb250
ZXh0SWQpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5OjpTZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyV2l0aElEKG1fY29udHJvbHNN
YW5hZ2VyQ29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpjbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCkK
LXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFtX2NvbnRyb2xzTWFuYWdlckNvbnRleHRJ
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlQ2xpZW50Rm9yQ29udGV4dChtX2NvbnRy
b2xzTWFuYWdlckNvbnRleHRJZCk7Ci0gICAgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgPSAw
OwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclBy
b3h5OjpDbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOwot
I2VuZGlmCi19Ci0KLXVpbnQ2NF90IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmNvbnRleHRJ
ZEZvck1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQp
Ci17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX21lZGlhRWxlbWVudHMuZW5zdXJlKCZtZWRpYUVs
ZW1lbnQsIFsmXSB7IHJldHVybiBuZXh0Q29udGV4dElkKCk7IH0pOwotICAgIHVpbnQ2NF90IGNv
bnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5zZXRNZWRpYUVsZW1lbnQoJm1lZGlhRWxlbWVudCk7Ci0gICAgcmV0dXJuIGNvbnRl
eHRJZDsKLX0KLQotI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VDb250ZXh0OgotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJlc2V0
TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0ZShjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpkdXJhdGlvbkNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRp
b24pCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk6OkR1cmF0aW9uQ2hhbmdlZChjb250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6Y3VycmVudFRp
bWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eTo6Q3VycmVudFRpbWVDaGFuZ2VkKGNvbnRleHRJZCwgY3VycmVudFRp
bWUsIGFuY2hvclRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpidWZmZXJlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIGJ1ZmZlcmVkVGltZSkKLXsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eTo6QnVmZmVyZWRUaW1lQ2hhbmdlZChjb250ZXh0SWQs
IGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNr
U2Vzc2lvbk1hbmFnZXI6OnBsYXliYWNrU3RhcnRlZFRpbWVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHBsYXliYWNrU3RhcnRlZFRpbWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlBsYXliYWNrU3RhcnRlZFRp
bWVDaGFuZ2VkKGNvbnRleHRJZCwgcGxheWJhY2tTdGFydGVkVGltZSksIG1fcGFnZS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnJhdGVDaGFuZ2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKLXsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eTo6UmF0ZUNoYW5nZWQoY29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWth
YmxlUmFuZ2VzQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVS
YW5nZXMmIHRpbWVSYW5nZXMsIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lLCBkb3VibGUgbGl2ZVVw
ZGF0ZUludGVydmFsKQotewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiBy
YW5nZXNWZWN0b3I7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVu
Z3RoKCk7IGkrKykgewotICAgICAgICBkb3VibGUgc3RhcnQgPSB0aW1lUmFuZ2VzLnJhbmdlcygp
LnN0YXJ0KGkpLnRvRG91YmxlKCk7Ci0gICAgICAgIGRvdWJsZSBlbmQgPSB0aW1lUmFuZ2VzLnJh
bmdlcygpLmVuZChpKS50b0RvdWJsZSgpOwotICAgICAgICByYW5nZXNWZWN0b3IuYXBwZW5kKHsg
c3RhcnQsIGVuZCB9KTsKLSAgICB9Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OlNlZWthYmxlUmFuZ2VzVmVjdG9yQ2hhbmdlZChjb250
ZXh0SWQsIFdURk1vdmUocmFuZ2VzVmVjdG9yKSwgbGFzdE1vZGlmaWVkVGltZSwgbGl2ZVVwZGF0
ZUludGVydmFsKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgdmFsdWUpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHk6OkNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoY29udGV4dElkLCB2
YWx1ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OmF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHk6OkF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChj
b250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0K
LQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2li
bGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0
ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBlbmFibGVkLCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCi17Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkV4dGVy
bmFsUGxheWJhY2tQcm9wZXJ0aWVzQ2hhbmdlZChjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19j
YXN0PHVpbnQzMl90Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+
cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25JbmRleENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5OjpBdWRpb01lZGlhU2VsZWN0aW9uSW5kZXhDaGFuZ2VkKGNvbnRleHRJ
ZCwgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmxlZ2libGVNZWRpYVNlbGVjdGlvbkluZGV4Q2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6OkxlZ2libGVNZWRp
YVNlbGVjdGlvbkluZGV4Q2hhbmdlZChjb250ZXh0SWQsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGRp
c2FibGVkKQotewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5OjpXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZENoYW5nZWQoY29udGV4
dElkLCBkaXNhYmxlZCkpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6Om11
dGVkQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgbXV0ZWQpCi17Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHk6Ok11dGVkQ2hh
bmdlZChjb250ZXh0SWQsIG11dGVkKSk7Ci19Ci0KLSNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9t
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eToKLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLnBsYXkoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5wYXVzZSgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2ds
ZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS50b2dnbGVQbGF5U3RhdGUoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjcnViYmluZygpOwotfQotCi12b2lkIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0g
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7
Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY3J1YmJpbmcoKTsKLX0KLQotdm9pZCBX
ZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIHRpbWUpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9UaW1l
KHRpbWUpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVrKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5mYXN0U2Vlayh0aW1lKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOwotfQotCi12b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5u
aW5nQmFja3dhcmQoKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRT
Y2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5lbmRTY2FubmluZygpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRl
eCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24oaW5kZXgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQotewot
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OwotICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGlu
ZGV4KTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpoYW5kbGVDb250cm9s
bGVkRWxlbWVudElEUmVxdWVzdCh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgYXV0byBlbGVt
ZW50ID0gZW5zdXJlTW9kZWwoY29udGV4dElkKS5tZWRpYUVsZW1lbnQoKTsKLSAgICBpZiAoZWxl
bWVudCkKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHk6OkhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb250ZXh0SWQs
IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCkpKTsKLX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyOjp0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsK
LSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsK
LX0KLQotdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVNdXRlZCh1aW50NjRf
dCBjb250ZXh0SWQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVNdXRl
ZCgpOwotfQotCi12b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldE11dGVkKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBtdXRlZCkKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLnNldE11dGVkKG11dGVkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmE5YTAwZjExYWVhNDQ0Zjk2ODUxMzViOTk3MGNjYTJkOGFlNzMyOC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIChQTEFU
Rk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TWVkaWFFbGVtZW50RW51bXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIEF0dGFj
aG1lbnQ7Ci1jbGFzcyBDb25uZWN0aW9uOwotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIE1lc3NhZ2VS
ZWNlaXZlcjsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRmxvYXRTaXplOwotY2xh
c3MgTm9kZTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIExheWVySG9zdGluZ0Nv
bnRleHQ7Ci1jbGFzcyBXZWJQYWdlOwotY2xhc3MgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
Q29udGV4dDsKLWNsYXNzIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci1jbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOwotCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0Ci0gICAgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PgotICAgICwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1
aW50NjRfdCBjb250ZXh0SWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCk7
Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KLQotICAg
IExheWVySG9zdGluZ0NvbnRleHQqIGxheWVySG9zdGluZ0NvbnRleHQoKSB7IHJldHVybiBtX2xh
eWVySG9zdGluZ0NvbnRleHQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVySG9zdGluZ0NvbnRl
eHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYpOwotCi0gICAgYm9vbCBp
c0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNBbmltYXRpbmc7IH0KLSAgICB2b2lkIHNl
dElzQW5pbWF0aW5nKGJvb2wgZmxhZykgeyBtX2lzQW5pbWF0aW5nID0gZmxhZzsgfQotCi0gICAg
Ym9vbCB0YXJnZXRJc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX3RhcmdldElzRnVsbHNj
cmVlbjsgfQotICAgIHZvaWQgc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX3Rh
cmdldElzRnVsbHNjcmVlbiA9IGZsYWc7IH0KLQotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBmdWxsc2NyZWVuTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZnVsbHNjcmVlbk1vZGU7IH0KLSAgICB2b2lkIHNldEZ1bGxzY3JlZW5Nb2RlKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSB7IG1f
ZnVsbHNjcmVlbk1vZGUgPSBtb2RlOyB9Ci0KLSAgICBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0
IHsgcmV0dXJuIG1faXNGdWxsc2NyZWVuOyB9Ci0gICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4oYm9v
bCBmbGFnKSB7IG1faXNGdWxsc2NyZWVuID0gZmxhZzsgfQotCi1wcml2YXRlOgotICAgIC8vIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ2xpZW50Ci0gICAgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9v
bCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2aWRlb0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotCi0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiwgdWludDY0X3QgY29udGV4dElk
KTsKLQotICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIqIG1fbWFuYWdlcjsKLSAgICB1aW50
NjRfdCBtX2NvbnRleHRJZDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4
dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OwotICAgIGJvb2wgbV9pc0FuaW1hdGluZyB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX3RhcmdldElzRnVsbHNjcmVlbiB7IGZhbHNlIH07Ci0gICAgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fZnVsbHNjcmVl
bk1vZGUgeyBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lIH07Ci0gICAgYm9vbCBtX2lzRnVsbHNjcmVlbiB7IGZhbHNlIH07Ci19OwotCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFdlYlBh
Z2UmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpOwotICAgIAotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIAot
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50Ci0gICAgYm9v
bCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0OwotICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3Jl
ZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBleGl0
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQm
KTsKLSAgICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ7Ci0KLSAgICBleHBsaWNpdCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2UmLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJik7
Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50PiwgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1cGxlOwotICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUg
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKLSAgICBNb2RlbElu
dGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OwotICAgIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBlbnN1
cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZv
aWQgcmVtb3ZlQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgYWRkQ2xpZW50
Rm9yQ29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50Rm9y
Q29udGV4dCh1aW50NjRfdCBjb250ZXh0SWQpOwotCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKLSAgICB2b2lkIGhhc1ZpZGVvQ2hhbmdlZCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8pOwotICAgIHZvaWQgdmlkZW9EaW1lbnNp
b25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYp
OwotCi0gICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkK
LSAgICB2b2lkIHJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBmaW5p
c2hlZFdpdGhNZWRpYSk7Ci0gICAgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKTsKLSAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7
Ci0gICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKLSAgICB2
b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7Ci0gICAgdm9pZCBz
ZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9h
dFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KTsKLSAgICB2b2lkIHNldFZp
ZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkp
OwotICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKLSAgICB2
b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
aXNQYWdlVmlzaWJsZSk7Ci0gICAgCi0gICAgV2ViUGFnZSogbV9wYWdlOwotICAgIFJlZjxXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyPiBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXI7Ci0gICAgSGFz
aE1hcDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiwgdWludDY0X3Q+IG1fdmlkZW9FbGVtZW50
czsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRN
YXA7Ci0gICAgdWludDY0X3QgbV9jb250cm9sc01hbmFnZXJDb250ZXh0SWQgeyAwIH07Ci0gICAg
SGFzaE1hcDx1aW50NjRfdCwgaW50PiBtX2NsaWVudENvdW50czsKLX07Ci0gICAgCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1
OWMyNWFhZTdiMDE1ZTMwMTNkOWExYjE1MDdiNjEwYTJmYmNhNS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBA
IC0xLDM1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0j
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
I2lmIChQTEFURk9STShJT1MpICYmIEhBVkUoQVZLSVQpKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotbWVzc2FnZXMgLT4gV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciB7Ci0gICAgUmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKHVpbnQ2NF90IGNvbnRl
eHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgZmluaXNoZWRXaXRoTWVkaWEpCi0gICAgRGlkU2V0
dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLSAgICBEaWRFeGl0RnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpCi0gICAgRGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRl
eHRJZCkKLSAgICBEaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi0gICAg
U2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKLSAgICBTZXRWaWRlb0xh
eWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQotICAg
IEZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2Rl
KQotICAgIEZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaXNQYWdlVmlzaWJsZSkKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL2NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBhNDBmZDcyZDFkMDVjY2RkNjM1ZDkwYWFhZmY0M2M4
YzEzNDM2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCi0KLSNp
ZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLQotI2ltcG9ydCAiQXR0YWNobWVudC5oIgot
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0j
aW1wb3J0ICJXZWJQYWdlLmgiCi0jaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmgi
Ci0jaW1wb3J0ICJXZWJQcm9jZXNzLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb24uaD4KLSNpbXBvcnQg
PFdlYkNvcmUvQ29sb3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvRXZlbnROYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bUNBTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZGVv
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgotI2ltcG9ydCA8bWFjaC9t
YWNoX3BvcnQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1zdGF0aWMgSW50UmVjdCBpbmxpbmVWaWRlb0ZyYW1lKEhUTUxWaWRlb0VsZW1lbnQm
IGVsZW1lbnQpCi17Ci0gICAgZWxlbWVudC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJl
cigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBy
ZWN0ID0gcmVuZGVyZXItPnZpZGVvQm94KCk7Ci0gICAgcmVjdC5tb3ZlQnkocmVuZGVyZXItPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQu
ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhyZWN0KTsKLX0KLQotI3ByYWdt
YSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAotCi1XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJ
ZCkKLSAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICAsIG1fY29udGV4dElkKGNvbnRleHRJ
ZCkKLXsKLX0KLQotV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6fldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKQotewotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVf
cHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYgY29udGV4dCkKLXsKLSAgICBtX2xheWVySG9zdGlu
Z0NvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQotewotICAg
IGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+aGFzVmlkZW9DaGFuZ2VkKG1fY29u
dGV4dElkLCBoYXNWaWRlbyk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIHZpZGVvRGlt
ZW5zaW9ucykKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnZpZGVv
RGltZW5zaW9uc0NoYW5nZWQobV9jb250ZXh0SWQsIHZpZGVvRGltZW5zaW9ucyk7Ci19Ci0KLSNw
cmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKLQotUmVmPFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZShXZWJQYWdl
JiBwYWdlLCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyJiBwbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIo
cGFnZSwgcGxheWJhY2tTZXNzaW9uTWFuYWdlcikpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKFdlYlBhZ2UmIHBhZ2UsIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXImIHBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCi0gICAgOiBtX3BhZ2Uo
JnBhZ2UpCi0gICAgLCBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXIocGxheWJhY2tTZXNzaW9uTWFu
YWdlcikKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgcGFnZS5wYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCi17Ci0gICAgZm9yIChhdXRvJiB0dXBsZSA6
IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgewotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgICAgICBzdGQ6OnRpZShtb2Rl
bCwgaW50ZXJmYWNlKSA9IHR1cGxlOwotCi0gICAgICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQo
bnVsbHB0cik7Ci0gICAgICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKmludGVyZmFjZSk7Ci0KLSAg
ICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgbV9jb250ZXh0TWFw
LmNsZWFyKCk7Ci0gICAgbV92aWRlb0VsZW1lbnRzLmNsZWFyKCk7Ci0gICAgbV9jbGllbnRDb3Vu
dHMuY2xlYXIoKTsKLSAgICAKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6aW52YWxpZGF0ZSgpCi17Ci0gICAg
QVNTRVJUKG1fcGFnZSk7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZSA9IG51bGxwdHI7Ci19
Ci0KLVdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29u
dGV4dElkKQotewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29u
dGV4dElkKTsKLSAgICBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmFkZENsaWVudEZvckNvbnRl
eHQoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChM
YXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOwot
ICAgIG1vZGVsLT5hZGRDbGllbnQoKmludGVyZmFjZSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtl
X3R1cGxlKFdURk1vdmUobW9kZWwpLCBXVEZNb3ZlKGludGVyZmFjZSkpOwotfQotCi1XZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17
Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJ
bnRlcmZhY2VUdXBsZSgpKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpOwotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1XZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQotewotICAgIHJldHVy
biAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Ci19Ci0K
LVdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgcmV0dXJu
ICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZW1vdmVDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHRJZCkKLXsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2Rl
bEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
LT5yZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8SFRNTFZp
ZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOwotICAgIG1v
ZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7Ci0gICAgbW9kZWwtPnJlbW92ZUNsaWVudCgq
aW50ZXJmYWNlKTsKLSAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKLSAgICBtX3ZpZGVvRWxl
bWVudHMucmVtb3ZlKHZpZGVvRWxlbWVudC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0TWFwLnJlbW92
ZShjb250ZXh0SWQpOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmFkZENs
aWVudEZvckNvbnRleHQodWludDY0X3QgY29udGV4dElkKQotewotICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9jbGllbnRDb3VudHMuYWRkKGNvbnRleHRJZCwgMSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlbW92ZUNsaWVudEZvckNvbnRleHQodWlu
dDY0X3QgY29udGV4dElkKQotewotICAgIEFTU0VSVChtX2NsaWVudENvdW50cy5jb250YWlucyhj
b250ZXh0SWQpKTsKLQotICAgIGludCBjbGllbnRDb3VudCA9IG1fY2xpZW50Q291bnRzLmdldChj
b250ZXh0SWQpOwotICAgIEFTU0VSVChjbGllbnRDb3VudCA+IDApOwotICAgIGNsaWVudENvdW50
LS07Ci0KLSAgICBpZiAoY2xpZW50Q291bnQgPD0gMCkgewotICAgICAgICBtX2NsaWVudENvdW50
cy5yZW1vdmUoY29udGV4dElkKTsKLSAgICAgICAgcmVtb3ZlQ29udGV4dChjb250ZXh0SWQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jbGllbnRDb3VudHMuc2V0KGNvbnRleHRJ
ZCwgY2xpZW50Q291bnQpOwotfQotCi0jcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIENocm9tZUNs
aWVudDoKLQotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzdXBwb3J0c1ZpZGVvRnVs
bHNjcmVlbihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSkgY29uc3QKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgVU5VU0VEX1BBUkFNKG1v
ZGUpOwotICAgIHJldHVybiBTZXR0aW5nczo6YXZLaXRFbmFibGVkKCk7Ci0jZWxzZQotICAgIHJl
dHVybiBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBp
Y3R1cmVJblBpY3R1cmUgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZv
clZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQotewotICAgIEFTU0VSVChtX3Bh
Z2UpOwotICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZU5vbmUpOwotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoJXApIiwgdGhpcyk7
Ci0KLSAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3BsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNv
bnRleHRJZEZvck1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQpOwotICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV92aWRlb0VsZW1lbnRzLmFkZCgmdmlkZW9FbGVtZW50LCBjb250ZXh0SWQpOwotICAgIFVO
VVNFRF9QQVJBTShhZGRSZXN1bHQpOwotICAgIEFTU0VSVChhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID09IGNvbnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotICAgIGFkZENsaWVudEZvckNvbnRl
eHQoY29udGV4dElkKTsKLSAgICBpZiAoIWludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgp
KQotICAgICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5n
Q29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKLQotICAgIGF1dG8g
dmlkZW9SZWN0ID0gaW5saW5lVmlkZW9GcmFtZSh2aWRlb0VsZW1lbnQpOwotICAgIEZsb2F0UmVj
dCB2aWRlb0xheWVyRnJhbWUgPSBGbG9hdFJlY3QoMCwgMCwgdmlkZW9SZWN0LndpZHRoKCksIHZp
ZGVvUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgb2xkTW9kZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsKLSAgICBp
bnRlcmZhY2UtPnNldFRhcmdldElzRnVsbHNjcmVlbih0cnVlKTsKLSAgICBpbnRlcmZhY2UtPnNl
dEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOwotICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQoJnZpZGVv
RWxlbWVudCk7Ci0gICAgaWYgKG9sZE1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlTm9uZSkKLSAgICAgICAgbW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZSh2
aWRlb0xheWVyRnJhbWUpOwotCi0gICAgaWYgKGludGVyZmFjZS0+aXNBbmltYXRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcodHJ1ZSk7Ci0KLSAg
ICBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmUgPSB2aWRlb0VsZW1lbnQud2Via2l0U3VwcG9y
dHNQcmVzZW50YXRpb25Nb2RlKEhUTUxWaWRlb0VsZW1lbnQ6OlZpZGVvUHJlc2VudGF0aW9uTW9k
ZTo6UGljdHVyZUluUGljdHVyZSk7Ci0gICAgCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChjb250
ZXh0SWQsIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5jb250ZXh0SUQoKSwgdmlk
ZW9SZWN0LCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVl
bk1vZGUoKSwgYWxsb3dzUGljdHVyZUluUGljdHVyZSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JW
aWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50KQotewot
ICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVv
RnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCglcCkiLCB0aGlzKTsKLSAgICBBU1NFUlQobV9wYWdl
KTsKLSAgICBBU1NFUlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsK
LQotICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZpZGVvRWxl
bWVudCk7Ci0gICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7
Ci0KLSAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKLQotICAgIGlm
IChpbnRlcmZhY2UuaXNBbmltYXRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50ZXJm
YWNlLnNldElzQW5pbWF0aW5nKHRydWUpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQsIGlu
bGluZVZpZGVvRnJhbWUodmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOwotfQotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVX
aXRob3V0QW5pbWF0aW9uKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHRhcmdl
dE1vZGUpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0VmlkZW9GdWxsc2NyZWVuVG9Nb2RlV2l0aG91dEFuaW1hdGlvbiglcCkiLCB0aGlzKTsK
LQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQot
ICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFpbnMo
JnZpZGVvRWxlbWVudCkpOwotCi0gICAgdWludDY0X3QgY29udGV4dElkID0gbV92aWRlb0VsZW1l
bnRzLmdldCgmdmlkZW9FbGVtZW50KTsKLSAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRl
cmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4o
ZmFsc2UpOwotCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuV2l0aG91dEFuaW1hdGlvblRvTW9kZShjb250ZXh0
SWQsIHRhcmdldE1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHZpZGVvRWxlbWVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldE1vZGUpOwotI2VuZGlm
Ci19Ci0KLSNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDoKLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpoYXNWaWRlb0No
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvKQotewotICAgIGlmIChtX3Bh
Z2UpCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpTZXRIYXNWaWRlbyhjb250ZXh0SWQsIGhhc1ZpZGVvKSwgbV9wYWdlLT5wYWdl
SUQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6dmlkZW9EaW1lbnNp
b25zQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEZsb2F0U2l6ZSYgdmlkZW9EaW1l
bnNpb25zKQotewotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoY29u
dGV4dElkLCB2aWRlb0RpbWVuc2lvbnMpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotI3ByYWdt
YSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OgotCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlcXVlc3RGdWxsc2NyZWVuTW9kZSh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlLCBib29sIGZpbmlzaGVkV2l0aE1lZGlhKQotewotICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkucmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKG1vZGUsIGZpbmlzaGVkV2l0aE1l
ZGlhKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLXsKLSAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5N
b2RlKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKCVwLCAleCkiLCB0aGlzLCBj
b250ZXh0SWQpOwotCi0gICAgQVNTRVJUKG1fcGFnZSk7Ci0gICAgUGxhdGZvcm1MYXllciogdmlk
ZW9MYXllciA9IFtDQUxheWVyIGxheWVyXTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgW3ZpZGVvTGF5
ZXIgc2V0TmFtZTpAIldlYiB2aWRlbyBmdWxsc2NyZWVuIG1hbmFnZXIgbGF5ZXIiXTsKLSNlbmRp
ZgotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERp
c2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBbdmlkZW9MYXllciBzZXRQb3NpdGlvbjpDR1BvaW50
TWFrZSgwLCAwKV07Ci0gICAgW3ZpZGVvTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENH
Q29sb3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50KV07Ci0KLSAgICAvLyBTZXQgYSBzY2Fs
ZSBmYWN0b3IgaGVyZSB0byBtYWtlIGNvbnZlcnRSZWN0OnRvTGF5ZXI6bmlsIHRha2Ugc2NhbGUg
ZmFjdG9yIGludG8gYWNjb3VudC4gPHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KLSAgICAvLyBU
aGlzIHNjYWxlIGZhY3RvciBpcyBpbnZlcnRlZCBpbiB0aGUgaG9zdGluZyBwcm9jZXNzLgotICAg
IGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciA9IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsK
LSAgICBbdmlkZW9MYXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0
aW5nU2NhbGVGYWN0b3IsIGhvc3RpbmdTY2FsZUZhY3RvciwgMSldOwotCi0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsK
LQotICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIodmlk
ZW9MYXllcik7Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKLSAgICAKLSAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
dmlkZW9MYXllciwgW3Byb3RlY3RlZFRoaXMsIHRoaXMsIGNvbnRleHRJZF0gewotICAgICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywg
dGhpcywgY29udGV4dElkXSB7Ci0gICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdl
KQotICAgICAgICAgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhp
cy0+bV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIAotICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxzY3Jl
ZW4oJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUobW9kZWwsIGlu
dGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwotCi0gICAgaW50
ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7Ci0gICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxz
Y3JlZW4oZmFsc2UpOwotCi0gICAgaWYgKGludGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0Vs
ZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7Ci0gICAgaWYgKCF2aWRlb0VsZW1lbnQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIGV4aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHBy
ZXZpb3VzbHkgcmVxdWVzdGVkIGR1cmluZyBhbiBhbmltYXRpb24uCi0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRoaXMsIHZpZGVvRWxl
bWVudF0gewotICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9wYWdlKQotICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9F
bGVtZW50KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpk
aWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCi17Ci0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbiglcCwgJXgp
IiwgdGhpcywgY29udGV4dElkKTsKLQotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudD4gbW9kZWw7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKLSAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9
IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7Ci0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgCi0gICAgbW9kZWwt
PndhaXRGb3JQcmVwYXJlZEZvcklubGluZVRoZW4oW3Byb3RlY3RlZFRoaXMsIGNvbnRleHRJZCwg
aW50ZXJmYWNlLCBtb2RlbF0gewotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2UsIG1vZGVs
XSB7Ci0gICAgICAgICAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsLCBbcHJv
dGVjdGVkVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsKLSAgICAgICAgICAgICAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcywgY29u
dGV4dElkLCBpbnRlcmZhY2VdIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyZmFjZS0+
bGF5ZXJIb3N0aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZh
Y2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9vdExheWVyKG51bGxwdHIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KG51bGxw
dHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm90
ZWN0ZWRUaGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgcHJvdGVjdGVkVGhpcy0+bV9wYWdlLT5wYWdl
SUQoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
Ci0gICAgfSk7Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENs
ZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKLXsKLSAgICBMT0coRnVsbHNjcmVl
biwgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKCVwLCAl
eCkiLCB0aGlzLCBjb250ZXh0SWQpOwotCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOwotICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2Up
ID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKLQotICAgIGludGVyZmFjZS0+
c2V0SXNBbmltYXRpbmcoZmFsc2UpOwotICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZh
bHNlKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9k
ZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsKLSAgICBib29sIHRhcmdldElzRnVsbHNj
cmVlbiA9IGludGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCk7Ci0KLSAgICBtb2RlbC0+c2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4g
dmlkZW9FbGVtZW50ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOwotCi0gICAgaW50ZXJmYWNlLT5z
ZXRGdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lKTsKLSAgICByZW1vdmVDbGllbnRGb3JDb250ZXh0KGNvbnRleHRJZCk7Ci0KLSAgICBp
ZiAoIXZpZGVvRWxlbWVudCB8fCAhdGFyZ2V0SXNGdWxsc2NyZWVuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJv
dGVjdGVkVGhpcywgdmlkZW9FbGVtZW50LCBtb2RlXSB7Ci0gICAgICAgIGlmIChwcm90ZWN0ZWRU
aGlzLT5tX3BhZ2UpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5lbnRlclZpZGVvRnVsbHNj
cmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50LCBtb2RlKTsKLSAgICB9KTsKLX0KLSAg
ICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlF
bnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSkKLXsKLSAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLnNldFZpZGVvTGF5ZXJHcmF2aXR5KChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5KWdyYXZpdHkpOwotfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4
dElkLCBib29sIGlzUGFnZVZpc2libGUpCi17Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8mIG1vZGVsID0gZW5zdXJlTW9kZWwoY29udGV4dElkKTsKLQotICAg
IGlmICghaXNQYWdlVmlzaWJsZSkKLSAgICAgICAgbW9kZWwudmlkZW9FbGVtZW50KCktPnNjcm9s
bEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UHJlcGFyZWRUb1JldHVyblRvSW5saW5l
KGNvbnRleHRJZCwgdHJ1ZSwgaW5saW5lVmlkZW9GcmFtZSgqbW9kZWwudmlkZW9FbGVtZW50KCkp
KSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCi17Ci0gICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVy
RnJhbWVGZW5jZWQoJXAsICV4KSIsIHRoaXMsIGNvbnRleHRJZCk7Ci0KLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Ci0gICAgc3RkOjp0aWUo
bW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwot
Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYm91bmRzLngoKSkgfHwgc3RkOjppc25hbihib3VuZHMueSgp
KSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy53aWR0aCgpKSB8fCBzdGQ6OmlzbmFuKGJvdW5kcy5oZWln
aHQoKSkpIHsKLSAgICAgICAgYXV0byB2aWRlb1JlY3QgPSBpbmxpbmVWaWRlb0ZyYW1lKCptb2Rl
bC0+dmlkZW9FbGVtZW50KCkpOwotICAgICAgICBib3VuZHMgPSBGbG9hdFJlY3QoMCwgMCwgdmlk
ZW9SZWN0LndpZHRoKCksIHZpZGVvUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotICAgIAotICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJh
dGlvbjowXTsKLSAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpCi0gICAg
ICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRGZW5jZVBvcnQoZmVuY2VQ
b3J0LnBvcnQoKSk7Ci0gICAgbW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZShib3VuZHMpOwotICAg
IG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGZlbmNlUG9ydC5wb3J0KCkp
OwotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCmluZGV4IDI0MzM1YWNhNTZmZjg0OTFiNWExMzIxNjJhN2Q5NDFjMTFkMDg1
MTkuLmZlYWNjNjVlZTBjYmZmYTcwNzIwMDgzMzI5NjhiOGNiOGU4YmE1MDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTMxNiw4ICszMTYsOCBAQAog
CiAKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkK
LSNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoREFUQV9JTlRFUkFDVElPTikKQEAgLTkyNjUsMTEgKzkyNjUsMTEgQEAgLSAodm9pZClf
c2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxlbWVudDooV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwpCi0gICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2Rl
bCA9IFdlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKKyAgICAg
ICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmNyZWF0ZSgpOwogICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2Rl
bC0+c2V0TWVkaWFFbGVtZW50KCZtZWRpYUVsZW1lbnQpOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQotICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoKl9w
cml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCk7CisgICAgICAgIF9wcml2YXRlLT5wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UgPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgq
X3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKTsKIAogICAgIFtzZWxmIHVwZGF0ZVRvdWNo
QmFyXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
Vmlld0RhdGEuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEu
aAppbmRleCBhNzhiMDkwZTA3YmU0MzYxOTZhNjk1Y2ExMjg3ZTg3OGQyNjY2MWNjLi5iZGVkZjc3
M2RkZmRlMDY2ZmE1MmUxNzU2Y2I2ODIyMjc0NmNmNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCkBAIC01NCw4ICs1NCw4IEBAIGNsYXNzIFBh
Z2U7CiBjbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93OwogY2xhc3MgVmFsaWRhdGlvbkJ1YmJsZTsK
ICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLWNs
YXNzIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKLWNsYXNzIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OworY2xhc3MgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
OworY2xhc3MgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ7CiAjZW5kaWYKIH0KIApA
QCAtMzM4LDggKzMzOCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAgIFJlZlB0cjxXZWJDb3JlOjpX
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJhY2tTZXNzaW9uTW9kZWw7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudD4gcGxheWJhY2tTZXNzaW9uTW9kZWw7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYz4gcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5kZXggNzc5NzM2YTE2
YWZmNjBlM2ZhNWEwYWM3ZWEzNjQwNmRjMzY0ZjJlNC4uZjkzMGZhOTZjODg1YmJmZjc0MDRmMDcy
MzU5Njc1OTU1ZmM0YjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWV3RGF0YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlZpZXdEYXRhLm1tCkBAIC01MSw4ICs1MSw4IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotI2ltcG9ydCA8V2ViQ29y
ZS9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2Vi
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAogQk9PTCBhcHBsaWNhdGlvbklzVGVy
bWluYXRpbmcgPSBOTzsK
</data>

          </attachment>
      

    </bug>

</bugzilla>